BKA — Bender's Killer App

YOU are the platform.

Open-source AI-native creator OS. Browser-first authoring app + per-creator GitHub repos + per-creator Cloudflare account = personal media platform with no middleman. The creator owns the domain, the storage, the audience, and the infrastructure. We don't host anything. That's the entire point.

This is the v2 design — a ground-up rebuild on the 4G Web Dev Stack, learning from the v0.1 Tauri/Electron prototype at _Dev/novasyn_suite/benders_killer_app/. The thesis ("YOU are the platform") is inherited verbatim; the implementation is rebuilt to match what we've proven works in the binary-blender app stack (agicore-foundry, andon-loop-demo, community).


Build status

Sprint 8 — shipped. The Stats tab, drawing only on what's genuinely reachable browser-direct. Four cards: Your site (live URL, published count, total words, theme, last-published — from local SQLite), Discovery (a register/leave toggle that calls the indexer worker with the signed-in Google JWT, plus indexed-item count when listed), Recent publishes (history with view links), and Page views (honest: CF Analytics isn't browser-reachable and we won't route your CF token through a server, so it links to your own CF dashboard). This also closes the Sprint 7 app-side gap — the app now registers with discovery and pings /api/refresh after each publish. Indexer CORS + read path verified live from the app origin.

Sprint 7 — shipped. The discovery indexer — the one central, opt-in component — lives in its own repo (Binary-Blender/bka-indexer, live at bka-indexer.chrisbender999.workers.dev). A single Cloudflare Worker: a 10-minute cron crawls registered creators' /feed.json, diffs it into a D1 metadata index (creators + items), and serves register/unregister/refresh (Google-JWT) + discover/recent/creators (public) + admin routes. Holds no content — only metadata + URLs. BabyAI reranks discovery queries when there are candidates to rank. Crawl→index→discover verified end-to-end against a live feed. App-side wiring (call register at onboarding, refresh after publish) lands with the alpha.

Sprint 6 — shipped. The viewer template — theming the no-build renderer. Three bundled themes (Notebook / Magazine / Minimal) plus a creator-picked accent colour, chosen in a now-real Settings tab (edit display name, bio, About page; pick theme + accent; "save & republish" relights the whole site). The rendered site gained routes: /about, /archive, /tag/<tag> (one per tag), a nav, client-side search, per-post JSON-LD + OpenGraph, and a theme.json. Still zero build, zero runtime AI, zero tracking. All themes + routes verified.

Sprint 5 — shipped. The full publish pipeline. A Publish tab in Compose with a pre-publish checklist (title, body, slug preview); publishing graduates a draft to a live post — a published post is simply a draft with a slug. Each publish renders the whole site (all published posts + regenerated feed.json/feed.xml/sitemap.xml) and commits it atomically, then a build-status indicator walks Committing → Building → Live (polling the post URL until Cloudflare redeploys) with a "view on site" link. Unpublish and update-published are the same path in reverse. Onboarding's first publish now flows through this same machinery (the starter is a tracked published draft). Multi-post feed ordering, auto-summary, and unpublish all verified.

Sprint 4 — shipped. Media library in Compose's right sidebar (tabbed with Drafts). Drag-drop or pick files; uploads route by size straight to the public repo — ≤100KB commits to assets/inline/, larger files go to GitHub Releases (durable CDN URLs with Accept-Ranges, so video/audio scrub natively). Click any item to drop its markdown into the active draft (images embed, video/audio become players). The library persists in OPFS-SQLite. Both upload paths verified end-to-end against live GitHub.

Sprint 3 — shipped. The Compose tab: a three-column chat-with-doc surface (chat · markdown editor + live preview · drafts). The AI drafts and edits the active post through a prompt-defined tag protocol — prose streams to chat, <edit> blocks rewrite the draft, <create_document> mints a new one. Default model is "Bundle of Babies" (Christopher's BabyAI MoE Space — small open models, browser-direct, zero-setup); Anthropic (Claude, BYOK) is the alternative. Both work because the edit protocol is prompt-based, not native tool-calls. Drafts persist to OPFS-SQLite instantly (survive reload) and back up to the private repo on a 30s debounce; conversations are stored per-draft.

Security note: Bundle of Babies runs on a private HF Space, so the access is an HF token — and with no backend to hide it, that token is baked into the public client bundle (VITE_BABYAI_HF_TOKEN). Anyone can read it from the deployed JS and use the Space's compute. Before public launch: use a fine-grained, inference-only HF token, or front the Space behind the Sprint 7 indexer worker (which can hold the secret server-side).

Sprint 2 — shipped. Onboarding through first-publish. BKA renders a starter "Hello, world" post into a complete static site in the browser (no build step) and commits it atomically to the public repo via the GitHub Git Data API. Then a guided one-time Connect Cloudflare step (deep link + exact build settings + liveness check) wires CF Pages to the repo — after which every publish is just a git push that auto-deploys. The creator's CF token never enters BKA.

Sprint 1 — shipped. Onboarding wizard (steps 2–4): connect GitHub via a pasted, pre-scoped token, pick a handle (with live GitHub availability checks), and provision both repos (<handle>-bka-private + <handle>-bka-public) in the creator's own account. Wizard progress persists to OPFS-SQLite, so it's resume-safe across reloads. Secrets (tokens) live in a per-identity localStorage vault, never in git, never sent to us.

Sprint 0 — shipped. The 4G app shell: Vite + React + TypeScript + zustand, Google sign-in (reused from agicore-foundry), four placeholder tabs (Compose / Library / Stats / Settings), warm-publication visual register (paper-cream + serif body + teal accent).

Auth + deploy notes: v1 uses a pasted GitHub token (a browser can't do the OAuth secret exchange without a backend), and Cloudflare is connected once via the dashboard rather than the CF API (which isn't CORS-reachable from the browser). The viewer is no-build static — BKA renders finished HTML and CF Pages serves it with no build command. See 13_OPEN_QUESTIONS.md §1, §2, §4.

Next: Sprint 9 — polish + alpha launch (onboarding error/recovery polish, a "what's new" surface, publishing these docs as a site, and opening the doors to a first cohort). See 12_ROADMAP.md.


Doc map (read in order)

Architecture-first; build-out follows the same numbering.

# Doc What it covers
00 00_VISION.md Why this exists. The "YOU are the platform" thesis, the trap we're avoiding, what makes BKA different.
01 01_PHILOSOPHY.md Architectural constraints (no hosting, federation, automation, education) that cascade through every other decision.
02 02_ARCHITECTURE.md The four bricks — per-creator storage / serving / identity / discovery — and how they compose into the system.
03 03_TECH_STACK.md Built on the 4G Web Dev Stack. What's reused, what's distinct, what's deferred until later sprints.
04 04_CREATOR_ONBOARDING.md The wizard flow that walks a new creator through GitHub + Cloudflare account setup, repo provisioning, first publish.
05 05_TWO_REPO_MODEL.md Private working DB vs. public published surface. Publish-action semantics. GitHub Releases pattern for binary assets.
06 06_PUBLISH_PIPELINE.md CI/CD specifics. GitHub Actions, Cloudflare Pages git integration, release-asset uploads, atomic publish UX.
07 07_DISCOVERY_LAYER.md The federated indexer-worker + BabyAI discovery specialists. Pull vs push (decided: pull). Metadata-only, never content.
08 08_AUTHORING_APP.md The creator-facing app — the BKA you actually open. 4G-shaped browser app, Foundry-style chat-with-doc, asset library, publish flow.
09 09_VIEWER_TEMPLATE.md The public site template every creator's CF Page renders. Static-generated, theme-able, browser-progressive media.
10 10_FEED_SCHEMA.md The /feed.json format every creator's site exposes for the indexer to consume. Versioned, typed, BabyAI-friendly.
11 11_OPERATIONS.md Creator-side ops (rotate tokens, recover account, migrate domain) + indexer-side ops (scaling, abuse, takedowns).
12 12_ROADMAP.md Sprint-by-sprint plan. Each sprint is shippable on its own; later sprints stack on earlier ones.
13 13_OPEN_QUESTIONS.md Decisions deferred, with the tradeoffs named. Worth re-reading before building each new sprint.

Cross-references to other in-repo material


Genealogy in one sentence

Tauri-Electron + Astro + manual wizard (v0.1, prototype) → browser-first 4G app + two GitHub repos per creator + automated Pages CI/CD + BabyAI federated discovery (v2, this design). Same thesis ("YOU are the platform"); rebuilt to ride the proven binary-blender stack instead of inventing fresh infrastructure.