Inspiration
A thread with 3,400 upvotes about a single dropped honorific. Another with 2,000 about why Anya says her own name. A 211-comment thread mourning the translator's notes that fansubs used to have and official releases don't.
We didn't guess what overseas manga readers want to know about Japanese culture. We collected 85 real questions from Reddit, WaniKani forums, TikTok and localization debates, and built the database they were asking for.
What it does
Manga Lore is an iOS reference app for the cultural context behind manga.
- Ask about any scene in your own words. Answers come from a hand-written annotation database: every answered note carries its sources, and the ones still being researched say so.
- Spoiler-safe by design: set how far you've read, and anything beyond stays hidden. Unknown boundaries default to hidden, not shown.
- Every card carries a truth label: established fact, creator-confirmed, disputed, fan theory, or "author's invention" for customs that feel ancient but aren't real.
- We publish our gaps: coverage percentages per series, and an Open Questions board where users vote on what we research next.
- 36 series catalogued, and every one of them clears ten notes. What is not answered yet is the long tail inside each series, and the Open Questions board shows it with a vote for what gets written next. Every series listed is one the author of these notes has actually read.
How we built it
One person + AI pipelines, in public:
- Demand research: 4 parallel research passes over Reddit / video comments / learner forums / localization debates → 85 observed questions with scores.
- Drafting: annotations drafted from publisher material — chapter titles, volume synopses, official glossaries — then checked against primary sources (Cabinet Notifications, government statistics, academic papers, publisher interviews). 538 notes plus 62 cross-series basics, nearly all of them carrying 2+ independent sources.
- App: SwiftUI + a pure-Swift domain core with 273 unit tests. The spoiler gate, sensitivity gate and free-tier logic are all tested in isolation.
- Backend: Supabase (Postgres + RLS + Edge Functions) and RevenueCat for subscriptions and a one-off tip. When the database has no match, the app says so instead of generating an answer. Nothing here is written by a model: the notes are ours, and so are the gaps.
Challenges we ran into
The hard part wasn't code: it was honesty at scale.
- Our own drafts contained plausible-but-wrong "facts". A famous example: "wisteria wards off demons" reads like ancient folklore, but we couldn't find it in any source. It's the author's invention. We built the truth labels because we kept catching ourselves.
- QA found a Japanese-culture statistic we had mis-attributed (a uniform survey that applied to boys only). Verification isn't a feature you ship; it's a pipeline you keep running.
- Spoiler boundaries are genuinely hard. We made "unknown" default to hidden rather than shown, and worked through the notes until every one of them states where its boundary sits. Safety over volume.
- Counting is not measuring. We set a rule of "two independent sources per note" and built a checker for it — then found the checker counted only URLs, so notes citing a book or a government statistic without a link looked unsourced. The notes with the best sources scored worst. We replaced the count with a ranking of who is answerable for the source.
How we monetise it
A reference guide is not naturally a subscription. You read it once and you are done. We designed around that honestly rather than pretending otherwise.
- Free: the whole catalogue, three headline notes per series, the fifteen most common cross-series basics, five questions and three series requests a month.
- Subscription ($4.99/mo, $29.99/yr): ten questions and five series requests a month, plus every note, every basic and every deep dive. New subscribers get the first week free on the monthly plan. We deliberately did not say "unlimited" — questions call a model, so a real cap is the honest thing to ship and to write on the paywall.
- Tip ($2.99, one-off): at the bottom of a series page, for readers who finished what they came for and are not going to subscribe. It promises nothing in return, and the wording is checked by a test so it never drifts into the language of a donation, which Apple's guidelines treat very differently from a tip.
Accomplishments that we're proud of
- 538 notes across 36 series plus 62 cross-series basics. Every one of the 36 series has ten notes or more. Growing weekly, and votes decide what gets written next
- Readable in five languages (English, Japanese, French, Spanish, Portuguese) — 605 translated entries, none machine-dumped and unchecked
- A spoiler gate with 12 dedicated tests, because one leak would destroy the product's reason to exist. 273 unit tests and 6 UI tests in total — the UI ones exist because we once shipped a build where every unit test passed and a whole screen was untappable on device
- What we have not answered is visible inside the app, not hidden. The open-questions board is a product feature, not a marketing page
What we learned
What Japanese people find interesting about Japan and what overseas readers actually ask are different things. We assumed "the history of hanafuda cards" would be the star; the real demand was "what did the English version change here?" Listening to observed demand, not our own taste, reshaped the entire product.
The second lesson was about measurement. We set a rule — two independent sources per note — and built a checker to enforce it. The checker counted URLs, so notes citing a book or a government statistic without a link looked unsourced: the best-sourced notes scored worst. Counting is not measuring. We replaced the count with a ranking of who is answerable for the source, and 138 notes below the bar became 11.
What's next
- Depth over breadth. All 36 series now clear ten notes; the next work is the long tail of questions nobody has answered yet, chosen by subscriber votes
- Embedding search over the annotation DB (pgvector is already in the schema)
- Per-language question analytics: French, Spanish and Brazilian readers stumble on different things. That data doesn't exist anywhere yet
Built With
- claude
- cloudflare
- deno
- postgresql
- revenuecat
- supabase
- swift
- swiftui
Log in or sign up for Devpost to join the conversation.