simpl-liste/CLAUDE.md
le king fu f8523b8a6c docs: add CLAUDE.md and masterplan for project reference
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 21:50:45 -05:00

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