prototype: one-keypress onboarding review screen (mocked) - #1903
prototype: one-keypress onboarding review screen (mocked)#1903gtrrz-victor wants to merge 2 commits into
Conversation
A throwaway prototype of the "one-keypress" entire enable UX: a single inline Bubble Tea review screen where every value is pre-decided and editable, and Enter builds the folder. Every side effect (login, mirror, hooks, git) is mocked so we can iterate on flow and wording fast. Folder-state aware (repo-gh / repo-no-origin / empty via --state, or real auto-detect), with the mirror decision surfaced as a first-class row and copy that pitches what mirroring unlocks in entire.io (code, commits, search, transcripts) linking the mirrors docs. Isolated as its own nested Go module under prototypes/onboarding so the main module's build, lint, and CI skip it entirely. Imports nothing from cmd/entire/cli — shares only cobra/bubbletea/lipgloss so the look transfers. Includes a VHS demo.tape for recording a GIF and a README. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 3ca4ad0. Configure here.
| m.showMore = !m.showMore | ||
| return m, nil | ||
| } | ||
| f := fs[m.focus] |
There was a problem hiding this comment.
Focus invalid after collapsing options
High Severity
Toggling showMore off leaves focus at the old moreIdx, which is then past the end of fields(). The next ←/→/space indexes fs[m.focus] and panics. Collapsing "Fewer options" is the normal way to leave that row, so this is easy to hit.
Reviewed by Cursor Bugbot for commit 3ca4ad0. Configure here.
| if slug := githubSlug(strings.TrimSpace(string(out))); slug != "" { | ||
| return StateRepoGitHub, slug, nil | ||
| } | ||
| return StateRepoNoOrigin, "", nil |
There was a problem hiding this comment.
Empty slug on auto no-origin
Medium Severity
detectState returns an empty Slug for no-origin (and non-GitHub) repos, while --state repo-no-origin and empty-folder detection seed a mock slug. Enabling Publish then prints a blank created-repo name and a broken entire.io/gh/ URL — and demo.tape exercises exactly this auto-detect publish path.
Additional Locations (2)
Reviewed by Cursor Bugbot for commit 3ca4ad0. Configure here.
Recording will be done natively; remove demo.tape, the README recording section, and the *.gif ignore. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
Adds a standalone, fully-mocked onboarding prototype under prototypes/onboarding/ to iterate on a single-screen “one-keypress” entire enable flow (Bubble Tea inline review UI + mocked execution plan), intentionally isolated as its own Go module so it doesn’t affect the production CLI build/lint/CI.
Changes:
- Introduces an inline Bubble Tea review screen that edits a resolved
Configand generates an orderedPlanto execute. - Implements mocked plan execution output (simulated delays, fake login/mirror/publish steps) for demo realism.
- Adds prototype module scaffolding + docs + VHS script to record a demo GIF.
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| prototypes/onboarding/tui.go | Bubble Tea inline review screen for editing onboarding decisions and confirming/canceling. |
| prototypes/onboarding/run.go | Mocked plan execution + outcome messaging with simulated delays. |
| prototypes/onboarding/model.go | Core state/config model and pure planFromConfig mapping. |
| prototypes/onboarding/main.go | Cobra entry point, flags, state resolution (auto-detect + simulated states), and wiring review→plan→run. |
| prototypes/onboarding/README.md | Usage and demo instructions for the prototype. |
| prototypes/onboarding/go.mod | Nested Go module definition and direct dependencies for the prototype. |
| prototypes/onboarding/go.sum | Dependency checksums for the prototype module. |
| prototypes/onboarding/demo.tape | VHS script to record a demo run as a GIF. |
| prototypes/onboarding/.gitignore | Ignores built binary and generated GIF artifacts. |
| func detectState() (FolderState, string, error) { | ||
| if err := exec.Command("git", "rev-parse", "--git-dir").Run(); err != nil { | ||
| return StateEmpty, "github.com/acme/new-project", nil | ||
| } | ||
| out, err := exec.Command("git", "remote", "get-url", "origin").Output() | ||
| if err != nil { | ||
| return StateRepoNoOrigin, "", nil | ||
| } | ||
| if slug := githubSlug(strings.TrimSpace(string(out))); slug != "" { | ||
| return StateRepoGitHub, slug, nil | ||
| } | ||
| return StateRepoNoOrigin, "", nil | ||
| } |
| // StateRepoNoOrigin: git repo, no/again non-GitHub origin. Local tracking; | ||
| // no mirror row (nothing to mirror to). |


What
A throwaway, fully-mocked prototype of a "one-keypress"
entire enableonboarding UX, for iterating on flow + wording. Not wired to entire-cli — every side effect (login, mirror, hooks, git) is faked.The idea
A single inline review screen where every value is pre-decided and editable, and Enter builds the folder — instead of today's ~5 sequential prompts.
Mirror to Entirerow /Publishrow for no-origin), defaulting on where mirrorable so one keypress lands you connected.Folder states (
--state)--stateauto(default)repo-ghrepo-no-originemptylocal/+ GitHub/bare);+ GitHubpublishes + mirrorsRun
↑↓move ·←→/spacechange ·enteraccept ·esccancel. See the README for all flags.Isolation
Its own nested Go module under
prototypes/onboarding/, so the main module's build/lint/CI skip it — no production-lint friction while iterating. Shares only cobra/bubbletea/lipgloss so the look transfers to a real implementation.Status
Draft / for discussion. Explores the UX only; the real implementation would back these rows with the existing resolvers (
detectOrSelectAgent,resolveFirstRunCheckpointBackend, the mirror offer, …).🤖 Generated with Claude Code