Rewind is a personal API that pulls together data from the services that track my life -- what I'm listening to, where I'm running, what I'm watching, what I'm collecting, and what I'm reading -- into a single queryable backend.
Rewind syncs data on a schedule, normalizes everything into a unified schema, and serves it through a REST API:
- Listening -- Last.fm scrobble history, top artists/albums/tracks, listening streaks, and stats. Apple Music catalog data for metadata enrichment.
- Running -- Strava activities since 2010 with splits, personal records, gear tracking, and year-over-year summaries.
- Watching -- Plex watch history, Letterboxd diary/ratings/reviews, and TMDB metadata. Covers both movies and TV shows.
- Collecting -- Discogs vinyl/CD collection with cross-referenced MusicBrainz data. Trakt physical media catalog.
- Reading -- Instapaper articles with reading progress, highlights, word count, and article metadata. OG image thumbnails via image pipeline.
A unified activity feed combines all domains into a single chronological stream.
| Service | URL |
|---|---|
| API | api.rewind.rest |
| API Docs | docs.rewind.rest |
| Image CDN | cdn.rewind.rest |
Hono on Cloudflare Workers. D1 (SQLite) for storage, R2 for images, Drizzle ORM for type-safe queries. End-to-end type inference via Hono RPC -- consuming apps get a fully typed client with zero codegen. Full OpenAPI 3.1 spec with interactive docs via Scalar.
npm run dev # Start local dev server
npm run deploy # Deploy to Cloudflare Workers
npm test # Vitest
npm run type-check # TypeScript strict mode
npm run lint # ESLint
npm run db:generate # Generate Drizzle migrations
npm run db:migrate # Apply migrations locallySee docs/ARCHITECTURE.md for system design, sync flow, caching strategy, and image pipeline details.