MW

PulseMap

v1 scaffold status
localhost:8787 · auto · TVS · two-wheeler · KA + TN + MH
Overture data pulled
57 GB
580.8M rows across 13 themes
Active sources
14 + Overture
3 dropped → obsolete_data/
Files scaffolded
128
across 5 v1 subtrees
Time to demo
4 weeks
TVS, KA + TN + MH
runnable works today stubbed shape only, fill week 2-4 data on disk ready to ingest

data/ 14 + Overture

Foundational data on disk, ~64 GB total.

  • data 06b_overture: 4.9M places, 503.8M building footprints, 30M road segments
  • data 16 PhonePe Pulse + 11 Black Marble + 13 SIAM TVS + 14 HRSL cohorts
  • data 01 LGD spine: 689k villages, 22k municipal bodies
  • data 10 India Post pincode dir: 155k pincodes
  • moved WorldPop, PPAC, AGMARKNET → obsolete_data/

frontend/ 31 files

Vite + React 19 + TS + Tailwind + shadcn + Mapbox GL JS 3.x.

  • runnable Three-screen routing (Explore / Adjust / Activate)
  • runnable Mapbox light-v11 centered on Bengaluru
  • runnable Madison theme tokens (Shiraz, Jet, Penn, Gold)
  • runnable Adjust: live axis-weight sliders + JetBrains-Mono formula + Gold sum-to-100
  • stubbed Real API + PMTiles + score logic — week 3

backend/api/ 14 files

FastAPI + Pydantic v2 + Supabase JWT auth. Port 8001.

  • runnable 6 routers mounted under /v1
  • runnable JWT verification + RLS-bound Supabase client per request
  • stubbed Every endpoint returns shape-correct placeholders
  • stubbed Real queries land week 2

backend/worker/ 12 files

Cloud Run Jobs · Polars + DuckDB + rasterio.

  • runnable argparse dispatch: python -m worker <job>
  • stubbed brand_recompute: Polars structure end-to-end
  • stubbed cluster_build: DuckDB+spatial opens Overture buildings parquet
  • runnable export_generate: Meta CSV + Google list + raw CSV writers
  • stubbed 14 source ingestion stubs (one per data source)

backend/magent/ 12 files

Gemini 3.1 Flash via google-genai SDK. Port 8003.

  • runnable 8 tools w/ Pydantic input/output models + JSON Schema export
  • runnable Safety: rate limit (100/user/day) + brand-id assertion
  • stubbed Tool handlers return placeholder data
  • stubbed Live Gemini calls land week 4

migrations/ 8 SQL

Forward-only Supabase Postgres migrations.

  • runnable 0001 PostGIS + pgvector + pgcrypto
  • runnable 0002 Geography (state/district/subdistrict/town/pincode/cluster)
  • runnable 0003-0005 Signals + brand_poi + brand workspace
  • runnable 0006 GIST + B-tree + ivfflat indexes
  • runnable 0007 RLS — brand_membership as gatekeeper
  • runnable 0008 Seed: KA/TN/MH + auto.two_wheeler + TVS

pipeline/ 16 sources

Per-source README + pull + normalise.py + requirements.

  • runnable 06b_overture/pull.sh — already pulled 57 GB India
  • runnable 11_nasa_blackmarble/monthly.sh — ready for cron
  • runnable 16b_npci/playwright/ — Playwright scaffold for UPI scrape
  • stubbed 13 other source ingestion scripts

infra/ 13 .tf

Terraform for GCP asia-south1.

  • runnable Cloud Run × 2 services + 4 worker jobs
  • runnable GCS pulsemap bucket — public-read scoped to tiles/*
  • runnable Secret Manager × 5 (Supabase, Gemini, Mapbox, NASA, PhonePe)
  • runnable Cloud Scheduler × 2 (quarterly foundation + monthly Black Marble)
  • runnable Monitoring alerts + Artifact Registry

categories/ + brands/ 3 YAMLs

Source of truth for axis weights and brand overrides.

  • runnable categories/auto_two_wheeler/default.yaml — 4 axes, 14 components
  • runnable categories/auto_two_wheeler/use_cases.json — 10 use cases (5 in v1)
  • runnable brands/tvs/config.yaml — Position axis override w/ tvs_share invert

docs/ 6 files

02 / Live demo — legacy v0 KA Mapbox console (reference build at legacy/app_v0/; new frontend/ needs pnpm install && pnpm dev) localhost:8787/legacy/app_v0/