1---2name: pwa-developpement3description: Développement de code PWA Agence Bulles — scaffolding, structure de projet, AGENTS.md, SPEC-XXX, DATABASE.md, README.md, conventions de branche, refactoring, cleanup et bonnes pratiques par langage (HTML, CSS, JS, TS, Python, JSON). Charger pour toute phase de construction ou de nettoyage de code.4license: MIT5---67# pwa-developpement89## Ce que je fais10- Guide le développement et le nettoyage de code PWA selon les standards Agence Bulles.11- Fournit les règles de qualité/propreté/performance par langage.12- Comble le gap DATABASE.md (schéma + règles d'accès).1314## 1. Initialisation du projet15- Créer `AGENTS.md` à la racine (point d'entrée unique IA) si absent — template avec section « Compatibilité Antigravity » incluse.16- 🟩 Antigravity : dupliquer les règles projet dans `.agents/rules/*.md` (AGENTS.md n'y est pas lu) — template `~/.config/opencode/skills/opencode-admin/assets/antigravity/rule.md`.17- Créer `README.md` depuis l'ébauche du blueprint ; mise à jour à chaque feature.18- Créer `.env.example` listant TOUTES les clés (GeniusPay, Brevo/Mailtrap, Turnstile, R2, VAPID, Turso).19- Créer `.github/workflows/ci.yml` depuis `assets/configs/ci.yml` — CI minimale bloquante sur PR (secrets → lint → typecheck → tests → build).20- Template : `assets/templates/AGENTS.md`, `assets/templates/README.md`, `assets/configs/.env.example`.2122## 2. Règle de branche23- Vérifier la branche active AVANT toute modification : `git branch --show-current`.24- Si sur `main` → créer et basculer sur `testing`. Jamais de changement applicatif sur `main`.2526## 3. Spécifications (SPEC-XXX)27- Toute nouvelle fonctionnalité → `docs/specs/SPEC-XXX-nom.md` avec le template standard obligatoire :28 - Intent (Problème/Objectif), User Story, Exigences (table ID/Exigence/DoD), Edge cases, PWA/Offline, Modèle de données & API, Fichiers impactés, Tâches.29- Statuts : DRAFT → APPROVED → IN_PROGRESS → DONE.30- Template : `assets/templates/SPEC-XXX.md`.3132## 4. Conventions de code (tous langages)33- **Nommage** : explicite (jamais `x`, `tmp`, `data`) ; camelCase JS/TS, snake_case Python, PascalCase composants.34- **DRY** : factoriser dès la 2ᵉ occurrence ; pas de copier-coller config/styles.35- **Fonctions** : une responsabilité ; pures si possible ; verbe d'action.36- **Erreurs** : try/catch partout, messages explicites, jamais de Promise sans gestion d'erreur.37- **Commentaires** : seulement le POURQUOI ; pas de code commenté.38- **Imports** : groupés (libs → composants → styles), ordre alphabétique, jamais d'imports inutilisés.39- Checklist : `assets/checklists/style-code.md`.4041### HTML/JSX42- Balises sémantiques, un seul `<h1>`, fragments au lieu de `<div>` inutiles.43- `alt` sur chaque img, `<label>` sur chaque champ, contraste ≥ 4.5:1.44- `defer`/`async` sur les scripts, `loading="lazy"` images, pas de styles inline.45- SEO : title unique, meta description < 160 car., JSON-LD.4647### CSS/Tailwind48- Mobile-first (`min-width`) ; classes utilitaires ; motifs récurrents extraits (`@apply` ou composants).49- Variables CSS / tokens pour tout ce qui se répète.5051### JavaScript/TypeScript52- TypeScript strict, types explicites sur les APIs/contrats de données.53- Pas d'`any` silencieux, pas de logique métier dans les composants.5455### Python (FastAPI / Micro-services / Workers / IA)56- **Typage strict & validation** : Python 3.12+, `typing` systématique, modèles **Pydantic v2** pour tous les schemas d'entrée/sortie.57- **Framework & Asynchronisme** : **FastAPI** avec handlers `async def` non bloquants ; dépendances injectées via `Depends()`.58- **Outillage** : **Ruff** pour le linting/formatage (`ruff check .`, `ruff format .`) ; gestionnaire de paquets **uv** ou `pyproject.toml`.59- **Architecture** : Séparation stricte : `routers/`, `services/` (logique métier), `models/` (Pydantic / DB), `workers/` (tâches de fond).60- **Sécurité & secrets** : Variables d'environnement validées via `pydantic-settings` (`SettingsConfigDict`).6162### PWA63- Manifest complet, service worker offline-first, IndexedDB pour les données locales.6465## 5. Nettoyage & refactoring (après chaque feature)661. Supprimer code mort, imports/variables inutilisés, code commenté.672. Extraire les fonctions dupliquées ; simplifier la logique excessive.683. Ne PAS toucher aux fichiers générés, config ou code tiers.694. Recharger `pwa-validation` après nettoyage (lint + typecheck + build).7071## 6. Environnement & Structure de projet (Docker en 1er choix)72- **Dev local conteneurisé (défaut)** : Lancement systématique via Docker Desktop :73 ```bash74 docker compose -f docker-compose.dev.yml up75 ```76 - Volumes montés pour le hot-reloading automatique (`src/`, `static/`, `migrations/`).77 - Base locale (`file:local.db` ou `turso dev`) et micro-services isolés dans leur réseau Docker.78 - Proxy local Caddy (`https://projet.test`) pointant vers les ports exposés par les conteneurs.7980```81projet/82├── src/ # Code source frontend (SvelteKit / PWA)83├── src/lib/services/ # Logique métier — hors composants84├── backend/ # Micro-services Python / Hono (optionnel)85├── src/lib/server/ # ⚠️ SEUL endroit qui touche la base et l'autorisation86│ ├── auth/authorize.ts # Module unique d'autorisation (Turso n'a pas de RLS)87│ └── db/ # Client Drizzle + requêtes scopées88├── src/routes/api/ # Server routes : endpoints, webhooks, jobs89├── .github/workflows/ci.yml # CI : secrets → lint → typecheck → tests → build90├── Dockerfile # Multi-stage production (Coolify)91├── docker-compose.dev.yml # Dev local avec hot-reload (Docker Desktop)92├── docker-compose.yml # Prod / Staging93├── .env.example94└── docs/ (CADRAGE, BLUEPRINT, DATABASE, DESIGN_SYSTEM, specs/, RUNBOOK)95```9697## 7. Base de données (DATABASE.md)98- Schéma relationnel succinct, **matrice d'autorisation** (obligatoire : Turso n'a pas de RLS), stratégie de migration, dictionnaire de données.99- Migration de la doc : toute modification de champs/tables/règles → mise à jour immédiate de `docs/DATABASE.md`.100- Template : `assets/templates/DATABASE.md`.101102## Règles103- Ultra-léger : listes à puces partout ; zéro texte superflu.104- Aucun emoji dans l'interface sauf demande explicite ; une seule bibliothèque d'icônes.105- Images compressées AVIF/WebP avant upload R2 (jamais de PNG/JPEG bruts).106- Toujours charger `shared-eco-tokens` en parallèle.107108## Assets109- `assets/templates/AGENTS.md`110- `assets/templates/SPEC-XXX.md`111- `assets/templates/DATABASE.md`112- `assets/templates/README.md`113- `assets/configs/.env.example`114- `assets/configs/docker-compose.dev.yml`115- `assets/configs/ci.yml`116- `assets/checklists/style-code.md`