docs: add CLAUDE.md and masterplan for project reference
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
2e86835e44
commit
f8523b8a6c
2 changed files with 254 additions and 0 deletions
121
CLAUDE.md
Normal file
121
CLAUDE.md
Normal 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
133
masterplan.md
Normal 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é |
|
||||
Loading…
Reference in a new issue