From f8523b8a6c1b6cc3541c83283c3f389108ec5162 Mon Sep 17 00:00:00 2001 From: le king fu Date: Fri, 20 Feb 2026 21:50:45 -0500 Subject: [PATCH] docs: add CLAUDE.md and masterplan for project reference Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 121 +++++++++++++++++++++++++++++++++++++++++++++ masterplan.md | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 254 insertions(+) create mode 100644 CLAUDE.md create mode 100644 masterplan.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..641e589 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,121 @@ +# Simpl-Liste + +Application mobile de gestion de tâches minimaliste par La Compagnie Maximus. +Bundle ID : `com.lacompagniemaximus.simpliste` — Scheme : `simplliste` + +## Stack + +- **React Native 0.81** + **Expo SDK 54** (New Architecture) +- **Expo Router 6** (file-based, typed routes) +- **TypeScript 5.9** (strict) +- **NativeWind 4.2** (Tailwind CSS 3.4 pour RN) +- **Drizzle ORM 0.45** + **expo-sqlite 16** (SQLite local, `simpliste.db`) +- **Zustand 5** + AsyncStorage (state UI persisté) +- **i18next 25** + react-i18next (FR/EN, français par défaut) +- **lucide-react-native** (icônes) +- **date-fns 4** (dates) + +## Scripts + +```bash +npm start # Expo dev server +npm run android # Lancer sur Android +npm run ios # Lancer sur iOS +``` + +## Structure + +``` +app/ +├── _layout.tsx # Root stack (fonts, migrations, theme) +├── (tabs)/ +│ ├── _layout.tsx # Tab bar (3 onglets) +│ ├── index.tsx # Inbox +│ ├── lists.tsx # Toutes les listes +│ └── settings.tsx # Paramètres + gestion tags +├── task/ +│ ├── new.tsx # Création de tâche (modal) +│ └── [id].tsx # Détail/édition tâche +└── list/ + └── [id].tsx # Détail d'une liste + +src/ +├── components/ +│ ├── FilterMenu.tsx # Modal filtres (bottom sheet) +│ ├── SortMenu.tsx # Modal tri (bottom sheet) +│ └── task/ +│ ├── TagChip.tsx # Pill tag réutilisable +│ └── TaskItem.tsx # Rangée de tâche +├── db/ +│ ├── client.ts # Config SQLite + Drizzle +│ ├── schema.ts # Tables : lists, tasks, tags, task_tags +│ ├── migrations/ # SQL migrations (auto-appliquées au démarrage) +│ └── repository/ +│ ├── lists.ts # CRUD listes + ensureInbox() +│ ├── tags.ts # CRUD tags + relations task-tag +│ └── tasks.ts # CRUD tâches, filtres, tri, sous-tâches +├── i18n/ +│ ├── index.ts # Init i18next (détection locale appareil) +│ ├── fr.json # Traductions françaises +│ └── en.json # Traductions anglaises +├── lib/ +│ ├── priority.ts # Helpers couleurs priorité +│ ├── recurrence.ts # Types récurrence + calcul prochaine occurrence +│ └── uuid.ts # Wrapper expo-crypto randomUUID +├── services/ +│ ├── calendar.ts # Sync expo-calendar +│ ├── icsExport.ts # Export .ics + partage +│ └── notifications.ts # Planification expo-notifications +├── stores/ +│ ├── useSettingsStore.ts # Thème, locale, notifs, calendrier +│ └── useTaskStore.ts # État tri/filtre +└── theme/ + └── colors.ts # Palette centralisée (bleu, crème, terracotta) +``` + +## Base de données + +4 tables SQLite gérées par Drizzle ORM. Migrations auto-appliquées via `useMigrations()`. + +- **lists** : id, name, color, icon, position, is_inbox, timestamps +- **tasks** : id, title, notes, completed, priority (0-3), due_date, list_id → lists, parent_id (sous-tâches), position, recurrence, calendar_event_id, timestamps +- **tags** : id, name, color, timestamps +- **task_tags** : task_id → tasks (CASCADE), tag_id → tags (CASCADE) + +### Générer une migration + +```bash +npx drizzle-kit generate +``` + +Puis mettre à jour `src/db/migrations/migrations.js` si nécessaire. + +## Conventions + +- **Français par défaut**, anglais en second. Toutes les chaînes visibles dans `fr.json`/`en.json` +- **Dark mode** : résolu localement avec `isDark` ternary (pas de NativeWind dark: prefix) +- **Composants** : headers custom par écran (pas de React Navigation header) +- **Polling 500ms** : les écrans rechargent les données par intervalle (pas de live queries) +- **Pas de state global pour les tâches** : chargées depuis SQLite par écran +- Icônes via lucide-react-native, polices Inter (400/500/600/700) +- UUID générés via `expo-crypto` +- Sous-tâches = tâches avec `parentId` non-null + +## Palette de couleurs + +| Token | Valeur | +|-------|--------| +| bleu | `#4A90A4` | +| crème | `#FFF8F0` | +| terracotta | `#C17767` | +| vert | `#8BA889` | +| sable | `#D4A574` | +| violet | `#7B68EE` | +| rouge | `#E57373` | +| teal | `#4DB6AC` | + +Couleurs sombres : fond `#1A1A1A`, surface `#2A2A2A`, bordure `#3A3A3A`, texte `#F5F5F5`, secondaire `#A0A0A0` + +## Build + +Profiles EAS dans `eas.json` : dev / preview / production. diff --git a/masterplan.md b/masterplan.md new file mode 100644 index 0000000..e7db580 --- /dev/null +++ b/masterplan.md @@ -0,0 +1,133 @@ +# Simpl-Liste — Masterplan + +## Vision + +Application mobile de gestion de tâches minimaliste, rapide et hors-ligne. +Pas de compte requis, pas de cloud. Les données restent sur l'appareil. + +Développée par **La Compagnie Maximus**. + +--- + +## État actuel (v1.0) + +### Fonctionnalités livrées + +| Catégorie | Détail | +|-----------|--------| +| **Tâches** | Création, édition, suppression, toggle complétion (haptic), notes, priorité 4 niveaux | +| **Sous-tâches** | Imbriquées via `parentId`, toggle indépendant | +| **Listes** | Inbox permanent + listes custom avec couleur et icône (20 icônes Lucide) | +| **Tags** | CRUD complet, assignation aux tâches, 7 couleurs prédéfinies | +| **Récurrence** | Quotidien / hebdo / mensuel / annuel — auto-création de la prochaine occurrence | +| **Tri** | Par position, priorité, date d'échéance, titre, date de création | +| **Filtres** | Par statut, priorité, date d'échéance, tag | +| **Notifications** | Rappels planifiés avec offset configurable (à l'heure, 1h, 3h, 1 jour avant) | +| **Calendrier** | Sync optionnelle vers calendrier système (expo-calendar) | +| **Export ICS** | Export .ics par liste ou tâche individuelle, avec RRULE | +| **Thème** | Clair / Sombre / Système | +| **Langues** | Français, Anglais (détection automatique) | +| **Offline-first** | SQLite local, aucun réseau requis | + +### Architecture technique + +- React Native 0.81 + Expo SDK 54 (New Architecture activée) +- SQLite via Drizzle ORM (3 migrations appliquées) +- Zustand pour l'état UI (thème, tri, filtres) +- Expo Router (navigation file-based) +- NativeWind (Tailwind CSS) + +--- + +## Phase 2 — Améliorations UX + +**Priorité : haute** — Améliorer l'expérience quotidienne avant d'ajouter des fonctionnalités. + +### Drag & drop pour réordonner +- Réorganiser les tâches dans une liste par glisser-déposer +- Réorganiser les listes dans l'onglet Listes +- Librairie : `react-native-draggable-flatlist` ou équivalent reanimated + +### Swipe actions +- Swipe gauche → supprimer +- Swipe droite → compléter +- Remplace les boutons actuels (trash icon, toggle) + +### Recherche globale +- Barre de recherche dans l'inbox ou en haut de l'app +- Recherche par titre, notes, tags + +### Quick add amélioré +- Parsing naturel de la date ("demain", "lundi prochain") +- Assignation de liste/tag inline via syntaxe (#tag, /liste) + +### Widgets (Expo) +- Widget iOS/Android affichant les tâches du jour +- Widget compteur "X tâches restantes" + +--- + +## Phase 3 — Données & sync + +**Priorité : moyenne** — Optionnel, l'app fonctionne en offline-first. + +### Backup / Restore +- Export complet de la base SQLite (JSON ou fichier .db) +- Import depuis backup +- Pas de cloud — fichier local partageable + +### Sync entre appareils (optionnel) +- Si implémenté : sync P2P ou via serveur auto-hébergé +- Protocole : CRDTs ou simple merge basé sur timestamps +- Le serveur serait sur l'infra VPS OVH / Coolify de La Compagnie Maximus + +--- + +## Phase 4 — Monétisation + +### Distribution +- **Android** : Google Play Store (ou F-Droid pour la version libre) +- **iOS** : Apple App Store +- APK direct disponible sur le site lacompagniemaximus.com + +### Modèle +- **Gratuit** — app complète sans restrictions +- Revenus potentiels via version "Pro" avec : + - Thèmes supplémentaires + - Widgets avancés + - Sync cloud (si Phase 3 implémentée) + +--- + +## Améliorations techniques à considérer + +| Item | Détail | +|------|--------| +| **Remplacer le polling 500ms** | Utiliser les live queries de Drizzle/expo-sqlite ou un event bus interne | +| **Tests** | Ajouter des tests unitaires (repository) et d'intégration (écrans) | +| **i18n notifications** | Le channel Android hardcode du français — utiliser i18next | +| **Accessibilité** | Labels accessibilité sur les boutons, rôles ARIA, taille de police dynamique | +| **Performance** | Virtualiser les longues listes, memoize les composants coûteux | +| **CI/CD** | EAS Build automatisé via GitHub Actions ou Forgejo CI | + +--- + +## Infrastructure + +L'app mobile est standalone — pas de backend requis. + +Pour la distribution et les services annexes (site web, analytics) : +- **Site** : lacompagniemaximus.com (Vercel) +- **Infra future** : VPS OVH Canada + Coolify + Forgejo (voir masterplan La Compagnie Maximus) +- **Build** : EAS Build (Expo Application Services) + +--- + +## Timeline indicative + +| Phase | Statut | +|-------|--------| +| Phase 1 — MVP complet | ✅ Livré | +| Phase 2 — UX polish | 🔜 Prochaine étape | +| Phase 3 — Backup/Sync | 📋 Planifié | +| Phase 4 — Distribution | 📋 Planifié |