fomo.nyc is a free, community-built interactive map of upcoming events in the NYC area.
It works by visiting the websites of parks, museums, music venues, etc., identifying any upcoming events, and displaying them on a map. My hope is that this becomes a useful resource for people to find events they are interested in and to engage with their local communities.
/public_html/ Website files served to users
/public_html/data/Event and location data files- Frontend HTML, CSS, and JavaScript files
/pipeline/ Python scripts for data processing pipeline
main.pyMain entry point - orchestrates the complete workflowcrawler.pyCrawls websites using Crawl4AI, stores content in databaseextractor.pyUses Gemini AI to extract structured event data- Requires
GEMINI_API_KEYenvironment variable (set in.envfile)
- Requires
processor.pyParses extracted data, enriches with location coordinatesmerger.pyDeduplicates events into final events tableexporter.pyGenerates JSON files for the websiteuploader.pyUploads data files to FTP serverdb.pyDatabase operations (CRUD for crawl runs, results, events)
/database/ Database schema and setup scripts
schema.sqlComplete database schemasetup.pyCreates empty database tablesmigrate_schema.pyApplies schema changes to existing database/database/backups/Database backup files
All data flows through the database (crawl_runs → crawl_results → crawl_events → events):
- Crawl → Query
websitestable for due sites, crawl and store incrawl_results.crawled_content - Extract → Use Gemini AI to extract structured tables, store in
crawl_results.extracted_content - Process → Parse tables, enrich with location data from
locations, store incrawl_events - Merge → Deduplicate
crawl_eventsinto finaleventstable - Export → Generate
public_html/data/*.jsonfromeventstable - Upload → Push JSON files to FTP server
-
📢 Share with your friends
-
📍 Add events and places you know
-
🫱🏾🫲🏼 Stay in touch
- This website is in active development, so keep visiting for regular updates!
- You can reach out by email or join the Discord server
The project uses a MariaDB/MySQL database to store locations, websites, and crawl data.
New developers should restore from a database backup rather than starting with an empty database:
# 1. Create the database
mysql -u root -e "CREATE DATABASE fomo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
# 2. Restore from backup
mysql -u root fomo < database/backups/fomo_backup_YYYYMMDD.sql# Windows (XAMPP)
"C:/xampp/mysql/bin/mysqldump.exe" -u root fomo > database/backups/fomo_backup_YYYYMMDD.sql
# Linux/Mac
mysqldump -u root fomo > database/backups/fomo_backup_YYYYMMDD.sqlIf the schema has changed since your backup, run migrations:
python database/migrate_schema.py- 🧭 Map library: MapLibre GL JS
- 🗺️ Map tiles: © Protomaps, © OpenStreetMap contributors
- 📅 Date picker: Flatpickr
- 🔠 Fonts: Inter, Noto Color Emoji
- 🚀 This project uses Crawl4AI for web data extraction
- 🤖 Gemini and Claude for data processing and vibe coding
- 💖 All the amazing, creative, hard-working people who make the city shine with their light! 🗽