12 — Roadmap
Sprint-by-sprint plan. Each sprint is shippable on its own; later sprints stack on earlier ones. Loosely modeled after the agicore-foundry sprint cadence (small ships, push to production fast, learn).
The first three sprints (0-2) get a creator from "I opened BKA" to "I have a published post on my own infrastructure." Everything after that is polish + extension.
Sprint 0 — Repo scaffold + 4G base
Goal: a 4G app shell that knows it's BKA, deploys cleanly to CF Pages, signs in with Google, and renders an empty dashboard.
Ships:
_Dev/bka/repo (the app, not just the docs)- 4G stack scaffold (Vite + React + TypeScript + zustand)
- Google sign-in + UserChip (copy from foundry)
- Empty App.tsx with the four top-level tabs (Compose / Library / Stats / Settings)
- README with the v1 pitch
- Pages deploy at
bka.binary-blender.com(subdomain provisional) - Cartoon-warm-publication visual register established (paper-cream + serif body + a teal accent)
Out of scope: any actual functionality. This is the skeleton.
Done when: page loads at the URL, sign-in works, all four tabs render placeholder content.
Sprint 1 — Onboarding wizard (steps 1-4)
Goal: a creator can sign in, connect GitHub, pick a handle, and end up with their two repos provisioned.
Ships:
- Wizard component with step-by-step UX (from 04_CREATOR_ONBOARDING.md)
- GitHub OAuth app registered (BKA-side)
- GitHub OAuth flow integrated
- Handle picker with availability validation
- Both repos provisioned via GitHub API
- Wizard state persisted to OPFS-SQLite (resumeable)
Out of scope: Cloudflare integration (next sprint), publishing (sprint after).
Done when: a brand-new user runs the wizard, ends with two repos in their GitHub account, can re-open BKA without re-running the wizard.
Sprint 2 — Onboarding wizard (steps 5-9) + first publish
Goal: creator completes onboarding through first published post.
Ships:
- Cloudflare token entry (or OAuth if available)
- Pages project provisioning via CF API
- Custom domain (optional, skippable)
- Indexer registration (skippable)
- First-publish flow: starter post → commit to public repo → CF auto-deploys → live
- "Your site is live at
" wizard completion screen
Out of scope: media uploads (sprint 4), the rich composer (sprint 3).
Done when: brand-new user goes from "sign in" to "my site is live" without leaving BKA.
Sprint 3 — Compose tab (chat-with-doc)
Goal: the rich composer with AI assistance, mirroring agicore-foundry's Library route.
Ships:
- 3-column layout (chat / editor / right sidebar)
- CodeMirror markdown editor
- Live preview pane (toggleable)
- Chat composer with
activeSessionStore(cross-app session continuity) doc-edit-stream.tsfilter wired so AI can<edit>the active draft and<create_document>new ones- Draft persistence to private repo via git-store + auto-push
- Drafts panel (right sidebar tab) listing all drafts
Out of scope: media (next sprint), publishing flow (already in sprint 2 in starter form; full version in sprint 5).
Done when: a creator can draft a post end-to-end with AI assistance, draft persists across reloads, conversation can span the draft.
Sprint 4 — Media library
Goal: creator can upload images, audio, video; they end up in the right place (small → repo, large → Releases).
Ships:
- Media tab in Compose's right sidebar
- Drag-drop upload UX
- Threshold-based routing (≤100KB → commit to assets/inline/; >100KB → GitHub Releases asset)
- Release asset uploader (
POST /repos/.../releases+POST /repos/.../releases/<id>/assets) - Thumbnail generation (client-side for images; FFmpeg.wasm later for video posters — or just user-uploaded posters for v1)
- Inline image picker in editor (markdown insert)
Out of scope: video editing, audio editing — BKA isn't an editor for media, it's a publisher.
Done when: creator can upload a video, reference it in a draft, the video URL works in the live published post.
Sprint 5 — Full publish pipeline
Goal: the publish action handles everything atomically, deploys correctly, optionally pings the indexer.
Ships:
- Publish button + pre-publish checklist (validation)
- Atomic commit via GitHub Git Data API (multi-file in one push)
feed.jsonregenerationfeed.xmlmirror generation- Status indicator (Building → Live → Deployed at
) - Indexer ping (
POST /api/refresh) if registered - Unpublish + edit-published actions
- "View on site" link after publish
Out of scope: viewer template details (next sprint).
Done when: end-to-end publish from BKA to live site in under 90 seconds, the feed validates against the schema.
Sprint 6 — Viewer template
Goal: a real public site for creators, not just a starter index.html.
Ships:
- The 4G-app viewer template (per 09_VIEWER_TEMPLATE.md)
- Three starter themes (Notebook, Magazine, Minimal — keep the count small for v1)
- Routes:
/,/posts/<slug>,/about,/feed.xml,/sitemap.xml,/tag/<tag>,/archive - Build pipeline configured (CF Pages build settings)
- Static-rendered HTML; client JS only for video/audio + search
Out of scope: comments, subscribers, custom themes beyond the three.
Done when: a creator's published posts render correctly on their CF Pages site, all routes work, RSS validates.
Sprint 7 — Indexer worker
Goal: the central discovery component is live and functional.
Ships:
_Dev/bka-indexer/repo- Cloudflare Worker with the seven routes from 07_DISCOVERY_LAYER.md
- D1 schema (
creators,itemstables) - KV bindings (snapshot cache, queue)
- Cron trigger for the crawl scheduler
- Google JWT validation (copy from community worker)
- BabyAI integration for
/api/discover(initially: content-matching only) /admin/statsroute- Deployment script + secrets setup runbook
Out of scope: federation with other indexers (post-v1), advanced BabyAI specialists.
Done when: a creator can register their feed, the indexer crawls it on cadence, /api/discover returns results.
Sprint 8 — Stats tab
Goal: creator can see how their site is doing.
Ships:
- Stats tab in BKA app
- CF Analytics integration (uses creator's CF token; shows page views, top URLs, geo)
- Indexer feedback (if registered): "your items appeared in N discovery results this week"
- Recent publishes history with deploy status
Out of scope: deep analytics, audience demographics, third-party analytics integration (creators add Plausible themselves if they want).
Done when: opening Stats shows real numbers, refreshes on demand.
Sprint 9 — Polish + alpha launch
Goal: BKA is openable, usable, shippable.
Ships:
- Onboarding wizard polish (better error messages, recovery paths)
- "what's new" page
- Documentation site (the docs you're reading) published as a
bka-docssite - Alpha launch: announce to Christopher's audience, accept first cohort of creators
- Feedback channel (Community board source label
source:bkaworks for this)
Done when: an external alpha tester can sign up, onboard, and publish without help.
Sprint 10+ — Comments, subscribers, syndication
Post-v1. Each is its own multi-sprint arc:
- Comments: per-creator Workers + D1 for thread storage; widget for viewer template; moderation UI in BKA
- Subscribers: per-creator email list (via CF Email Routing or external SMTP); BKA composer adds "send to subscribers" toggle
- Syndication: connectors for X / Bluesky / Mastodon; per-platform OAuth in BKA; publish-time toggles
Each ships when there's user demand, not on a fixed schedule.
Beyond v1
- Tauri desktop shell — same React code wrapped, gives offline-first + native menubar + faster local IO
- Mobile authoring — touch-friendly composer, voice capture, camera roll integration
- Migration tools — Substack/Medium/Wordpress importers that drop content into private repo as drafts
- Multi-author — relax the single-creator assumption; needs repo-permission model rethink
- Third-party themes — community-contributed; needs theme spec to be stable + a discovery surface
- Cross-indexer federation — multiple indexers, creators choose which to register with, indexer-to-indexer protocol
These are real but deferred until v1 ships + has users.
What's NOT on the roadmap (won't build)
- A hosted version of BKA where we host creator sites for them. Never.
- A central content cache. Never.
- Algorithmic feed mediated by us. Never. (BabyAI discovery is creator-opt-in, query-time-only, returns links not content.)
- A premium tier or paid features. Never.
These would each kill the thesis. Roadmap is bounded by them.