https://github.com/studentsuite/studymap
An open-source interactive map of student important places near Mumbai. Filter by category, region, and access places near you.
https://github.com/studentsuite/studymap
exam-prep leaflet map mumbai navimumbai opensourceforgood openstreetmap student-managed
Last synced: 27 days ago
JSON representation
An open-source interactive map of student important places near Mumbai. Filter by category, region, and access places near you.
- Host: GitHub
- URL: https://github.com/studentsuite/studymap
- Owner: StudentSuite
- License: mit
- Created: 2026-06-08T10:27:00.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-06-26T05:26:41.000Z (28 days ago)
- Last Synced: 2026-06-26T06:24:08.646Z (28 days ago)
- Topics: exam-prep, leaflet, map, mumbai, navimumbai, opensourceforgood, openstreetmap, student-managed
- Language: TypeScript
- Homepage: https://study-map-psi.vercel.app
- Size: 5.37 MB
- Stars: 8
- Watchers: 0
- Forks: 3
- Open Issues: 27
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# StudyMap
A crowdsourced map of student-important places across the Mumbai Metropolitan Region (Mumbai, Thane, Navi Mumbai). Open source, zero setup, free forever.
**Live:** [study-map-psi.vercel.app](https://study-map-psi.vercel.app)
---
## What it does
- **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.
## Quick start
```bash
npm install
npm run dev
```
Open http://localhost:3000. No environment variables needed; the map reads place data directly from `data/places/`.
## Data schema
Places live in `data/places/.json`, one file per category:
| File | Type key |
|------|----------|
| `airport.json` | `airport` |
| `train_station.json` | `train_station` |
| `exam_centre.json` | `exam_centre` |
| `library.json` | `library` |
| `book_shop.json` | `book_shop` |
| `stationery.json` | `stationery` |
| `internet_cafe.json` | `internet_cafe` |
| `imp_locations.json` | `imp_locations` |
Each record shape (`src/lib/types.ts`):
```ts
{
id: string; // kebab-case, unique across all types
name: string;
type: PlaceType; // one of the 8 keys above
city: "mumbai" | "thane" | "navi_mumbai";
lat: number;
lng: number;
address?: string;
gmaps_link: string; // must contain "maps.google.com"
added_by: string; // GitHub username of contributor
}
```
## How to add a place
1. Fork this repo
2. Add your place to the correct `data/places/.json`
3. Verify `lat`/`lng` against Google Maps; `lat` 18–20, `lng` 72–73
4. Set `gmaps_link` to the Google Maps link
5. Open a pull request with a description of the place and a source
See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines.
## Architecture
```
src/
app/
page.tsx # homepage (hero + map preview)
map/page.tsx # full interactive map
contribute/page.tsx # contribution guide
legal/ # privacy, terms, disclaimer
layout.tsx # root layout (navbar, footer, theme)
components/
home/ # Hero, MapPreview
map/ # PlacesMap, MapView, FilterPanel, NearMeButton
pins/ # PinPopup
layout/ # Navbar, Footer
lib/
places.ts # getPlaces(), filterPlaces(), city loader
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
data/
places/ # 8 JSON files, one per place type
```
## Tech stack
- **Next.js 16** (App Router, static export)
- **Leaflet + react-leaflet** (interactive map)
- **shadcn/ui + Tailwind v4** (UI components)
- **next-themes** (dark/light mode)
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md).
## License
MIT. See [LICENSE](LICENSE).