Real Estate

Property-Pros

We built Property-Pros, an IDX real estate platform for the Mexican market, from zero to production. We started from a simple observation: the problem isn't the properties or the agents — it's the space between them, the relationship no portal models. So we put that relationship at the center: every agent-property pair gets its own URL and shortCode, and everything hangs off it — lead attribution, analytics, personalized OG metadata. We connected the MLS (RESO) feed over OAuth2 with a 15-minute sync and a real-time proxy, stood up a 68-endpoint REST API with Zod validation on every input, and shipped a bilingual Next.js frontend of 36 pages with serious SEO (JSON-LD, hreflang, dynamic sitemap) and cookieless first-party analytics that meet Mexico's LFPDPPP without Google Analytics. The proof is in the scale and the operation: 12 data models, 4 RBAC roles, 61 tests, and a real production deployment with CI/CD and Docker Compose. And when a bug threatened to lose leads during property resolution, we closed it in production with triple resolution (mlsId, slug, ObjectId) — because in this business, a lost lead is a lost sale.

Category

Real Estate

Stack

Next.js, Node.js, TypeScript

The problem

In the Mexican real estate market, listings live in a shared MLS feed, but agents have no way to make them their own: they share the same generic listing, and when a prospect comes in, nobody knows who owns the lead. The problem isn't the properties or the agents on their own — it's the space between them, the agent-property relationship that no portal actually models. The result is fuzzy attribution, leads that get lost or fought over, and zero per-agent analytics.

What we built

  • Core agent-property model (AgentProperty): each pair generates a unique URL /a/{agent}/{property} and an 8-character shortCode, with a unique constraint per agent+property so an agent has exactly one link per listing.
  • Bulletproof lead attribution: the contact form on any agent link creates a Lead tied to THAT agent, with robust property resolution (by mlsId, slug, or ObjectId) so a prospect is never lost.
  • MLS (RESO Web API) sync over OAuth2: a sync-worker that refreshes the feed every 15 minutes plus a real-time proxy, with a RESO-to-database transform layer.
  • Full REST API: 68 endpoints across 14 modules (auth, properties, agents, leads, areas, developments, dashboard, admin, analytics, audit, media, search, settings) with Zod validation on every input.
  • Fully bilingual EN/ES experience: 36 pages with next-intl, localized routing, hreflang, dynamic sitemap, and an LFPDPPP privacy notice.
  • Cookieless first-party analytics: view, unique-visitor, and conversion counts per agent-property pair, with SHA-256-hashed IPs and a daily rotating salt for privacy compliance.
  • Agent dashboard and admin console: performance charts, lead management, property assignment/reassignment, area and development management, and an admin audit log.
  • RBAC with 4 roles (agent, premier_agent, broker, admin) and a granular permission matrix; NextAuth on the frontend and JWT on the API.
  • Media pipeline: S3/R2 uploads with Sharp processing (WebP, 150/400/800/1200px thumbnails) and presigned URLs.
  • Serious real estate SEO: 5 JSON-LD structured-data types, per-agent OG/Twitter Cards, Next.js SSR/ISR so every listing indexes.
  • Currency conversion using Banxico's FIX exchange rate (USD as source of truth, MXN derived) and an interactive Leaflet/MapTiler map.
  • Production deployment with Docker Compose (5 services), CI/CD with build-on-runner and registry, and a 61-test suite.

Results

12 data models and 9 enums in the Prisma schema

68 REST endpoints across 14 route modules

36 pages (public, agent dashboard, admin console), 44 React components

Fully bilingual platform with 13 EN/ES translation namespaces

61 automated tests (5 unit suites + 4 integration suites)

4 roles with a granular RBAC permission matrix

MLS sync every 15 minutes plus a real-time proxy

Image pipeline with 4 resolutions (150/400/800/1200px) in WebP

In production with CI/CD (build-on-runner + registry) and a 5-service Docker Compose stack

Tech stack

Next.jsNode.jsTypeScriptMongoDBIntegración con MLS

Need something similar

Contact us
Property-Pros — Creative Services Studio