尚未收集儲存庫資訊。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
Interactive map of upcoming events in the NYC area
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗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.
The codebase is city-agnostic — NYC is just the default deployment. Every city/region/branding specific (map view, timezone, geography, prompt wording, site name, per-platform crawl behavior) lives in config/<FOMO_CITY>.yaml (default config/nyc.yaml) and gitignored pipeline/sources/ plugins, so you can fork it for your own city by editing config rather than engine code.
src/js/ JavaScript modules (IIFE pattern, loaded in order)src/css/ CSS modules (imported via index.css)src/data/ Event and location JSON data (generated by pipeline)src/api/ PHP API endpointssrc/admin/ PHP admin dashboardsrc/images/ SVG assetssrc/fonts/ Self-hosted MapLibre glyph fontsnpm run build (prod) or npm run dev (dev)public_html/ directorypython scripts/upload_public_html.pymain.py Main entry point - orchestrates the complete workflowcrawler.py Crawls websites using Crawl4AI, stores content in databaseextractor.py Uses Gemini AI to extract structured event data
GEMINI_API_KEY environment variable (set in .env file)processor.py Parses extracted data, enriches with location coordinatesmerger.py Deduplicates events into final events tableexporter.py Generates JSON files for the website (src/data/)uploader.py Uploads data files to FTP serverdb.py Database operations (CRUD for crawl runs, results, events)schema.sql Complete database schemasetup.py Creates empty database tablesmigrate_schema.py Applies schema changes to existing database/database/backups/ Database backup filesThe frontend is built with esbuild:
npm run dev # Dev build + watch (unminified, symlinks, stable filenames)
npm run build # Prod build (minified, content-hashed, full asset copies)
@import chain is resolved and minifiedbuild.js reads config/<FOMO_CITY>.yaml and injects the city config: a window.__CITY__ global (map/timezone) prepended to the JS bundle, plus {{TOKEN}} branding replacement in index.htmldist/ contains the complete deployable output: HTML, JS/CSS bundles, plus copies of data/, images/, fonts/, api/, admin/All data flows through the database (crawl_runs → crawl_results → crawl_events → events):
websites table for due sites, crawl and store in crawl_results.crawled_contentcrawl_results.extracted_contentlocations, store in crawl_eventscrawl_eventscrawl_events into final events tablesrc/data/*.json from events tableThe day-to-day entry point is the /run-pipeline workflow (.claude/commands/run-pipeline.md), which wraps pipeline/main.py with review and fix steps.
npm run build # Build to dist/
python scripts/upload_public_html.py # Upload dist/ to server
📢 Share with your friends
📍 Add events and places you know
🫱🏾🫲🏼 Stay in touch
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.sql
If the schema has changed since your backup, run migrations:
python database/migrate_schema.py