Crowdsourced safe-route mapper for walking at night in Port Harcourt, Nigeria — community-reported lighting/safety overlay on OpenStreetMap.
# Lantern
Crowdsourced safe-route mapper for people walking at night in Nigerian cities, launching in Port Harcourt. A community-reported lighting/safety overlay on OpenStreetMap — not a router that guarantees safety (see `DO_NOT.md`).
**Live:** (see `ROADMAP.md` for what's real vs. still placeholder before this is launch-ready).
Full product/architecture docs live in this directory: `PROJECT.md`, `DO_NOT.md`, `PRD.md`, `DATA_MODEL.md`, `ARCHITECTURE.md`, `DESIGN_SYSTEM.md`, `MVP_SCOPE.md`. **Read `DO_NOT.md` before touching moderation, scoring, or location-handling code** — its constraints override convenience every time. See `CONTRIBUTING.md` for the recommended reading order, `ROADMAP.md` for what's real vs. placeholder right now, and **`docs/API.md` for the full API reference** (every endpoint, request/response shapes, auth, rate limits).
## Stack
- Next.js (App Router) — deployed on Vercel
- MapLibre GL JS for the map
- Supabase Postgres with PostGIS + pgRouting enabled — segments, tags, routing topology
- Upstash Redis — bbox/segment read cache, live-share ephemeral state
- Drizzle ORM (`postgres-js` driver)
- Vercel Cron Jobs — daily score recalculation (Vercel Hobby plan only supports daily cron; see `ROADMAP.md`)
## What's built
All three `MVP_SCOPE.md` phases have a working implementation — see `ROADMAP.md` for the honest per-item status and what's still a placeholder (map style, launch-area bbox, moderator auth) versus load-bearing and real.
- **Phase 1:** base map, segment model, anonymous tag submission, decay-weighted scoring engine with a 48h stability window before a band publicly flips, flagging + simple moderation, day/night toggle.
- **Phase 2:** optional contributor accounts with streaks/badges, partner-seed bulk import, "lit tonight" real-time lighting tags, share-to-WhatsApp, upgraded moderation UI.
- **Phase 3:** route suggestion that prefers higher-scored segments (pgRouting, not a strict safest-route router — persistent in-UI discl …