A crowdsourced map of student-important places across the Mumbai Metropolitan Region (Mumbai, Thane, Navi Mumbai). Open source, zero setup, free forever.
Live: studyymap.com
- Places map: find exam centres, libraries, book shops, stationery, internet cafes, train stations, and airports across the MMR. Filter by type and city.
- Contribute: add places or fix data via GitHub pull request. No account needed.
- Legal: privacy policy, terms of service, and data disclaimer for the crowdsourced dataset.
npm install
npm run devOpen http://localhost:3000. No environment variables needed; the map reads place data via studymap.config.ts, which imports it from data/places/.
Places live in data/places/<type>.json, one file per category. The record shape,
valid types, and per-field rules are documented once in
data/CONTRIBUTING.md and enforced by
data/places.schema.json via npm run validate -
that pair is the source of truth, not this README.
- Fork this repo
- Add your place to the correct
data/places/<type>.json - Verify
lat/lngagainst Google Maps - Set
gmaps_linkto the Google Maps link - Open a pull request with a description of the place and a source
See CONTRIBUTING.md for full guidelines.
studymap.config.ts # region + dataset config - the one file a fork edits to retarget StudyMap
src/
app/
page.tsx # homepage (hero + map preview)
map/page.tsx # full interactive map
calendar/ # public exam calendar + signed-in personal events
login/ # optional sign-in (Google OAuth, email)
auth/callback/ # OAuth code exchange
contribute/page.tsx # contribution guide
legal/ # privacy, terms, disclaimer
layout.tsx # root layout (navbar, footer, theme)
components/
home/ # Hero, MapPreview
map/ # PlacesMap, MapView, MapPanel, MyPlacesPanel, dialogs
calendar/ # PersonalEventDialog
pins/ # PinPopup
layout/ # Navbar, Footer
lib/
places.ts # getPlaces(), filterPlaces(), getCities() - reads from studymap.config.ts
geo.ts # distance calculation, LatLng type
types.ts # PlaceType, City, Place interface
map.ts # PLACE_TYPE_COLORS, directionsUrl
share.ts # URL state encode/decode for shareable links
site.ts # site metadata, navLinks
user-places.ts # saved places + home location (signed-in only)
user-events.ts # personal calendar events (signed-in only)
data/
places/ # 9 JSON files, one per place type
supabase/
migrations/ # SQL for the two optional, sign-in-gated tables (run once by hand)
See ARCHITECTURE.md for the full breakdown.
- Next.js 16 (App Router)
- Leaflet + react-leaflet (interactive map, marker clustering)
- Supabase (optional sign-in, gates saved places + personal calendar events)
- shadcn/ui + Tailwind v4 (UI components)
- next-themes (dark/light mode)
Want StudyMap for a different city? Click "Use this template" above, then follow SELF-HOSTING.md: set your region and dataset in one config file, optionally wire up your own Supabase project for sign-in, and deploy.
See CONTRIBUTING.md.
New here? Start with an issue tagged good first issue or browse everything tagged help wanted. Adding a place from your own neighbourhood (#18) needs no coding at all.
See CONTRIBUTORS.md.
MIT. See LICENSE.