# Contexte projet — Application Marchand de Biens ## Qui utilise cette app Marchand de biens professionnel en France. L'app est utilisée au quotidien sur mobile (iOS/Android) et navigateur web. Elle remplace un ensemble d'outils épars (notes, tableurs, contacts téléphoniques, etc.). ## Stack technique - **Frontend** : React Native avec Expo (SDK 51+) - **Navigation** : Expo Router (file-based routing) - **Base de données** : Supabase (PostgreSQL) - **Auth** : Supabase Auth (email/password) - **Stockage fichiers** : Supabase Storage (photos, PDFs) - **IA** : API Anthropic Claude (claude-sonnet-4-20250514) - **UI** : NativeWind (Tailwind pour React Native) + React Native Paper pour les composants complexes - **State** : Zustand pour le state global, React Query (TanStack) pour le cache serveur - **Déploiement mobile** : Expo EAS - **Déploiement web** : Vercel ## Conventions de code - TypeScript strict partout, jamais de `any` - Noms de fichiers : kebab-case pour les fichiers, PascalCase pour les composants - Toujours utiliser des hooks personnalisés pour la logique métier (ex: `useBiens`, `useContacts`) - Les appels Supabase se font UNIQUEMENT dans les hooks, jamais dans les composants - Les types TypeScript sont définis dans `/types/database.ts` (généré depuis Supabase) - Les constantes métier sont dans `/constants/metier.ts` - Toujours gérer les états de chargement et d'erreur - Commentaires en français pour la logique métier, anglais pour le code technique ## Vocabulaire métier (utiliser ces termes précis) - **Bien** : propriété immobilière prospectée ou acquise - **Piste** : bien en cours d'analyse, pas encore d'offre - **Dossier** : bien avec offre en cours ou acte signé - **Fiche bien** : écran de détail d'un bien - **Compromis** : avant-contrat de vente (SPC) - **Acte** : acte authentique de vente chez notaire - **Portage** : période entre achat et revente (coût = intérêts + taxes) - **Marge brute** : prix revente - prix achat - travaux - frais notaire achat - **Marge nette** : marge brute - frais de portage - frais d'agence vente - impôts - **DPE** : Diagnostic de Performance Énergétique - **Surface habitable** : surface loi Carrez pour appartements - **Marchand de biens** = le user, l'utilisateur de cette app ## Modules de l'application 1. **Prospection** : pipeline Kanban des biens (piste → analyse → offre → compromis → acte → revente) 2. **Annuaire** : contacts métier (notaires, artisans, banquiers, agents immo) 3. **Fiches biens** : dossier complet par bien (photos, docs, historique) 4. **Calculateur** : analyse de rentabilité financière 5. **Visites** : compte-rendus de visites avec check-list 6. **Travaux** : suivi de chantier et devis 7. **Administratif** : documents, délais légaux, alertes 8. **Agenda** : tâches et rappels liés aux biens 9. **Dashboard** : vue globale et KPIs ## Structure des dossiers ``` /app → écrans (Expo Router) /(tabs) → navigation principale /prospection /annuaire /agenda /dashboard /bien/[id] → fiche bien /visite/[id] → rapport de visite /contact/[id] → fiche contact /components → composants réutilisables /ui → composants génériques (Button, Card, Input...) /biens → composants spécifiques aux biens /visites → composants spécifiques aux visites /hooks → hooks personnalisés /services → appels API (Supabase, Anthropic) /supabase.ts → client Supabase /ai.ts → appels Claude API /types → types TypeScript /constants → constantes et configuration /utils → fonctions utilitaires ``` ## Variables d'environnement nécessaires ``` EXPO_PUBLIC_SUPABASE_URL= EXPO_PUBLIC_SUPABASE_ANON_KEY= ANTHROPIC_API_KEY= ← côté serveur uniquement, jamais exposé côté client ``` ## Règles de sécurité importantes - La clé API Anthropic ne doit JAMAIS être dans le code client - Créer une Supabase Edge Function pour les appels IA - Row Level Security (RLS) activé sur toutes les tables Supabase - Les photos et docs sont dans des buckets Supabase privés ## Calculs financiers — formules exactes ``` frais_notaire_achat = prix_achat * 0.075 (ancien) ou * 0.02 (neuf) prix_revient = prix_achat + frais_notaire_achat + travaux + frais_portage marge_brute = prix_revente_cible - prix_revient frais_portage_mensuel = (prix_achat * taux_credit / 12) + taxe_fonciere_mensuelle taux_marge_brute = marge_brute / prix_revente_cible * 100 ```