docs: add CLAUDE.md and masterplan for project reference

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
le king fu 2026-02-20 21:50:45 -05:00
parent 2e86835e44
commit f8523b8a6c
2 changed files with 254 additions and 0 deletions

121
CLAUDE.md Normal file
View file

@ -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.

133
masterplan.md Normal file
View file

@ -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é |