Files
gestion_projet/README.md
T
2026-08-10 22:06:49 +02:00

195 lines
7.8 KiB
Markdown

# 🎮 GameDev Tracker
Application **desktop** de gestion de projet de jeu vidéo, pensée pour une **petite équipe (5-6 personnes)**.
**Tauri + React + TypeScript + Tailwind**, base de données **Supabase** (offre gratuite suffisante).
---
## ✨ Ce que fait l'application
| | |
|---|---|
| 📊 **Tableau de bord** | Ce que **tu** as à faire, avancement, bugs par sévérité, heures de l'équipe, dernières discussions |
| 📋 **Tâches (Kanban)** | 4 colonnes, glisser-déposer **et déplacement au clavier**, checklists, étiquettes, priorité, échéance |
| 🐛 **Bugs** | Sévérité expliquée, tri et filtres, **captures d'écran collables (Ctrl+V)**, temps passé |
| ⏱️ **Feuille de temps** | Semaine en 7 colonnes, saisie sur une tâche / un bug / une activité libre, **export CSV** |
| 📚 **Documentation** | Fiches en Markdown : GDD, conventions, notes de réunion — créées dans l'app ou **importées depuis un `.md` / `.docx`** |
| 💬 **Discussions** | Fil de commentaires sur chaque tâche et chaque bug, avec notification des personnes concernées |
| 📎 **Pièces jointes** | Fichiers et captures rattachés aux tâches et aux bugs |
| 👥 **Équipe & pôles** | Un membre appartient à un ou plusieurs pôles (programmeur, artiste, sound designer…) |
| 🔔 **Notifications** | Quand une tâche/un bug t'est confié — par ton **pôle** ou **nommément** — et à chaque message |
| 🔎 **Recherche globale** | `Ctrl + K` : tâches, bugs, personnes, actions |
| 🔄 **Temps réel** | Tout se synchronise entre les membres, sans recharger |
| 🌗 **Thème** | Clair, sombre, ou suivant le système |
| 🔄 **Mises à jour auto** | L'app se met à jour toute seule — plus de `.exe` à renvoyer ([détails](MISE_A_JOUR.md)) |
---
## 🚀 Mise en route
### 1. Créer la base de données (une seule fois, pour toute l'équipe)
1. Crée un compte sur **[supabase.com](https://supabase.com)** puis un **New project** (offre gratuite).
2. Menu **SQL Editor → New query**.
3. Colle le contenu de **[`supabase/schema.sql`](supabase/schema.sql)** et clique **Run**.
> 🆙 **Tu avais déjà une version précédente installée ?**
> Exécute plutôt **[`supabase/update_all.sql`](supabase/update_all.sql)** : il met la base à jour
> sans rien perdre (voir « Mise à jour v0.2 » plus bas).
4. Menu **Authentication → Sign In / Providers → Email** : désactive **« Confirm email »**
(sinon chaque membre doit cliquer un lien reçu par mail avant de pouvoir se connecter).
5. Menu **Settings → API** : note l'**URL du projet** et la clé **anon public**.
### 2. Configurer l'application
Crée un fichier `.env` à la racine :
```env
VITE_SUPABASE_URL=https://xxxxx.supabase.co
VITE_SUPABASE_ANON_KEY=eyJhbGciOi...
```
> La clé *anon* est **publique par nature** : c'est la sécurité au niveau des lignes (RLS)
> de Supabase qui protège les données, pas le secret de cette clé.
### 3. Lancer
Prérequis : **Node.js** et **Rust**.
```bash
npm install
npm run tauri:dev
```
### 4. Devenir administrateur (une seule fois)
Crée ton compte, puis dans le **SQL Editor** de Supabase :
```sql
update public.profiles set is_admin = true
where id = (select id from auth.users where email = 'TON_EMAIL@exemple.com');
```
Déploie ensuite l'espace d'administration (voir **[GUIDE_ADMIN.md](GUIDE_ADMIN.md)**) :
```bash
supabase functions deploy admin-users --no-verify-jwt
```
Tu peux alors créer les comptes de toute l'équipe depuis l'onglet **Administration**.
### 5. Distribuer — une seule fois
```bash
npm run tauri:build
```
Génère un installeur dans `src-tauri/target/release/bundle/nsis/`. Envoie-le à
ton équipe : **c'est la dernière fois que tu le fais à la main.**
### 6. Activer les mises à jour automatiques
Ensuite, chaque nouvelle version se publie en une commande :
```bash
npm run release -- 0.3.0 "Ce qui change pour l'équipe"
```
Tes collègues voient un bandeau « Version disponible » au lancement, cliquent, et
l'application se met à jour toute seule. Mise en place (une fois) et mode
d'emploi complet : **[MISE_A_JOUR.md](MISE_A_JOUR.md)**.
---
## ⌨️ Raccourcis clavier
| Raccourci | Action |
|---|---|
| `Ctrl + K` ou `/` | Recherche globale / palette de commandes |
| `Ctrl + 1…6` | Changer d'écran |
| `Ctrl + B` | Replier / déployer le menu latéral |
| `?` | Afficher l'aide |
| `Échap` | Fermer une fenêtre |
| `Espace` puis `← → ↑ ↓` | Déplacer une carte du Kanban **au clavier** |
| `Ctrl + Entrée` | Envoyer un commentaire |
| `Ctrl + S` | Enregistrer une fiche de documentation |
| `Alt + ← / →` | Semaine précédente / suivante (feuille de temps) |
---
## 🧱 Architecture
```
src/
lib/
supabase.ts Client unique, clés lues depuis .env
db.ts run/rows/mutate + useQuery + useRealtime ← toute la fiabilité est ici
AppContext.tsx Session, profil, membres, projets, écran courant
types.ts Types métier + libellés + helpers de formatage
tones.ts Couleurs sémantiques (badges, pastilles) — clair ET sombre
notify.ts Qui prévenir, et quand
storage.ts Avatars et pièces jointes
markdown.ts Rendu Markdown assaini + import .md/.docx
feedback.tsx Toasts et confirmations (le SEUL système de retour utilisateur)
theme.ts Clair / sombre / système
components/
ui.tsx Primitives : Button, IconButton, Field, états vide/erreur/chargement
Modal.tsx Modale : en-tête et pied fixes, piège à focus, garde anti-perte de saisie
Select.tsx Menu déroulant entièrement pilotable au clavier
people.tsx Avatars, pôles, assignation, étiquettes
EntityExtras.tsx Discussion, pièces jointes, temps passé (tâches ET bugs)
Layout.tsx Barre latérale + UNE barre supérieure + raccourcis
pages/ Un fichier par écran
supabase/
schema.sql Installation neuve
update_all.sql Mise à jour d'une base existante
migration_v10.sql La refonte v0.2 seule
migration_v11.sql La documentation seule
functions/admin-users/ Edge Function de gestion des comptes
```
### Trois règles à respecter en contribuant
1. **Aucune requête sans gestion d'erreur.** On passe par `run` / `rows` / `mutate` de
`lib/db.ts`, jamais par `const { data } = await supa()...`.
2. **Aucune couleur en dur.** Pas de `bg-amber-100` ni de `text-gray-500` : on utilise les
tokens (`bg-panel`, `text-muted`…) et le système de tons de `lib/tones.ts`.
3. **Aucun bouton écrit à la main.** `Button` / `IconButton` de `components/ui.tsx`.
Un bouton-icône a toujours un `label` (infobulle **et** lecteur d'écran).
---
## ✅ Vérifications
```bash
npm run check # types + lint
npm run build # typecheck puis build de production
npm run release -- X.Y.Z "notes" # publie une version pour toute l'équipe
```
---
## 🆙 Mise à jour v0.2
La migration `supabase/update_all.sql` :
- ajoute les tables **`comments`** et **`attachments`** (+ bucket de stockage) ;
- ajoute **`bugs.poles`** (plusieurs pôles par bug) et **`time_logs.bug_id`** (temps sur un bug) ;
- **supprime les colonnes de compatibilité** `profiles.role`, `tasks.pole`, `bugs.assignee_id`
après avoir recopié leur contenu dans les tableaux correspondants ;
- ajoute la fonction **`reorder_tasks`** (réordonnancement du Kanban en une transaction) ;
- réserve la **suppression d'un projet** à son créateur ou à un administrateur.
> ⚠️ **Redéploie l'Edge Function après la migration** — elle écrivait dans `profiles.role`,
> qui n'existe plus :
> ```bash
> supabase functions deploy admin-users --no-verify-jwt
> ```
---
## 📄 Licence
MIT.