7.8 KiB
🎮 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 en route
1. Créer la base de données (une seule fois, pour toute l'équipe)
-
Crée un compte sur supabase.com puis un New project (offre gratuite).
-
Menu SQL Editor → New query.
-
Colle le contenu de
supabase/schema.sqlet clique Run.🆙 Tu avais déjà une version précédente installée ? Exécute plutôt
supabase/update_all.sql: il met la base à jour sans rien perdre (voir « Mise à jour v0.2 » plus bas). -
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).
-
Menu Settings → API : note l'URL du projet et la clé anon public.
2. Configurer l'application
Crée un fichier .env à la racine :
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.
npm install
npm run tauri:dev
4. Devenir administrateur (une seule fois)
Crée ton compte, puis dans le SQL Editor de Supabase :
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) :
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
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 :
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.
⌨️ 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
- Aucune requête sans gestion d'erreur. On passe par
run/rows/mutatedelib/db.ts, jamais parconst { data } = await supa().... - Aucune couleur en dur. Pas de
bg-amber-100ni detext-gray-500: on utilise les tokens (bg-panel,text-muted…) et le système de tons delib/tones.ts. - Aucun bouton écrit à la main.
Button/IconButtondecomponents/ui.tsx. Un bouton-icône a toujours unlabel(infobulle et lecteur d'écran).
✅ Vérifications
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
commentsetattachments(+ bucket de stockage) ; - ajoute
bugs.poles(plusieurs pôles par bug) ettime_logs.bug_id(temps sur un bug) ; - supprime les colonnes de compatibilité
profiles.role,tasks.pole,bugs.assignee_idaprè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 :supabase functions deploy admin-users --no-verify-jwt
📄 Licence
MIT.