Setup Wizard
When you log into a fresh Quazzar Cloud OS for the first time, a full-screen wizard pops up. Pick a goal and Quazzar pre-installs the matching app stack, primes Drive, and opens the right invite flow — all in two clicks.
This is Phase В.2 of the GA roadmap.
Goals
| Goal | What you get |
|---|---|
| File storage for me + family | Drive (always-on) + invite slots for two family members. |
| Dev environment | Container Manager + Web Terminal + reverse-proxy with auto-domain hint. |
| Family server | Drive + Calendar + Mail (with smarthost prompt) + Plex + Photos. |
| Business / team | Workspace (Docs/Sheets/Slides/Notes) + Tickets + Whiteboard + audit log. |
| Custom | Skip the wizard, dashboard as-is. |
The five-card landing screen also has a top-of-page link Already running self-hosted? Import → which routes to the Import Wizard.
Re-running
Open Settings → General → Re-run setup wizard. Confirm and the wizard re-opens. Idempotent — already-installed apps stay; missing apps install. Useful when you want to switch a node’s purpose without a full reinstall.
How it works
The wizard renders client-side in pages/SetupWizardPage.tsx. On goal selection it calls POST /api/setup/run with the template id; the runner walks the template’s steps:
install_app→ goes through the existing app-installer chokepoint (so license gating, sandbox, and audit-log all behave normally).server_mode→ flips the server-mode flag.invite_slots→ pre-creates N empty invite tokens.hint_card→ sets a dashboard banner the user sees on first visit.enable_audit→ flips the audit toggle.
Per-step progress streams via the existing /api/events SSE channel. The run state persists in setup_runs so the user can leave the screen — when they come back, the progress picks up.
Templates
Templates ship as JSON under internal/setup/templates/ and are embedded into the binary via //go:embed. Each one declares an ordered list of steps. Future templates ship without code changes.
Plans
| Tier | Setup wizard | Notes |
|---|---|---|
| Free (Community) | ✅ | Paid apps inside templates (Mail, Photos…) show a 🔒 badge with an Upgrade CTA — they don’t silently skip. |
| Pro / Team / Enterprise | ✅ | Same wizard; gated apps install normally. |
profiles.setup_completed (boolean, defaults false) gates the auto-popup. Set to true on dismiss or first successful run.
API
GET /api/setup/state → { completed, last_template, can_rerun }
GET /api/setup/templates → [{ id, name, description, steps:[{label}] }]
POST /api/setup/run { template_id } → 202 { run_id }
GET /api/setup/runs/:id → run state + last progress
POST /api/setup/dismiss → 204All session-authed; the run + reset endpoints additionally require admin role on the local OS (regular tenants don’t see another admin’s wizard).