Find the book that was written for you.
A community-built, ethically sourced book metadata platform that helps readers find books by what is actually inside them — and helps authors reach the readers who will love them most. Built by readers and authors, not algorithms.
A Recipe for a Good Read.
Current book discovery tools rely on algorithms, popularity rankings, and keyword search. These systems fail two groups:
- Readers who know what kind of reading experience they want but cannot express it in keywords that match any existing search system
- Indie authors who write excellent books for specific audiences but cannot reach those audiences because discovery systems favor commercially dominant titles
TNI indexes books by their actual internal content — emotional experience, representation, content warnings, tropes, pacing, magic system rules, romance centrality, and more. Search supports both positive assertions (books with a thing) and negative assertions (books without a thing). No algorithm. No popularity ranking. No ads.
Phase 1 — Active Development (March 2026)
- 36-table PostgreSQL schema deployed (Supabase)
- Full taxonomy system: genres, subgenres, tropes, vibes, aesthetics, themes, content warnings, heat level
- 9,600+ works indexed with genre tags and standalone status
- J.M. Samland complete catalog — prototype author dataset
- Fantasy Edition Recipe Card designed
- GitHub Sponsors and Ko-fi active
- Reader-facing search interface (Phase 2)
- Author submission portal (Phase 2)
- RMFA report generation (Phase 2)
- OWWL library pilot (Phase 2 — requires 500+ fully tagged books)
Reader Market Fit Analysis (RMFA) — a paid report for authors identifying which reader communities in the TNI database would be most likely to love their book, and why. RMFA revenue funds platform operations and sustains the open-source mission.
TNI is built on PostgreSQL (hosted on Supabase). The schema consists of 36 tables organized into:
| Group | Purpose |
|---|---|
| Core entities | Works, editions, authors, series, worlds, publishers |
| Taxonomy | 10 taxonomy categories, 1,277+ terms, work-term links |
| Junction tables | Work-author links, series positions, reading order schemes |
| Provenance | Source tracking for every canonical record |
| Workflow | Submission staging and DBM approval pipeline |
| Users / Roles | Authentication and role-based access |
assertion_typeontni_work_terms— enables positive and negative search (present/absent/unknown)is_experience_secret— spoiler-sensitive tags hidden until reader togglestni_work_anthology_details— component-level metadata for short story collections and anthologiestni_author_pen_names— links multiple author identities to one person- Multiple reading order schemes per series — supports Cosmere-style nested universe structures
narrative-index/
├── README.md
├── LICENSE
├── funding.yml
├── schema/
│ ├── 01_migration_week1.sql # Core tables: users, roles, publishers, authors, works
│ ├── 02_migration_week2.sql # Remaining 30 tables
│ ├── 03_seed_roles.sql # 6 user roles
│ ├── 04_seed_social_platforms.sql # 8 social platforms
│ └── 05_seed_taxonomy.sql # 10 taxonomy categories + 1,277 terms
├── docs/
│ ├── TNI_SRS_v1_0.docx # Software Requirements Specification
│ ├── TNI_UX_UseCases_v1_0.docx # User Experience and Use Case Document
│ ├── TNI_System_Design_v1_0.docx # System Design Document
│ └── ERD_Schema_Reference_v3_0.docx
└── .github/
└── funding.yml
If you need to recreate the TNI database from scratch, run the migration files in order against a fresh PostgreSQL or Supabase instance:
-- 1. Run schema migrations in order
\i schema/01_migration_week1.sql
\i schema/02_migration_week2.sql
-- 2. Seed reference data
\i schema/03_seed_roles.sql
\i schema/04_seed_social_platforms.sql
\i schema/05_seed_taxonomy.sqlAll migrations use IF NOT EXISTS and ON CONFLICT DO NOTHING — they are safe to run multiple times.
TNI is community-built. There are three ways to contribute:
Fill out a Fantasy Edition Recipe Card after finishing a book and submit the data. Recipe cards feed directly into the TNI database as community-contributed metadata.
If a book is already in the database but missing taxonomy tags, contribute tags through the submission portal (Phase 2). All submissions are reviewed by a Database Manager (DBM) before promotion to canonical records.
If you encounter a concept that has no existing term in the taxonomy, suggest a candidate term with a definition and example usage. The community reviews and approves new terms through a governed process.
What we do not accept:
- Popularity-based ranking signals
- Retailer affiliate data
- AI-generated content warnings or representation tags (these require human reader knowledge)
- Any contribution that identifies individual readers
TNI uses a structured submission and approval workflow. No community-submitted record goes directly to the canonical database — every submission is reviewed by a Database Manager (DBM) before promotion.
User roles: VISITOR → CONTRIBUTOR → AUTHOR → REVIEWER → DBM → ADMIN
Provenance rule: Every canonical record must link to at least one provenance record. No record is approved without a traceable source.
Lock status values:
seed— migrated from legacy data, not yet reviewedai_generated— inferred by AI from description, requires spot-checksubmitted— community submission awaiting DBM reviewreviewed— DBM-approved canonical record
GNU General Public License v3.0 — see LICENSE for full terms.
This license means TNI's code cannot be forked into a proprietary product and locked behind a paywall. The community built it. The community keeps it.
TNI is community-funded. No ads. No investor money. No publisher partnerships that would compromise editorial independence.
- Ko-fi: ko-fi.com/thenarrativeindex
- GitHub Sponsors: @TanyaMarie-T
If TNI has helped you find a book or helped your readers find you, consider supporting the project.
- Website: thenarrativeindex.com
- Community: Skool (https://www.skool.com/the-narrative-index-5608/about)
- YouTube: Grandma T Does Tech (https://www.youtube.com/@GrandmaTtriesTechSendHelp)
- Founder: Tanya — 51-year-old SAS programmer, Software Engineering student, reader, builder
The Narrative Index is built in 20-minute sprints. Sustainable beats brilliant.