oll.am · Product State · 2026-07-06 · verified this session

ollwrite & CiteBible

What's built, what's live. Two faces of one grounded-writing engine: CiteBible is the shipped vertical slice (live, free, working for a stranger right now); ollwrite is the fuller product it was carved from (more built, not yet deployed). A status read for Sam — so he doesn't have to open the code.

The one insight to hold

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.

Read this before the tables

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.

The two faces, side by side

CiteBible LIVE

the shipped slice · deployed
https://citebible.oll.am/carry

"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.

ollwrite BUILT · NOT DEPLOYED

the fuller product · in the repo
~/Projects/ollwrite · Next.js 16 · not live

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.

CiteBible — verified live end-to-end

Every row below was curl-probed against the live deployment this session. It is the real product surface, not a mock.

FlowWhat happensVerified
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/generate401 {"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/checkout401 {"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

ollwrite — completeness by area (honest)

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.

AreaDoneWhat'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.

How both sit on the platform

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.

The BFF trust boundary

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.

ServiceRoleUsed by
core.oll.amauth (magic-link) · billing (Stripe) · emailboth
write.oll.amthe 9 selection write-ops (Groq, llama-3.3-70b)ollwrite
oll-memoryvector store / RAG (nomic embeddings, per-user collections, relevance floor)both (ollwrite corpus · CiteBible WEB corpus)
oll-modelLLM gateway (step-back rewrite, generation)both

What it takes to charge — one gate each

CiteBible → first franc

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.

ollwrite → charge

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.

Verified vs not-verified — so nothing is overclaimed

✓ Verified this session

  • CiteBible free retrieval returns real cited WEB verses live (curl-probed, ~6s, grief example above).
  • CiteBible honest abstention path exists (step-back rewrite three-way + 0.5 floor; shows nothing rather than filler).
  • CiteBible auth, Pro-generate, and checkout endpoints all respond and gate correctly (401 without a session).
  • All CiteBible routes return the expected status codes (200 / 307 / 308).
  • ollwrite repo state: stack, 13 unit tests pass, 9 e2e specs (local), CI config, Dockerfile, branch clean — Explore-audited in the repo.
  • ollwrite 9 write-ops + per-paragraph edit verified against the real Groq-backed write-service.

✗ NOT verified / not claimed

  • No completed paid upgrade on CiteBible (payment → plan-flip). The endpoint gates; a real card was not run.
  • No stranger has paid either product. "Live" means reachable and working, not earning.
  • ollwrite is not deployed — its numbers are repo/local completeness, not a running site.
  • ollwrite email inbox round-trip and streaming generation are untested / absent.
  • ollwrite billing is a 501 stub — 0% by design, not an oversight.
oll.am · ollwrite & CiteBible state · verified 2026-07-06 · CiteBible design study · ollwrite status · The Platform · Live status