Ingestion
Extended streaming history arrives as years of JSON exports. The importer normalises tracks, resolves duplicates, keeps unknown URIs, and preserves the original timestamps so history stays auditable.
Product
SpotRecap is one system with four parts: an ingestion layer that never loses a play, a storage model built for history, an intelligence layer that explains itself, and a client designed for a phone.
Figures as of 9 November 2026, measured against the reference history on the deployed service.
Extended streaming history arrives as years of JSON exports. The importer normalises tracks, resolves duplicates, keeps unknown URIs, and preserves the original timestamps so history stays auditable.
PostgreSQL with vector indexing. Plays, tracks, artists, audio features and learned context live together, which is what makes cross-decade questions cheap to answer.
An intent router sends each question to one of thirteen handlers — statistics, comparisons, recaps, recommendations — and the answer streams back as it is computed.
The client is being built in Phase D as a progressive web app: installable, offline-tolerant, and laid out for a 380 px viewport before it is laid out for a desktop.
Audio features, cultural context and lyric signals are attached to tracks in batches, versioned so a re-run never silently changes a score.
Health endpoints, deploy verification and a cost ladder with a measured query budget — so running the thing stays predictable month to month.
In practice
“Which artists did I discover in the year I moved, and who did I keep?”
No query language and no filter builder. The router picks the handler and returns a written answer with the supporting figures.
Answers reference the plays they were computed from, so a surprising number can be traced rather than trusted.
Durable notes about taste and prior questions are stored alongside the data, so the assistant does not start from zero each session.
Listening history is personal data. It is stored single-tenant, never sold, and exportable in full.
Interface preview
Illustrative mockups of the two core surfaces — a year recap and the assistant. They show the layout and density the phone client is being built to, not a shipped screen.
You added 214 new artists in 2019. 41 are still in rotation five years later.
Under the hood
A short, honest summary of the architecture — enough to show how the system is put together, without publishing the parts that make it ours.
| Concern | Approach | Why |
|---|---|---|
| Storage | Relational core with vector indexes | History is relational; taste is geometric. Both belong in one place. |
| Model access | One abstraction over six providers, with an ordered fallback chain | A single vendor outage should degrade the assistant, not stop it. |
| Delivery | Containerised service, EU region, private database network | Data residency and a small blast radius. |
| Quality | Contract tests per route, a smoke test on every deployment | “Deployed” means verified, not uploaded. |
| Cost | Query budget per phase, with a cheaper equivalent proven before it is needed | Keep the service affordable enough to leave running. |
Private beta access opens in small batches. Bring an export and we will tell you what is in it.