# 🎯 Hiérarchie des Tiers - Web Sentinel

## Vision Commerciale (7 novembre 2025)

### 🆓 FREE - Usage Anonyme
**Objectif:** Découverte sans engagement

| Caractéristique | Valeur | Explication |
|-----------------|--------|-------------|
| **Compte requis** | ❌ NON | Usage sans authentification |
| **Max domaines** | 5 | Scan DNS limité pour tester |
| **Max utilisateurs** | 0 | Pas de compte créé |
| **Scan SAST** | ❌ | Pas d'accès au code source |
| **Fichiers SAST/mois** | 0 | - |
| **Export HTML** | ❌ | Résultats affichés à l'écran uniquement |
| **Tests invasifs** | ❌ | Scan passif uniquement |
| **Accès API** | ❌ | CLI uniquement |
| **Multi-user** | ❌ | - |

**Use Case:**
```bash
# Sans authentification
web-sentinel scan example.com
# → Scan DNS + Headers + TLS (5 domaines max total)
```

---

### 🚀 STARTER - Premier Compte
**Objectif:** Motivation à l'achat (fonctionnalité SAST découverte)

| Caractéristique | Valeur | Explication |
|-----------------|--------|-------------|
| **Compte requis** | ✅ OUI | Inscription gratuite |
| **Max domaines** | ∞ (illimité) | Scan DNS sans limite |
| **Max utilisateurs** | 1 | Utilisateur principal |
| **Scan SAST** | ✅ | **Accès limité pour tester** |
| **Fichiers SAST/mois** | **10** | Quota mensuel pour découvrir |
| **Taille max** | 5 MB | Limite taille totale |
| **Export HTML** | ✅ | Partage des résultats |
| **Tests invasifs** | ❌ | Scan passif |
| **Accès API** | ❌ | CLI uniquement |
| **Multi-user** | ❌ | Compte personnel |

**Use Case:**
```bash
# Avec authentification
web-sentinel login --api-key starter_key_xyz

# DNS illimité
web-sentinel scan site1.com
web-sentinel scan site2.com
# ...

# SAST limité (10 fichiers/mois)
web-sentinel scan mysite.com --source ./my-code
# → Scanne jusqu'à 10 fichiers ce mois-ci
# → Reset automatique le 1er du mois
```

**Stratégie commerciale:**
- 🎁 Gratuit avec compte
- 🔓 Débloquer SAST pour découvrir la valeur
- 📈 Frustration à 10 fichiers → Upgrade vers PRO

---

### 💼 PRO - Usage Professionnel
**Objectif:** Développeur/PME qui veut automatiser

| Caractéristique | Valeur | Explication |
|-----------------|--------|-------------|
| **Compte requis** | ✅ OUI | Compte payant |
| **Max domaines** | ∞ (illimité) | Tous les projets |
| **Max utilisateurs** | **1** | **Pas de collègues** (mono-user) |
| **Scan SAST** | ✅ | Accès complet |
| **Fichiers SAST/mois** | **100** | Quota mensuel |
| **Taille max** | 50 MB | Projets moyens |
| **Export HTML** | ✅ | Rapports professionnels |
| **Tests invasifs** | ✅ | Scan actif (XSS, injection) |
| **Accès API** | ✅ | **Intégration CI/CD** |
| **Multi-user** | ❌ | Compte personnel |

**Use Case:**
```bash
# Intégration CI/CD
curl -X POST https://api.web-sentinel.com/api/v1/scan \
  -H "Authorization: Bearer pro_api_key" \
  -d '{
    "domain": "myapp.com",
    "source_path": "/repo/src",
    "enable_invasive": true
  }'

# 100 fichiers/mois
# → Parfait pour 1 développeur avec plusieurs projets
```

**Tarif suggéré:** 29€/mois

---

### 🏢 ENTERPRISE - Équipe
**Objectif:** Entreprise avec plusieurs développeurs

| Caractéristique | Valeur | Explication |
|-----------------|--------|-------------|
| **Compte requis** | ✅ OUI | Compte entreprise |
| **Max domaines** | ∞ (illimité) | Tous les projets |
| **Max utilisateurs** | **10** | **Création de comptes collègues** |
| **Scan SAST** | ✅ | Accès complet |
| **Fichiers SAST/mois** | **500** | Quota mensuel partagé |
| **Taille max** | 200 MB | Gros projets |
| **Export HTML** | ✅ | Rapports professionnels |
| **Tests invasifs** | ✅ | Scan actif complet |
| **Accès API** | ✅ | Intégration CI/CD |
| **Multi-user** | ✅ | **Gestion d'équipe** |
| **Règles avancées** | ✅ | Custom rules SAST |

**Use Case:**
```bash
# Admin entreprise crée des comptes
web-sentinel user create colleague1@company.com --role developer
web-sentinel user create colleague2@company.com --role developer
# ... jusqu'à 10 utilisateurs

# Quota partagé : 500 fichiers/mois pour toute l'équipe
# Colleague1 scanne 100 fichiers
# Colleague2 scanne 150 fichiers
# → Reste 250 fichiers pour le mois
```

**Tarif suggéré:** 199€/mois

---

## 📊 Comparaison rapide

| Tier | Domaines DNS | SAST Fichiers/mois | Users | API | Tarif |
|------|--------------|-------------------|-------|-----|-------|
| **FREE** | 5 | ❌ 0 | 0 | ❌ | Gratuit |
| **STARTER** | ∞ | ✅ 10 | 1 | ❌ | Gratuit |
| **PRO** | ∞ | ✅ 100 | 1 | ✅ | 29€/mois |
| **ENTERPRISE** | ∞ | ✅ 500 | 10 | ✅ | 199€/mois |
| **SYSOP** | ∞ | ✅ ∞ | ∞ | ✅ | Admin only |

---

## 🔄 Funnel de conversion

```
FREE (anonyme, 5 domaines DNS)
    ↓ Inscription
STARTER (gratuit, DNS ∞ + SAST 10 fichiers/mois)
    ↓ Frustration quota
PRO (29€/mois, SAST 100 fichiers + API)
    ↓ Besoin équipe
ENTERPRISE (199€/mois, SAST 500 fichiers + 10 users)
```

---

## 🛠️ Implémentation technique

### 1. FREE sans compte (à implémenter)

**Problème actuel:** FREE nécessite un compte (max_users=1)

**Solution:**
- Créer un mode "anonymous" dans la CLI
- Compteur global de domaines scannés (par IP ou session)
- Stockage temporaire des résultats (24h)

```python
# web_sentinel/cli.py
@click.command()
@click.argument("domain")
@click.option("--api-key", default=None)
def scan(domain, api_key):
    if api_key is None:
        # Mode FREE anonyme
        check_free_quota(domain)  # Max 5 domaines
        results = run_passive_scan(domain)  # DNS + Headers + TLS seulement
        display_results(results)  # Pas de sauvegarde
    else:
        # Mode avec compte (STARTER+)
        tier = get_user_tier(api_key)
        run_authenticated_scan(domain, tier)
```

### 2. Quota mensuel SAST (à implémenter)

**Ajout table `users`:**
```sql
ALTER TABLE users ADD COLUMN source_files_scanned_this_month INTEGER DEFAULT 0;
ALTER TABLE users ADD COLUMN sast_quota_reset_date DATE DEFAULT CURRENT_DATE;
```

**Vérification avant scan:**
```python
def check_sast_quota(user_email: str, files_to_scan: int) -> bool:
    user = get_user(user_email)
    
    # Reset mensuel
    if user.sast_quota_reset_date < date.today().replace(day=1):
        user.source_files_scanned_this_month = 0
        user.sast_quota_reset_date = date.today().replace(day=1)
        save_user(user)
    
    # Vérifier limite
    if user.source_files_scanned_this_month + files_to_scan > user.max_source_files:
        raise QuotaExceededError(
            f"Quota SAST dépassé: {user.source_files_scanned_this_month}/{user.max_source_files} ce mois-ci"
        )
    
    return True
```

### 3. Multi-user ENTERPRISE (partiellement implémenté)

**Fonctionnalité existante:**
- `allow_multi_user` flag dans profils
- Endpoint `/api/v1/clients` pour créer des sous-comptes

**À vérifier:**
- Limitation à 10 utilisateurs pour ENTERPRISE
- Quota partagé entre les membres de l'équipe
- Permissions/rôles (admin, developer, viewer)

---

## 🧪 Tests requis

### Test 1: FREE limité à 5 domaines
```bash
# Sans API key
web-sentinel scan site1.com  # ✅ OK
web-sentinel scan site2.com  # ✅ OK
web-sentinel scan site3.com  # ✅ OK
web-sentinel scan site4.com  # ✅ OK
web-sentinel scan site5.com  # ✅ OK
web-sentinel scan site6.com  # ❌ Erreur: "Limite FREE atteinte (5 domaines max)"
```

### Test 2: STARTER avec 10 fichiers/mois
```bash
web-sentinel login --api-key starter_xyz

# Scan SAST
web-sentinel scan mysite.com --source ./code1  # 5 fichiers → OK (5/10)
web-sentinel scan mysite.com --source ./code2  # 4 fichiers → OK (9/10)
web-sentinel scan mysite.com --source ./code3  # 2 fichiers → ❌ Erreur: "Quota SAST dépassé (9/10 ce mois-ci)"

# Attendre le 1er du mois → Reset automatique
```

### Test 3: PRO avec API
```bash
curl -X POST https://api.web-sentinel.com/api/v1/scan \
  -H "Authorization: Bearer pro_api_key" \
  -d '{"domain": "example.com"}'
# → ✅ 200 OK
```

### Test 4: PRO ne peut pas créer de sous-comptes
```bash
web-sentinel user create colleague@example.com
# → ❌ Erreur: "Tier PRO ne supporte pas le multi-user. Upgrade vers ENTERPRISE."
```

### Test 5: ENTERPRISE avec 10 users
```bash
# Créer 10 utilisateurs
for i in {1..10}; do
  web-sentinel user create "user$i@company.com"
done
# → ✅ OK

# Essayer le 11ème
web-sentinel user create "user11@company.com"
# → ❌ Erreur: "Limite ENTERPRISE atteinte (10 utilisateurs max)"
```

---

## 📝 Checklist d'implémentation

### Phase 1: Corrections profils (✅ FAIT)
- [x] Modifier `sast_defaults.py`
  - [x] FREE: max_users=0, max_domains=5, pas SAST
  - [x] STARTER: DNS illimité, SAST 10 fichiers, export HTML
  - [x] PRO: max_users=1 (pas 5), API access
  - [x] ENTERPRISE: max_users=10 (pas 50)

### Phase 2: FREE anonyme (TODO)
- [ ] Mode CLI sans API key
- [ ] Compteur IP/session pour 5 domaines
- [ ] Désactiver sauvegarde résultats
- [ ] Message "Créez un compte STARTER pour DNS illimité"

### Phase 3: Quota mensuel SAST (TODO)
- [ ] Migration DB: ajouter colonnes quota
- [ ] Fonction `check_sast_quota()`
- [ ] Reset automatique le 1er du mois
- [ ] Affichage quota dans CLI: "Quota SAST: 45/100 ce mois-ci"

### Phase 4: Multi-user ENTERPRISE (TODO)
- [ ] Vérifier limitation 10 users
- [ ] Quota partagé entre membres
- [ ] Gestion des rôles (admin/developer/viewer)
- [ ] Endpoint `/api/v1/team/members`

### Phase 5: Tests & Validation (TODO)
- [ ] Tests unitaires pour chaque tier
- [ ] Tests d'intégration quota mensuel
- [ ] Tests multi-user ENTERPRISE
- [ ] Documentation utilisateur

---

## 💰 Positionnement tarifaire

### Comparaison marché

| Concurrent | Tier équivalent | Prix | Notre avantage |
|------------|-----------------|------|----------------|
| **Snyk** | Free | Gratuit | ✅ Notre FREE plus limité (5 vs 200 scans/mois) |
| **Snyk** | Team | $52/user/mois | ✅ Notre PRO moins cher (29€ vs 52$) |
| **SonarQube** | Developer | $10/mois | ❌ Plus cher mais plus complet |
| **Checkmarx** | Enterprise | $$$$ | ✅ Notre ENTERPRISE beaucoup moins cher |

### Stratégie de prix

```
FREE: 0€ → Acquisition
STARTER: 0€ → Activation + Découverte SAST
PRO: 29€/mois → Monétisation individuelle
ENTERPRISE: 199€/mois → Monétisation équipe

LTV (Lifetime Value):
- STARTER → PRO: 29€ x 12 mois = 348€/an
- PRO → ENTERPRISE: 199€ x 12 mois = 2388€/an
```

---

## 🎯 Prochaines étapes

1. **Déployer les nouveaux profils** (✅ FAIT)
2. **Implémenter FREE anonyme** (priorité haute)
3. **Implémenter quota mensuel** (priorité haute)
4. **Tester conversion STARTER → PRO** (priorité moyenne)
5. **Page pricing sur le site** (priorité basse)

---

**Version:** 2.0  
**Date:** 7 novembre 2025  
**Status:** Profils redéfinis, implémentation en cours
