# Course Spatiale — déploiement serveur (PHP)

Ce dossier contient une version **auto-hébergée** du jeu : les données (scores,
équipes, dé) sont stockées sur votre propre serveur PHP au lieu du stockage
de l'artifact Claude. Ça permet un vrai déploiement en dehors de Claude.ai,
accessible depuis n'importe quel appareil (téléphone, PC) sur le même réseau
ou sur Internet.

## Contenu du dossier

| Fichier | Rôle |
|---|---|
| `course_espace.html` | L'application (interface, circuit, panneau de contrôle) |
| `api.php` | Le backend : reçoit les actions, calcule les scores, stocke l'état |
| `data/state.json` | Créé automatiquement au premier lancement — contient toutes les données de la partie |
| `data/.htaccess` | Empêche quiconque d'ouvrir `state.json` directement dans un navigateur |

## Prérequis

- Un hébergement (ou serveur) supportant **PHP 7.4 ou supérieur**
- Le dossier `data/` doit être **accessible en écriture** par PHP (droits 775 ou 777 selon l'hébergeur)
- Aucune base de données nécessaire

## Installation

1. Uploadez **tout le contenu de ce dossier** (`course_espace.html`, `api.php`, `data/`) dans le même répertoire sur votre serveur — par exemple `https://votre-domaine.fr/course/`
2. Vérifiez que le dossier `data/` est modifiable par le serveur web :
   ```bash
   chmod 775 data
   ```
3. Ouvrez `course_espace.html` dans un navigateur — le fichier `data/state.json` se crée automatiquement au premier chargement
4. C'est prêt : partagez le lien `https://votre-domaine.fr/course/course_espace.html` avec les équipes

Si `api.php` n'est pas dans le même dossier que `course_espace.html`, modifiez
la ligne suivante en haut du script dans `course_espace.html` :
```js
const API_URL = 'api.php'; // remplacez par le chemin/URL complet si besoin
```

## Codes d'accès

Définis dans `api.php` (à modifier avant l'événement) :

```php
$TEAM_CODES = [
  'alpha' => '1001', 'bravo' => '1002', 'charlie' => '1003', 'delta' => '1004',
  'echo'  => '1005', 'foxtrot' => '1006', 'golf' => '1007', 'hotel' => '1008', 'india' => '1009',
];
define('ADMIN_CODE', '9999');
```

**Changez ces codes avant un usage réel** — ce sont des exemples. Communiquez
chaque code en privé au responsable concerné (jamais affiché à l'écran).

## Ce qui a changé par rapport à la version Claude

- **Le calcul des points se fait sur le serveur**, jamais dans le navigateur : impossible de falsifier un score en modifiant le code JavaScript ou en rejouant une requête.
- **Le tirage du dé est généré côté serveur** (`random_int`), donc non manipulable côté client.
- **L'autorisation est vérifiée par le serveur** à chaque action (le code doit correspondre à l'équipe concernée), pas seulement dans l'interface.
- **Synchronisation simplifiée** : un seul appel réseau toutes les 4 secondes récupère l'état complet à jour (avant : jusqu'à 9 appels distincts avec logique de reconciliation côté client).
- Fonctionne **indépendamment de Claude.ai** — c'est un site web autonome.

## Personnaliser le barème ou les seuils

Tout se règle en haut de `api.php` :
```php
$POINTS = ['appel' => 1, 'rdv' => 10, 'strat' => 15];
define('STREAK_WINDOW', 3600);        // fenêtre pour déclencher le x2
define('MULTIPLIER_DURATION', 3600);  // durée du x2
define('DICE_BONUS', 10);             // gain du dé de la chance
```

## Sauvegarde / remise à zéro manuelle

Toutes les données vivent dans `data/state.json`. Pour repartir de zéro sans
passer par le bouton "Réinitialiser" de l'admin, il suffit de supprimer ce
fichier — il sera recréé automatiquement au prochain chargement.

## Sécurité — points à connaître

- Les codes transitent en clair dans les requêtes : **utilisez HTTPS** sur votre hébergement pour l'événement.
- Le fichier `data/.htaccess` bloque l'accès direct sous Apache. Sous Nginx ou un autre serveur, ajoutez une règle équivalente pour interdire l'accès au dossier `data/`.
- Ce système reste adapté à un usage interne de confiance (pas d'authentification forte par utilisateur) — suffisant pour une animation d'équipe, pas pour un usage grand public.
