Daily-active students, streak distribution, and a topic × board heatmap of revealed schemes. Query filter: shared Firestore rows tagged board = 'alevel', so IB engagement never leaks in.
Rows are A-Level topic slugs, columns are difficulty bands. Cells shade by reveal-count. Real data replaces the placeholder shading once the Firestore pipeline lights up.
| Topic | Easy | Medium | Hard |
|---|---|---|---|
| coordinate-geometry-p1 | high | med | low |
| circles-p2 | med | med | low |
| data-s1 | high | high | med |
| forces-newtons-laws-m1 | med | low | low |
| algebra-p1 | high | high | med |
Reads reveal_events where board == 'alevel'. Aggregated in alevel_daily_metrics/{YYYY-MM-DD} by a scheduled Cloud Function — mirrors the existing IB daily_metrics collection so the same charting utility renders both.