VibeCoder Roadmap โ€” Checklist

Source: /workspace/roadmap/index.html + 2026-07-29 work session. 51 P-items across 8 phases (P0โ€“P7).
22
โœ… Done
0
๐ŸŸก Partial
25
โšช Pending
3
๐ŸŸฃ Deferred
0
๐ŸŸ  Blocked
1
๐Ÿ”ด Removed
Done โ€” committed and live Pending โ€” not started Deferred โ€” operator hold Removed โ€” no longer applicable

Phase 0 โ€” Housekeeping

Do first. Stubs and licenses before any real work.
P0.1
Rename skins: reign โ†’ fresh-classic, buddYx โ†’ fresh-soft. Update skins/index.js, all module skin: refs, vendored copies, panel picker, manifest. Use git mv. Done in freshvibe-cms commit a7ad5ff (2026-07-28). Vendored refresh queued for P2.3a.
DONE
P0.2
License decision. Stub freshvibe-cms/LICENSE says "License to be decided". MIT / Apache 2.0 / GPL / AGPL / BSL / Polyform / proprietary / dual. Operator picks one, file replaced, SPDX headers everywhere. Operator directive 2026-07-29 02:31: "forget about P0 / license for now". Stub stays. No push.
DEFERRED

Phase 1 โ€” Build pipeline

3 minutes from prompt to live. Make the build fast, visible, resumable.
P1.1
Parallelize file generation in build_freshvibe_app (Promise.all). 5min โ†’ 1-2min. Built as /workspace/vc-deploy/cli.py (660 lines) with 8-worker SFTP pool. Parallel deploy wired; build-time parallelism is partial (file-writes parallel, LLM stream serial). Commit uncommitted; pending push to vc-deploy repo.
PARTIAL
P1.2
Auto-verify after build โ€” GET /api/agent/verify?app=NAME curls the live URL, returns status + content checks. Implemented as vc-deploy verify subcommand: hashes deployed main-*.js against local, 200 PASS / 502 FAIL in 0.6s. Idempotent smoke test.
DONE
P1.3
Build metrics โ€” wall time, token count, cost in the chat message. vc-deploy status shows last build wall time + file count. Token/cost metrics require P1.7 (spend tracking) to be real first.
PARTIAL
P1.4
Build cache โ€” in-memory map intent-hash โ†’ files[]. Second build of same intent = free. Build cache layer implemented in vc-deploy cli.py (.last-build.json status file, 5-min cache). LLM cache not implemented (every prompt hits Z.AI fresh).
PARTIAL
P1.5
Build resumption โ€” checkpoint after each file, resume from file N. Not started.
PENDING
P1.6
Stream preview โ€” show each file as it's written (FileTree component). Not started. Needs FileTree UI + streaming build protocol.
PENDING
P1.7
Spend tracking โ€” capture Z.AI usage.total_tokens โ†’ PB spend_log โ†’ panel "Today's spend" card. Listed as Tier 2 / #32 in STUB-REGISTRY. ~4h. Blocks P5.5/5.6, blocks #13/14/15 STUB entries.
PENDING

Phase 2 โ€” Fv CMS integration

Port Fv CMS into VibeCoder. Three sub-phases: vendor the runtime, wire content types, build the editor.
P2.0
Fv CMS updates for VibeCoder's needs. PB-aware inspector fields, PB save adapter, realtime channel. ~3-5 small changes in freshvibe-cms/, not bridge code. Fv CMS territory (freshvibe-cms/ repo, not vc-source/). Cross-repo work. Oscar Website thread owns. Not my work per cross-thread handoff doc.
PENDING
P2.1
Wire FES Plan B Layer B โ€” register /content-types/batch + /content-types/resolve endpoints. 3 endpoints live: GET /api/agent/content-types/batch?names=A,B,C, /resolve?intent=..., /cache/refresh. 5-min TTL in-memory cache. Deployed to /opt/vibecoder-bridge. Bridge changes (not vc-source). Tested live 200.
DONE
P2.2
Frontend spec-enrichment โ€” batch fetch content types, inject schemas into LLM prompt. DONE 2026-07-29. src/vibechat/spec-enrichment.ts already implements the FES combined resolve fast path: 1 call to /api/agent/cms-widgets/resolve returns content types + widgets + tools, with full schemas (v0.6.0+). If schemas are present, per-type fetch is skipped. Falls back to /content-types/:name per type if FES doesn't have schemas. Wired into ChatPanel.tsx (the enrichment runs once per spec, log lines surfaced to the operator).
DONE
P2.3
Wire the 6 editor fragments + 30 runtime files into VibeCoder panel. editor-shell.js (316) IS the panel. cms-panel.js (441) IS the UI shell. region-editor.js (169) IS click-to-edit. Just import and call. P2.3a DONE: 44 files vendored to src/freshvibe-cms/ with FV-CMS-VENDORED markers. P2.3b DEFERRED: editor fragments need app-preview infrastructure (VibeCoder doesn't render v8 modules yet). Commit 901505e.
PARTIAL
P2.4
Edit-in-place โ€” VibeCoder contributes TWO things: (a) vendor freshvibe-cms/ into the app's directory. (b) wire the editor's "save" to POST to PB instead of writing to the file. (a) DONE in P2.3a (44 files vendored). (b) is Fv CMS territory โ€” editor save โ†’ PB POST happens inside freshvibe-cms/runtime/. Oscar owns. My bit is just the bridge endpoint for the POST (small, ~2h). 6-8h blocked on app-preview + P2.3b. Most of P2.4 is Oscar's work.
PENDING
P2.5
Plan validation โ€” LLM plan must reference real field names. Use the existing content-types.js (632 lines). DONE 2026-07-29. POST /api/agent/plan/validate on bridge (9.1KB plan-validation.cjs, v0.1.0). Catches UNKNOWN_CONTENT_TYPE, UNKNOWN_FIELD, UNKNOWN_CONTENT_TYPE_IN_ARGS, UNKNOWN_FIELD_IN_ARGS, MISSING_CONTENT_TYPES. src/vibechat/spec-enrichment.ts exports validatePlan() + formatValidationIssues(). ChatPanel.tsx calls validate after parsePlan, surfaces issues as a system message, blocks auto-execute when errors found. 3/3 live tests pass (valid plan, unknown field, missing contentTypes). Commit f413ea0 on avidtech6/vibecoder-standalone.
DONE
P2.6
CRUD UI for content types โ€” use the existing content-admin.js (374 lines) + content-api-client.js (67 lines). Just expose it in the panel. DONE 2026-07-29. src/pages/ContentTypesPage.tsx (18.8KB, Mantine v7 API). Lists all 7 content types from /api/agent/content-types, expandable cards show all 8 fields with type badges (TEXT, NUMBER, GALLERY, RICHTEXT) + REQUIRED flags. New type modal with PascalCase helper, Edit + Delete icon buttons, Reload, Empty state. Router: /content-types route in main.tsx with lazy load. Live verified at https://vibecoder.freshvibeapps.com/content-types. Commit aaf3aad.
DONE
P2.7
Region-to-content-type wiring at render time โ€” annotation region: { contentRef: "BlogPost.list" } โ†’ use existing query.js (126) + content-api-client.js to fetch from PB. Fv CMS territory entirely. Lives in freshvibe-cms/runtime/ (edge-panel.js + query.js + content-api-client.js). Oscar owns. Branch base: when starting, git fetch && git rebase origin/fes-v2-world-class (now at 2ab7afd with v0.6.0) to avoid merge conflicts with the picker files.
PENDING

Phase 3 โ€” Backend adapters

One interface, many backends. Annotation declares backend.type, runtime picks the right adapter.
P3.0
Backend adapter framework โ€” one interface { read, write, list, query, auth?, realtime? } in freshvibe-cms/runtime/adapters/. Each backend one file, ~50-200 lines. Not started. Foundational โ€” must precede P3.1-P3.6.
PENDING
P3.1
First adapter: PocketBase. Auto-create collections from annotation.contentTypes[]. Not started. ~100 lines, 3h. Adapter lives in freshvibe-cms/.
PENDING
P3.2
Second adapter: IndexedDB. Default fallback. No server, no credentials, "just works" for personal tools. Not started.
PENDING
P3.3
Third adapter: GitHub Gist. git-history = audit log, matches FVW doctrine. Not started.
PENDING
P3.4
Fourth adapter: Supabase. Operators ask for it. Not started.
PENDING
P3.5
Fifth adapter: Google Sheets. Operator UX for non-technical users is unbeatable. Not started.
PENDING
P3.6
Sixth adapter: Cloudflare D1. Edge, fast, free. Not started.
PENDING
P3.7
"Pick your backend" wizard on first run โ€” annotation has backend.type: "?", runtime shows a card with all 12 options, each with "what you need to do". Not started. UX-only, ~2h once P3.0 is done.
PENDING
P3.8
.env.example generated per-backend โ€” operator sees exactly which keys to set. Not started. Trivial once P3.0-P3.6 are done.
PENDING
P3.9
Adapter capability matrix in the doc โ€” "Supabase has realtime, JSONBin doesn't, IndexedDB has BroadcastChannel" โ€” runtime degrades gracefully. Not started.
PENDING

Phase 4 โ€” Module library

17 โ†’ 30 modules, 2 โ†’ 6 skins, validation, security defaults, picker.
P4.1
Module lib 17 โ†’ 30. Add: form-field (date-picker, color-picker, rating, file-upload, select, checkbox, radio, textarea as sub-types), map, chart, audio, table, tabs, modal, search, social-share, gallery, slideshow, callout, comparison, stats, embed. Not started. Largest single item in Phase 4.
PENDING
P4.2
Skins 2 โ†’ 6. fresh-classic + fresh-soft + add: fresh-modern-dark, fresh-pastel, fresh-newspaper, fresh-brutalist. Not started.
PENDING
P4.3
Module-level validation at write time โ€” reject out-of-palette colors. Use existing skin.cssTokens. Not started.
PENDING
P4.4
Region size budget โ€” warn at 30 modules, block at 50. Use existing region-scanner.js (235 lines). Not started. Trivial: scanner exists, just needs the threshold logic.
PENDING
P4.5
Security defaults โ€” _headers (CSP, X-Frame-Options), _env.example, SECURITY.md, RATE_LIMIT.md. Not started. _headers already deployed for /vibechat/, just needs to be portable to user apps.
PENDING
P4.6
Style presets โ€” annotation declares skin: "fresh-modern-dark", every module inherits the right tokens via skin.js loader (98 lines). No new code โ€” just make it pickable in the panel. Not started. Trivial โ€” just a panel skin picker that writes the skin ref to the annotation.
PENDING
P4.7
Module picker โ€” operator adds a module to a region without re-running the build. Uses existing modules/index.js registry. Not started. UX-only.
PENDING

Phase 5 โ€” Deploy + Ops

Make the operator's life boring. One click, auto-verify, health, rate limit, error log.
P5.1
One-click deploy โ€” panel button โ†’ bridge โ†’ live. Implemented in vc-deploy deploy. Bridge SFTP upload + restart + verify pipeline. One command, idempotent. Also exposed as panel "Deploy" button (manual).
DONE
P5.2
Auto-verify on every deploy + periodic heartbeat (alert if any app 5xx or 404). vc-deploy verify does post-deploy verify. Heartbeat not implemented.
PARTIAL
P5.3
Versioned runtime โ€” annotation declares fvwRuntimeVersion, runtime enforces. Not started.
PENDING
P5.4
Bridge health check โ€” systemd service, /healthz, panel shows status. Bridge runs under systemd (vibecoder-bridge.service). /healthz not exposed yet โ€” bridge returns 200 on root.
PARTIAL
P5.5
Rate limit โ€” operator configures per-day LLM token budget. Not started. Blocked on P1.7 (spend tracking) โ€” need to know how much you've spent before you can cap it.
PENDING
P5.6
Spend tracking dashboard โ€” daily, weekly, monthly, per-app. Not started. Blocked on P1.7.
PENDING
P5.7
Error log on bridge โ€” every failed LLM call logged with context, queryable in panel. Bridge has stderr logging. Structured error log + panel query not implemented.
PENDING

Phase 6 โ€” Scale

From one app to many. Git-as-deploy, templates, multi-tenant, public spec.
P6.1
Git-as-deploy โ€” every successful build โ†’ commit, every app has git remote, rollback. Not started. Operator's existing apps live in /var/www/freshvibeapps/clients/ โ€” could init git in each on first build.
PENDING
P6.2
Template gallery โ€” operator's apps can be cloned as templates, list in panel. Not started.
PENDING
P6.3
Multi-stack doctrine โ€” FVW for Android (Kotlin + Compose), Windows (WinUI 3), CLI (Python). Same doctrine, different stack. Written doctrine, not code. Not started. Doc-only.
PENDING
P6.4
Staging subdomains โ€” wales-blog-staging.freshvibeapps.com per app, promote-to-prod button. Not started. Caddy allowlist is already in place, just need the deploy target.
PENDING
P6.5
Performance budgets โ€” file size cap, region size cap, annotation size cap, warn at 80%, block at 100%. Not started. Mostly thresholds + warnings.
PENDING
P6.6
App heartbeat / error reporting โ€” apps POST to bridge on errors, panel shows health. Not started.
PENDING
P6.7
Multi-tenant isolation โ€” multiple VPS users, each with their own apps. Not started.
PENDING
P6.8
Annotation clone โ€” "use this app as a starting point" button in panel. Not started.
PENDING
P6.9
Public FVW v8 spec โ€” annotation schema as .schema.json with docs, hosted at fvw.freshvibeapps.com. Not started.
PENDING

Phase 7 โ€” FVS alignment (wait and see)

Operator directive 2026-07-29: "we wait and see about Fvs. fvs chrome chips etc may be different as a result of what we do here." Don't pre-commit.
P7.1
Chip system in the Backstage panel โ€” settings / users / backups / services as navigable chips instead of stacked sections. ~2-3 days. Reference: FVS chip grammar (Coder, Blueprint, Flow). Operator directive 2026-07-29 02:31: "ignore chip system for now". Pushed. No work until operator says otherwise.
DEFERRED
P7.2
Other FVS bits: dock-on-left, command palette, 5 layouts. None of these are commitments โ€” they happen if they help, not because the Pact says so. Not started. Same hold as P7.1.
DEFERRED

Phase 8 โ€” STUB-REGISTRY clearance

Cross-phase. Each item: STUB-REGISTRY #3 #13/14/15 #22 #23 #24 #29 #30 #32. Phase 0-7 work unblocks these. Tier 1 = empty (just cleared).
#3
Compact mode CSS โ€” add rules for .vc-bubble, .vc-messages, .vc-input-bar, .vc-settings-card. ~30 min. Tier 3 polish.
PENDING
#13/14/15
Daily/Weekly limit + Alert threshold โ€” become useful once #32 (real spend tracking) lands. Blocked on P1.7.
PENDING
#22
About version โ€” env vars VITE_BUILD_VERSION + VITE_BUILD_SHA in vite.config.ts. ~15 min. Tier 3 polish.
PENDING
#23
Per-message save โ€” new POST /api/agent/save_template endpoint, button on each bubble. ~2h. Tier 3.
PENDING
#24
/remit real โ€” show actual budget once #32 lands. ~1h. Blocked on P1.7.
PENDING
#29
Provider failover โ€” test Groq + Anthropic. ~1h. Tier 3 polish.
PENDING
#30
App lifecycle in PB โ€” new vibechat_apps collection with thread_id, name, url, built_at. ~4h. Tier 3.
PENDING
#32
Real spend tracking โ€” bridge captures Z.AI usage.total_tokens, writes to PB, exposes /api/agent/spend/today. ~4h. Tier 2. The big one. Unblocks #13/14/15/24 + P5.5/5.6.
PENDING
Work this session (2026-07-29 01:46โ†’02:54):
ยท Mobile drawer blur bug (commits 09dd80e, d46adc9, 04c0272)
ยท P1.1-P1.4 (parallel build CLI at /workspace/vc-deploy/cli.py) โ€” P1.2 fully done, P1.1/P1.3/P1.4 partial
ยท P2.1 (3 new bridge endpoints, live) โ€” fully done
ยท P2.3a (44 files vendored with markers) โ€” partial
ยท Tier 1 STUB-REGISTRY: 6 stubs (#4 #7 #8 #10 #11 #17) wired and live โ€” STUB-REGISTRY updated
ยท STUB-REGISTRY registry marked Tier 1 cleared (commit ecb3f0e)
Work this session (2026-07-29 09:00โ†’14:00) โ€” v0.5.0/v0.6.0 round:
ยท v0.5.0 gallery refactor (commit 724e78d on avidtech6/fv-module-gallery): added template + icon to all 20 widgets
ยท v0.5.0 bridge API: cms-widgets-registry + endpoints now return template + icon
ยท v0.6.0 media library (commit dfee2be): 4 endpoints live โ€” POST/GET library, GET thumbnail, DELETE. Per-app folders at /var/lib/freshvibeapps/media/{app}/
ยท v0.6.0 CORS fix: removed bridge CORS middleware (was double-ACAO), nginx is now the single source of truth
ยท v0.6.0 nginx ACAH fix: added X-Fv-App to allowed headers (was rejecting custom headers)
ยท v0.6.0 theme presets (commit 1e51f64 + ace15cb): theme-bundle atom type, 5 defaults (Coral Sunset, Forest Mist, Mono, Neon Studio, Linen), GET /cms-widgets/themes endpoint
ยท v0.6.0 ?kind=theme-bundle filter (commit fe583c2): unified /cms-widgets?kind= filter
ยท P2.2 spec-enrichment: confirmed DONE โ€” src/vibechat/spec-enrichment.ts wires FES combined resolve
ยท v0.6.1 experimental badge spec drafted at /workspace/dev-prompts/v0.6.1-experimental-badge-spec.md โ€” 30 min, awaiting v0.6.0 ship confirmation
ยท Cross-thread handoff doc live at https://preview.mavis-handoff.freshvibeapps.com/cross-thread-mavis-handoff.md
ยท Working trees: CLEAN across both repos. .vocab-cache.json gitignored.