M05: Search & Staging
Phase: P1: Core Reader Target: Weeks 16–20 Sprints: S7 (tail), S8, S9 (start) Release Tags:
web/v0.5.0-alpha
Phase Context
Goal: A web app where users can read all LDS scriptures, navigate by book/chapter, search, and annotate (highlights, notes, bookmarks). The free tier of MVP.md § Free Tier.
Key constraint: This must be "genuinely better than Gospel Library" — the free tier IS the acquisition funnel.
This is the last P1 milestone. Staging goes live here — founding users arrive at ~Week 22.
ZenHub Configuration
| Field | Value |
|---|---|
| Milestone | M05: Search & Staging |
| Due Date | 2026-07-26 |
| Default Pipeline | Product Backlog |
| Primary Epic(s) | Full-Text Search, Footnotes & Cross-References |
Prerequisites
| Prerequisite | Source Milestone | What Must Be Complete |
|---|---|---|
| Ingest pipeline (Typesense sync extends it) | M01: Data Pipeline | Full ingest pipeline operational — Typesense sync is an addition to the existing pipeline |
| Reader (search UI lives in web app) | M03: Scripture Reader | Scripture reader with chapter navigation — search bar and results integrate into the reader shell |
| M00 Typesense collection schemas | M00: Tech Prep | passages, topics, lexicon collection schemas defined |
Epics
Epic: Full-Text Search
| Story Area | Scope | Spec Reference |
|---|---|---|
| Typesense sync | Ingest pipeline addition: index passages into Typesense | TECH-SPEC.md § Typesense |
| Search API | GET /search route in content service — query, filters, pagination | TECH-SPEC.md § API Endpoints |
| Reference lookup | Parse John 3:16, 1 Ne. 3:7, etc. → direct passage fetch | MVP.md § Feature #5 |
| Search UI | Search bar, results list, facets (book, testament) | DESIGN-SYSTEM.md § P4 Components |
Issues
| Issue | Title | Status | Notes |
|---|---|---|---|
| M05-001 | Typesense Sync — Ingest Pipeline Extension to Index Passages | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-002 | Search API — GET /api/v1/search Route in Content Service | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-003 | Scripture Reference Parser and Direct Lookup | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-004 | Search UI — Search Bar, Results List, and Faceted Filters | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-005 | Footnote Data API — CommentaryNote Retrieval in Content Service | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-006 | Footnote Display Modes — Superscript, Margin Flag, Inline Tooltip | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-007 | Footnote Type Color Coding and Visual Differentiation | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-008 | Footnote Card Component — Tap-to-Expand Detail Card | ✅ Done | implemented in PR #901 (2026-04-03) |
| M05-009 | Staging Environment — Terraform EKS, RDS, ElastiCache Infrastructure | ✅ Done | implemented in PR #969 (2026-04-13) |
| M05-010 | Staging CD Pipeline — GitHub Actions → ECR → Kustomize → ArgoCD | ✅ Done | implemented in PR #969 (2026-04-13) |
| M05-011 | Sentry Error Tracking Integration Across All Services | ✅ Done | implemented (2026-04-13) |
| M05-012 | AWS Secrets Manager — Staging Secrets Configuration | ✅ Done | implemented in PR #969 (2026-04-13) |
| M05-013 | Staging Data Seeding — Ingest Pipeline Deployment and Execution | ✅ Done | implemented (2026-04-13) |
Progress: 13 Done · 0 Partial · 0 To Do (100%)
Issue Dependency Graph
Search Epic:
M05-001 ──► M05-002 ──► M05-004
M05-003 ──────────────► M05-004
Footnotes Epic:
M05-005 ──► M05-006 ──► M05-008
├──► M05-007 ──► M05-008
└──────────────► M05-008
Staging Epic:
M05-009 ──► M05-012 ──► M05-010 ──► M05-013
└──────────────► M05-013 ◄── M05-001
M05-011 (no internal M05 blocks)
Legend:
A ──► Bmeans A blocks B (B is blocked by A)
Document References
| Doc | Contains | Use When Writing Stories For |
|---|---|---|
| MVP.md | Feature scope, tier breakdown, success criteria, budget | Acceptance criteria, scope boundaries |
| TECH-SPEC.md | Architecture, service boundaries, data stores, API catalog | Technical implementation details |
| GOSPELIB-SCHEMAS.md | All 7 schema families, node/edge types, validation rules | Data models, Pydantic models, graph schema |
GOSPELIB-INGEST-SPEC.md | 7-stage pipeline, Cypher templates, batch strategy, CLI | Ingest pipeline stories |
| DESIGN-SYSTEM.md | Visual identity, component catalog, reader modes, tokens | UI component stories |
| DESIGN-SYSTEM.md §§ 13, 21–23 | Footnotes (§13), subscription boundaries (§21), sharing (§22), onboarding (§23) | UX flow stories |
| Deployment & Operations | Environments, K8s, CI/CD, migrations, secrets, DR | Infrastructure and deployment stories |
| REPO-MAP.md | Directory structure, naming conventions, dependency rules | All stories (coding standards) |
| Business | LEGAL.md, POLICY-TERMS.md, executive summary, market research, GTM | Launch readiness, legal/compliance stories |
Sprint Mapping
| Sprint | Weeks | Primary Focus for M05 |
|---|---|---|
| S8 | 17–18 | Search (Typesense sync + API + UI), staging deploy + Sentry |
| S9 | 19–20 | Footnotes, search polish, staging stabilization |
S7 (Weeks 15–16) is primarily M04 auth/annotations work but overlaps M05 start. S9 straddles M05 tail and M06 start.
Sprint Load Warnings
- S8 (Weeks 17–18) combines search implementation AND staging deployment + Sentry in the same sprint. Staging infrastructure setup may compete with search feature work.
Release Info
| Release | Tag | Contains |
|---|---|---|
v0.5.0-alpha | web/v0.5.0-alpha | Search + offline; staging environment goes live |
Tags follow <component>/v<semver> per release-please-config.json.
Relevant Risks
| Risk | Impact | Mitigation |
|---|---|---|
| Ingest pipeline data quality issues | Blocks Typesense sync + footnote data | Corpus validation epic in P0; dry-run + schema enforcement |
| Solo founder velocity | 38-week plan too aggressive | Founding users at Week 22 provide feedback before full scope; cut P3 scope if needed |
Cross-Cutting Concerns
Testing
| Layer | Framework | When | Spec Reference |
|---|---|---|---|
| Python unit/integration (content service search) | pytest + testcontainers | Every PR | TECH-SPEC.md § Testing |
| TypeScript unit (search UI) | Vitest | Every PR | TECH-SPEC.md § Testing |
| Component visual | Storybook or playground | P1+ | DESIGN-SYSTEM.md § Governance |
| Visual regression | Playwright + pixelmatch | P1+ (any packages/ui/ or apps/*/src/ change) | DESIGN-SYSTEM.md § Visual Regression CI |
Documentation
| Doc | Update Trigger |
|---|---|
| API OpenAPI specs | Content service search endpoints |
| ADRs | Each major technical decision |
CI/CD
| Addition | Phase | Detail |
|---|---|---|
| Staging CD pipeline | P1 | Merge to main → ECR → Kustomize → deploy (activated in M05) |
| Sentry error tracking | P1 | Web + Python + Go SDK integration (activated in M05) |
| Visual regression screenshots | P1 | Playwright renders component playground; pixelmatch diff blocks PRs exceeding 0.5% threshold |
Dependencies
Upstream (what M05 needs)
| Dependency | Source | Status |
|---|---|---|
| Full ingest pipeline | M01: Data Pipeline | Must be complete (Typesense sync extends existing pipeline) |
| Scripture reader shell | M03: Scripture Reader | Must be complete (search UI integrates into reader) |
| Typesense collection schemas | M00: Tech Prep | Must be complete |
| Content API | M02: Content API | Must be complete (search route extends content service) |
| Gateway with proxy routing | M02: Content API | Must be complete (search routes proxied through gateway) |
Downstream (what depends on M05)
| Dependent | Milestone | What It Needs From M05 |
|---|---|---|
| All P2 features (M06–M09) | P2 milestones | Staging environment for founding-user testing |
| Interlinear & Lexicon | M06 | Search infrastructure (Typesense) available for lexicon search |
| Production deployment | M11: Launch Readiness | Staging CD pipeline pattern reused for production |
Summary
| Metric | Count |
|---|---|
| Total Issues | 13 |
| Sub-Issues | 0 |
| Total Estimate (pts) | 60 |
| Sprints | S8–S9 |
| Dependencies (blocking) | 15 |
| Dependencies (blocked by) | 26 |