(CASE STUDY · 03)

TAMIL NADU STARTUP MAP

  • Data Pipeline
  • Geospatial
  • Full-Stack
  • Next.js · MapLibre GL

Tamil Nadu Startup Map is a public, map-first directory of the state's startup ecosystem. A pipeline gathers each company's facts from public sources into one record, and every record carries the list of sources it was built from.

ROLE
Data & Full-Stack Engineering
TIMELINE
3 Weeks
YEAR
2026
TEAM
With Product Owner

(MY ROLE)

  • Built the data pipeline: 4 Scrapy spiders, a strict match against the company register, and the seed into Postgres.
  • Designed the placement rules: when a geocoder's answer is kept, and what happens when none is.
  • Built the map explorer and the company pages on Next.js and MapLibre GL, over a basemap style derived from OpenFreeMap.
  • Wrote the Supabase schema, the row-level security and the one API route, a rate-limited submission form reviewed by hand.
(WHY IT EXISTS)
Company facts for Tamil Nadu were spread across an incubator's directory, the national company register, Startup India and company websites, each holding part of the picture. The brief was a map in the spirit of the Bangalore Startup Map, not a clone of it, with location, sector, stage and tier kept as 4 separate fields.
(THE FIRST MAP CLUSTERED BY DISTANCE)
The first version covered Chennai and took 5 days. On day 1 the map moved to Leaflet, the reference site's stack, and its clusterer merged anything within 80 pixels at every zoom, so companies far apart shared one count. On day 2 it went back to MapLibre, with a globe that flattens as you zoom in and clusters that form only where chips would overlap.
(AFTER LAUNCH)
Live at tamilnadustartupmap.com, deployed on Railway. The product owner's team has kept building on it since.

Process

  1. 01

    Reference & Rules

    Captured how the reference map behaves, then wrote the data spec before any screen: a fixed tier formula, and a rule that a required field nobody can source is marked unknown, never guessed.

  2. 02

    Source & Match

    Scrapy spiders read the IIT Madras Research Park directory, Startup India and company websites. Addresses came from those websites and the national company register, which was matched only on the name a company declared.

  3. 03

    Place Honestly

    Geocoded at one request a second, with all 10,015 answers cached and committed. Answers outside the city, in the water or against the postcode were refused.

  4. 04

    Publish Safely

    4 pipeline stages end in a strict schema check. The seed retries lost writes and refuses to withdraw more than 10% of the table in one run. Pages refresh every 5 minutes, and 660 automated tests cover the pipeline and the site.

How It Works

Public sources go in at one end, and a guarded seed writes the rows into Postgres at the other. A company's marker is a geocoder answer that passed every check, a building or area from the reference registries, or, where no geocoder could find the street, the centre of the postcode the company published. A company nothing could place is not published.

The Map

One map for the whole state. Every filter lives in the URL, and a sector filter holds from the state view down to a single building, where the companies that share one address fan out around it.

In The Detail

A record says how sure it is. The tier comes with its score, the verification status sits on the page, and a company that is already listed is caught while you type.

(SYSTEM 01 · CITY REGISTRY)

City Registry

A city is one entry in lib/cities.ts, and the pipeline and the geocoding scripts read everything city-specific from it. Adding a city needs no database migration.

(ONE CITY BECAME ELEVEN)
Coimbatore went in first. 5 more followed after 16 checks on their proposed bounds and postcodes, each one on either the postcode or the map. 12 of those checks rejected the proposal, and a city's postcode prefix became a list instead of one value. The last 4 cities took only companies whose websites answer.
(A MARKER IS A CLAIM)
Rows nothing could place were never scattered to look sourced. The owner chose to take them off the site instead, and a company that could only be placed by its postcode is cited as the postcode's centre, not as a building. Companies struck off the register were removed, and so were unverified rows with no working website.

(SCOPE)

cities in the registry
11
postcode prefixes
16
address aliases
30

WHAT A CITY ENTRY HOLDS

Bounds
A tight metro box, and a wider box a geocoder's answer must land inside.
Postcode prefixes
3 to 6 digits each. A matching postcode is the cheapest strong sign that an address is in the city.
Address aliases
The names the city goes by in published addresses, such as madras, kovai and trichy.
Name
The spelling stored on every row. A row that names a city the registry does not list is dropped at validation, so a typo never becomes a new city.

Browse And Submit

Every company has a card in the grid and a marker on the map, and the card or the marker's popup opens the company's own page. Anyone can propose a company at /submit with its name, website and office address, and each submission is reviewed by hand against its sources before it appears.

  1. Directory cards

  2. Map popup

  3. Submit a startup

  4. Submission received