An open API service indexing awesome lists of open source software.

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.

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).