A real-time TV audience measurement platform for Tunisia, combining audio fingerprinting, context signals, and AI fusion to deliver live viewership analytics.
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 📱 Mobile App │────▶│ 🧠 Backend API │────▶│ 🖥️ Dashboard │
│ (Expo/RN) │ │ (Node+Socket.IO) │ │ (React+Vite) │
│ │ │ │ │ │
│ • Audio detect │POST │ • Fingerprint │ WS │ • Live viewers │
│ • Context │────▶│ • AI Fusion │────▶│ • Channel rank │
│ • Send signal │ │ • Aggregation │ │ • Timeline │
│ │ │ • Simulation │ │ • Map + Demo │
└─────────────────┘ └──────────────────┘ └─────────────────┘
cd backend
npm install
npm start # Runs on port 3001cd dashboard
npm install
npm run dev # Runs on port 5173cd Real-time-tv
npm install
npx expo start --web # Or use Expo Go for mobileThe system uses multimodal scoring — no single signal decides viewership:
| Signal | Weight | Source |
|---|---|---|
| 🎵 Audio Fingerprint | 45% | Microphone capture → hash matching |
| 📶 WiFi Context | 20% | Home WiFi = likely watching TV |
| 📱 Device State | 20% | Phone idle = eyes on TV |
| 🕐 Time of Day | 15% | Prime time (19-23h) = higher probability |
Active Viewer Threshold: ≥ 55% confidence
| Channel | Genre | Base Popularity |
|---|---|---|
| Wataniya 1 | General | 35% |
| Hannibal TV | Entertainment | 22% |
| Nessma TV | Variety | 18% |
| Wataniya 2 | Culture | 15% |
| Attessia TV | News | 10% |
- ✅ No raw audio stored
- ✅ No personal data collected
- ✅ Anonymous device IDs only
- ✅ Opt-in consent required
- ✅ Only aggregated analytics displayed
- TV Channels → Subscription for live analytics
- Advertisers → Real-time ad performance tracking
- Media Agencies → Audience insights & reports
- Users → Free (panel-based, opt-in)
- Mobile: Expo / React Native (TypeScript)
- Backend: Node.js, Express, Socket.IO
- Dashboard: React 18, Vite, Recharts
- Real-time: WebSocket via Socket.IO
- Data: In-memory (hackathon MVP)