# Self-Onboarding — Full Stack Build Result **Datum:** 2026-06-05 **Uppdragsgivare:** Erik **Utförare:** OpenClaw subagent --- ## ✅ Vad som levererades ### 1. Backend — `/api/onboarding/price-calc` (NY endpoint) **Endpoint:** `GET /api/onboarding/price-calc?revenue=` **Status:** ✅ LIVE och testad **Publik:** Ja (ingen auth krävs) ```json // curl -s 'http://localhost:3100/api/onboarding/price-calc?revenue=20000000' { "ok": true, "revenue_sek": 20000000, "annual_sek": 78000, "monthly_sek": 6500, "floor_applied": true, "capped": false, "band": "growth", "raw_rate_sek": 30000, "floor_sek": 78000, "rate": 0.0015 } ``` **Ändrade filer:** - `/opt/amos/api/onboarding/create-org.mjs` — lade till `calcAnnualFee` import + `/price-calc` GET route - `/opt/amos/services/amos-core/server.mjs` — mountade create-org router PUBLIC (före auth middleware), lade till `/api/onboarding/create-org` och `/api/onboarding/price-calc` i public whitelist ### 2. Backend — `POST /api/onboarding/create-org` (nu MOUNTAD) **Status:** ✅ Mountad och testad E2E **Endpoint:** `/api/onboarding/create-org` — publik, ingen auth **DB-fix:** Skapade `organizations`-tabell i `amos`-databasen (create-org.mjs använde DATABASE_URL från .env → `amos` DB, inte `ouroboros`). `prexo_users` fanns redan. ### 3. Frontend — Desktop + Mobil onboarding **URL:** `https://amos.wavult.com/auth/onboarding.html` **HTTP 200:** ✅ Bekräftad **Fil:** `/opt/amos/public/auth/onboarding.html` (23 KB) **Features:** - 3-stegs flöde med progress bar + smooth animation - Steg 1: Org-namn, bransch, storlek, omsättningsslider med **live prisberäkning** - Steg 2: Admin-namn, email, lösenord (styrkeindikator), roll - Steg 3: Modulval (6 st, checkbox-tiles) - Submit → POST /api/onboarding/create-org → redirect till dashboard - Apple native design language (SF Pro, #007AFF, #34C759, #FF3B30, border-radius 13px) - Dark mode (`prefers-color-scheme: dark`) - Mobiloptimerad (min 320px, max 600px centrerat på desktop) - Inline felhantering, loading state på knapp ### 4. iOS PWA — Native onboarding **URL:** `https://amos.wavult.com/ios-onboarding/` **HTTP 200:** ✅ Bekräftad **Filer:** - `/opt/amos/public/ios-onboarding/index.html` — iOS-native PWA - `/opt/amos/public/ios-onboarding/manifest.json` — PWA install manifest - `/opt/amos/public/ios-onboarding/icon-{180,192,512}.png` — App icons **Features:** - `apple-mobile-web-app-capable` + `black-translucent` status bar - Safe area insets (`env(safe-area-inset-*)`) - iOS-stil nav bar med Tillbaka/Hoppa över - Progress dots (iOS-stil) - Lista-UI för formulär (iOS settings-utseende) - Revenue slider med live prisberäkning - Bottom-anchored CTA (thumb-reach) - Samma 3-stegs flöde som desktop --- ## E2E-testresultat | Test | Resultat | |------|----------| | `price-calc?revenue=20000000` | ✅ `{ band: "growth", monthly_sek: 6500 }` | | `POST /api/onboarding/create-org` | ✅ Org skapad i DB | | JWT returnerat | ✅ RS256-signerat token | | Redirect | ✅ `/ceo` dashboard | | Org i DB | ✅ | **E2E test org:** - `org_id`: `ed0d331d-3094-4367-a7cf-40ce6e234425` - `org_name`: `TestBolag AB` - `email`: `test-onboard-1780658624@testbolag.se` - `redirect`: `/ceo` --- ## Live URLs | Resurs | URL | |--------|-----| | Desktop onboarding | https://amos.wavult.com/auth/onboarding.html | | iOS PWA onboarding | https://amos.wavult.com/ios-onboarding/ | | Price-calc API | https://amos.wavult.com/api/onboarding/price-calc?revenue=10000000 | | Create-org API | POST https://amos.wavult.com/api/onboarding/create-org | --- ## Vad som kvarstår (om något) 1. **Riktiga iOS App Icons** — placeholder PNG-ikoner genererades (enfärgade blå). Bör ersättas med riktig AAMOS-logotyp för production. 2. **Email-verifiering** — create-org sätter `email_verified=true` direkt. Om man vill ha verifieringsmail bör det läggas till. 3. **Rate limiting** — create-org är publik utan rate limit. Bör läggas till för production. 4. **Signup.html redirect** — gamla `/auth/signup.html` är kvar. Kan läggas till redirect till `/auth/onboarding.html`. 5. **DB-konsolidering** — `organizations`-tabellen skapades i `amos`-databasen. Bör synkas med `ouroboros`-DB om multiorg-systemet förväntar sig det där.