oll.am · Final Night Handover · Mon 06 Jul 2026

CiteBible is Built — the Free Door is Open

The overnight build is finished — all nine board tasks done. Type a real human situation at citebible.oll.am/carry and get grounded, verse-level, cited scripture — free, no login. Overnight the retrieval got genuinely pastoral (grief, anxiety, and hopelessness now return the verses a person actually needs), a real SEO front door went up (26 programmatic "Scripture for …" pages + a hub), and the Pro path — generate a reflection from the verses — is built, fail-closed, and gate-wired. It does not charge yet: that needs one ~3-minute switch in your console. This is the honest handover — what is verified live, what is only built, and the exact steps to turn on money.

The headline — honest rungs

LIVE & verified: the free retrieval product (citebible.oll.am/carry) answers real situations with cited WEB scripture — and after tonight's retrieval-quality tuning (deployed 9ed1d40) the answers are genuinely pastoral: grief → 2 Corinthians 1:4 & the laments; anxiety → Proverbs 12:25 / Matthew 6; hopeless → Psalm 42 / Romans 15:13. The root URL now lands on CiteBible (//carry), and a real SEO front door is built (26 "Scripture for …" pages + a hub). Built, not charging: the Pro "generate a reflection" feature + its fail-closed paywall are wired to the existing platform Pro plan — but checkout won't complete until CiteBible is registered in Core. This is not "a money machine is live." It is "the free door is open and swept; the paid door is built and waiting for your key."

🔑 Morning ignition — the ~3-minute switch that turns on money

Everything below is a Sam-console action — no code, no deploy from me. Do step 1 to make the Pro upgrade actually charge; do step 2 because a credential was exposed overnight; step 3 is when-ready cleanup.

  1. 1

    Register CiteBible in Core — this unlocks the Pro checkout Sam · unlocks money

    Core (core.oll.am) keeps an allow-list of products that may run its magic-link + checkout flow. CiteBible isn't on it yet, so a Pro upgrade click has nowhere to land. Add one env var and redeploy Core:

    Coolify → oll-core app → Environment → PRODUCT_VERIFY_BASE_CITEBIBLE = https://citebible.oll.am → Redeploy

    No new Stripe price needed. The plan is the existing platform Pro — STRIPE_PRO_PRICE_ID = price_1TmvlJI5o19D7tAoP1cJgN51 (a monthly subscription, already set on Core). After this redeploy, the upgrade → Core checkout → oll_pro flow works for CiteBible.

  2. 2

    Rotate the TWO secrets exposed tonight Sam · security

    During tonight's debugging two credentials were pasted into chat. Treat both as burned. Neither is optional — the Neon password also guards oll_core, and the service token is the one required secret gating oll-memory.

    a) Neon neondb_owner password — rotate, then update the connection string on both apps that use it:

    Neon console → roles → neondb_owner → reset password → update DATABASE_URL on: · oll-core app (guards oll_core) · oll-memory app (guards oll_memory) → redeploy both

    b) OLL_MEMORY_SERVICE_TOKEN — the shared service token between the CiteBible frontend and oll-memory; regenerate and set the same new value on both:

    Generate a new random token → → set OLL_MEMORY_SERVICE_TOKEN (identical value) on: · oll-memory app (verifies it) · CiteBible frontend app (sends it) → redeploy both
  3. 3

    When ready — graduate the branches & open the front door Optional today

    CiteBible runs as preview deploys off feat branches (unmerged, per the frozen-main guardrail). Nothing here is required to charge — it's the follow-through:

    • Review + merge the frontend branch feat/citebible-one-box and the corpus branch feat/bible-verse-reingest to main when you've clicked through them — merging publishes the SEO front door (the 26 /for/{situation} pages + hub) to the public domain.
    • Review the Pro-generation change (the fail-closed paywall-on-CREATE feature) before it goes to prod.
    • Then distribution — fire the launch burst using the build-in-public share kit (drafted tonight, not yet posted), so the free door actually gets traffic.

What's verified live — and what's only built

Honest rung per line. "Verified live" = I typed it against the deployed URL tonight. "Built" = code exists and passes locally, but no live proof of the paid outcome yet.

ThingRungEvidence
Free retrievalcitebible.oll.am/carry, no login, real situation → cited verses Verified live "I feel alone and afraid" → 5 verses + themes fear, feeling abandoned by God, refuge, peace; "grief" → Psalms 42/43/6, James 4. Verse-level, WEB translation, real citations.
Verse-level Bible corpus on Neon oll_memory Verified live 32,284 nodes = 31,095 verses + 1,189 chapters, migrated via pg_dump (no re-embed). nomic-embed-text on self-hosted oll-ollama.
Retrieval quality tuning — the big one: pastoral, not keyword-matched Verified live · 9ed1d40 oll-memory now prefers verse-level hits, applies a vector floor to drop keyword-only noise, and enriches chapters with their best_verse. Result: anxiety → Proverbs 12:25 / Matthew 6; grief → 2 Corinthians 1:4 & the laments; hopeless → Psalm 42 / Romans 15:13. Deployed to the live oll-memory.
Still Room — seamless "Read in context" expand (no duplication) Verified live Refined design shipped + deployed; expand reads the surrounding passage in place. Now also pins the best verse and expands the chapter in the result display.
Root landingcitebible.oll.am/ now opens CiteBible Verified live //carry 308 redirect; the bare domain lands on the product instead of a stray index.
Input UX — bigger multi-line box + starter chips + cleaner refs Live (preview) P0 reference fix + prefix strip (no more malformed locators), a larger multi-line input, one-tap starter chips, and a tighter theme rewrite so the step-back query stays on the situation.
SEO front door — the honest, free, cited-scripture landing surface Built · publishes on merge Title / description / OG / JSON-LD / robots / sitemap on /carry, plus 26 programmatic "Scripture for {situation}" pages at /for/{slug} and a /for hub — each with grounded, cited verses + per-page JSON-LD; 28-URL sitemap. Goes to the public front door when the branch merges (step 3).
Pro generation — write a grounded reflection FROM the verses Built · fail-closed · gate wired Feature + paywall-on-CREATE built on the frontend branch, fail-closed (no entitlement ⇒ no generation); checkout needs Core ignition (step 1). Does not charge yet — do not claim revenue.
Pro entitlement — the platform oll_pro monthly plan Reused · not wired to CiteBible STRIPE_PRO_PRICE_ID already exists on Core; no new/one-time price. Becomes reachable from CiteBible only after step 1.

The money model — paywall on CREATE, not SEARCH

The whole design turns on one honest line: retrieval is free forever, generation is Pro. Searching scripture for your situation costs nothing and needs no login — that's the SEO front door and the honest gift. Asking the engine to write a grounded reflection from those verses is the paid act, gated behind the existing platform Pro. The paywall sits on the Create button, never on Search.

Front door · free
Retrieve
Type a situation → cited verses. No login, unlimited. RUNG: live
Paywall on Create
Upgrade
"Write a reflection from these verses" → Core magic-link + Pro checkout. RUNG: built · needs step 1
Pro · oll_pro
Generate
Grounded reflection FROM the retrieved verses. Monthly sub, existing price. RUNG: gated

Why this is the honest model

Nobody pays to be shown a Bible verse — that should be free, and free retrieval is exactly what ranks in search. People pay for the work: turning verses into a reflection they can use. Free retrieve builds the audience; Pro generate is where a stranger's franc arrives.

The night's arc — from three broken wires to live end-to-end

The honest story: CiteBible didn't come up on the first try. Three separate integration faults each looked like "the corpus is empty" but had distinct root causes. Naming them teaches the shape of a cross-service bug — the symptom is always downstream of the break.

SymptomRoot causeFix
CiteBible frontend → oll-memory returned 401 / rejected Service-token mismatch — the frontend and oll-memory were carrying different OLL_MEMORY_SERVICE_TOKEN values across the shared coolify network. Set one shared secret on both apps; token now baked as the only required secret (min-env defaults for the rest).
oll-memory booted but every query came back empty DATABASE_URL pointed at the wrong Neon database — not the one holding the verse corpus, so retrieval had nothing to rank. Repointed DATABASE_URL to oll_memory (the DB carrying the 32,284 verse/chapter nodes).
Retrieval ran but rankings were noise — irrelevant verses on top Embedder mismatch — the query was being embedded with a different model than the corpus was ingested with, so vectors lived in different spaces. Aligned both sides on nomic-embed-text via self-hosted oll-ollama; corpus migrated by pg_dump so vectors were preserved, no re-embed.

With all three wires corrected, the chain came up green end-to-end: CiteBible frontend → oll-memory (retrieval) → oll-ollama (nomic embeddings) + Neon oll_memory (verse corpus) → oll-model (step-back theme rewrite). The theme rewrite is what turns "grief" into the retrieval themes you saw — a step-back query expansion through the frozen Model gateway.

The big one — retrieval that's actually pastoral

Bringing the chain up only got a verse back. The harder, more valuable work was making the right verse come back — the one a person in that situation actually needs, not the one that shares a keyword. That's the retrieval-quality tuning deployed tonight (9ed1d40).

Three changes, all inside oll-memory, all live:

Before → after — the difference you can feel

Anxiety → Proverbs 12:25 & Matthew 6 (the "do not worry" passage), not a keyword hit.   Grief → 2 Corinthians 1:4 (the God of all comfort) & the laments.   Hopeless → Psalm 42 ("why are you cast down, O my soul") & Romans 15:13 (the God of hope). These are the verses a person in that moment is actually looking for.

The live topology

Next.js · citebible.oll.am
CiteBible frontend
branch feat/citebible-one-box · the one-box /carry UI + Still Room
oll-memory:5008 · memory.oll.am
oll-memory
consolidated document-intelligence service · branch feat/bible-verse-reingest
oll-ollama:11434
nomic-embed-text
self-hosted embeddings (retrieval), no per-call bill
Neon oll_memory
Verse corpus
32,284 nodes · pg_dump migrated · no re-embed
oll-model:5003
Step-back rewrite
theme query-expansion via the frozen Model gateway

All on the Hetzner VPS (Coolify), shared coolify Docker network. Min-env baked as defaults — the only secrets needed are OLL_MEMORY_SERVICE_TOKEN and DATABASE_URL. This mirrors the platform pattern: a thin product frontend over a reusable Core/Model/Memory backend, integrating over HTTP only.

What the night shipped — all nine board tasks done

The overnight board is fully cleared. Honest rung on each line.

TaskShippedRung
Integration / bring-upDiagnosed + fixed the three wires (token · DB URL · embedder); brought CiteBible up end-to-end and verified real answers against the live URL.Verified live
Retrieval quality tuning — the big oneoll-memory now prefers verse-level, applies a vector floor to drop keyword-only noise, and enriches chapters with their best_verse — so grief / anxiety / hopeless return genuinely pastoral scripture.Deployed 9ed1d40
Input & refsP0 reference fix + prefix strip (no malformed locators), bigger multi-line input, starter chips, tighter theme rewrite.Live (preview)
Result displayPin the best verse + expand the chapter in place; root //carry 308 redirect so the bare domain lands on CiteBible.Live
StylingRefined Still Room — seamless "Read in context" expand with no duplication; deployed.Live
Pro generationBuilt the "write a reflection from the verses" feature + wired a fail-closed paywall on CREATE to the existing platform Pro plan.Built · fail-closed · checkout needs Core ignition
SEO front doorTitle / description / OG / JSON-LD / robots / sitemap; 26 programmatic "Scripture for {situation}" pages at /for/{slug} + a /for hub, each with grounded cited verses + per-page JSON-LD; 28-URL sitemap.Built · publishes on merge
Diagram accuracyFixed the platform extension-layer diagram (sibling C4 language); drew the oll-core reuse so CiteBible reads correctly on the architecture page.Merged to main
Build-in-public share kitDrafted the launch/share kit for CiteBible — copy for the distribution push once the branches merge.Draft · not posted
This handoverThe honest final digest + the unchanged ignition checklist; state + timeline updated.This page

Read next

The one honest caveat

A stranger has not paid for CiteBible. The free product is live and answering; the paid path is built and gate-wired but will not charge until step 1. Don't let "CiteBible is live" round up to "CiteBible is earning." Step 1 is the line between the two.
oll.am · final night handover · Mon 06 Jul 2026 · CiteBible built (all 9 tasks) · free retrieval LIVE + pastoral (9ed1d40) · SEO engine + Pro-generation built, awaiting Core ignition
Free door open & swept · paid door built + fail-closed · nothing charged without your step-1 switch. No stranger has paid yet. Frontend branches deploy as previews, unmerged per the frozen-main guardrail.