# Déploiement — playbackg.com/join

Tout ce dossier (`web/playbackg.com/`) est prêt à être déposé tel quel à la
RACINE de votre hébergement O2switch pour `playbackg.com` (le dossier qui
sert déjà `https://playbackg.com/`, généralement `public_html/` ou un
sous-dossier de domaine dédié selon votre configuration cPanel).

## 1. Fichiers à copier, et où

```
web/playbackg.com/join/index.html         → public_html/join/index.html
web/playbackg.com/join/backg-icon.png     → public_html/join/backg-icon.png
web/playbackg.com/join/.htaccess          → public_html/join/.htaccess

web/playbackg.com/.well-known/apple-app-site-association
                                           → public_html/.well-known/apple-app-site-association
web/playbackg.com/.well-known/assetlinks.json
                                           → public_html/.well-known/assetlinks.json
web/playbackg.com/.well-known/.htaccess   → public_html/.well-known/.htaccess
```

Remplacez `public_html/` par le dossier racine réel de `playbackg.com` sur
votre hébergement si différent (cPanel → « Gestionnaire de fichiers »,
racine du domaine `playbackg.com`).

**Aucune modification du `.htaccess` déjà présent à la racine de
`playbackg.com` n'est nécessaire.** Les deux `.htaccess` fournis sont
scopés à leur propre dossier (`/join/` et `/.well-known/`) et n'entrent en
conflit avec aucune règle existante (redirection HTTPS/www, etc.).

## 2. Valeurs à compléter AVANT mise en production

Trois placeholders doivent être remplacés — le reste fonctionne tel quel :

### a. `web/playbackg.com/join/index.html`
Dans le `<script>`, tout en haut :
```js
var APP_STORE_URL = 'https://apps.apple.com/app/idREPLACE_WITH_APP_STORE_ID';
```
À remplacer par l'URL réelle de la fiche App Store une fois BackG publié
(Apple attribue l'ID numérique à la validation de la fiche). Tant que l'app
n'est pas publiée, ce bouton reste inerte — sans conséquence, le bouton
« Ouvrir dans BackG » et le code copiable restent pleinement fonctionnels.

`GOOGLE_PLAY_URL` est déjà correct (`com.gs009.BackG`, voir `app.json`) —
à condition que ce soit bien le nom de package sous lequel vous publiez sur
le Play Store.

### b. `web/playbackg.com/.well-known/assetlinks.json`
```json
"sha256_cert_fingerprints": ["REPLACE_WITH_YOUR_ANDROID_SHA256_CERT_FINGERPRINT"]
```
Empreinte SHA-256 du certificat de signature Android. À récupérer une fois
un premier build Android réalisé :
```
eas credentials -p android
```
(menu interactif EAS → afficher les identifiants de build) — ou depuis la
Play Console une fois l'app publiée : App → Intégrité de l'app → Certificat
de signature de l'app → empreinte SHA-256. Sans cette valeur correcte,
les App Links Android ne seront jamais vérifiés (le lien continuera
d'ouvrir le navigateur au lieu de l'app) — le reste de la page fonctionne
sans, ce n'est bloquant que pour l'ouverture automatique sur Android.

L'appID iOS, lui, est déjà renseigné et correct :
`W573RFDH5R.com.gs009.BackG` (Team ID lu depuis
`ios/BackG.xcodeproj/project.pbxproj`, bundle ID depuis `app.json`).

### c. Image d'aperçu (Open Graph) — optionnel
`backg-icon.png` (icône de l'app, 240×240) est déjà utilisée comme image
d'aperçu de partage (`og:image`). Si vous voulez un visuel dédié plus large
pour les aperçus WhatsApp/Messages/réseaux sociaux (format 1200×630
recommandé), déposez-le sous `join/og-image.jpg` et changez la balise
`<meta property="og:image" ...>` en conséquence — purement cosmétique, la
page fonctionne sans.

## 3. Configuration nécessaire côté domaine/serveur

- **`playbackg.com` (domaine racine, pas seulement le sous-domaine
  `auth.playbackg.com` déjà utilisé pour la récupération de mot de passe)
  doit pointer vers cet hébergement**, avec un certificat HTTPS valide
  (Let's Encrypt via cPanel, généralement automatique sur O2switch). Les
  Universal Links (iOS) et App Links (Android) exigent HTTPS sur le domaine
  exact déclaré dans l'app (`playbackg.com`), sans exception ni certificat
  auto-signé.
- **Après déploiement, vérifier que les deux fichiers de vérification sont
  bien servis, sans redirection, en HTTP 200** :
  ```
  curl -I https://playbackg.com/.well-known/apple-app-site-association
  curl -I https://playbackg.com/.well-known/assetlinks.json
  ```
  Si l'un des deux renvoie une erreur, une redirection (301/302) ou un code
  autre que 200, le premier réflexe est de vérifier qu'aucune règle
  générique du compte d'hébergement (ou du `.htaccess` racine) ne bloque
  les dossiers commençant par un point (`.well-known`) — certains
  hébergements mutualisés le font par défaut pour durcir la sécurité. Dans
  ce cas, une exception explicite pour `/.well-known/` doit être ajoutée
  côté panneau d'hébergement (cPanel) ou dans le `.htaccess` racine — ce
  dépôt ne peut pas l'anticiper sans avoir accès à votre configuration
  serveur réelle.
- **Vérifier aussi** :
  ```
  curl -sI https://playbackg.com/join/HWFCNR | head -1
  ```
  doit répondre `HTTP/1.1 200 OK` (jamais 404) — confirme que
  `join/.htaccess` fonctionne.

## 4. Côté application (déjà fait dans ce dépôt, nécessite un nouveau build)

`app.json` déclare désormais :
- `ios.associatedDomains: ["applinks:playbackg.com"]`
- `android.package: "com.gs009.BackG"` (jusqu'ici absent — premher réglage
  Android de ce projet)
- `android.intentFilters` pour `https://playbackg.com/join/*`

Ces changements sont des changements de **configuration native** (Continuous
Native Generation — `ios/`/`android/` sont regénérés à partir d'`app.json`,
voir AGENTS.md) : ils ne prennent effet qu'après un nouveau build
(`eas build`, ou `npx expo prebuild --clean` + build local). Un simple
rechargement JS ou une build déjà installée ne les reflète pas. Voir aussi
`AGENTS.md` pour la même contrainte déjà documentée pour
`expo-image-picker`/`@react-native-community/netinfo`.

Un dossier `android/` n'existe pas encore localement dans ce projet (jamais
prebuild pour Android jusqu'ici) — le premier build Android déclenchera sa
génération à partir d'`app.json`, `android.package` compris.

## 5. Test de bout en bout, une fois tout en place

1. Build + installation d'un build (dev-client ou TestFlight/interne
   Android) sur un vrai appareil.
2. Partager une invitation depuis l'écran de salle d'attente (bouton
   « Partager ») — le message inclut désormais
   `https://playbackg.com/join/<CODE>`.
3. Envoyer ce lien via Messages/WhatsApp à un AUTRE appareil (le lien
   fonctionne toujours en le tapant dans Safari/Chrome). Le taper une
   première fois avant installation → page web, boutons stores + code
   copiable. Installer l'app, puis taper le MÊME lien à nouveau → doit
   ouvrir directement BackG sur l'écran « Rejoindre », code déjà rempli.
4. Sur iOS, la vérification Universal Links peut prendre quelques minutes
   après le premier lancement de l'app installée (le système va chercher
   `apple-app-site-association` en arrière-plan) — un lien tapé
   immédiatement après l'installation peut encore ouvrir Safari une
   première fois, c'est normal.
