4.6 KiB
4.6 KiB
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
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
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
isDarkternary (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
parentIdnon-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.