Problem (scaling cliff): the AggregationPipeline exists but is never used; handlers re-scan raw DynamoDB events on every dashboard query (audit: src/Analytics.ts ~2761, src/handlers/stats.ts/errors.ts).
Scope: write hourly/daily rollups at ingest or on a schedule; dashboards read rollups, falling back to raw only for the live window.
Done when: common reports are O(buckets), not O(events); load test shows flat latency as event volume grows.