195 lines
7.8 KiB
Markdown
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.
|