Files
boc/SYSTEM_GRAPH.md
T
Bernt 05ed037fe8 pilot.landvex.com: HTTPS + Full Stack Verified
- DNS: pilot.landvex.com -> 16.170.83.169
- TLS: Let's Encrypt certificate (expires 2026-09-30)
- Nginx: reverse proxy with SSL termination
- API: https://pilot.landvex.com/api/v1/missions
- UI: https://pilot.landvex.com/
- Upload: POST /api/v1/missions/import (multipart/form-data)

Verified:
 https://pilot.landvex.com/health
 https://pilot.landvex.com/version
 https://pilot.landvex.com/api/v1/missions (list)
 https://pilot.landvex.com/api/v1/missions/:id (get)
 POST /api/v1/missions/import (video upload)
 UI loads with title 'LandveX Intelligence Lab'

Next: Pilot 001 — Break the system!
2026-07-02 17:34:19 +00:00

295 lines
7.8 KiB
Markdown

# AAMOS System Knowledge Graph
> Levande modell av systemet. Inte dokumentation — verklighet.
---
## Aktörer (Actors)
```
┌─────────┐ ┌──────────┐ ┌─────────────┐
│ Zoomer │ │ Customer │ │ Admin/Landvex│
└────┬────┘ └────┬─────┘ └──────┬──────┘
│ │ │
└───────────────┴──────────────────┘
┌─────────────┐
│ quiXzoom │
│ App │
│ React/Vite │
└──────┬──────┘
┌─────────────┐
│ nginx/ │
│ API Gateway│
└──────┬──────┘
┌───────────┼───────────┐
│ │ │
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│ Auth │ │Mission │ │ Wallet │
│Rust/ │ │Node.js │ │Node.js │
│axum │ │ │ │ │
└───┬────┘ └───┬────┘ └───┬────┘
│ │ │
└──────────┼──────────┘
┌─────────────┐
│ PostgreSQL │
│ (RDS) │
└─────────────┘
```
---
## Affärsflöden (Business Flows)
### 1. Zoomer Onboarding
```
Zoomer ──► App ──► Auth.register ──► DB.users
E-postverifiering
KYC-start ──► App ──► Identity.session ──► DB.sessions
Passfoto + Selfie ──► KYC.upload ──► S3
KYC.verify ──► AI-granskning
Godkänd ──► DB.users (kyc_status=verified)
Kan ta missions
```
### 2. Mission Flow
```
Customer ──► App ──► Mission.create ──► DB.missions
Zoomer ──► App ──► Mission.list ◄─────────────┘
Claim ──► DB.claims (status=active)
Fotografera ──► App ──► Submission.create ──► S3 (bilder)
AI-granskning ──► Mission.review
├─► Godkänd ──► DB.submissions (approved)
│ │
│ ▼
│ Payout.request ──► Stripe Connect
│ │
│ ▼
│ Zoomer får pengar
└─► Avslag ──► DB.submissions (rejected)
Zoomer kan försöka igen
```
### 3. Betalningsflöde (Customer)
```
Customer ──► App ──► Wallet.deposit ──► Stripe
DB.wallets (credits += amount)
Customer kan skapa missions
```
### 4. Lösenordsåterställning (NYTT)
```
Zoomer ──► App ──► Auth.forgot-password
API Gateway ──► Lambda (quixzoom-forgot-password)
├─► DB.password_reset_tokens (skapa token)
└─► SES (skicka e-post)
Zoomer får mejl med länk
Klickar länk ──► App ──► ResetPassword.tsx
Ange nytt lösenord ──► Lambda.verify ──► Lambda.reset
DB.users (uppdatera password_hash)
DB.password_reset_tokens (markera used)
```
---
## Beroenden (Dependencies)
### Kritiska vägar
**Om Stripe ligger nere:**
- ❌ Payout fungerar inte → Zoomers får inte betalt
- ❌ Wallet.deposit fungerar inte → Kunder kan inte köpa credits
- ✅ Mission-granskning fungerar fortfarande
- ✅ KYC fungerar fortfarande
**Om PostgreSQL ligger nere:**
- ❌ ALLT slutar fungera
- ❌ Auth, Mission, Wallet, KYC — alla döda
- ⚠️ Ingen dokumenterad backup-strategi
- ⚠️ Ingen dokumenterad disaster recovery
**Om S3 ligger nere:**
- ❌ Bilduppladdning fungerar inte
- ❌ Frontend kan inte ladda assets
- ✅ API:er fungerar fortfarande
- ✅ Auth fungerar fortfarande
**Om CloudFront ligger nere:**
- ⚠️ App laddar långsamt (direkt från S3)
- ✅ Fungerar fortfarande
**Om SES ligger nere:**
- ❌ Lösenordsåterställning fungerar inte
- ✅ Allt annat fungerar
---
## Dataflöden (Data Flows)
### Tabell: missions
Används av:
- Mission Service (CRUD)
- App (visa på karta)
- Customer (skapa)
- Zoomer (claima)
### Tabell: users
Används av:
- Auth Service (autentisering)
- KYC Service (verifiering)
- Wallet Service (transaktioner)
- App (profil)
### Tabell: claims
Används av:
- Mission Service (aktiva claims)
- Zoomer (min status)
- App (UI-state)
### Tabell: submissions
Används av:
- Mission Service (granskning)
- AI-granskning (bilder)
- Payout Service (betalning)
---
## Teknisk skuld (Technical Debt) — Graf-baserad vy
```
Manuell deployment ──► Risk för mänskliga fel
Inga automatiska tester ──► Regressioner upptäcks sent
Ingen CI/CD ──► Lång ledtid från kod till produktion
Ingen autoscaling ──► Kan inte hantera plötslig load
Bristfällig observerbarhet ──► Svårt att diagnostisera
Ingen centraliserad loggning ──► Tidskrävande felsökning
```
---
## Agentens roll i systemet
```
Bernt (AI-agent)
├─► Utvecklar ──► quixzoom.com (frontend)
├─► Administrerar ──► ouroboros-identity (auth)
├─► Deployar ──► S3 + CloudFront
├─► Underhåller ──► PostgreSQL (RDS)
└─► Konfigurerar ──► AWS-resurser
```
**Begränsningar:**
- Ingen realtidskontroll av systemet
- Begränsad kontext — kan inte se allt samtidigt
- Ingen automatisk upptäckt av nya komponenter
- Manuellt minne — måste explicit spara information
---
## Förändringspåverkan (Change Impact)
### "Vad påverkas om jag ändrar..."
**Wallet-modulen?**
- Direkt: Wallet Service, DB.wallets, DB.transactions
- Indirekt: Payout Service, App (Wallet-sida), Zoomer (utbetalningar)
- Tester som behövs: Wallet-transaktioner, Payout-integration
**KYC-flödet?**
- Direkt: KYC Service, Identity Service, DB.sessions
- Indirekt: Auth Service, App (VerifyIdentity.tsx), Zoomer (onboarding)
- Tester som behövs: KYC-verifiering, Session-hantering
**Mission-API:et?**
- Direkt: Mission Service, DB.missions, DB.claims
- Indirekt: App (karta, lista), Zoomer (claim), Customer (skapa)
- Tester som behövs: Mission-CRUD, Claim-livscykel
---
## Saknade länkar (Missing Links)
1. **Ingen koppling mellan KYC och Wallet**
- Zoomer kan ha verifierad KYC men ingen wallet
- Borde: KYC godkänd → auto-skapa wallet
2. **Ingen koppling mellan Submission och Notification**
- Zoomer får inte veta när submission granskats
- Borde: Submission godkänd/avslagen → push-notis
3. **Ingen koppling mellan Customer och Analytics**
- Customer ser inte mission-statistik
- Borde: Dashboard med mission-performance
4. **Ingen koppling mellan Agent och Monitoring**
- Bernt vet inte om systemet är nere
- Borde: Agent får alerts, kan reagera automatiskt
---
*Denna graf är levande — uppdateras när systemet förändras.*
*Genererad av Bernt (AI-agent) *
*Senast uppdaterad: 2026-06-30*