Files
ben-to/README.md
T
2026-07-21 16:50:58 +02:00

157 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ben-to
Constructeur de bento pixel-art, multi-plateforme (web + Android + iOS).
## Stack
- Web: SolidJS (Vite)
- Mobile: Capacitor
- Données: catalogue embarqué, progression locale (offline, sans compte cloud en V1)
- Qualité: Vitest + Playwright + Axe + Lighthouse
Partage des URLs recette (`/r/…`) et métadonnées Open Graph : voir [docs/seo-recipe-sharing.md](docs/seo-recipe-sharing.md).
Matomo (analytics + bandeau cookies) : voir [docs/matomo-analytics.md](docs/matomo-analytics.md) et `apps/web/.env.example`.
## Démarrage
```bash
npm install
npm run pipeline:recipes
npm run dev:web
```
Les **recettes** (fichiers `*.lang.bentext`), les **couvertures** (`ressources/public/`, placeholders dans `ressources/recipe-placeholder-covers/`), les **sprites ingrédients** (`ressources/public/ingredients.png`, `ingredient-sprites.bentext`, source Aseprite sous `ressources/source/`) sont **versionnés dans ce dépôt** — pas de synchronisation avec un serveur de contenus externe.
Après modification des sources, régénérer le catalogue :
```bash
npm run pipeline:recipes
```
Règles d’édition des fichiers bentext : `.cursor/rules/recipes-bentext.mdc`.
## Tester l'app web
À exécuter depuis la **racine** du dépôt.
**Même chaîne que la CI** (ESLint + TypeScript, Vitest avec **couverture** sur les packages métier, Playwright + Axe, pas de duplication unit/int séparée dans ce script) :
```bash
npm run pipeline:recipes # régénère le catalogue si besoin (dev / e2e)
npm run test:ci
```
Voir [CONTRIBUTING.md](CONTRIBUTING.md) (hook pre-commit, tickets, Gherkin `@int-*`).
Les **e2e** (`npm run test:e2e` ou via `test:ci`) sappuient sur `playwright.config.ts` : le serveur Vite est démarré avec `npm run dev:web` si aucun n’écoute déjà sur le port (voir `reuseExistingServer`).
Pour **régénérer les GIF** du tour daccueil (fichiers dans `apps/web/public/tour/`, hors `test:ci`) : `npm run tour:capture` — nécessite `ffmpeg` sur la machine (`playwright.tour-capture.config.ts`).
**Contrôles ciblés sur le paquet `apps/web`** (lint + types du front uniquement) :
```bash
npm run lint -w apps/web
npm run typecheck -w apps/web
```
**Build de production** du front :
```bash
npm run pipeline:recipes
npm run build:web
```
## Tester sur un téléphone Android (Capacitor)
Le shell natif est dans `**apps/mobile**` et embarque le build statique `**apps/web/dist**` (voir `apps/mobile/capacitor.config.ts`).
Un correctif **patch-package** (`patches/@capacitor-community+sqlite+8.1.0.patch`) remplace `proguard-android.txt` par `proguard-android-optimize.txt` dans le plugin SQLite (exigence R8 / AGP récents). Il est réappliqué à chaque `**npm install`** via le script `**postinstall`**.
**Important — répertoire courant** : `pipeline:recipes`, `build:web` et les scripts `mobile:`* sont définis dans le `**package.json` à la racine** du dépôt (`ben-to/`, là où se trouve ce README). Si vous lancez `npm run …` depuis `**apps/mobile`**, npm cherche ces scripts dans le workspace mobile et échoue (`Missing script`). Vérifiez avec `ls package.json` : vous devez voir le manifest racine, pas celui du sous-dossier.
### Prérequis
- [Android Studio](https://developer.android.com/studio) (SDK + outils plate-forme).
- Sur le téléphone : **Options pour les développeurs** activées, puis **Débogage USB** (câble USB) ou **Débogage sans fil** (WiFi) selon votre appareil.
### Première fois : ajouter la plateforme Android
Si le dossier `**apps/mobile/android/`** nexiste pas encore dans votre clone :
```bash
cd apps/mobile
npx cap add android
cd ../..
```
### Build du web, sync Capacitor, lancer sur lappareil
**Toujours depuis la racine du dépôt** (puis Android Studio souvre sur `apps/mobile/android`) :
```bash
npm install
npm run pipeline:recipes
npm run build:web
npm run mobile:sync
npm run mobile:open:android
```
(`mobile:sync` / `mobile:open:android` appellent le workspace `**@ben-to/mobile**` ; évite les erreurs du type `No workspaces found` si le flag `-w` ne cible pas le bon nom.)
Dans Android Studio : choisir votre téléphone comme cible, puis **Run** (▶).
En ligne de commande (appareil déjà autorisé / `adb devices` OK), **toujours depuis la racine** :
```bash
npm run mobile:run:android
```
### Modifier le front sans tout régénérer (optionnel)
Pour charger lUI depuis votre PC sur le réseau local (évite un `build:web` à chaque changement), vous pouvez temporairement renseigner dans `apps/mobile/capacitor.config.ts` un bloc `server: { url: "http://VOTRE_IP_LAN:3000", cleartext: true }` (à retirer avant release), puis lancer le front avec l’écoute réseau :
```bash
npm run dev:web -- --host 0.0.0.0
```
Adaptez le pare-feu / le même WiFi entre le PC et le téléphone.
## Qualité obligatoire
```bash
npm run check:quality
npm run test:unit
npm run test:integration
npm run test:e2e
```
## CI / Sécurité
- `.github/workflows/ci.yml` — qualité, couverture, e2e + artefacts qualité, Lighthouse, **assembleDebug Android**, rapport PR
- `.github/workflows/security.yml` — CodeQL, `npm audit`, Gitleaks ([activation upload SARIF](docs/CODE_SCANNING.md))
- `.github/workflows/dependency-review.yml` — revue des dépendances sur les PR (selon options du dépôt)
- `.github/workflows/mobile-release.yml`
## Publication V1 (web + Android)
Checklist gel release : [docs/V1_LAUNCH_CHECKLIST.md](docs/V1_LAUNCH_CHECKLIST.md).
## Déploiement CapRover
- Le dépôt contient `Dockerfile` et `captain-definition` pour un déploiement via CapRover (hors GitHub Actions).
## Ticketing GitHub
Création rapide des issues MVP :
```bash
./scripts/github/create-issues.sh kazerlelutin/ben-to
```
Tickets post-MVP (builder SOLID, suppression des barrels `index`, SEO OG recettes) : gabarits sous [.github/ISSUE_TEMPLATE/](.github/ISSUE_TEMPLATE/) (`04``06`), corps dans [docs/tickets/](docs/tickets/), création en masse après `gh auth login` :
```bash
./scripts/github/create-post-mvp-issues.sh
```