Contribuer
Workflow recommandé
Fork + clone le repo
Crée une branche depuis
dev:bashgit checkout -b feat/ma-featureImplémente avec typage strict TypeScript
Passe les gates qualité :
bashpnpm typecheck pnpm lint pnpm build pnpm test:ws-smokeCommit en Conventional Commits
Ouvre une PR vers
devavec contexte et vérification manuelle
Règles techniques
- Renderer ↔ Main : uniquement via preload (
window.streamoos) - jamaisipcRendererdirect - Types IPC : centralisés dans
app/src/shared/ipc.ts - Handlers : implémenter
FeatureHandlerdepuisapp/src/main/handlers/types.ts - Logs : utiliser
app/src/main/observability/logger.tsdans le main - jamaisconsole.log - Tokens :
safeStorageuniquement - jamais en clair dans SQLite ou localStorage - Migrations : changements de schéma SQLite par étape, sans couplage inutile
Checklist PR
- [ ] Impact fonctionnel décrit dans la description
- [ ] Logs importants visibles et compréhensibles
- [ ] Aucun spam de logs sur interactions fréquentes (volume, progress)
- [ ] Smoke test WS validé (
pnpm test:ws-smoke) - [ ] Aucune régression TypeScript strict (
pnpm typecheck)
CI / Workflows
Les workflows GitHub Actions sont dans .github/workflows/ :
| Workflow | Déclencheur | Actions |
|---|---|---|
ci.yml | Push / PR | typecheck, lint, build, tests |
release.yml | Tag v* | Build dist Windows + Linux, création release GitHub |
Zone de code par feature
| Feature | Main | Renderer | Shared |
|---|---|---|---|
| KHInsider | app/src/main/handlers/khinsider/ | app/src/renderer/components/khinsider/ | app/src/shared/ipc.ts |
| Timer | app/src/main/handlers/timer/ | app/src/renderer/components/timer/ | - |
| Twitch | app/src/main/handlers/twitch/ | app/src/renderer/components/twitch/ | app/src/shared/planning.ts |
| Discord | app/src/main/handlers/discord/ | app/src/renderer/components/discord/ | - |
| SMTC | app/src/main/handlers/smtc/ | app/src/renderer/components/smtc/ | - |
| Remote | app/src/main/remote/ | app/src/renderer/remote/ (PWA) | - |
| Overlays | app/overlays/ | - | app/overlays/shared/ |
Reference rapide de l'architecture
app/src/
├── main/ # Processus principal Electron (Node.js)
│ ├── handlers/ # Handlers de features (un par feature)
│ ├── ws/ # Serveur WebSocket + routeur + broadcaster
│ ├── remote/ # Serveur Fastify HTTPS pour PWA mobile
│ ├── storage/ # Store de preferences better-sqlite3
│ ├── windows/ # Gestion des BrowserWindow
│ └── observability/ # logger pino (logger.ts)
├── preload/ # contextBridge (window.streamoos)
├── renderer/ # Dashboard React 19 + Vite 6
└── shared/ # Types uniquement (pas de deps runtime)
├── ipc.ts # Canaux IPC, types de features, contrats d'etat
└── planning.ts # Types de planification Twitchi18n
Toutes les chaines visibles par l'utilisateur doivent etre localisees. Langues : fr (defaut), en, de.
- Fichiers de traduction :
locales/<lang>/translation.json - Ne jamais hardcoder de texte UI dans le JSX -- utiliser
t("cle")du systeme i18n - Ordre de detection : querystring > localStorage
