# `_app_template_` (scaffold-resident) Skeleton for every user app. **Lives in the scaffold container, not the user's repo.** Users never see this directly — the scaffold instantiates from it when a new app is needed. ## How it gets instantiated `pikku create-app ` (landed in #58) reads this directory from the scaffold's known path (`/opt/fabric/_app_template_/` inside the container) and: 1. Copies every file to `apps//` in the user's repo 2. Substitutes placeholders — `app`, `@germantax/app`, `7104`, `App`, `0.0.1`, `2026-04-17T11:42:52Z` 3. Adds to yarn workspaces, runs `yarn install` 4. Regenerates Caddyfile to route to the new app's dev server 5. Stamps `package.json` → `fabric.templateVersion` with the current skeleton version (for 3-way merge on later `upgrade-app`) On first scaffold boot against an empty `apps/` dir, the scaffold auto-runs `create-app app` to seed the default. ## Placeholders | Placeholder | Example | Notes | |---|---|---| | `app` | `admin` | Dir name + workspace slug | | `@germantax/app` | `@germantax/admin` | `package.json` `name` | | `7104` | `7105` | Next free port from 7104+ | | `App` | `Admin` | ``, app header | | `0.0.1` | `0.0.1` | Version at instantiation — ancestor for `upgrade-app` | | `2026-04-17T11:42:52Z` | ISO timestamp | Audit | ## What's here - Vite + Mantine + TypeScript + ESLint + Stylelint config - Root providers wiring (`main.tsx`) — react-query, router, i18next, Pikku RPC - Theme entry (`src/theme.css`) — imports `@germantax/components/themes/default.css`, allows local overrides - Default routes: `/login`, `/logout`, `/hello` - Auth config scaffold (Auth0 active; GitHub / Google / Microsoft / Passwordless as `.ts.inactive` templates) - EN locale baseline ## What's NOT here - **Widgets / components / themes** → `@germantax/components` in the user's template repo (shared across every app) - **Backend functions** → `@germantax/functions` - **App-specific pages / wirings** — land in the instantiated `apps/<name>/src/pages/` after creation ## Upgrading an app to this skeleton version ```sh pikku upgrade-app app # 3-way merge (see #57) ``` Uses `package.json` → `fabric.templateVersion` as the ancestor. Untouched files update; edited files get conflict markers or interactive diff.