# 🎮 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.