CiteBible is not a different product from ollwrite — it is the one slice of ollwrite that got shipped. Take ollwrite's memory-sidecar ("chat with your corpus"), point it at a single public corpus (the World English Bible), narrow it to one honest job, and deploy that. That's CiteBible. So the paradox on this page: the less-built thing is the live thing — because a narrow slice is shippable, and the broad product is still in the workshop.
Live & working for a stranger, right now: CiteBible's free cited-scripture retrieval at citebible.oll.am/carry — no account, real Bible citations, honest abstention when nothing fits.
One Sam-console step from charging: CiteBible Pro (the optional "write from this" reflection). Checkout is wired to Core's Pro plan; it needs the same live-Stripe webhook/plan-flip proof as the rest of the platform.
Built but not deployed: the full ollwrite writing product (editor + 9 write-ops + memory sidecar), ~70–75% — its only real gap to revenue being a 501 checkout stub. And CiteBible already proves that checkout pattern against Core, so the billing wiring is not unknown, just not turned on here yet.
"Scripture for the thing you are carrying." Type a real human situation, get grounded, verse-level, cited scripture (World English Bible) — free, no login, ~6s. A research assistant, not a ghostwriter — "the librarian, not the voice of God."
Branch: feat/citebible-one-box · has src/app/api/citebible/*. Landing + product are one page ("one box").
Money model: retrieve FREE forever; the optional reflection ("Write from this") is Pro, gated & fail-closed, wired to the platform oll.am Pro plan.
The general grounded-writing product: a manuscript editor with 9 inline write-ops, a per-paragraph "Edit this idea" redline loop, and a memory/RAG sidecar ("chat with your corpus" → cited draft). ~70–75% feature-complete, fully testable locally, Dockerfile + CI done.
Branch: feat/memory-sidecar / main · tree clean.
Gap to revenue: checkout is a 501 stub, pricing a placeholder CHF —. Deliberate gated step — needs Sam's go + live Stripe. Intended price: CHF 9 pay-once.
Every row below was curl-probed against the live deployment this session. It is the real product surface, not a mock.
| Flow | What happens | Verified |
|---|---|---|
| Free retrieval (the actual product) | POST /api/citebible/ask {"situation":"…"} → real WEB verses with book:chapter:verse citations + themes, ~6s. No account. A grief query returned John 16:20, 2 Cor 7:10, Lamentations 1:12, 2 Cor 1:4, Lam 3:32 — real cited passages. |
✓ live |
| Honest abstention | Step-back oll-model (Groq) rewrite with a three-way outcome (THEMES / ABSTAIN on gibberish / FAILED), then a 0.5 relevance floor on nomic-embedding retrieval over the WEB corpus (via oll-memory). Shows nothing rather than a filler verse when nothing clears the floor. "Grounded citations only, or none." | ✓ live |
| Auth (magic-link) | POST /api/auth/magic-link {email} → {"sent":true}. GET /api/auth/me with no token → 401. Routes proxy to core.oll.am. |
✓ live |
| Pro "Write from this" | POST /api/citebible/generate → 401 {"error":"Sign in to write from scripture.","signIn":true}. Composes a short reflection drawn only from the cited verses. Gated & wired. |
✓ gates correctly |
| Checkout | POST /api/citebible/checkout → 401 {"error":"Sign in first."}. Same-origin proxy to Core POST /api/billing/create-checkout-session; no STRIPE_PRICE_CITEBIBLE_MONTHLY set, so Core falls back to STRIPE_PRO_PRICE_ID, mode=subscription = the platform oll.am Pro plan. Core owns price + success/cancel URLs. |
✓ wired, gates |
| Routes | / → 308 → /carry · /carry 200 · /login 200 · /pricing 200 · /home 200 · /onboarding 200 · /upgrade 200 · /auth/verify 200 · /editor 307 (auth redirect). |
✓ live |
| Real paid upgrade (payment → plan-flip) | Needs a signed-in magic-link session + a real card. The checkout endpoint exists and gates correctly, but a completed payment→plan-flip was not tested this session. | not proven |
Stack: Next.js 16.2 (app router) + React 19 + Plate.js 52 editor + Tailwind v4 + TypeScript. Tests: Vitest (13 unit, pass) + Playwright (9 e2e specs, local-only, not in CI). CI (.github/workflows/ci.yml): lint + typecheck + unit + build. Dockerfile production-ready (Node 22-slim, standalone, non-root, :3000). Current branch feat/memory-sidecar, tree clean.
| Area | Done | What's there / what's missing |
|---|---|---|
| Editor & UX | ~95% | Plate.js editor, formatting, slash menu, floating toolbar, focus mode (dims non-active blocks), margin mode (notes + leader lines, "Ink it in" / "Keep mine"), manuscript aesthetic (cream page, Source Serif 4). Missing: dark-mode toggle, offline. |
| Write ops | 100% | 9 selection ops (Improve, Rewrite, Fix grammar, Change tone, Shorten, Expand, Bullets, Simplify, TL;DR) all wired to the real write-service (Groq, llama-3.3-70b), inline word-level diff. Plus flagship per-paragraph "Edit this idea" (hover ✨ → instruction → inline redline → accept/reject/retry). Verified against the real Groq-backed service. |
| Auth | ~85% | Magic-link → Core 72h HS256 JWT in an oll_token cookie; plan read live from /api/auth/me (identity-not-entitlement). Email inbox round-trip not tested locally. |
| Memory / RAG sidecar | ~70% | "Chat with your corpus": ingest (text/PDF) → oll-memory (nomic embeddings, per-user collection derived from JWT, IDOR-safe) → chat with a 0.5 relevance floor + citations. Inline citation trust-loop (Plate node + draggable cards + insertable [n] chips), draft-from-bullets, gap-chips (flags claims the corpus can't back), "write in my voice" (style profile from the user's own corpus). Gaps: generation calls oll-model directly (should route through write-service in prod); no streaming. |
| Billing | 0% | /api/checkout returns 501 "coming soon"; pricing is a placeholder CHF —. The deliberate gated step (needs Sam's go + live Stripe). Contrast: CiteBible — a slice of this same product — already has checkout wired to Core, so the pattern is proven, just not turned on here. |
| Deployment | ~80% | Dockerfile + CI done; not yet on Coolify. Env: CORE_API_BASE=https://core.oll.am, NEXT_PUBLIC_WRITE_API_BASE=https://write.oll.am, OLL_MEMORY_BASE, OLL_MODEL_BASE, AUTH_ENABLED. |
Neither product owns auth, Stripe, or email. Both are thin clients of the live oll.am services — the locked "Core + product services over HTTP" architecture, from the frontend's point of view.
Server-side proxies pin the corpus to the JWT identity; service tokens never reach the browser. The client calls its own /api/* routes; those routes attach the trusted service token and forward to write-service (write.oll.am, the 9 write-ops), Core (core.oll.am, auth/billing/email), oll-memory (vector / RAG), and oll-model (the LLM gateway). Per project memory: the ollwrite gate on Core is PRODUCT_VERIFY_BASE_OLLWRITE; CiteBible's is the analogous PRODUCT_VERIFY_BASE_CITEBIBLE.
| Service | Role | Used by |
|---|---|---|
core.oll.am | auth (magic-link) · billing (Stripe) · email | both |
write.oll.am | the 9 selection write-ops (Groq, llama-3.3-70b) | ollwrite |
| oll-memory | vector store / RAG (nomic embeddings, per-user collections, relevance floor) | both (ollwrite corpus · CiteBible WEB corpus) |
| oll-model | LLM gateway (step-back rewrite, generation) | both |
Free door is open. The paid door (Pro reflection) is built & fail-closed. The only thing between it and a charge is the platform's standing gate: prove the live-Stripe webhook / plan-flip (set STRIPE_WEBHOOK_SECRET + the PRODUCT_VERIFY_BASE_CITEBIBLE env on Core, then run one real card through). A Sam-console step, ~minutes — not a build.
Deploy + un-stub billing. Push to Coolify (Dockerfile + CI ready), then replace the 501 checkout stub with the Core checkout call CiteBible already demonstrates, and flip the placeholder CHF — to the intended CHF 9 pay-once. The billing pattern is not unknown — it is running next door.
501 stub — 0% by design, not an oversight.