# quiXzoom — Launch Strategy 2026-06-04 Skapad av Bernt efter fullständig genomgång av kodbas, DB, nginx, infra. ## Verklighetsläge (ärligt) | Dimension | Nuläge | |---|---| | API-infra (Node + Rust) | ✅ Stabil, fixad, exponerad publikt | | DB-schema | ✅ Väldesignat, 214 missions, rätt tabeller | | Zoomer-auth (JWT RS256) | ✅ Funkar, ej enterprise | | iOS-app | ⚠️ APNs mock, App Store ej submittat | | Orderer/customer onboarding | ❌ Hårdkodad mock-data | | Inbetalningar | ❌ Stripe mock (ingen live-nyckel) | | Utbetalningar | ❌ Swish/Stripe Connect mock | | KYC/BankID | ❌ Simulerad data | | LandveX → quiXzoom koppling | ❌ Inte aktiv | | Skalbarhet | ⚠️ Single EC2, ingen LB | --- ## Strategi — 4 parallella spår ### 🔴 SPÅR 1 — iOS LAUNCH (deadline: 15 juni, 11 dagar) **Blockers som MÅSTE lösas innan App Store submission:** 1. **APNs Production Certificate** — `push-notifications.mjs` är `Mock APNs`. Behövs: - Apple Developer Account → Certificates → APNs Auth Key (.p8) - `KEY_ID`, `TEAM_ID`, `BUNDLE_ID` → in i ecosystem/env - Byt ut `sendMockAPNs()` mot `node-apn` / `@parse/node-apn` - Deadline: **11 juni** (2 dagar buffer för review) 2. **App Store submission** — deadline **13 juni** - Finns iOS-app byggd? Mac build server (AWS Mac EC2) — Xcode finns men act_runner ej registrerad - Johan: tickets AMOS-51/52/53/66/67/68 blockerar CI/CD - Alternativ: manuell build och upload via Transporter 3. **Push notification live-test** — testa mot riktiga device_tokens **Vem äger:** Johan (CTO/Sven) + iOS-app-lagret. Bernt kan fixa APNs-integrationen i backend. --- ### 🟠 SPÅR 2 — BETALNINGAR (deadline: soft-launch, ~1 juli) **Minsta möjliga för att ta riktiga pengar:** **Fas 2a — Inbetalningar (orderers betalar för missions):** - Behövs: `STRIPE_SECRET_KEY` (live) + Stripe-konto aktiverat - Bygga: orderer checkout-flow (välj mission-typ, pris, betala) - Prissättning finns i `pricing.mjs` - DB: `orderer_profiles` och `organizations` är tomma → orderer-onboarding **Fas 2b — Utbetalningar (zoomers får betalt):** - Swish Business API (kräver Swish-avtal med bank) ELLER - Stripe Connect (kräver `stripe_account_id` per zoomer, onboarding-flow) - Rekommendation: **Swish först** (enklare för svenska zoomers, snabbare onboarding) - DB-schema är redo: `payouts.swish_number`, `profiles.swish_number` - Behövs: Swish Business API-certifikat + Swish-handelscertifikat **Vem äger:** Winston/Rufus för banker + avtal. Bernt bygger integrationen när nycklar finns. --- ### 🟡 SPÅR 3 — KYC + ENTERPRISE AUTH (deadline: ~1 juli) **Minsta möjliga för att lagligt betala ut till zoomers:** - **BankID** — krävs för utbetalning (skatteidentitet, F-skatt/A-skatt) - Leverantör: Signicat, BankID On-File, Onfido SE - `profiles.personal_number_hash` + `identity_verified` finns i DB ✅ - Kostnader: ~1-3 kr/verifiering - **Orderer-autentisering** — B2B-kunder - Enklare: e-post + org.nr-verifiering (Bolagsverket API) - Enterprise: SSO via SAML/OIDC **Vem äger:** Dennis/Kjell (COO/Legal för avtal). Bernt bygger integrationen. --- ### 🟢 SPÅR 4 — LANDVEX → QUIXZOOM (deadline: ~15 juli) **Kopplingen som gör quiXzoom självdrivande:** Flödet som är designat men inte aktiverat: ``` LandveX detekterar anomali → auto_event_monitors triggas → event_template väljs (reward, radius, instruktioner) → mission skapas i quixzoom.missions → push till zoomers i närheten ``` Vad som behövs: 1. `event_templates` populeras med reella templates (livboj, brygga, sensor etc) 2. LandveX `engine.mjs` POST till `/api/quixzoom/missions` vid anomali (istället för in-memory) 3. `auto_event_monitors` aktiveras per asset/sensor 4. Push till zoomers via APNs (kräver Spår 1) **Vem äger:** Bernt kan bygga hela pipeline. LandveX-assets behöver vara live (ej hårdkodade). --- ## Tidsplan ``` JUNI JULI 4 8 11 15 22 29 6 13 [SPÅR 1 — iOS] ──────────────┤APNs fix │──────────────────App Store ├── LIVE 15/6 [SPÅR 2 — Betalningar] [Winston/avtal]────────────────────────────── [Bernt bygger]────────────────── ├── Swish live ~1/7 [SPÅR 3 — KYC] [Dennis/avtal]────────────────────────────── [Bernt bygger]────────────── ├── BankID live ~1/7 [SPÅR 4 — LandveX koppling] [Bernt bygger]────────────── ├── Live ~15/7 ``` --- ## Uppgiftsfördelning just nu | Vem | Uppgift | Deadline | |---|---|---| | **Johan/Sven** | Registrera act_runner på Mac EC2 | 8 juni | | **Johan/Sven** | Manuell iOS build + TestFlight | 10 juni | | **Bernt** | APNs-integration (ersätt mock) | 9 juni | | **Bernt** | Orderer onboarding-flow i DB | 12 juni | | **Winston/Rufus** | Stripe-avtal + live-nycklar | 10 juni | | **Winston/Rufus** | Swish Business-avtal | 15 juni | | **Dennis/Kjell** | BankID-leverantörsavtal | 15 juni | | **Erik** | Godkänn App Store-submission | 13 juni | --- ## Nästa agent-tasks (Bernt kör direkt) - [ ] **TASK-QZ-001** APNs mock → live (`push-notifications.mjs`) - [ ] **TASK-QZ-002** Geo-filter missions (delvis klar via subagent) - [ ] **TASK-QZ-003** Orderer registration endpoint (DB-kopplat, ej mock) - [ ] **TASK-QZ-004** `event_templates` seed-data + LandveX webhook-endpoint - [ ] **TASK-QZ-005** Stripe onboarding-flow (när nyckel finns) - [ ] **TASK-QZ-006** Swish-integration (när certifikat finns) --- ## Vad Bernt KAN köra utan att vänta på någon 1. APNs backend-integration (ersätter mock, redo när Johan ger KEY_ID/TEAM_ID) 2. Orderer onboarding-flow (register → org-profil → mission-beställning → RDS) 3. LandveX webhook-endpoint + event_templates seed 4. Missions geo-filter (nästan klar) 5. Stripe checkout-flow (redo att aktivera när Winston ger live-nycklar)