App Shapes
Name the app shape before naming a framework. Most bad stack choices happen when a team says “React Native app” or “Go backend” before saying what the product actually is.
Common Shapes
| Shape | Default stack family | Starter shape | Escalate when |
|---|---|---|---|
| Static content surface | Static Astro or static HTML | Pages, content collections, static assets | Auth, sessions, APIs, or personalized server rendering appear |
| Browser workflow app | Web/PWA | SPA or server-rendered web app, IndexedDB where useful | Native permissions or reliable background work dominate |
| Local-only mobile app | Native mobile | Platform UI, local database, export path | iOS and Android are both hard launch requirements |
| Cross-platform mobile app | Expo/React Native or Flutter | One shared app with platform-specific escape hatches | One platform’s UX or permissions become the product |
| Local desktop app | Tauri, Electron, Windows App SDK, Wails | Desktop shell plus local storage or sidecar | Browser/PWA can satisfy distribution and API needs |
| CLI plus library | Go, Rust, Python, or Node CLI | Library core plus thin CLI | Non-technical users need a GUI |
| Backend plus admin UI | Go, Node, Python, Rails/Laravel, or managed backend | API, database, migrations, minimal admin surface | A local/static app can avoid server ownership |
| AI-native app | Desktop/web/backend plus MCP/tools/sandbox | Workspace isolation, tool runner, audit log, local state | AI is a feature, not the product architecture |
Boundary Patterns
Local-Only
Use local storage, file export, and device backup. Avoid accounts and sync until multi-device behavior is a paid or retention-critical feature.
Static Plus Shareable
Use static output and a protected hosting layer. In this lab, private previews default to tailnet routes; shareable protected surfaces use Cloudflare Access or equivalent protection.
Desktop Shell Plus Sidecar
Use this when the UI needs desktop affordances but the heavy work belongs outside the renderer. Examples: file watching, SQLite indexing, local model servers, native API adapters.
Backend Plus Thin UI
Use a backend when shared state, server-side trust, jobs, integrations, payments, or auditability are the reason the product exists.
AI App Plus Tools
Use explicit tool boundaries. MCP servers, subprocesses, browsers, file access, and code execution need permission, sandboxing, scope, and audit logs.