Default Picks
Defaults are starting points. Override them with product constraints.
| Product shape | Default pick | Avoid trigger |
|---|---|---|
| Docs, reports, content-heavy sites, prototypes | Astro static output | Needs sessions, Actions, bindings, SSR, or APIs |
| Private/internal lab preview | Caddy tailnet route | Needs shareable protected access without tailnet |
| Shareable static surface | R2/Worker/Access-style protected static hosting | Needs heavy local service behavior |
| Installable/offline workflow app | PWA/web-first | Needs restricted native permissions or deep background execution |
| Android-first app | Kotlin + Jetpack Compose + Room/WorkManager as needed | Equal iOS launch matters more than Android depth |
| Android+iOS standard app | Expo/React Native | Custom rendered brand UI dominates or native modules dominate |
| Custom cross-platform UI | Flutter | Platform-native feel and platform-specific UX matter more |
| New Windows-only native app | Windows App SDK + WinUI 3 | Existing WPF/WinForms app only needs incremental modernization |
| Small local-first desktop app | Tauri 2 | Chromium consistency, Node modules, or mature Electron packaging matters more |
| Keyboard-heavy desktop productivity app | Electron + sidecar | Footprint/security constraints dominate and WebView differences are acceptable |
| Go-backed local service/admin UI | Go backend with embedded Vite/React UI | Static/PWA is enough or a managed backend is clearly cheaper |
| Developer automation | Go or Rust CLI | Non-technical users need GUI onboarding |
| AI-native local assistant | Desktop/web shell + SQLite + MCP + sandboxed tools | AI is a minor feature, not the product boundary |
Lab Biases
- Prefer static/content and local-first options before adding servers.
- Prefer native Android for permission-heavy Android-first apps.
- Prefer explicit quality gates over framework enthusiasm.
- Prefer one maintainer-friendly repo/runtime unless the product truly needs more.
- Prefer official docs and source examples before AI-generated starter code.