sage-pewbeam is a mobile live-service console for scripture projection, delivered as the Pewbeam AI application. It is built for a single operator working a live service from a dim sanctuary booth: the app listens to spoken ministry, resolves the spoken or typed reference against a bundled local scripture index, and dispatches the matched verse to the projection screen so the congregation sees the correct scripture at the right moment.
The product intent is a calibrated instrument, not a consumer app. The console presents three live readouts — the projection plate, the live transcript stream, and the production queue — plus a single dispatch control that turns a query into a projected verse. Everything the operator needs to confirm "the right verse is on screen" is glanceable from three feet away in low light.
The audience is the Operator: the AV/media volunteer or tech director running the console mid-service. There is no congregation-facing account, no multi-user collaboration, and no external scripture service in the current scope.
Pewbeam AI is a mobile application built with Kivy. It runs as a local app on the operator's device; the operator launches it to reach the live console. All scripture resolution happens against a local mock scripture index database bundled in the app — no external scripture service is contacted.
Current accepted behavior:
Psalm 32:1 (NKJV)) and the scripture text being projected.Active, Ready). It is read-only.Narrow exclusions and boundaries:
Delivery ownership. Pewbeam AI is a first-party mobile application owned and rendered by the application itself. The operator launches the app locally on their device; there is no provider-hosted surface, no external destination, and no headless delivery in the current scope. The bundled local scripture index is application-owned data shipped with the app.
Access ownership. All current destinations are reachable without establishing identity. The operator opens the app and works directly in the console. No destination is protected, and no first-use identity establishment or returning verification is required by any accepted journey. This is a deliberate boundary, not an omission: the accepted behavior is a single-operator local console with no durable actor-specific state that must be privately owned or resumed across sessions.
Current vs. future boundary. Everything described in this document is current. No future-horizon requirements were accepted in the authoritative thread; nothing in this document should be read as a roadmap commitment.
The bundled local scripture index is authoritative content supplied by the user. It contains exactly four entries:
| Reference | Verse text |
|---|---|
psalm 32:1 | Blessed is he whose transgression is forgiven, Whose sin is covered. |
psalm 32:2 | Blessed is the man to whom the Lord does not impute iniquity. |
joshua 1:8 | This Book of the Law shall not depart from your mouth, but you shall meditate in it day and night. |
romans 8:28 | And we know that all things work together for good to those who love God. |
The console's initial display state uses Psalm 32:1 (NKJV) as the slide title with the psalm 32:1 verse text, and the production queue's initial state reads ■ Psalm 32:1 -> Active and ■ Joshua 1:8 -> Ready. The transcript stream's initial state reads [AI Listening...] followed by Pastor: "Open to Psalm 32:1...".
ψ PEWBEAM AI sits over the texture, with the ψ glyph in signal orange. A single macro shot of a sanctuary projection screen (dim room, warm screen glow) may be used as a 30%-opacity underlay — never as a cheerful hero photo.Active, Ready), match event, mismatch warning.ψ PEWBEAM AI wordmark (ψ glyph in signal orange) and the 44px circular LIVE dial with a sweeping amber arc. Projection plate: sapphire dial face carrying the slide title and verse text, with a 1px signal-orange hairline across its top edge. Live Transcript panel: read-only telemetry feed of AI-listening content and appended matched addresses. Production Queue panel: ruled instrument readout of queued/active items, match events, and mismatch warnings. Dispatch bar: search field plus the full-width signal-orange DISPATCH TO SCREEN control.Psalm 32:1 (NKJV) and its verse text), the initial transcript state ([AI Listening...] / Pastor: "Open to Psalm 32:1..."), and the initial queue state (■ Psalm 32:1 -> Active, ■ Joshua 1:8 -> Ready). Empty: an empty query is ignored — no dispatch occurs and no state changes. Success: projection plate updates with the matched reference and verse text, queue logs the match as Live, transcript appends the matched address, search bar clears. Error: no match — queue logs a clear mismatch warning for the query, search bar clears, projection plate retains its previous content. Recovery: the operator re-enters a corrected address or phrase and dispatches again.#151515 surface with a 1px titanium border, placeholder text Enter verse address or phrase....#0A192F deep-blue field in the app — a sapphire dial face — with a faint topographic contour texture at 2% opacity behind the verse. The reference is set in instrument cyan at small scale, uppercase, tracked; the verse is the largest, calmest object on the screen in high-contrast off-white.(AI Exact) for an exact address match, (Context Match) for a context/semantic fall-through match. Verse body: displays the matched verse text. Top hairline: 1px signal-orange edge that performs a 200ms left-to-right wipe when a dispatch resolves.Psalm 32:1 (NKJV) with the psalm 32:1 verse text. Empty: not applicable — the plate always carries a reference and verse. Success: plate updates with the matched reference and verse text on a resolved dispatch. Error: on no match the plate retains its previous content; the mismatch is reported in the Production Queue. Recovery: the operator dispatches a corrected query and the plate updates.#151515 telemetry surface with off-white text at small scale. It is a read-only telemetry feed and must not perform animation.[AI Listening...] and Pastor: "Open to Psalm 32:1...") and appends a matched-address annotation (for example [Matched Address: PSALM 32:1]) when a dispatch resolves.[AI Listening...] followed by Pastor: "Open to Psalm 32:1...". Empty: not applicable — the feed always carries the AI-listening marker. Success: a matched-address annotation is appended to the feed. Error: no match appends nothing to the transcript; the mismatch is reported in the Production Queue. Recovery: not applicable — the feed is append-only and read-only.ACTIVE (signal orange) and READY (muted). It is read-only display content; the operator does not edit queue entries directly.Active, Ready), match event, mismatch warning, match count.ACTIVE on a resolved match.■ Psalm 32:1 -> Active and ■ Joshua 1:8 -> Ready. Empty: not applicable — the queue always carries its initial entries. Success: a new row is prepended logging the match as Live — ▶ [Match] <REFERENCE> Live for an exact match, ▶ [Context] <REFERENCE> Live for a context match. Error: a mismatch logs ⚠ Clear mismatch for '<query>'. Recovery: the operator dispatches a corrected query and a new row is prepended.FR-1 — Pewbeam AI navigation and live status (explicit) As an Operator, I should see a top navigation bar carrying the Pewbeam AI logo and a LIVE status indicator, so that I can confirm at a glance that the console is live.
ψ PEWBEAM AI with the ψ glyph in signal orange, and a LIVE status indicator.FR-2 — Live Projection presentation panel (explicit) As an Operator, I should see a Live Projection presentation panel showing the current slide title and the scripture text being projected, so that I can confirm the congregation is seeing the correct verse.
Psalm 32:1 (NKJV)) and the scripture text being projected.FR-3 — Live Transcript stream panel (explicit) As an Operator, I should see a Live Transcript stream panel displaying AI-listening transcript content as it is captured, so that I can follow what is being spoken in the service.
[AI Listening...] and Pastor: "Open to Psalm 32:1...").FR-4 — Production Queue panel (explicit) As an Operator, I should see a Production Queue panel listing queued and active scripture items with status markers, so that I can see what is active and what is ready.
Active, Ready).FR-5 — Search bar query entry (explicit) As an Operator, I should be able to enter a verse address or phrase in the search bar and submit it either with the mobile keyboard Enter/Done action or with the DISPATCH TO SCREEN button, so that I can trigger a scripture lookup without leaving the console.
FR-6 — Dispatch matching against the local scripture index (explicit) As an Operator, I should have my dispatched query matched against the local scripture index — an exact address match first, otherwise a context/semantic fall-through match against verse text or reference — so that the correct verse is resolved from what I typed or what was spoken.
FR-7 — Match resolution updates projection, queue, and transcript (explicit) As an Operator, I should see the projection panel update with the matched reference and verse text, the production queue log the match as Live, and the transcript stream append the matched address when a dispatch resolves, so that every readout agrees on what is now on screen.
FR-8 — Mismatch warning (explicit) As an Operator, I should see the production queue log a clear mismatch warning for my query when no match is found, so that I know the dispatch did not resolve and can correct it.
FR-9 — Search bar cleared after dispatch (explicit) As an Operator, I should have the search bar cleared after a dispatch, so that the field is ready for my next query.
FR-10 — Dark charcoal mobile UI theme (explicit) As an Operator, I should see a dark charcoal mobile UI theme with a deep blue projection card and orange accent controls, so that the console is readable and calm in a dim sanctuary booth.
#121212, the projection card is deep blue #0A192F, and the accent controls are orange #FF6B35.FR-11 — Bundled local scripture index availability (required_inference) As an Operator, I should have the bundled local scripture index available to resolve exact and context matches, so that dispatch works without contacting any external service.
FR-12 — Launching the local Pewbeam AI mobile app (required_inference) As an Operator, I should be able to launch the local Pewbeam AI mobile app to reach the live console, so that I can begin operating the service.
Product context. The Operator is the single in-product human role. They run the live service console from a dim sanctuary booth, mid-service, under pressure. The console is their instrument: they watch the live transcript stream and the production queue, enter a verse address or phrase in the search bar, and dispatch the matched scripture to the projection screen so the congregation sees the correct verse.
Primary goal. Keep the correct scripture on the projection screen at the moment it is needed, without breaking the flow of the service.
Distinct accepted responsibilities.
Relevant inputs and decisions. The Operator's inputs are the query string (a verse address or a phrase) and the choice of submission path. Their decisions are which reference to dispatch and, on a mismatch, what corrected query to enter.
Interactions with other accepted participants. There is no other accepted human participant in the current scope. The Operator is the sole human actor; the transcript stream carries spoken content from the service, and the projection plate is the congregation-facing output, but neither is an accepted in-product persona.
Observable success. The projection plate shows the matched reference and verse text; the production queue logs the match as Live; the transcript stream appends the matched address; the search bar is cleared and ready for the next query.
What makes this role distinct. The Operator's work is a live, glanceable control loop under time pressure: read the room's spoken content, resolve a reference, and put it on screen. It is not authoring, editing, or administration — the transcript and queue are read-only to this role, and the only write action is dispatch.
ψ PEWBEAM AI and the LIVE indicator; the Projection plate shows Psalm 32:1 (NKJV) with the psalm 32:1 verse text; the Live Transcript feed shows [AI Listening...] and Pastor: "Open to Psalm 32:1..."; the Production Queue readout shows ■ Psalm 32:1 -> Active and ■ Joshua 1:8 -> Ready.psalm 32:1.PSALM 32:1 (AI EXACT) and the verse body shows "Blessed is he whose transgression is forgiven, Whose sin is covered." The plate's top hairline performs its 200ms signal-orange wipe as the dispatch resolves.▶ [Match] PSALM 32:1 Live, and the row's status needle snaps to ACTIVE.[Matched Address: PSALM 32:1].PSALM 32:1 is now live. Next step: the Operator continues the service, returning to Flow 2 for the next reference.transgression is forgiven.(CONTEXT MATCH) qualifier and the verse body shows the matched verse text. The plate's top hairline performs its 200ms signal-orange wipe.▶ [Context] <REFERENCE> Live, and the row's status needle snaps to ACTIVE.philippians 4:13.⚠ Clear mismatch for 'philippians 4:13'.ACTIVE and which is READY.The creative direction is authoritative for this section: Precision instrument for the pulpit — titanium dark, orange signal, live dial data, with MARQ by Garmin as the muse. The console must read as a calibrated instrument panel — trustworthy, glanceable, unflappable — not a cheerful consumer app or a generic dark SaaS dashboard.
Colour tokens (dark mode).
| Role | Hex | Usage |
|---|---|---|
| Background | #121212 | Page ground; the mandated charcoal. |
| Surface | #151515 | Panels, search field, transcript and queue surfaces. |
| Hairline | #2A2A2A | 1px titanium hairline on every panel; contour texture at 2% opacity. |
| Text (primary) | #F2F0EC | Projection verse text — the highest-contrast object in the room. |
| Text (muted) | #888888 | Secondary readouts, labels, inactive queue rows, READY needle. |
| Primary (plate) | #0A192F | The one large deep-blue field: the projection plate only. |
| Accent (signal) | #FF6B35 | The single instrument signal: DISPATCH control, LIVE dot, active-queue needle, matched-reference tick, plate top hairline. Never a background wash. |
| Instrument cyan | #00A8FF | Projection slide title and live-match annotations only, at small scale. Never a surface. |
Typography.
PEWBEAM AI, LIVE PROJECTION, PRODUCTION QUEUE.clamp() on display sizes. Mobile projection verse clamp(22px, 7vw, 34px); desktop projection verse clamp(34px, 4.2vw, 64px). Section labels 11px uppercase with +0.14em tracking.Shape language. Machined rectangles with 4–6px radii (never pill), 1px titanium hairlines on every panel, and one recurring circular element — the 44px LIVE dial with a sweeping amber arc — as the app's only round form. Ruled data rows with hairline separators. A chamfered 1px inset highlight on the top edge of the projection plate suggests brushed metal catching light. No blobs, no soft shadows, no rounded-24 cards.
Spacing rhythm. Ruled instrument grid: consistent hairline-separated modules with even gutters; the projection plate is the dominant module at roughly 34% of viewport height on mobile.
Imagery style. No stock photography, no illustration. The imagery is the console itself plus engineered texture: a faint topographic contour line pattern (2% opacity, #2A2A2A) behind the projection plate, macro-scale brushed-metal grain in the nav rail, and a circular dial graphic for live status. On the Landing page, one full-bleed dark plate carries an oversized condensed wordmark over the contour texture; a single macro shot of a sanctuary projection screen (dim room, warm screen glow) may be used as a 30%-opacity underlay — never as a cheerful hero photo.
Avoid. Blue–indigo primary on a white ground; Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins or system-ui for any heading or body text; gradient-blob heroes, frosted-glass cards, and grids of identical hover-lift cards; bouncy or springy micro-interactions; rounded-24 pill buttons and soft drop shadows; cheerful stock photography of congregations, hands raised, or smiling volunteers; purple/violet accents or neon glows; animation on the transcript stream.
The faceplate. The first screen is not a marketing hero — it is a machined instrument faceplate.
Full-bleed #121212 ground with a 2% topographic contour texture. Top-left: ψ PEWBEAM AI in Saira Condensed 700 uppercase, 18px, with the ψ glyph in #FF6B35 and a 44px circular LIVE dial to its right, its amber arc mid-sweep. Below, a single full-width #0A192F sapphire plate occupies the dominant 34% of the viewport height, its top edge carrying a 1px #FF6B35 hairline wipe; inside, the reference PSALM 32:1 (NKJV) is set in #00A8FF at 13px uppercase tracked +0.14em, and the verse "Blessed is he whose transgression is forgiven, Whose sin is covered." in #F2F0EC Saira Condensed 600 at clamp(22px, 7vw, 34px) on mobile — the largest object on the screen.
Under it, two ruled instrument rows: LIVE TRANSCRIPT and PRODUCTION QUEUE, each with hairline separators and tabular status markers (■ ACTIVE in #FF6B35, ■ READY in #888888). The bottom bar is a single full-width #FF6B35 DISPATCH TO SCREEN control, 52px tall, uppercase Saira Condensed 600, with the search field above it in #151515 and a 1px titanium border.
Nothing is centred; everything is aligned to a ruled instrument grid, and the only curves on the screen are the LIVE dial and the ψ glyph. This concept recomposes only accepted content, states, and controls — it introduces no new behavior, page, or destination.
Interaction Model: Animated Motion Tempo: cinematic Hero Dimensionality: dimensional_css
Landing Hero Motion Brief
ACTIVE.#121212 ground with contour texture; ψ PEWBEAM AI top-left with the ψ glyph in #FF6B35; the 44px LIVE dial mid-sweep; the #0A192F sapphire plate at 34% viewport height with its 1px #FF6B35 top hairline; PSALM 32:1 (NKJV) in #00A8FF; the verse in #F2F0EC at display scale; two ruled rows for LIVE TRANSCRIPT and PRODUCTION QUEUE; the full-width #FF6B35 DISPATCH TO SCREEN control at the bottom.NFR-1 — Local-only scripture resolution (explicit) Scripture matching must be performed against the bundled local mock scripture index database. No external scripture service may be contacted for matching. Rationale: the authoritative source specifies a local mock index and no external scripture service.
NFR-2 — Read-only telemetry surfaces (explicit) The live transcript panel and the production queue log must be read-only display content. The operator must not be able to edit transcript text or edit queue entries directly. Rationale: explicit hard constraints in the authoritative source.
NFR-3 — Mobile-first layout integrity (explicit, from the creative direction)
Readable text and controls must stay whole at every viewport: headlines, wordmarks, labels, numbers, card text, and controls must stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example font-size: clamp(...) with its mobile size) to fit, and no other element may cover any part of them. Imagery, decoration, and motion may be cropped, bled off an edge, rotated, overlapped, or cut as the direction asks, as long as they cover no readable text or control. Rationale: the creative direction's readability rule, which takes precedence for readable text and controls.
NFR-4 — Reduced-motion support (explicit, from the creative direction)
Under prefers-reduced-motion, the LIVE dial's arc must hold static, the plate's hairline wipe must become an instant 0ms state change, and queue rows must append without animation. A usable static arrangement must remain available. Rationale: the creative direction's reduced-motion requirement.
NFR-5 — Transcript stream must not animate (explicit, from the creative direction) The transcript stream must not perform animation in any mode. It is a read-only telemetry feed. Rationale: explicit direction constraint.
NFR-6 — Instrument motion discipline (explicit, from the creative direction) Motion must be instrument motion only: no bounce, no float, no gradient drift, no springy micro-interactions. Rationale: the creative direction's motion discipline.
NFR-7 — Palette discipline (explicit)
The app ground must be charcoal #121212; the projection plate must be the only large deep-blue #0A192F field; #FF6B35 must be the single instrument signal and must never be used as a background wash; #00A8FF must be used only for the projection slide title and live-match annotations at small scale, never as a surface. Rationale: explicit user-mandated palette plus the creative direction's signal discipline.
NFR-8 — Typography discipline (explicit, from the creative direction) Headings must use Saira Condensed; body text must use Barlow. Inter, Roboto, Arial, Helvetica, Open Sans, Lato, Poppins, and system-ui must not be used for any heading or body text. Rationale: explicit direction constraint.
NFR-9 — Shape discipline (explicit, from the creative direction) Radii must stay 4–6px; pill buttons and soft drop shadows must not be used; depth must come from hairlines and one inset highlight. The 44px LIVE dial is the app's only round form. Rationale: explicit direction constraint.
kivy.app.App, BoxLayout, GridLayout, Label, TextInput, Button, ScrollView, kivy.core.window.Window, kivy.utils.get_color_from_hex). This is a source-specified technology choice and is preserved exactly.bible_db mapping of reference → verse text). No external scripture service.Window.clearcolor set to #121212 for the charcoal mobile background.BoxLayout root with padding and spacing; horizontal BoxLayout for the top navigation bar; GridLayout(cols=2) for the split transcript/queue section; vertical BoxLayout for the bottom controls; TextInput with readonly=True for the transcript and queue readouts; TextInput with multiline=False and on_text_validate for the search bar; Button with on_press for the DISPATCH TO SCREEN control.Color, Rectangle) bound to the panel's size and pos so the deep-blue plate tracks layout changes on mobile rotation.No backend service, container, or orchestration layer is required by the accepted current scope: the app is a local mobile console with a bundled index.
Assumptions.
Psalm 32:1 (NKJV) as the slide title with the psalm 32:1 verse text, the transcript feed's initial state reads [AI Listening...] and Pastor: "Open to Psalm 32:1...", and the queue's initial state reads ■ Psalm 32:1 -> Active and ■ Joshua 1:8 -> Ready. These are the source-supplied initial values.Constraints.
#121212 background) with a deep blue projection card (#0A192F) and orange accent controls (#FF6B35).#0A192F sapphire dial face showing the current slide title and verse text being projected.(AI Exact) or (Context Match)).(AI Exact).(Context Match).bible_db) mapping references to verse text, used for all matching.#FF6B35, the single instrument accent used for the DISPATCH control, the LIVE dot, the active-queue needle, the matched-reference tick, and the plate's top hairline.#00A8FF, used only for the projection slide title and live-match annotations at small scale.
Psalm 32:1 (NKJV)
“Blessed is he whose transgression is forgiven, Whose sin is covered.”
[AI Listening...] Pastor: "Open to Psalm 32:1..."
■ Psalm 32:1 -> Active ■ Joshua 1:8 -> Ready

Psalm 32:1 (NKJV)
“Blessed is he whose transgression is forgiven, Whose sin is covered.”
[AI Listening...] Pastor: "Open to Psalm 32:1..."
■ Psalm 32:1 -> Active ■ Joshua 1:8 -> Ready
No comments yet. Be the first!