Experimental Go build tooling, references, and CI pipeline.
cmd/server— HTTP API on:8080(gorilla/mux + middleware chain).cmd/onboard— interactive TUI wizard that generates a.envfor the server.cmd/loadgen— TUI HTTP load generator with a live-updating dashboard.cmd/scaffold— TUI code generator: pick handler/middleware/package + name → write boilerplate file.cmd/admin— TUI for inspecting a deployment: list users, run healthchecks. Falls back to a fake backend when DATABASE_URL is unset.cmd/devup— TUI wrapper arounddocker compose: pick service, pick action, view output. Demonstrates subprocess management viainternal/proc.cmd/migrate— TUI for inspecting and applying schema migrations. ComposesAsyncTask/Picker/Confirm/Doneagainst aMigratorinterface; falls back to aFakeMigratorwith--fakefor demos / CI without a database.cmd/inspect— TUI demo that wiresinternal/eventbusinto theLiveViewphase: pick a scenario, watch synthetic events flow with live counters, level breakdown, and a rolling tail of the most recent events.
internal/tui/ is a small framework on top of bubbletea/lipgloss for building multi-step terminal wizards from this template. It exposes a Phase interface and four reusable phases:
Picker— single-select list, optionally rendered as a comparison table.Confirm— yes/no prompt with default selection.AsyncTask— runs a worker function with a spinner, emitsTaskDoneMsg.LiveView— polls aLiveSampleron a tick, re-renders each sample, emitsLiveDoneMsgwhen sampler reports done. Used for live dashboards (seecmd/loadgen).TextInput— single-line input backed bybubbles/textinputwith optional inline validation. EmitsTextInputDoneMsg.Done— final summary, quits on enter.
Each phase emits a tagged completion message (PickerDoneMsg, ConfirmDoneMsg, TaskDoneMsg); the caller's root tea.Model switches on the tag and transitions to the next phase. See cmd/onboard/model.go for the canonical assembly pattern, and cmd/onboard/headless.go for the non-TTY codepath used in CI.
make build-onboard
./onboard # interactive
./onboard --preset standard --yes # headless, writes .env with defaults