Skip to content

Product Domain & Content Model

Sources (fetched 2026-06-25): - "What we are building — end of week 4" Notion page (3894dccd9d8b8055a0a9ed38ed43eb88) - "Foundational Architecture" Figma board (3ivmGpow1xs7q9k81ea6OL, node 892-1798 / 578-1345)

One-sentence pitch

A reading app for C.S. Lewis's work where every piece is connected to every other piece by shared themes — so you can either follow a curated path (a Journey) or wander the connections yourself (Explore).

App structure (4 screens)

Screen Role
Splash Opening beat. Stands alone — onboarding-as-a-feeling was cut.
Home Likely editorially curated rather than algorithmic (IA stand-up 2026-06-30) — pending Lina's confirmation, not settled. Working assumption: hero slot is always a passage/quote; below it, horizontal carousels of featured themes and featured journeys, then a "What's new" module rather than an infinite content feed. Non-hero featured slots can be any content type (editor's choice).
Explore Open-world browse surface; traversing the graph. Search is a tool inside Explore, not its own screen.
Profile The Soul Map, plus the account gate.

Core mechanic

The library is a graph, not a list. Every text piece is a node; edges are computed at runtime from shared theme tags. Navigation is deterministic tag-overlap traversal — the "Wikipedia rabbit hole" feeling. No hand-built relations between pieces (except editor hero-pins).

AI drafts tags at ingest; editors QA before publish. Tagging is build-time, not runtime. Tag axes (load-bearing — see 00-constraints.md):

  • Themes — category-level moods. Finite controlled vocabulary. Working v1 set (clarified 2026-06-30): Imagination, Joy/Longing, Myth, Grief, Faith, Friendship, Wonder, Reason, Love — 9 themes "for now", may grow before launch. Each theme has bespoke portal imagery + colour scheme; theme pages are taxonomy-driven, not editorially curated per page. Architecture should let editors add themes via the CMS in v2 even if the v1 set is fixed. (Earlier "~19" from the IA stand-up was a rough guess; this 9-theme list supersedes it as the current working set, still pre-launch.)
  • Motifs — fine-grained tags that cut across works; powers the surprise jumps
  • Life stage — single tag per piece (youth → grief)
  • Register — bedtime | morning | anytime
  • Tone depth — meaning (default) | theological (opt-in)

How content connects — two mechanisms, kept visually distinct

  1. Tag-overlap (computed) — deterministic. Two pieces are related because their tag axes overlap. Powers Explore and the "related content" surface. Two flavors:
  2. Further in — same thematic thread, going deeper
  3. Connects across — same theme in a different work or format
  4. Editorial curation (hand-arranged) — a human editor picks specific pieces and orders them into a Journey's chapters.

The same piece can sit in both at once. The UI must never make them look like the same kind of "next."

Sequencing flag (IA stand-up 2026-06-30): the team called "related content" a gap and deprioritized it for now. This is in tension with the graph being the stated core mechanic — it most likely means the related-content surface/UI is deferred within v1, not that the tag-overlap engine is cut. Whether the graph engine itself stays in the v1 build is unresolved — see flags / 05-feature-backlog.md.

Content types — only three

The product model collapses passages/letters/essays into one text-piece type distinguished by tags. The CMS still has separate Passage and Article collections today (see docs/cms-architecture.md) — that is an implementation-level split worth revisiting if the unified-type vision holds.

Open decision (live): Lina's CMS Content Model pre-read keeps Passage / Letter / Essay / Podcast as separate collections (field-level reasons: plain vs rich text for audio sync, Letter recipient/date, Essay author/Substack). The data-model call (2026-06-29) leaned the other way — a Passage with a content-type field (letter / poem / nonfiction), i.e. a discriminator on one type. Unresolved; see the data-model plan draft (docs/design/data-model-plan.html) for the proposed synthesis (separate storage + a uniform Content Item traversal interface).

Unified-attributes signal (IA stand-up 2026-06-30): the team described every content piece as sharing the same spine — topic tags, theme tags, a "thought provoker" question, bookmarking, and reflections. That leans toward the unified text-piece view above (uniform interface across types), with passage/quote as the core product unit. Per-type specifics from the stand-up: Essays are ingested from Substack (featurable on Home or in Journeys); Letters are a subtype of Lewis's works whose in-app inclusion needs client confirmation (see flags); Books are source-reference only in v1 (no e-reader — cover, synopsis, publication date, future Amazon CTA); Podcasts are a later phase.

1. Text piece — one unified type - Two key tag axes: - Provenanceevergreen (Lewis's existing corpus: letters, passages; fixed, rights-cleared) vs editorial (produced into the CMS — Substack essays now, commissioned work later) - Format — passage / letter / essay / etc. - A "passage" is just a short evergreen Lewis text; nothing is structurally reserved to it. Reflections, graph links, voice clone, and deeper meaning all apply to any text piece.

2. Podcast — separate type - Audio forces a different shape: embed link + duration + transcript. Cross-cutting rather than theme-siloed. Embedded, not CMS-hosted.

3. Journey / Portal — editorial container (not user-generated content) - Same object, two faces: Portal is the doorway, Journey is the experience inside. Model as one thing. - Holds references to text pieces plus its own metadata: name, copy, colour, icon, portal shape (from a preset list), opening + reflection questions, featured flag. - Chapter slots point at pieces — they do not hold their own copy. - Journey detail page (IA stand-up 2026-06-30): title, overview, chapter list, and length. Chapters are ordered reading lists; any content type can appear in a chapter. - A user can have multiple journeys in progress simultaneously; progress is gated behind account creation (an account is what persists journey state).

Portal metaphor clarified (call 2026-06-29): the "portal" is the entry animation — splash animates through a door into a master homepage, which is the first touchpoint and is not theme-filtered (curated content + journeys + a top passage). Themes are mood/thematic filters; switching a Theme recolors the whole UI. Journeys are curated reading lists/courses that can span multiple Themes. (This nuances the older "Portal = Journey doorway" framing and the Lina-model "Theme = world"; reconcile in the data-model plan.)

Things that attach to a text piece (not content types of their own)

Attachment Notes
Thought provoker A short prompt/lens shown before reading (e.g. "What if loneliness was a dog?"). Per the IA stand-up (2026-06-30) this is a shared attribute of every content piece, distinct from the (deprioritized) Deeper meaning block. Scopes to the chapter when the piece sits in a Journey, otherwise to the standalone piece. (Terminology: the 2026-06-29 call called this the "AI interpretation / lens"; the stand-up names it "thought provoker." Confirm one term — see flags.)
Deeper meaning Longer AI-assisted interpretive annotation (CMS text block); needs editorial QA before going live. Likely deprioritized (IA stand-up 2026-06-30) — the client has no editorial team to QA it yet.
Reflection prompt A reflection question. Per the call (2026-06-29): for a standalone piece the reflection attaches to that piece; inside a Journey it attaches at chapter completion (not per piece). A Journey chapter can override the piece's default prompt.
Audio reading AI voice-clone narration of the text (ElevenLabs). Derivative of the piece. Visually distinct from the podcast player — it's "listen to this reading," not "play a podcast."
Community reflection User-generated, attaches to any piece. Moderated ("publish, not post" — never appears as raw user input). Surfaced as ambient presence ("14 have sat with this"), not as a comment thread.

API surfaces (MVP)

The app surfaces the backend must feed: heroed Journey + carousels (Home), graph traversal + search (Explore), source ladder (passage → chapter audio → book link), community reflections (ambient counts), saved items, and the Soul Map (Profile). Full screen flow lives in the Notion mobile spec / Figma.

Key terms (use consistently)

Term Meaning
Content piece A single unit of content. Exists once; referenced from many places. The same piece reached via two routes is still the same piece.
Text piece The unified content type — passage / letter / essay, distinguished by tags.
Passage Shorthand for a short evergreen Lewis text piece; the canonical traversal starting point.
Journey Editorially curated sequence of pieces, arranged into chapters.
Portal The same object as a Journey, viewed as a doorway. Don't model as two things.
Explore The open-world browse surface (graph traversal); search lives inside it.
Dive deeper Tag-graph traversal surface within Explore / a reading screen.
Front door Narnia — the deliberate entry wedge for newcomers.
Soul Map The user's personal record of what they've read and reflected on — the visual representation of bookmarks + reflections on Profile. Deferred out of Phase 1 (call 2026-06-29): the Soul Map visualization is not built in V1, but its inputs are — accounts/auth and reflection storage ship in V1 (so the data accrues for a Phase 2 Soul Map). The app is fully usable as a guest; you make an account to persist this data.
Source ladder Passage → chapter audio → bookstore purchase handoff. Narnia skips the chapter rung (HarperCollins rights). A passage's source is always shown (IA stand-up 2026-06-30): essay/letter sources link to the full text; book sources show cover + synopsis + publication date with a future Amazon CTA.
Thought provoker Pre-reading prompt/lens shared by every content piece. Earlier called the "AI interpretation / lens" (2026-06-29 call).