Scripts
Every bun script, grouped by when you'd reach for it.
Every script lives in the root package.json; run any of them with bun run <name>. They're grouped below by when you actually reach for one.
Dev loop
bun run dev: start both apps through portless on named.localhostURLs (runbunx portless listto see them; branch-prefixed in a worktree).PORTLESS=0 bun run devuses fixed ports instead: web:3000, api:4000.bun run clean: remove build artifacts and caches (.next,.turbo,dist), everynode_modules, and generated typedefs.bun run devtools: open Turborepo DevTools.
bun run clean deletes every node_modules and the generated typedefs, so re-run bun install afterward.
Database
Each of these builds @packages/env first, then runs Drizzle Kit against packages/db.
bun run db:generate: generate a migration from schema changes.bun run db:migrate: apply pending migrations.bun run db:studio: open Drizzle Studio to browse and edit data.
Quality
bun run lint: Oxlint over the whole tree (also what CI runs).bun run format: Oxfmt, writing fixes.bun run format:check: Oxfmt, report only (also what CI runs).bun run check-types: type-check every workspace, then the repo scripts (check-types:scripts,tsgoover.github/scripts).bun run test: run every workspace's tests through Turbo (thepackages/clisuite today). PR CI runs this andcheck-typestoo, so a failing test or type error blocks the merge.
Release / production
bun run build: build every app with Turbo, then print each workspace's size. This is the same build the pre-commit hook runs.bun run start: serve the production build.
The changelog, version bump, tag, and GitHub release are automated: you don't run them by hand. See Releases.
shadcn
bun run shadcn:update: update every shadcn/ui component, thenbun i.
bun run shadcn:update overwrites everything under web/next/src/components/ui/, so hand-edits to those files are lost. Put durable customizations in .github/scripts/shadcn-customize.ts, which re-applies them after each sync; the shadcn-sync skill covers the workflow.
Console
bun run console:roles <grant|revoke|list> [email] [role]: set a user's rung on the console role ladder.granttakesowner,adminormember, defaulting toadmin, or toownerwhile the install has none, which is how a fresh install gets its first way in.revokereturns them touser, andlistshows everyone with console access.grantandrevokeboth record a line in Activity attributed toconsole:roles, since nobody is signed in when it runs.
Runs automatically
prepareinstalls the Lefthook git hooks;postinstallnormalizes thecatalog:dependency entries. Both run for you afterbun install.
Next
- Code Quality: what
lint,format, andbuildenforce on every commit. - Architecture: the two apps and four packages these scripts drive.