Inspiration

I've always tracked what I read in a spreadsheet, then Goodreads, and neither ever felt right for how I actually read. Fantasy and sci-fi have deep series, deep universes, and jumping between the books can be disorienting. I wanted something built specifically for genre readers, that felt as considered and a little magical as the books themselves instead of a database with a UI bolted on.

What it does

Saga Reads is a personal book companion and tracker for fantasy and sci-fi readers. It tracks your library with real series and universe structure (not just flat lists), imports your existing Goodreads history, and turns reading into something with a bit of momentum — reading challenges, an activity feed, and a discover experience tuned to all of the subgenres within fantasy, sci-fi, and horror. Sage, an AI reading assistant, helps you find what to read next and answers questions about your library and the books in it.

How we built it

Web is Next.js 16 (App Router) and React 19, mobile is Expo/React Native, both backed by Supabase. Sage runs on Claude. The whole visual language is generated from a single OKLCH color token set so the app stays consistent between its dark (default) and light themes across both platforms. Under the hood, the catalog itself — books, editions, series, authors — is built from ISFDB data, matched and de-duplicated so that "the same book" reliably resolves to one entry no matter which edition or import brought it in. New releases are captured directly from ISBNdb and a variety of sources are used to round out missing metadata.

Challenges we ran into

Getting a bibliographic catalog to behave: the same novel shows up under dozens of editions, ISBNs, and reprint titles, and matching those together correctly (without incorrectly merging different books) took real iteration. Enabling a Discovery experience that felt unique to each user's library took me down a road I haven't traveled before. I had to learn about embeddings and vector similarity, and how to turn a shelf of books into a taste profile that actually means something — then balance it against things like popularity and what you already own, so recommendations feel personal instead of either too obvious or too random. Bringing the same design system to both a web app and a native mobile app without it feeling like two different products was its own project. And wiring up subscriptions and entitlements so Pro features gate correctly everywhere, then getting through App Store review, took real care.

Accomplishments that we're proud of

Getting Pro monetization live and approved on the App Store. Building a catalog matching system solid enough to trust against a real, messy bibliographic dataset. And shipping a design system — colors, motion, haptics, the badge coins, the atmospheric touches — that actually feels cohesive across dark/light and web/mobile rather than assembled from defaults.

What we learned

Data quality work (deduplication, matching, catalog hygiene) is unglamorous but is what everything else stands on. That the small, quiet details — a haptic tick when you rate a book, motes of light drifting in the background, a number counting up instead of just appearing — do more for how an app feels than any single big feature.

What's next for Saga Reads

Public profiles so readers can share libraries and progress, deeper universe reading-order support, and continuing to round out Sage's ability to actually help you navigate a big personal library — not just chat about it. Sub-genre dedicated pages. Email engagement loop is currently WIP as well as more robust notifications (there are a couple today). As more users use Saga the discovery engine will also be tuned accordingly.

Built With

Share this project:

Updates

Submission history