How loamysand/whatspoppingabq works
What's Popping ABQ collects Albuquerque event and traffic data, stores it in PostgreSQL, and presents event-impact analysis in an interactive dashboard. The primary workflow scrapes and validates events, geocodes venues, and loads them; separate Prefect flows gather event-time and rotating baseline traffic measurements. Analytics compare event conditions with baselines for dashboard visualizations. The README documents capabilities beyond the sampled code, including quality indicators and category analysis; those branches are represented at their documented subsystem paths. Relationships without shown call sites are omitted.
Main entry points: db_utils.py Database utilities · event_analytics_schema.sql PostgreSQL · baseline_schedule.py Baseline schedule · ingest_events.py Ingestion flow
Components 21
Event ingestion
- Event scraper
scrapers/visit_abq_detail_scraper.py - Ingestion flow
flows/ingest_events.py - Venue geocoder
utils/geocoding.py
Traffic collection
- Traffic flows
flows/collect_traffic.py - Event collector
collectors/tomtom_event_traffic_collector.py - Baseline schedule
collectors/baseline_schedule.py - Baseline collector
collectors/baseline_collector_tomtom.py - Collection rules
collectors/traffic_collection_rules.py - TomTom flow client
collectors/tomtom_flow_collector.py
Data and analytics
- PostgreSQL
database/schema/event_analytics_schema.sql - Database utilities
database/db_utils.py
Analysis and dashboard
- Impact analysis
analysis/event_traffic_correlation.py - Interactive dashboard
analysis/event_traffic_dashboard.py - HTML dashboard
analysis/generate_html_dashboard.py - Traffic report
analysis/generate_traffic_report.py - Event-time analysis
analysis/analyze_event_times.py
Other components
- Visit Albuquerque
- Google Maps API
- Prefect runner
- TomTom Traffic API
- Dashboard user
Connections 23
- Visit Albuquerque → Event scraper: provides listings
README.md - Event scraper → Ingestion flow: supplies events
flows/ingest_events.py - Ingestion flow → Database utilities: loads events
flows/ingest_events.py - Ingestion flow → Venue geocoder: geocodes venues
flows/ingest_events.py - Venue geocoder → Google Maps API: requests coordinates
README.md - Prefect runner → Ingestion flow: runs flow
README.md - Prefect runner → Traffic flows: runs flows
README.md - Traffic flows → Event collector: runs collection
flows/collect_traffic.py - Traffic flows → Baseline schedule: runs schedule
flows/collect_traffic.py - Baseline schedule → Baseline collector: collects venue data
collectors/baseline_schedule.py - Baseline schedule → Database utilities: reads venues
collectors/baseline_schedule.py - Baseline schedule → Database utilities: stores measurements
collectors/baseline_schedule.py - Event collector → TomTom flow client: requests measurements
collectors/tomtom_event_traffic_collector.py - Event collector → Database utilities: stores measurements
collectors/tomtom_event_traffic_collector.py - Baseline collector → TomTom flow client: requests measurements
collectors/baseline_collector_tomtom.py - TomTom flow client → TomTom Traffic API: fetches traffic
collectors/tomtom_flow_collector.py - Database utilities → PostgreSQL: reads and writes
database/db_utils.py - Impact analysis → PostgreSQL: queries measurements
analysis/event_traffic_correlation.py - Interactive dashboard → PostgreSQL: queries analytics
README.md - Dashboard user → Interactive dashboard: views impact
README.md - HTML dashboard → PostgreSQL: queries data
analysis/generate_html_dashboard.py - Traffic report → Impact analysis: uses analyses
analysis/generate_traffic_report.py - Event-time analysis → PostgreSQL: queries events
analysis/analyze_event_times.py