PromptWar / implementation_plan.md
Mr-TD's picture
feat: Add operator dashboard, alerts, analytics, and simulator pages
aefe381
# VenueFlow β€” Smart Sporting Venue Experience Platform
A Flask-based real-time system that transforms the physical event experience at large-scale sporting venues by addressing crowd movement, waiting times, and real-time coordination.
---
## Problem Statement
Attendees at large sporting events face:
- **Crowd congestion** at gates, concourses, and exits
- **Long queues** at food stalls, merchandise, and restrooms
- **Poor wayfinding** inside massive, unfamiliar venues
- **No real-time information** about crowd conditions or wait times
- **Accessibility barriers** for attendees with disabilities
VenueFlow solves these with an intelligent, real-time web platform for both **fans** (mobile-first attendee app) and **operators** (venue management dashboard).
---
## Architecture Overview
```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ FRONTEND (Jinja2 + JS) β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Attendeeβ”‚ β”‚ Operator β”‚ β”‚ Heatmap β”‚ β”‚ Chatbot β”‚ β”‚
β”‚ β”‚ App β”‚ β”‚Dashboard β”‚ β”‚ View β”‚ β”‚ Widget β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚ SSE / Fetch β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ FLASK BACKEND β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Auth & β”‚ β”‚ Real-time β”‚ β”‚ AI Engine β”‚ β”‚
β”‚ β”‚ Security β”‚ β”‚ Engine β”‚ β”‚ (Gemini) β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Queue β”‚ β”‚ Crowd β”‚ β”‚ Notification β”‚ β”‚
β”‚ β”‚ Manager β”‚ β”‚ Analytics β”‚ β”‚ Service β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ GOOGLE SERVICES β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Firebase β”‚ β”‚Google Maps β”‚ β”‚ Gemini β”‚ β”‚
β”‚ β”‚ Firestoreβ”‚ β”‚ JS API β”‚ β”‚ 2.5 API β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Cloud β”‚ β”‚ Firebase β”‚ β”‚
β”‚ β”‚Translate β”‚ β”‚ Auth β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```
### Tech Stack
| Layer | Technology |
|-------|-----------|
| **Backend** | Python 3.11+, Flask, Flask-SocketIO |
| **Frontend** | Jinja2 templates, Vanilla JS, CSS3 |
| **Database** | Firebase Firestore (real-time sync) |
| **Auth** | Firebase Authentication |
| **Maps** | Google Maps JavaScript API |
| **AI** | Google Gemini 2.5 Flash API |
| **Translation** | Google Cloud Translation API |
| **Real-time** | Server-Sent Events (SSE) + Firebase listeners |
| **Deployment** | Docker-ready for Cloud Run |
---
## User Review Required
> [!IMPORTANT]
> **Google API Keys Required**: You will need to provide API keys / service accounts for:
> - Firebase project (Firestore + Auth)
> - Google Maps JavaScript API key
> - Google Gemini API key
> - Google Cloud Translation API key
>
> These will be stored in a `.env` file (never committed to git).
> [!WARNING]
> **Simulated Sensor Data**: Since we don't have physical IoT sensors, the system will include a **simulation engine** that generates realistic crowd density, queue lengths, and movement patterns. This makes the demo fully functional without hardware.
> [!IMPORTANT]
> **Two User Interfaces**:
> 1. **Attendee App** (mobile-first) β€” For fans at the venue
> 2. **Operator Dashboard** β€” For venue staff/management
>
> Both are served from the same Flask app. Please confirm this dual-interface approach.
---
## Proposed Changes
### Project Structure
```
EventManager/
β”œβ”€β”€ app.py # Flask application factory
β”œβ”€β”€ config.py # Configuration & env management
β”œβ”€β”€ requirements.txt # Python dependencies
β”œβ”€β”€ Dockerfile # Container deployment
β”œβ”€β”€ .env.example # Environment variable template
β”œβ”€β”€ .gitignore
β”‚
β”œβ”€β”€ blueprints/
β”‚ β”œβ”€β”€ __init__.py
β”‚ β”œβ”€β”€ auth.py # Authentication routes
β”‚ β”œβ”€β”€ attendee.py # Attendee-facing routes
β”‚ β”œβ”€β”€ operator.py # Operator dashboard routes
β”‚ β”œβ”€β”€ api.py # REST API endpoints
β”‚ └── sse.py # Server-Sent Events stream
β”‚
β”œβ”€β”€ services/
β”‚ β”œβ”€β”€ __init__.py
β”‚ β”œβ”€β”€ firebase_service.py # Firebase Firestore & Auth
β”‚ β”œβ”€β”€ crowd_service.py # Crowd density analytics
β”‚ β”œβ”€β”€ queue_service.py # Queue management logic
β”‚ β”œβ”€β”€ gemini_service.py # AI chatbot & recommendations
β”‚ β”œβ”€β”€ maps_service.py # Maps & wayfinding
β”‚ β”œβ”€β”€ translation_service.py # Multi-language support
β”‚ β”œβ”€β”€ notification_service.py # Alert & notification engine
β”‚ └── simulator.py # Realistic data simulation
β”‚
β”œβ”€β”€ models/
β”‚ β”œβ”€β”€ __init__.py
β”‚ β”œβ”€β”€ venue.py # Venue, Zone, Gate models
β”‚ β”œβ”€β”€ queue.py # Queue & wait time models
β”‚ └── event.py # Event & attendee models
β”‚
β”œβ”€β”€ static/
β”‚ β”œβ”€β”€ css/
β”‚ β”‚ β”œβ”€β”€ base.css # Design system & tokens
β”‚ β”‚ β”œβ”€β”€ attendee.css # Attendee app styles
β”‚ β”‚ β”œβ”€β”€ operator.css # Operator dashboard styles
β”‚ β”‚ └── accessibility.css # A11y overrides
β”‚ β”œβ”€β”€ js/
β”‚ β”‚ β”œβ”€β”€ app.js # Core JS utilities
β”‚ β”‚ β”œβ”€β”€ heatmap.js # Crowd heatmap rendering
β”‚ β”‚ β”œβ”€β”€ queue.js # Queue display & updates
β”‚ β”‚ β”œβ”€β”€ wayfinding.js # Navigation & routing
β”‚ β”‚ β”œβ”€β”€ chatbot.js # Gemini chatbot widget
β”‚ β”‚ β”œβ”€β”€ notifications.js # Real-time notification handler
β”‚ β”‚ β”œβ”€β”€ sse-client.js # SSE connection manager
β”‚ β”‚ β”œβ”€β”€ dashboard.js # Operator dashboard logic
β”‚ β”‚ β”œβ”€β”€ simulator-ui.js # Simulation controls
β”‚ β”‚ └── accessibility.js # A11y toggle & preferences
β”‚ └── images/
β”‚ └── (generated assets)
β”‚
β”œβ”€β”€ templates/
β”‚ β”œβ”€β”€ base.html # Base template with a11y
β”‚ β”œβ”€β”€ attendee/
β”‚ β”‚ β”œβ”€β”€ home.html # Fan landing page
β”‚ β”‚ β”œβ”€β”€ heatmap.html # Live crowd heatmap
β”‚ β”‚ β”œβ”€β”€ queues.html # Queue status & booking
β”‚ β”‚ β”œβ”€β”€ navigate.html # Wayfinding page
β”‚ β”‚ └── profile.html # Preferences & a11y settings
β”‚ β”œβ”€β”€ operator/
β”‚ β”‚ β”œβ”€β”€ dashboard.html # Main control dashboard
β”‚ β”‚ β”œβ”€β”€ analytics.html # Historical analytics
β”‚ β”‚ β”œβ”€β”€ alerts.html # Alert management
β”‚ β”‚ └── simulator.html # Simulation controls
β”‚ β”œβ”€β”€ auth/
β”‚ β”‚ β”œβ”€β”€ login.html
β”‚ β”‚ └── register.html
β”‚ └── components/
β”‚ β”œβ”€β”€ chatbot.html # Chatbot widget partial
β”‚ β”œβ”€β”€ notification.html # Notification toast partial
β”‚ └── nav.html # Navigation component
β”‚
└── tests/
β”œβ”€β”€ __init__.py
β”œβ”€β”€ conftest.py # Pytest fixtures
β”œβ”€β”€ test_auth.py # Authentication tests
β”œβ”€β”€ test_crowd_service.py # Crowd analytics tests
β”œβ”€β”€ test_queue_service.py # Queue management tests
β”œβ”€β”€ test_api.py # API endpoint tests
β”œβ”€β”€ test_simulator.py # Simulator logic tests
└── test_accessibility.py # Accessibility audit tests
```
---
### Component 1: Core Application & Configuration
#### [NEW] `app.py`
- Flask application factory pattern with blueprint registration
- CORS, CSP, and security headers middleware
- Error handlers (404, 500) with accessible error pages
- SSE stream endpoint registration
#### [NEW] `config.py`
- Environment-based configuration (dev/staging/prod)
- Secure loading of all API keys from `.env`
- Firebase, Gemini, Maps, Translation config constants
#### [NEW] `requirements.txt`
Key dependencies:
```
flask>=3.1
flask-socketio>=5.3
firebase-admin>=6.5
google-generativeai>=0.8
google-cloud-translate>=3.16
gunicorn>=22.0
python-dotenv>=1.0
pytest>=8.0
```
---
### Component 2: Authentication (Firebase Auth)
#### [NEW] `blueprints/auth.py`
- Login / Register routes using Firebase Authentication
- Role-based access: `attendee` vs `operator`
- Session management with secure HTTP-only cookies
- CSRF protection on all forms
#### [NEW] `services/firebase_service.py`
- Firebase Admin SDK initialization (singleton)
- Firestore CRUD helpers with connection pooling
- Real-time listener setup for zone/queue collections
- Token verification for authenticated API calls
---
### Component 3: Real-Time Crowd Heatmap
#### [NEW] `services/crowd_service.py`
- Processes zone density data from Firestore
- Calculates crowd density levels: 🟒 Low / 🟑 Moderate / πŸ”΄ High / ⚫ Critical
- Threshold-based alerting triggers
- Historical trend computation
#### [NEW] `static/js/heatmap.js`
- Renders interactive venue map overlay using **Google Maps JavaScript API**
- Real-time heatmap layer with color-coded zones
- Click-to-inspect zone details (capacity, current count, trend)
- Auto-refresh via SSE stream
#### [NEW] `templates/attendee/heatmap.html`
- Mobile-first responsive layout
- Legend with WCAG-compliant color indicators + text labels
- "Best route" suggestion panel
- Accessible alternative: tabular zone status view
---
### Component 4: Queue Management System
#### [NEW] `services/queue_service.py`
- Manages virtual queues for food, merchandise, restrooms
- Estimated wait time calculation (moving average algorithm)
- "Book your spot" β€” virtual queue reservation
- Queue position tracking and SMS/notification alerts
#### [NEW] `static/js/queue.js`
- Live queue dashboard with animated progress bars
- Sort/filter by wait time, category, proximity
- "Join Queue" button with confirmation modal
- Real-time position counter
#### [NEW] `templates/attendee/queues.html`
- Card-based queue listings with status indicators
- Category filters (πŸ• Food, πŸ› Merch, 🚻 Restrooms)
- Estimated wait time with confidence indicator
- Virtual queue ticket with QR code
---
### Component 5: Wayfinding & Navigation
#### [NEW] `services/maps_service.py`
- Google Maps integration for venue layout
- Shortest-path routing between venue zones
- Accessibility-aware routing (elevators, ramps)
- Points-of-interest data management
#### [NEW] `static/js/wayfinding.js`
- Interactive venue map with Google Maps JS API
- Turn-by-turn directions within the venue
- "Navigate to nearest [restroom/food/exit]" functionality
- Crowd-aware routing (avoids congested paths)
#### [NEW] `templates/attendee/navigate.html`
- Full-screen map with controls
- Quick-action buttons: "Nearest Exit", "My Seat", "Food Court"
- Step-by-step accessible text directions
- Estimated walking time display
---
### Component 6: AI Chatbot (Google Gemini)
#### [NEW] `services/gemini_service.py`
- Gemini 2.5 Flash integration for conversational AI
- Context-aware: knows venue layout, current crowd data, queue times
- Multi-language support via Cloud Translation API
- Safety filters and responsible AI guardrails
- Prompts:
- "Where's the shortest food queue?"
- "How do I get to Gate 7?"
- "Is Section B crowded right now?"
#### [NEW] `static/js/chatbot.js`
- Floating chat widget (bottom-right)
- Message bubbles with typing indicator
- Quick-reply suggestion chips
- Language selector for real-time translation
- ARIA live region for screen reader announcements
#### [NEW] `templates/components/chatbot.html`
- Accessible chat interface with proper ARIA roles
- Resizable/minimizable widget
- Keyboard-navigable message list
---
### Component 7: Operator Dashboard
#### [NEW] `blueprints/operator.py`
- Protected routes (operator role required)
- Dashboard, analytics, alerts, and simulator views
- API endpoints for crowd threshold management
#### [NEW] `static/js/dashboard.js`
- Real-time KPI cards (total attendance, avg wait, alerts)
- Zone-by-zone capacity meters
- Alert timeline with severity levels
- Staff deployment recommendations
#### [NEW] `templates/operator/dashboard.html`
- Grid layout with responsive breakpoints
- Live charts (crowd trends, queue throughput)
- Draggable alert cards
- Emergency broadcast panel
---
### Component 8: Notification & Alert System
#### [NEW] `services/notification_service.py`
- Multi-channel: in-app toasts, SSE push, email
- Priority levels: Info / Warning / Critical / Emergency
- Geo-targeted: alerts to specific venue zones
- Automatic triggers from crowd density thresholds
#### [NEW] `blueprints/sse.py`
- Server-Sent Events endpoint for real-time push
- Per-user event filtering (zone, role)
- Heartbeat keep-alive for connection stability
- Graceful reconnection handling
#### [NEW] `static/js/notifications.js`
- Toast notification stack (top-right)
- Sound alerts for critical notifications
- Notification center with history
- "Do Not Disturb" mode for operators
---
### Component 9: Simulation Engine
#### [NEW] `services/simulator.py`
- Generates realistic crowd movement patterns
- Simulates event lifecycle: pre-event β†’ kickoff β†’ halftime β†’ post-event
- Queue fluctuation with realistic distributions
- Configurable parameters: venue capacity, event type, weather
- Writes simulated data to Firestore in real-time
#### [NEW] `templates/operator/simulator.html`
- Simulation control panel (start/stop/speed)
- Event phase selector
- Parameter sliders (crowd size, arrival rate)
- Live preview of simulated data
---
### Component 10: Accessibility & Internationalization
#### [NEW] `static/css/accessibility.css`
- High-contrast mode styles
- Large text mode (150% scaling)
- Reduced motion preference support
- Focus indicator styles (3px solid, 3:1 contrast)
#### [NEW] `static/js/accessibility.js`
- Accessibility preferences panel
- Toggle: high contrast, large text, reduced motion
- Persisted via localStorage
- Screen reader announcement utility
#### [NEW] `services/translation_service.py`
- Google Cloud Translation API integration
- Auto-detect user language from browser
- On-demand translation of UI strings and notifications
- Cached translations for performance
---
## Google Services Integration Summary
| Google Service | Usage | Why |
|---|---|---|
| **Firebase Firestore** | Real-time database for crowd, queue, and event data | Sub-second sync, offline support, scales automatically |
| **Firebase Auth** | User authentication (email/social login) | Secure, supports role-based access, easy integration |
| **Google Maps JS API** | Venue map, heatmap overlay, wayfinding routes | Industry standard mapping, custom overlays, directions |
| **Gemini 2.5 Flash** | AI chatbot for attendee assistance | Context-aware responses, fast inference, multi-turn |
| **Cloud Translation** | Multi-language support | Real-time translation for international events |
---
## Security Implementation
1. **Authentication**: Firebase Auth with JWT token verification
2. **Authorization**: Role-based access control (attendee/operator/admin)
3. **CSRF**: Flask-WTF CSRF tokens on all forms
4. **CSP**: Content Security Policy headers
5. **Input Validation**: Server-side validation on all endpoints
6. **Rate Limiting**: API rate limiting to prevent abuse
7. **Secrets Management**: All keys in `.env`, never in source
8. **HTTPS**: Enforced in production via Dockerfile/Cloud Run
9. **XSS Protection**: Jinja2 auto-escaping enabled
10. **SQL Injection**: N/A (NoSQL Firestore) β€” Firestore Security Rules used
---
## Accessibility Compliance (WCAG 2.2 AA)
- **Contrast**: All text β‰₯ 4.5:1 ratio, UI components β‰₯ 3:1
- **Target Size**: All interactive elements β‰₯ 44Γ—44 CSS pixels
- **Keyboard Navigation**: Full keyboard support with visible focus indicators
- **Screen Readers**: ARIA landmarks, live regions, proper heading hierarchy
- **Reduced Motion**: `prefers-reduced-motion` media query support
- **High Contrast Mode**: Toggle-able high contrast theme
- **Skip Links**: "Skip to content" link on every page
- **Semantic HTML**: Proper use of `<nav>`, `<main>`, `<aside>`, `<section>`
- **Alt Text**: All images have descriptive alt text
- **Language**: `lang` attribute on `<html>`, translated content marked
---
## Testing Strategy
### Unit Tests (pytest)
```
tests/
β”œβ”€β”€ test_crowd_service.py # Density calculation, threshold logic
β”œβ”€β”€ test_queue_service.py # Wait time estimation, virtual queue
β”œβ”€β”€ test_auth.py # Login, registration, role checks
β”œβ”€β”€ test_api.py # API endpoint responses
└── test_simulator.py # Simulation output validation
```
### Integration Tests
- Firebase Firestore read/write operations
- Gemini API response processing
- SSE event delivery end-to-end
### Accessibility Tests
- Automated: axe-core audit via browser subagent
- Manual: keyboard navigation flow verification
- Contrast ratio verification on all pages
### Browser Testing
- Mobile viewport (375px) responsive validation
- Desktop viewport (1440px) dashboard verification
- Cross-browser visual spot checks
---
## Verification Plan
### Automated Tests
1. `pytest tests/ -v` β€” Run full test suite
2. `flask run` β€” Verify app starts without errors
3. Browser subagent: Navigate all pages, verify rendering
4. Accessibility audit via axe-core integration
### Manual Verification
1. Start simulation β†’ observe real-time heatmap updates
2. Join virtual queue β†’ verify position tracking
3. Ask chatbot questions β†’ verify Gemini responses
4. Toggle accessibility modes β†’ verify contrast/text changes
5. Switch languages β†’ verify translation
---
## Execution Phases
### Phase 1: Foundation (Core + Auth + Database)
- `app.py`, `config.py`, `requirements.txt`
- Firebase service, Auth blueprints
- Base templates with design system
- Docker setup
### Phase 2: Real-Time Core (Heatmap + Queues + SSE)
- Crowd service + heatmap visualization
- Queue management system
- SSE real-time push infrastructure
- Simulation engine
### Phase 3: Intelligence (AI + Navigation + Notifications)
- Gemini chatbot integration
- Google Maps wayfinding
- Notification/alert system
- Cloud Translation integration
### Phase 4: Operations (Dashboard + Analytics)
- Operator dashboard with live KPIs
- Historical analytics views
- Alert management interface
- Simulation control panel
### Phase 5: Polish (A11y + Testing + Security)
- Accessibility features & compliance
- Comprehensive test suite
- Security hardening
- Performance optimization
- Final UI polish
---
## Open Questions
> [!IMPORTANT]
> 1. **Do you have Google Cloud / Firebase API keys ready?** If not, I can set up the project with mock services that can be swapped for real ones later.
> [!IMPORTANT]
> 2. **Venue type preference?** Should the demo simulate a specific type of venue (cricket stadium, football stadium, Olympic arena)? This affects the venue map layout.
> [!NOTE]
> 3. **Should we include a mobile app wrapper** or keep this strictly as a responsive web app? (I recommend responsive web β€” works on all devices without installation.)