Crazer est une application mobile conçue pour aider les jeunes (étudiants, actifs) à organiser des sorties entre amis, découvrir des activités, décider ensemble quoi faire, et conserver un journal de leurs souvenirs.
L'objectif produit est de lutter contre l'isolement social en simplifiant la planification (choix d'activités par swipe et vote de groupe, itinéraires, finances partagées type Tricount, "journal d'aventure" avec photos/notes, badges/achievements et rewind annuel).
- Framework Mobile : React Native + Expo (SDK 54)
- Langage : TypeScript (Mode strict activé)
- Base de données & Auth : Supabase (
@supabase/supabase-jsavec persistanceAsyncStorage) - Navigation : Expo Router v3+ (Navigation basée sur le système de fichiers, routage fortement typé, deep linking natif)
- Cartographie & Maps : MapLibre React Native + Tuiles vectorielles & raster OpenStreetMap (CartoDB Dark Matter / Positron)
- Gestion d'État Global : Zustand (Découplage léger par feature)
- Tests : Jest + React Native Testing Library
- Linter & Formatage : ESLint + Prettier
Crazer/
├── app/ # Écrans et routes (Expo Router)
│ ├── (auth)/ # Écrans d'authentification (login, register)
│ ├── (tabs)/ # Navigation principale par onglets
│ │ ├── _layout.tsx # Barre d'onglets (Sorties, Activités, Carte, Finances, Journal, Profil)
│ │ ├── index.tsx # Écran principal : Mes Sorties
│ │ ├── activites.tsx # Écran Découverte & Vote d'activités
│ │ ├── carte.tsx # Écran Carte interactive OpenStreetMap (MapLibre)
│ │ ├── finances.tsx # Écran Gestion des dépenses de groupe (Tricount)
│ │ ├── journal.tsx # Écran Journal d'aventure
│ │ └── profil.tsx # Écran Profil & Badges
│ └── _layout.tsx # Root layout et redirection d'authentification
├── src/ # Code source principal
│ ├── features/ # Modules fonctionnels (Feature-First)
│ │ ├── auth/ # Authentification & Inscription Supabase
│ │ ├── sorties/ # Gestion des sorties, invitations, RSVPs
│ │ ├── activites/ # Recherche d'activités, filtres, swipe & vote
│ │ ├── carte/ # Carte interactive MapLibre, POIs, thèmes OSM, filtres & recherche
│ │ ├── itineraire/ # Planification d'itinéraires multi-activités
│ │ ├── finances/ # Gestion financière de groupe (Tricount)
│ │ ├── journal/ # Journal d'aventure (souvenirs, photos, notes)
│ │ ├── gamification/ # Badges, achievements & rewind annuel
│ │ └── profil/ # Profil utilisateur, amis, centres d'intérêt
│ ├── shared/ # Éléments réutilisables transversaux
│ │ ├── components/ # Composants UI de base (Button, Card...)
│ │ ├── constants/ # Thème (Couleurs, Spacing, Typographie)
│ │ ├── hooks/ # Hooks personnalisés génériques
│ │ ├── lib/ # Client Supabase singleton (supabase.ts)
│ │ ├── utils/ # Utilitaires et helpers (dates, formatage)
│ │ └── types/ # Types et interfaces du domaine métier & Supabase DB
├── supabase/ # Migrations et configuration Supabase CLI
│ └── migrations/ # Migrations DDL SQL versionnées
├── CONVENTIONS.md # Guide des conventions et bonnes pratiques
├── AGENTS.md # Directives et règles strictes pour les agents IA
├── package.json
├── tsconfig.json # Config TypeScript avec alias @/*
├── jest.config.js # Config Jest
├── .eslintrc.js # Config ESLint
└── .prettierrc # Config Prettier
Copiez le fichier .env.example en .env.local et renseignez les clés Supabase :
cp .env.example .env.localExemple de contenu .env.local :
EXPO_PUBLIC_SUPABASE_URL=https://your-project-id.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-herenpm installnpm startVous pouvez ensuite appuyer sur :
ipour lancer sur le simulateur iOSapour lancer sur l'émulateur Androidwpour lancer dans le navigateur Web
npm testPour exécuter les tests en mode observation (watch) :
npm run test:watchnpm run lint # Vérification ESLint
npm run lint:fix # Correction automatique ESLint
npm run typecheck # Vérification des types TypeScript sans émission
npm run format # Formatage Prettiernpm run db:types # Génère les types TypeScript database.types.ts
npm run db:push # Applique les migrations SQL locales à la base distante
npm run db:migration <nom> # Crée une nouvelle migration SQLAvant de contribuer au projet, merci de consulter :
- ⚡ docs/SUPABASE.md : Guide Supabase, commandes CLI, migrations SQL et bonnes pratiques.
- 📖 CONVENTIONS.md : Normes de nommage, architecture, Zustand, tests, accessibilité et commits.
- 🤖 AGENTS.md : Directives strictes pour les agents IA (TDD bugfix, aucune modification directe sur main, pas de commit/push sans validation humaine).