Sourcebook
Sourcebook is a Progressive Web App for capturing, tagging, and searching back through books, podcasts, and articles I have learned something from. It started as a way to stop losing good ideas to scattered apps and paper notebooks, and grew into a proper single-user product used daily by a handful of invited friends. The core of the app is a unified feed that merges notes and resources into one cursor-paginated, infinite-scrolling stream, with independent visibility toggles for each type. Retrieval was the feature I cared most about getting right: search runs through a Postgres RPC (search_entries) that ranks matches across notes and resources together, alongside tag-based filtering with autocomplete drawn from a dedicated tags table, so a saved idea is genuinely easy to find again months later. As a PWA, Sourcebook is installable to a phone home screen, works offline via a Serwist-managed service worker, and integrates with the OS share sheet so a page can be saved as a resource directly from another app without opening Sourcebook first. Authentication supports email/password and Google OAuth, with account security handled deliberately: server-side session management, a change-password flow that revokes other sessions, and a documented set of security trade-offs (docs/security-decisions.md) for what was and was not worth building yet for a small invite-only user base. Because the app now has real users relying on it, I added a role-guarded admin dashboard that only I can see, tracking notes/resources/tag growth and usage against Supabase's free-tier database cap so a quota surprise doesn't take the app down. I also leaned on an extensive automated test suite (Vitest, React Testing Library, MSW) to keep shipping features confidently as a single maintainer, and used Claude Code throughout to pair on everything from the retrieval redesign to fixing subtle pagination and cache-consistency bugs in the feed.
Objectives
- 00Build a Progressive Web App with Next.js, installable to a home screen and working offline via a Serwist service worker
- 01Design a Supabase Postgres schema with row-level security so each user's notes and resources stay scoped to them
- 02Build a unified, cursor-paginated feed combining notes and resources with infinite scroll
- 03Implement ranked full-text and tag-based search across notes and resources via a Postgres RPC
- 04Add tag-based organisation with autocomplete and inline editing shared across notes and resources
- 05Support capturing a resource directly from the OS share sheet using the PWA share target
- 06Implement email/password and Google OAuth authentication with server-side session management
- 07Add account security features, including a change-password flow that revokes other active sessions
- 08Add JSON/CSV data export so users fully own a copy of what they have captured
- 09Build a role-guarded admin dashboard tracking usage against Supabase's free-tier limits
- 10Write an extensive automated test suite using Vitest, React Testing Library, and MSW
- 11Explore day-to-day feature development and debugging using Claude Code
Images








