diff --git a/affordances/officer/core/starting-an-app.md b/affordances/officer/core/starting-an-app.md new file mode 100644 index 0000000..9f8403c --- /dev/null +++ b/affordances/officer/core/starting-an-app.md @@ -0,0 +1,56 @@ +--- +name: Starting an app +description: Use when asked to create, scaffold or start a new app or project, and when asked to run one. There is a template to begin from, and a specific way the owner expects a dev server to be started. +version: 1 +--- + +**Do not scaffold a new app from scratch.** There is a template, it is the agreed starting point, and it +carries decisions that took a while to settle. + +```bash +git clone git@gitea.officer.dev:templates/template-react.git +``` + +Bun · Hono · React 19 · Tailwind v4 · shadcn/ui · Postgres with Drizzle. A JSON API at `/api` and a React +app at `/`, over one query layer. + +**SSH, not HTTPS.** `https://gitea.officer.dev/…` prompts for a username and fails in a non-interactive +shell; the SSH remote is already authenticated. If SSH is being refused for a stretch — the public host is +behind a proxy that rate-limits it — `ssh://git@100.64.0.13:10023/templates/template-react.git` is the same +repository over the tailnet. + +## Then read its own documentation, and do step 1 + +The template documents itself. **`README.md` step 1 is a rename** — everything project-specific is called +`app`, and a case-sensitive search for `app`, `App` and `APP` finds all of it. Thirty seconds at the start, +a chore forever after. Do it before the first commit. + +Its `CLAUDE.md` points at `CONVENTIONS.md` (React patterns, feature folders, manager hooks), +`docs/DATABASE.md` and `docs/SURFACES.md`. Read those rather than inferring house style from the code — +they exist so the same argument is not had twice. + +Drop the template's git history and start your own unless told otherwise: it is a starting point, not an +upstream to track. + +## Running it — always as a background job + +```bash +bun dev +``` + +**Start it in the BACKGROUND, never in the foreground.** Two reasons, and either one is sufficient: + +- **A dev server does not exit.** Run in the foreground it blocks the turn until the tool times out, and + the timeout is reported as a failure of a thing that was working perfectly. +- **The owner wants to watch it.** A background job gets Officer's live panel — the same one they would + see running it themselves — so they can read the output, see the port, and stop it. Run any other way it + is invisible, and stopping it means asking you. + +`bun dev` prints steadily, so the panel fills immediately. `predev` regenerates the index first; that is +normal and takes a moment. + +The general rule about background output still applies — see the background-jobs affordance. It matters +less here only because this particular command is already talkative. + +**Say the URL when it comes up.** The port is in `.env` and the template's README, and the first thing +anybody wants after "it's running" is where to look.