Convention: Pipeline Stages
Convention: Pipeline Stages
Every consumer-facing project follows a four-stage pipeline from prototype to production, with dedicated repos at each stage.
Rule
Projects progress through four stages: Playground, Svelte Sandbox, App, App Store. Each stage has a dedicated repo following the naming pattern
{project}-playground, {project}-svelte-playground, {project}-app, {project}-api. Use the word stages, never "phases" (phases are a deprecated plan-era concept).Rationale
Without enforced stages, agents skip prototyping and ship unreviewed designs straight to production. The playground gate ensures Lucas approves on phone before any SvelteKit work begins. The naming convention lets any agent find the right repo for any project at any stage without guessing. Using "stages" instead of "phases" prevents confusion with the deprecated plan decomposition model.
The Four Stages
| Stage | Repo Pattern | Purpose | Tech |
|---|---|---|---|
| <strong>1. Playground</strong> | <code>{project}-playground</code> | Static HTML/CSS prototypes. Mobile-first. No framework, no data bindings. Lucas approves on phone before anything moves forward. | Vanilla HTML, CSS, JS |
| <strong>2. Svelte Sandbox</strong> | <code>{project}-svelte-playground</code> | Playground pages promoted into SvelteKit components. Copy-paste from playground, add data bindings and routing. Still static adapter. | SvelteKit (adapter-static) |
| <strong>3. App</strong> | <code>{project}-app</code> | Production SvelteKit application. Real API integration, auth (Keycloak), full routing. Deployed to k3s via ArgoCD. | SvelteKit (adapter-node or adapter-static) |
| <strong>4. App Store</strong> | <code>{project}-app</code> + Capacitor | Native mobile wrapper via Capacitor. Same SvelteKit app, bundled for iOS/Android. Only reached after App stage is stable. | Capacitor + SvelteKit |
Stage Gate Rules
- Playground approved on phone before promoting to Svelte Sandbox.
- Svelte Sandbox pages are literal copy-paste from playground + data bindings —
.sveltefiles ARE HTML. - App stage requires local dev validation (Vite-on-host or k3s dev namespace) before prod deploy.
- App Store stage requires App stage stable for days before Capacitor wrapping.
Examples
| Correct | Incorrect | Why |
|---|---|---|
| <code>westside-playground</code> | <code>westside-prototypes</code> | Naming convention requires <code>-playground</code> suffix |
| <code>mcd-tracker-svelte-playground</code> | <code>mcd-tracker-sandbox</code> | Must use <code>-svelte-playground</code> for stage 2 |
| "Move to stage 3" | "Move to phase 3" | Stages, not phases. Phases are deprecated plan-era terminology. |
| Prototype in <code>westside-playground</code>, then promote | Build directly in <code>westside-app</code> | Skipping the playground gate means unreviewed design hits production |
| <code>pal-e-playground</code> is CSS guide only | Put westside prototypes in <code>pal-e-playground</code> | Hub playground is the CSS guide. Each project owns its own playground repo. |
Enforcement
Convention only. Agents are expected to check this convention before creating repos or referencing pipeline progression. Betty Sue validates during ticket review that work targets the correct stage repo.
Related
convention-kanban-over-plans— why plans are obsolete and boards are the decomposition toolconvention-sveltekit-spa— SvelteKit app conventions for stages 2-4convention-frontend-css— CSS conventions across stagesconvention-playground-data-contracts— data contract comments in playground HTMLconvention-blocker-labels— blocker labels that can gate stage transitions