first commit
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
# 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`) s’appuient 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 d’accueil (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** (Wi‑Fi) selon votre appareil.
|
||||
|
||||
### Première fois : ajouter la plateforme Android
|
||||
|
||||
Si le dossier `**apps/mobile/android/`** n’existe pas encore dans votre clone :
|
||||
|
||||
```bash
|
||||
cd apps/mobile
|
||||
npx cap add android
|
||||
cd ../..
|
||||
```
|
||||
|
||||
### Build du web, sync Capacitor, lancer sur l’appareil
|
||||
|
||||
**Toujours depuis la racine du dépôt** (puis Android Studio s’ouvre 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 l’UI 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 Wi‑Fi 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
|
||||
```
|
||||
Reference in New Issue
Block a user