Skip to content
Kamran Code

RERA Info — an independent, bilingual registry of every MP RERA project, builder and agent

A public-data product: a polite nightly crawler reads the Madhya Pradesh RERA portal into Postgres, a rules-only Health Score is computed per project, and a Next.js site serves every project, builder and agent in English and Hindi with buyer calculators — no accounts, no builder money.

Live siteOwn product · Independent registry and buyer guide for Madhya Pradesh

What needed solving?

Home buyers in Madhya Pradesh can check a project's RERA registration only through the regulator's portal, which is hard to search and says nothing in plain language about delays, extensions or warning orders. No independent site covered the state. The product had to be complete (every registered project, builder and agent), bilingual, evidence-first and free — and it had to read a public portal responsibly, mask personal data, and publish a score whose every rule is visible.

Who was it for?

Own product · Independent registry and buyer guide for Madhya Pradesh

  • Separate the pipeline from the site: a worker sweeps the portal's public lists nightly at no more than one request per second with an identified user agent, fetches detail pages, and writes into Postgres through an ingestion layer that keeps a change log, provenance (source URL, fetched-at time, content hash) and a quarantine for records that fail validation.
  • Publish a rules-only Health Score. Every signal is derived from fields the portal itself publishes — nothing inferred from marketing or opinion — and the bands (healthy, check, serious, insufficient) are documented on a methodology page.
  • Serve the site with incremental static regeneration so thousands of project, promoter, agent and district pages stay fast, revalidated by the worker after each sweep, with an English and Hindi version of every page.
  • Give buyers tools, not leads: a delay-interest calculator built on Section 18 of the Act, carpet-area and stamp-duty calculators, guides, a corrections page — and no lead forms to builders.
  • Write the research first: RERA law and MP rules, competitor teardown, public data sources, portal reconnaissance, buyer pain points, UI psychology, SEO keyword universe, and a security and legal review with a risk register.

How the system was designed.

A pnpm monorepo. The worker (Node, pg-boss queues) runs the nightly sweep and detail fetches, computes scores and triggers revalidation; raw HTML snapshots go to an object-storage bucket. Postgres holds the normalised records through a Drizzle schema. The web app (Next.js 16 App Router, next-intl) reads with a least-privilege database role and renders with ISR behind Cloudflare. Shared packages hold the scraper, the database layer and the domain rules.

RERA Info — an independent, bilingual registry of every MP RERA project, builder and agent — architecture≤ 1 req/singest + provenanceread-only roleMP RERA portal (public)Worker · sweep, detail, s…Raw snapshot bucketPostgres (Drizzle)Domain rules · Health Sco…Next.js 16 · ISR · EN/HIHome buyer
AIDataApplicationExternal

What was built.

  • 01apps/web: Next.js 16 App Router with next-intl locale routing, Tailwind 4 and ISR; routes for districts, projects, promoters, agents, complaint and warning orders, a RERA-number checker, search, guides, methodology, corrections, three calculators and a /bot page describing the crawler.
  • 02apps/worker: a Node process with pg-boss queues for the nightly sweep and per-record detail fetches, scoring, snapshot storage and site revalidation.
  • 03packages/scraper: a polite portal client with a pinned CA bundle, HTML parsers with fixtures and tests, Zod schemas, and PII masking — phone numbers, emails and bank account numbers are dropped or masked at parse time, and CI fails if any leak into public columns.
  • 04packages/db: the Drizzle schema (27 tables covering projects, blocks, units, documents, extensions, orders, QPRs, promoters, partners, agents, complaints, districts, tehsils, planning areas, change log, quarantine, raw snapshots, crawl runs and correction requests), migrations, ingestion and read queries.
  • 05packages/domain: Health Score v1, the Section 18 delay-interest calculator with MCLR lookup, Indian number and date formatting, and registration-number normalisation.
  • 06Infrastructure as code for Railway (web and worker services from Dockerfiles, Postgres, a raw-snapshot bucket, Singapore region) with a documented DNS posture (SPF, DMARC, CAA, DNSSEC), an incident-response runbook and 180-day log archiving.
RERA Info homepage on desktop: the headline Check any RERA project in Madhya Pradesh before you pay, a search box, district chips and six statistics cards
Homepage, desktop — production build
RERA Info homepage on a phone: search field, headline, a Check a RERA number button, district chips and a bottom tab bar
Homepage, phone

Where AI was used and why.

This project did not use AI — a deliberate choice. Not every system needs a model.

Relevant stack.

  • Next.js 16
  • React 19
  • TypeScript
  • next-intl
  • Tailwind CSS 4
  • Drizzle ORM
  • PostgreSQL
  • pg-boss
  • Zod 4
  • Cheerio
  • Railway (IaC)
  • Cloudflare

Only factual results.

Outcome to be added. Results are only published here when they can be stated factually — no estimated metrics.

Important engineering insights.

  • Provenance is the product: a fact without its source URL and fetch time is an opinion, so the schema records both from day one.
  • A rules-only score is slower to build than an AI verdict and far easier to defend — every band can be traced to a published field.
  • Reading a public portal politely (rate limit, identified user agent, a /bot page) is as much a design decision as a technical one.

Have a project in mind?

Tell me what you're trying to build. I'll come back with an honest view on scope, architecture and the right approach.