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

ShapeDefault stack familyStarter shapeEscalate when
Static content surfaceStatic Astro or static HTMLPages, content collections, static assetsAuth, sessions, APIs, or personalized server rendering appear
Browser workflow appWeb/PWASPA or server-rendered web app, IndexedDB where usefulNative permissions or reliable background work dominate
Local-only mobile appNative mobilePlatform UI, local database, export pathiOS and Android are both hard launch requirements
Cross-platform mobile appExpo/React Native or FlutterOne shared app with platform-specific escape hatchesOne platform’s UX or permissions become the product
Local desktop appTauri, Electron, Windows App SDK, WailsDesktop shell plus local storage or sidecarBrowser/PWA can satisfy distribution and API needs
CLI plus libraryGo, Rust, Python, or Node CLILibrary core plus thin CLINon-technical users need a GUI
Backend plus admin UIGo, Node, Python, Rails/Laravel, or managed backendAPI, database, migrations, minimal admin surfaceA local/static app can avoid server ownership
AI-native appDesktop/web/backend plus MCP/tools/sandboxWorkspace isolation, tool runner, audit log, local stateAI 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.