A crowd-powered map of meaningful places: cafes, food spots, parks, museums, and other tiny perfect things discovered by real people.
- Creators and maintainers: Dea Bardhoshi and Harshvardhan
- Creator websites: https://deabardhoshi.com/ and https://blog.harsh17.in/
- Mission: document places that feel memorable, not just highly rated
- Contribution model: open submissions + maintainer review
map/- Public web app (React + Leaflet)
- Netlify-hosted no-login forms for place submissions and feature requests
- Native no-login chat page (
/chat) with retrieval + Netlify Function backed by OpenAI
master_data/- Source-of-truth dataset (
master_data.csv,master_data.json)
- Source-of-truth dataset (
data_creation/- Data ingestion notebooks/scripts for moderation and merge workflows
- Includes Netlify form export script
chatbot/- Local RAG experimentation utilities (Ollama + Chroma + Streamlit)
- Submission flow moved off Google Forms
- Replaced with Netlify Forms (
/submit) so users do not need GitHub or any login. - Added feature request form (
/feature) with same no-login approach.
- Creator override on form
- The form has maintainer-only options for creator recommendations.
- Overrides are validated server-side during ingestion via secret access codes, not public name checks.
- Requests are still reviewed before dataset merge.
- Native hosted chat
- New
/chatpage in the web app (no user login required). - Retrieval happens on submitted data.
- Generation uses Netlify Function + OpenAI API key from deployment secrets.
- Fallback mode still returns retrieval-based recommendations if model call fails.
- UI refresh
- New light pixel-art interface, mobile-friendly layout, and component-focused intro panel.
map/ is designed for automatic Netlify deploys on push.
OPENAI_API_KEY(formap/netlify/functions/ask-ava.mjs)
OPENAI_MODEL(default:gpt-5.2)
cd map
npm install
npm startcd map
npm run buildcd map
CI=true npm testThis is now automated.
- Workflow:
.github/workflows/auto-sync-submissions.yml - Schedule: every 6 hours (and manual
workflow_dispatch) - Output: an auto PR with updated submission export + master dataset + map dataset copy + city docs
Required GitHub Action secrets:
NETLIFY_ACCESS_TOKENNETLIFY_SITE_IDCREATOR_ACCESS_CODES(comma-separated maintainer codes for creator override validation)
If NETLIFY_ACCESS_TOKEN or NETLIFY_SITE_ID is missing, the workflow run succeeds but skips ingestion and PR creation.
Optional secret:
GOOGLE_PLACES_API_KEY(if missing, fallback geocoding still runs via Nominatim)
Optional email notifications (sent only when new rows are ingested and a PR is created/updated):
NOTIFY_SMTP_SERVERNOTIFY_SMTP_PORTNOTIFY_SMTP_USERNAMENOTIFY_SMTP_PASSWORDNOTIFY_SMTP_FROM
Manual fallback command:
python data_creation/auto_ingest_submissions.pyNotebook data_creation/02_add_new_places.qmd is now optional/manual-only.
Production chat is in map/, but local experiments remain in chatbot/.
pip install -r chatbot/requirements.txt
python chatbot/ingest.py
streamlit run chatbot/main.py- Dependency updates were applied and critical vulnerabilities are currently 0 in the web app audit.
- Remaining high/moderate findings are primarily from the legacy
react-scriptstoolchain.
- Use no-login forms in the app for place submissions and feature requests.
- For code changes, open PRs with focused commits and test/build evidence.
- Keep
master_data/as the canonical data source.