Personal data aggregation API. Syncs data from multiple services on a schedule, normalizes everything into a unified schema, and serves it through a REST API with a cross-domain activity feed.
| Domain | Sources | Description |
|---|---|---|
| Listening | Last.fm, Apple Music | Scrobble history, top artists/albums/tracks, streaks, stats |
| Running | Strava | Activities with splits, personal records, gear, yearly summaries |
| Watching | Plex, Letterboxd | Watch history, ratings, reviews, movies and TV shows via TMDB |
| Collecting | Discogs, Trakt | Vinyl/CD collection, physical media (Blu-ray/4K UHD/HD DVD) |
| Reading | Instapaper | Articles, reading progress, highlights, word count, article metadata |
| Service | URL |
|---|---|
| API | api.rewind.rest |
| API Docs | docs.rewind.rest |
| MCP Server | docs.rewind.rest/mcp-server |
| 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.