V0.3
This commit is contained in:
@@ -1,90 +1,194 @@
|
||||
# 🎮 GameDev Tracker
|
||||
|
||||
Application **desktop** de gestion de projet de jeu vidéo, pensée pour une **petite équipe (5-6 personnes)**.
|
||||
Construite avec **Tauri + React + TypeScript + Tailwind + Framer Motion**, base de données **gratuite Supabase**.
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
- 🔐 **Connexion / inscription** par email + mot de passe
|
||||
- 👥 **Équipe, rôles & pôles** — le rôle d'un membre (programmeur, artiste, game designer…) définit son **pôle**
|
||||
- 📋 **Tâches & Kanban** — glisser-déposer entre *À faire / En cours / En revue / Terminé*, tâche confiée à un **pôle** avec une ou **plusieurs personnes** assignées
|
||||
- ⏱️ **Feuille de temps** — vue par semaine (7 jours en colonnes) : consigne les heures faites chaque jour sur une tâche **ou** une activité libre (réunion, veille…)
|
||||
- 🐛 **Suivi de bugs** — sévérité, priorité, statut, pôle, assignation
|
||||
- 🔔 **Notifications** — quand une tâche/un bug est confié à un pôle, ses membres reçoivent une notif (cloche 🔔 dans la barre latérale)
|
||||
- 📊 **Tableau de bord** — avancement global, répartition des tâches, temps total, échéances
|
||||
- 🔄 **Synchro temps réel** — quand un membre modifie une tâche, les autres la voient se mettre à jour
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Mise en route
|
||||
|
||||
### 1. Créer la base de données (gratuit, une seule fois pour toute l'équipe)
|
||||
|
||||
1. Va sur **[supabase.com](https://supabase.com)** et crée un compte.
|
||||
2. Clique **New project** (choisis un mot de passe de base de données, garde-le quelque part).
|
||||
3. Attends ~2 min que le projet se crée.
|
||||
4. Dans le menu de gauche : **SQL Editor → New query**.
|
||||
5. Ouvre le fichier [`supabase/schema.sql`](supabase/schema.sql) de ce dépôt, **copie tout son contenu**, colle-le, puis clique **Run**.
|
||||
> Cela crée les tables (profils, projets, tâches, bugs, suivi du temps, notifications), la sécurité et la synchro temps réel.
|
||||
>
|
||||
> 🆙 **Tu avais déjà installé une version précédente (avec les jalons) ?** Exécute plutôt, dans l'ordre, [`supabase/migration_v2.sql`](supabase/migration_v2.sql) (supprime les jalons, ajoute pôles + assignation multiple + notifications), [`supabase/migration_v3.sql`](supabase/migration_v3.sql) (feuille de temps : entrées libres type réunion) puis [`supabase/migration_v4.sql`](supabase/migration_v4.sql) (plusieurs pôles par membre) — **sans perdre tes données**.
|
||||
>
|
||||
> 🔁 Après la migration v4, **redéploie l'Edge Function** pour que l'admin puisse gérer les pôles multiples : `supabase functions deploy admin-users --no-verify-jwt`.
|
||||
6. Menu **Settings (⚙️) → API**. Note deux valeurs :
|
||||
- **Project URL** → ressemble à `https://xxxxx.supabase.co`
|
||||
- **anon public** (sous *Project API keys*) → longue chaîne commençant par `eyJ...`
|
||||
7. **Recommandé pour une petite équipe** : désactive la confirmation d'email pour pouvoir se connecter tout de suite après l'inscription.
|
||||
- Menu **Authentication → Sign In / Providers → Email** : désactive **« Confirm email »** et enregistre.
|
||||
- (Sinon, chaque membre devra cliquer sur un lien reçu par email avant de pouvoir se connecter.)
|
||||
|
||||
> ℹ️ La clé *anon public* est faite pour être distribuée à l'app cliente : pas de secret sensible exposé.
|
||||
|
||||
### 2. Lancer l'application
|
||||
|
||||
Prérequis (déjà installés sur cette machine) : **Node.js**, **Rust**.
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run tauri:dev
|
||||
```
|
||||
|
||||
Au premier lancement, l'app affiche un écran de **configuration** : colle l'**URL** et la **clé anon** obtenues à l'étape 1, puis **Connecter**.
|
||||
Ensuite : crée ton compte (avec ton rôle), crée un **projet**, et c'est parti. 🎉
|
||||
|
||||
### 3. Distribuer à l'équipe
|
||||
|
||||
Pour générer un installeur (`.exe`/`.msi` sur Windows) :
|
||||
|
||||
```bash
|
||||
npm run tauri:build
|
||||
```
|
||||
|
||||
Le fichier d'installation se trouve dans `src-tauri/target/release/bundle/`.
|
||||
Envoie-le à tes coéquipiers. À leur premier lancement, ils saisissent **la même URL + clé anon** que toi — ils rejoignent ainsi le même projet partagé.
|
||||
|
||||
---
|
||||
|
||||
## 🧰 Scripts utiles
|
||||
|
||||
| Commande | Effet |
|
||||
| --- | --- |
|
||||
| `npm run tauri:dev` | Lance l'app en mode développement (rechargement à chaud) |
|
||||
| `npm run tauri:build` | Génère l'installeur de l'app |
|
||||
| `npm run dev` | Lance uniquement le front-end dans le navigateur (sans la fenêtre desktop) |
|
||||
| `npm run typecheck` | Vérifie les types TypeScript |
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
```text
|
||||
├─ index.html # point d'entrée du front
|
||||
├─ src/ # application React (front-end)
|
||||
│ ├─ pages/ # Dashboard, Kanban, Planning (feuille de temps), Bugs, Members, Admin, Login, Setup
|
||||
│ ├─ components/ # Layout, UI, animations
|
||||
│ └─ lib/ # client Supabase, types, contexte global, config
|
||||
├─ src-tauri/ # enveloppe desktop Tauri (Rust)
|
||||
└─ supabase/schema.sql # schéma de la base à exécuter dans Supabase
|
||||
```
|
||||
|
||||
## 🔒 Note de sécurité
|
||||
|
||||
L'app suppose une **équipe de confiance** : tout membre connecté peut lire et modifier les données du projet (politique RLS « accès complet pour les utilisateurs authentifiés »). C'est volontaire pour rester simple sur une petite équipe. Si un jour tu veux des permissions plus fines (ex. seul le lead supprime un projet), il faudra ajuster les *policies* dans `supabase/schema.sql`.
|
||||
# 🎮 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.
|
||||
|
||||
Reference in New Issue
Block a user