Files
boc/quixzoom-shop/SHOP_STATUS.md
T

190 lines
6.3 KiB
Markdown
Raw Normal View History

# quiXzoom Shop — Status
## quiXzoom Field Program
| Nivå | Uppdrag | Krav | Förmåner |
|------|---------|------|----------|
| **Contributor** | 09 | Registrerad användare | Digital profil, digital verifiering |
| **Field Contributor** | 10+ | 10 godkända uppdrag | 🔓 Field Gear Store (västar, jackor, utrustning) |
| **Verified Field Contributor** | 100+ | 100 godkända uppdrag + 95% godkännandegrad + verifierad identitet + inga allvarliga policyöverträdelser | 🔓 Field ID Kit (personligt ID-kort, hållare, lanyard) + publik verifieringssida |
## ✅ Byggt och klart
### Backend (`quixzoom-shop/`)
- **FastAPI** service på port 8087
- **PostgreSQL** databas `quixzoom_shop`
- **19 produkter** (18 Field Gear + 1 Field ID Kit)
- **JWT-auth** för att verifiera Zoomers
- **Tier-system** med mission-gating och kvalitetskrav
- **Stripe-betalning** integrerad
- **Publik verifieringssida** för ID-kort
### API Endpoints
| Endpoint | Auth | Status |
|----------|------|--------|
| `GET /health` | Nej | ✅ |
| `GET /api/products` | Nej (tier-filter) | ✅ |
| `GET /api/products/{id}` | Nej | ✅ |
| `GET /api/eligibility` | Ja | ✅ (legacy) |
| `GET /api/tier` | Ja | ✅ |
| `POST /api/orders` | Ja | ✅ |
| `GET /api/orders` | Ja | ✅ |
| `GET /api/orders/{id}` | Ja | ✅ |
| `POST /api/payment/create-intent` | Ja | ✅ |
| `POST /api/payment/webhook` | Stripe | ✅ |
### Webbsidor
| Sida | Status |
|------|--------|
| `/` — Produktlista med kundvagn + tier-badge | ✅ |
| `/product/{id}` — Produktdetalj | ✅ |
| `/checkout` — Stripe-betalning | ✅ |
| `/verify/{id}`**Publik verifieringssida för ID-kort** | ✅ |
### Verifieringssida (`/verify/{contributor_id}`)
- ✅ Sök på Contributor ID
- ✅ Visar status (giltigt/ogiltigt)
- ✅ Visar contributor-info (namn, initialer, stats)
- ✅ Förklarar vad Verified Field Contributor innebär
- ✅ Info för fastighetsägare och kommuner
- ✅ QR-kod leder till denna sida
### App-integration
- Ny **Shop-tab** (🛒) i bottom navigation
- **ShopScreen.tsx** med tre tillstånd:
- Contributor (0-9): Låsskärm med progress
- Field Contributor (10+): WebView med shoppen + tier-banner
- Verified Field Contributor (100+): WebView med shoppen + verified-banner
- **Eligibility-check** via `/api/tier`
- Token injectas via `localStorage`
### Betalningsflöde (Stripe)
1. ✅ Kundvagn i localStorage
2. ✅ Order skapas i backend
3. ✅ Stripe PaymentIntent skapas
4. ✅ Stripe Elements för kortinmatning
5. ✅ Webhook för betalningsbekräftelse
6. ✅ Order uppdateras till `paid`
## 🔄 Kvar att göra
### Produktion
- [ ] Sätta upp nginx + SSL för `shop.quixzoom.com`
- [ ] Konfigurera riktiga Stripe-nycklar
- [ ] Sätta upp Stripe webhook endpoint
- [ ] systemd service aktivera
### Produktbilder
- [ ] Ladda upp riktiga bilder för alla 19 produkter
- [ ] CDN eller S3 för bildhosting
### Orderhantering
- [ ] Admin-panel för ordrar
- [ ] Orderstatus-flöde (pending → paid → shipped → delivered)
- [ ] Fraktintegration
- [ ] E-postbekräftelser
### Field ID Kit
- [ ] ID-kort design (namn, Contributor ID, QR-kod, giltighetsdatum)
- [ ] QR-kod generering i appen/webben
- [ ] Beställningsflöde för ID Kit (gratis för Verified)
## 🚀 Snabbstart produktion
```bash
# 1. Kopiera service-filen
sudo cp quixzoom-shop.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable quixzoom-shop
# 2. Uppdatera Stripe-nycklar
sudo systemctl edit --full quixzoom-shop
# Ändra STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET
# 3. Starta
sudo systemctl start quixzoom-shop
# 4. Nginx-konfiguration
sudo cp nginx-shop.conf /etc/nginx/conf.d/
sudo nginx -s reload
# 5. SSL (Let's Encrypt)
sudo certbot --nginx -d shop.quixzoom.com
```
## 📊 Produkter
### Field Gear Store (10+ uppdrag)
| SKU | Namn | Pris (kr) | Kategori |
|-----|------|-----------|----------|
| VEST-001 | Field Vest | 1 299 | kläder |
| JACKET-001 | Mission Shell | 2 499 | kläder |
| PANTS-001 | Field Pants | 1 799 | kläder |
| BASE-001 | Base Layer | 899 | kläder |
| BEANIE-001 | Field Beanie | 499 | accessoarer |
| GLOVES-001 | Field Gloves | 799 | accessoarer |
| STRAP-001 | Capture Strap | 599 | utrustning |
| POUCH-001 | Utility Pouch | 699 | utrustning |
| COIN-001 | Ref. Coin | 199 | accessoarer |
| LIGHT-001 | Pocket Light | 399 | utrustning |
| POWER-001 | Power Module | 1 499 | utrustning |
| CABLE-001 | Cable Kit | 599 | utrustning |
| RAIN-001 | Rain Cover | 799 | utrustning |
| BAG-001 | Field Bag | 1 999 | utrustning |
| BELT-001 | Tactical Belt | 899 | accessoarer |
| SOCKS-001 | Field Socks | 399 | kläder |
| PATCH-001 | quiXzoom Patch | 299 | accessoarer |
| BOTTLE-001 | Field Bottle | 699 | utrustning |
### Verified Field ID Kit (100+ uppdrag, 95% approval)
| SKU | Namn | Pris | Kategori |
|-----|------|------|----------|
| ID-KIT-001 | Field ID Kit | Gratis | verified |
Innehåll:
- Personligt verifierat ID-kort
- ID-hållare
- Lanyard
- Digital verifieringsmärke
- Publik verifieringssida via QR-kod
## 🔒 Säkerhet
- JWT-token valideras på varje order-request
- Mission-count + approval rate + identity + violations hämtas från databas
- SQL-injection skyddad via asyncpg parameteriserade queries
- Stock-koll innan order skapas (transaction)
- Stripe webhook signerad och verifierad
- Verifieringssida visar endast publik info (ingen känslig data)
## 📁 Filer
```
quixzoom-shop/
├── main.py # FastAPI backend
├── requirements.txt # Python dependencies
├── Dockerfile # Docker image
├── docker-compose.yml # Docker Compose
├── nginx-shop.conf # Nginx reverse proxy
├── quixzoom-shop.service # systemd service
├── README.md # Översikt
├── STRIPE_SETUP.md # Stripe konfiguration
├── SHOP_STATUS.md # Denna fil
├── templates/
│ ├── shop.html # Produktlista med tier-badge
│ ├── product.html # Produktdetalj
│ ├── checkout.html # Stripe-betalning
│ └── verify.html # Publik verifieringssida
└── static/ # Bilder, CSS, JS
```
## 🔗 URL:er
| Miljö | URL |
|-------|-----|
| Lokal dev | `http://localhost:8087` |
| Produktion | `https://shop.quixzoom.com` |
| Verifiering | `https://shop.quixzoom.com/verify/{contributor_id}` |