init
This commit is contained in:
690
PROMPTS_CURSOR.md
Normal file
690
PROMPTS_CURSOR.md
Normal file
@ -0,0 +1,690 @@
|
||||
# PROMPTS CURSOR — Application Marchand de Biens
|
||||
# Copier-coller chaque prompt dans Cursor Chat (Cmd+L ou Ctrl+L)
|
||||
# Lire le fichier .cursorrules avant chaque session
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 0 — Setup initial du projet
|
||||
## ═══════════════════════════════════════════
|
||||
## Durée estimée : 1-2h
|
||||
|
||||
```
|
||||
Lis attentivement le fichier .cursorrules pour comprendre le contexte du projet.
|
||||
|
||||
Je veux créer une application React Native avec Expo pour un marchand de biens immobiliers.
|
||||
|
||||
Crée le projet de zéro avec cette configuration précise :
|
||||
|
||||
1. INITIALISATION DU PROJET :
|
||||
- Initialise un nouveau projet Expo avec Expo Router : `npx create-expo-app@latest mb-app --template tabs`
|
||||
- TypeScript strict
|
||||
- NativeWind pour le styling (Tailwind CSS pour React Native)
|
||||
|
||||
2. DÉPENDANCES À INSTALLER :
|
||||
- @supabase/supabase-js
|
||||
- @tanstack/react-query
|
||||
- zustand
|
||||
- react-native-paper
|
||||
- expo-image-picker
|
||||
- expo-document-picker
|
||||
- expo-file-system
|
||||
- expo-notifications
|
||||
- react-native-maps
|
||||
- @react-native-async-storage/async-storage
|
||||
- react-native-safe-area-context (si pas déjà inclus)
|
||||
|
||||
3. CONFIGURATION SUPABASE :
|
||||
Crée le fichier `/services/supabase.ts` avec :
|
||||
- Initialisation du client Supabase avec les variables d'env
|
||||
- Export du client
|
||||
- Gestion de la session (AsyncStorage pour mobile)
|
||||
|
||||
4. CONFIGURATION AUTH :
|
||||
Crée un contexte d'authentification `/context/AuthContext.tsx` avec :
|
||||
- Connexion par email/password
|
||||
- Déconnexion
|
||||
- État de l'utilisateur connecté
|
||||
- Redirection automatique si non connecté
|
||||
|
||||
5. ÉCRANS D'AUTH :
|
||||
- `/app/auth/login.tsx` : formulaire email + password, bouton connexion
|
||||
- `/app/auth/register.tsx` : formulaire inscription (email, password, nom, prénom)
|
||||
- Style sobre et professionnel, couleur principale #1D4ED8 (bleu)
|
||||
|
||||
6. FICHIER .env :
|
||||
Crée `.env.local` avec les placeholders :
|
||||
```
|
||||
EXPO_PUBLIC_SUPABASE_URL=https://VOTRE_PROJET.supabase.co
|
||||
EXPO_PUBLIC_SUPABASE_ANON_KEY=VOTRE_ANON_KEY
|
||||
```
|
||||
|
||||
7. VALIDATION :
|
||||
L'app doit se lancer avec `npx expo start`, afficher l'écran de login, et permettre la connexion.
|
||||
|
||||
Ne génère PAS encore les écrans de contenu, seulement l'authentification qui fonctionne.
|
||||
Mets à jour AGENTS.md : Agent 0 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 1 — Types TypeScript + connexion DB
|
||||
## ═══════════════════════════════════════════
|
||||
## Prérequis : Avoir exécuté schema.sql dans Supabase
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Le schéma SQL a été exécuté dans Supabase. Je dois maintenant créer les types TypeScript et les services de base.
|
||||
|
||||
1. TYPES TYPESCRIPT `/types/database.ts` :
|
||||
Crée des interfaces TypeScript pour TOUTES les tables du schéma :
|
||||
- Profile, Bien, EtapePipeline, AnalyseFinanciere
|
||||
- Contact, BienContact
|
||||
- Visite, ChecklistItem, ChecklistReponse
|
||||
- PhotoBien, DocumentBien
|
||||
- Tache, NoteBien, DevisTravaux
|
||||
|
||||
Pour chaque table, crée aussi un type "Insert" (sans id et dates auto) et "Update" (tout optionnel).
|
||||
Exemple :
|
||||
```typescript
|
||||
export interface Bien { id: string; user_id: string; titre?: string; ... }
|
||||
export type BienInsert = Omit<Bien, 'id' | 'created_at' | 'updated_at'>
|
||||
export type BienUpdate = Partial<BienInsert>
|
||||
```
|
||||
|
||||
2. CONSTANTES MÉTIER `/constants/metier.ts` :
|
||||
- ETAPES_DEFAUT : noms des étapes du pipeline
|
||||
- CATEGORIES_CONTACTS : liste avec labels français
|
||||
- TYPES_BIENS : appartement, maison, immeuble, etc.
|
||||
- CATEGORIES_CHECKLIST : avec emojis et labels
|
||||
- TYPES_DOCUMENTS : compromis, acte, DPE, etc.
|
||||
|
||||
3. HOOK DE BASE `/hooks/useBiens.ts` :
|
||||
- fetchBiens() : récupère tous les biens de l'utilisateur avec l'étape
|
||||
- createBien(data) : crée un bien, retourne l'id
|
||||
- updateBien(id, data) : met à jour
|
||||
- deleteBien(id) : supprime
|
||||
|
||||
4. HOOK `/hooks/useContacts.ts` :
|
||||
- fetchContacts() : avec filtre par catégorie optionnel
|
||||
- createContact(data)
|
||||
- updateContact(id, data)
|
||||
|
||||
5. REACT QUERY CONFIG `/services/queryClient.ts` :
|
||||
- Initialisation de QueryClient
|
||||
- Stale time : 5 minutes
|
||||
- Retry : 1 fois
|
||||
|
||||
Mets à jour AGENTS.md : Agent 1 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 2 — Navigation complète
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée la structure de navigation complète de l'application avec Expo Router.
|
||||
|
||||
1. NAVIGATION PAR ONGLETS `/app/(tabs)/` :
|
||||
5 onglets avec icônes Expo Vector Icons :
|
||||
- `index.tsx` → Dashboard (icône: grid, label: "Vue d'ensemble")
|
||||
- `prospection.tsx` → Prospection (icône: search, label: "Biens")
|
||||
- `visites.tsx` → Visites (icône: clipboard, label: "Visites")
|
||||
- `annuaire.tsx` → Annuaire (icône: people, label: "Contacts")
|
||||
- `agenda.tsx` → Agenda (icône: calendar, label: "Agenda")
|
||||
|
||||
Couleur active : #1D4ED8, couleur inactive : #9CA3AF
|
||||
|
||||
2. ÉCRANS DE DÉTAIL (hors onglets) :
|
||||
- `/app/bien/[id].tsx` → Fiche bien (en-tête avec titre du bien)
|
||||
- `/app/bien/nouveau.tsx` → Création d'un bien
|
||||
- `/app/contact/[id].tsx` → Fiche contact
|
||||
- `/app/contact/nouveau.tsx` → Nouveau contact
|
||||
- `/app/visite/[id].tsx` → Rapport de visite
|
||||
- `/app/visite/nouvelle.tsx` → Nouvelle visite (prend un bien_id en param)
|
||||
- `/app/calculateur/[bienId].tsx` → Calculateur financier
|
||||
|
||||
3. CHAQUE ÉCRAN doit avoir pour l'instant :
|
||||
- Un titre visible
|
||||
- Un texte "Module [Nom] — à venir"
|
||||
- Le bouton de navigation retour (automatique avec Expo Router)
|
||||
|
||||
4. HEADER GLOBAL :
|
||||
- Bouton profil en haut à droite sur les onglets
|
||||
- Titre dynamique selon l'onglet actif
|
||||
|
||||
5. BOUTON FLOATING ACTION BUTTON (FAB) :
|
||||
Sur l'onglet Prospection et Annuaire : bouton "+" en bas à droite pour ajouter un bien/contact.
|
||||
|
||||
Mets à jour AGENTS.md : Agent 2 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 3 — Module Prospection (Kanban)
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée le module Prospection complet : vue pipeline Kanban des biens.
|
||||
|
||||
1. ÉCRAN PROSPECTION `/app/(tabs)/prospection.tsx` :
|
||||
|
||||
Vue principale avec 2 modes switchables (boutons en haut) :
|
||||
|
||||
MODE KANBAN (défaut) :
|
||||
- Colonnes horizontales scrollables (ScrollView horizontal)
|
||||
- Chaque colonne = une étape du pipeline (depuis Supabase)
|
||||
- Chaque carte de bien affiche : titre, ville, surface, prix achat, badge de priorité
|
||||
- Nombre de biens par colonne dans le header de colonne
|
||||
- Couleur de colonne selon la couleur définie dans etapes_pipeline
|
||||
|
||||
MODE LISTE :
|
||||
- FlatList avec tri par date, ville, ou priorité
|
||||
- Même info que les cartes Kanban + statut en badge
|
||||
|
||||
2. COMPOSANT CARTE BIEN `/components/biens/CarteBien.tsx` :
|
||||
- Titre ou "Bien sans titre" si vide
|
||||
- Ville + code postal
|
||||
- Surface habitable (si renseignée)
|
||||
- Prix d'achat formaté en €
|
||||
- Indicateur priorité (rouge=haute, orange=normale, gris=basse)
|
||||
- Badge source (off-market, agence, notaire...)
|
||||
- onPress → navigation vers `/bien/[id]`
|
||||
- onLongPress → modal rapide (changer étape, appeler contact, supprimer)
|
||||
|
||||
3. FORMULAIRE CRÉATION BIEN `/app/bien/nouveau.tsx` :
|
||||
Formulaire en plusieurs étapes (step 1, step 2, step 3) :
|
||||
|
||||
Étape 1 — Localisation :
|
||||
- Adresse (text input)
|
||||
- Ville + code postal
|
||||
- Type de bien (Select : appartement, maison, immeuble, terrain...)
|
||||
|
||||
Étape 2 — Caractéristiques :
|
||||
- Surface habitable
|
||||
- Nombre de pièces
|
||||
- Prix d'achat estimé
|
||||
- Source (Select)
|
||||
|
||||
Étape 3 — Résumé + validation
|
||||
|
||||
Bouton "Créer le bien" → POST Supabase → redirect vers la fiche bien
|
||||
|
||||
4. FILTRES ET RECHERCHE :
|
||||
- Barre de recherche par ville ou titre
|
||||
- Filtre rapide : Tous / Actifs / Abandonnés
|
||||
|
||||
5. HOOK `/hooks/usePipeline.ts` :
|
||||
- fetchBiensParEtape() : retourne les biens groupés par étape
|
||||
- moveToEtape(bienId, etapeId) : change l'étape d'un bien
|
||||
- fetchEtapes() : récupère les étapes du pipeline
|
||||
|
||||
Mets à jour AGENTS.md : Agent 3 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 4 — Fiche Bien (détail complet)
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée l'écran de fiche bien complet : le "dossier" central de l'app.
|
||||
|
||||
ÉCRAN `/app/bien/[id].tsx` :
|
||||
|
||||
Structure avec ScrollView et sections collapsibles :
|
||||
|
||||
1. EN-TÊTE :
|
||||
- Photo principale (ou placeholder avec icône maison)
|
||||
- Adresse complète
|
||||
- Badge étape actuelle (avec bouton pour changer)
|
||||
- Score d'opportunité visuel (étoiles ou barre)
|
||||
- Boutons rapides : Appeler vendeur | Calculateur | Nouvelle visite
|
||||
|
||||
2. SECTION "INFOS" :
|
||||
- Type de bien, surface, pièces, étages, année construction
|
||||
- DPE : badge coloré (A=vert foncé → G=rouge)
|
||||
- Source de la piste
|
||||
|
||||
3. SECTION "FINANCES" (résumé) :
|
||||
- Prix d'achat, budget travaux estimé
|
||||
- Marge cible (si analyse créée)
|
||||
- Bouton → ouvre le calculateur
|
||||
|
||||
4. SECTION "VISITES" :
|
||||
- Liste des visites avec date et avis
|
||||
- Bouton "Nouvelle visite"
|
||||
|
||||
5. SECTION "CONTACTS" :
|
||||
- Contacts liés (notaire, agent, artisans...)
|
||||
- Bouton pour lier un contact existant
|
||||
|
||||
6. SECTION "DOCUMENTS" :
|
||||
- Liste des documents (DPE, compromis, etc.)
|
||||
- Bouton upload (expo-document-picker)
|
||||
|
||||
7. SECTION "NOTES" :
|
||||
- Notes libres avec date
|
||||
- Champ pour ajouter une note rapide
|
||||
|
||||
8. SECTION "TIMELINE" :
|
||||
- Historique chronologique des actions (création, visite, offre, compromis...)
|
||||
|
||||
ÉDITION :
|
||||
- Bouton "Modifier" en haut à droite → mode édition inline
|
||||
- Chaque section modifiable directement
|
||||
- Auto-save avec debounce (500ms)
|
||||
|
||||
HOOK `/hooks/useBienDetail.ts` :
|
||||
- fetchBienComplet(id) : avec toutes les relations (visites, contacts, docs, notes)
|
||||
- addNote(bienId, contenu)
|
||||
- linkContact(bienId, contactId, role)
|
||||
- uploadDocument(bienId, file, type)
|
||||
|
||||
Mets à jour AGENTS.md : Agent 4 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 5 — Calculateur financier
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée le calculateur de rentabilité, le cœur financier de l'application.
|
||||
|
||||
ÉCRAN `/app/calculateur/[bienId].tsx` :
|
||||
|
||||
Ce calculateur utilise les formules exactes définies dans .cursorrules.
|
||||
|
||||
1. SECTION ACQUISITION :
|
||||
- Prix d'achat (€) — input numérique
|
||||
- Type de bien fiscal : Ancien (7,5%) / Neuf (2%) — toggle
|
||||
- Frais de notaire : calculés automatiquement + possibilité de saisir manuellement
|
||||
- Frais d'agence achat (€ ou %)
|
||||
|
||||
2. SECTION TRAVAUX :
|
||||
- Budget travaux estimé (€)
|
||||
- Réserve imprévus : slider 5-25% (défaut 10%)
|
||||
- Budget total travaux = estimation + réserve
|
||||
|
||||
3. SECTION PORTAGE :
|
||||
- Durée de portage prévue (slider 6-36 mois)
|
||||
- Taux de crédit (%) — pré-rempli depuis le profil
|
||||
- Taxe foncière annuelle (€)
|
||||
- Charges mensuelles (€)
|
||||
- Coût de portage total = calculé automatiquement
|
||||
|
||||
4. SECTION REVENTE :
|
||||
- Prix de revente cible (€)
|
||||
- Frais d'agence vente (% — défaut 5%)
|
||||
- Taux d'imposition (% — défaut 25%)
|
||||
|
||||
5. RÉSULTATS EN TEMPS RÉEL (mis à jour à chaque keystroke) :
|
||||
Affichés dans des cartes colorées :
|
||||
- Prix de revient total (€) — gris
|
||||
- Marge brute (€ et %) — vert si > 15%, orange si 8-15%, rouge si < 8%
|
||||
- Marge nette après impôts (€ et %) — même code couleur
|
||||
- ROI (%) — retour sur investissement
|
||||
- Point mort : prix de revente minimum pour ne pas perdre
|
||||
|
||||
6. SCÉNARIOS :
|
||||
Bouton "Voir les scénarios" → modal avec 3 colonnes :
|
||||
- Pessimiste (-10% prix revente)
|
||||
- Réaliste (prix saisi)
|
||||
- Optimiste (+10% prix revente)
|
||||
Chaque colonne affiche la marge nette correspondante.
|
||||
|
||||
7. SAUVEGARDE :
|
||||
Bouton "Enregistrer l'analyse" → sauvegarde dans analyses_financieres
|
||||
|
||||
8. EXPORT :
|
||||
Bouton "Partager" → génère un résumé texte formaté à partager par SMS/email
|
||||
|
||||
COMPOSANT RÉUTILISABLE `/components/biens/ResultatFinancier.tsx` :
|
||||
Affiche les 4 KPIs financiers (utilisé aussi dans la fiche bien)
|
||||
|
||||
Mets à jour AGENTS.md : Agent 5 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 6 — Annuaire contacts
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée le module Annuaire : carnet d'adresses professionnel du marchand de biens.
|
||||
|
||||
1. ÉCRAN ANNUAIRE `/app/(tabs)/annuaire.tsx` :
|
||||
|
||||
EN-TÊTE :
|
||||
- Barre de recherche (prénom, nom, société, ville)
|
||||
- Filtres par catégorie : tous | notaires | agents | artisans | banques | autres
|
||||
- Sous-filtre artisans : par corps de métier (plomberie, élec, maçonnerie...)
|
||||
|
||||
LISTE :
|
||||
- FlatList avec sections par catégorie (SectionList si filtre = "tous")
|
||||
- Chaque item : avatar initiales coloré, nom, société, ville, note étoiles, bouton appel direct
|
||||
- Swipe gauche pour supprimer, swipe droit pour "Favori"
|
||||
- Section "Favoris" en haut de liste
|
||||
|
||||
2. FICHE CONTACT `/app/contact/[id].tsx` :
|
||||
- Avatar grande taille avec initiales
|
||||
- Badges : catégorie + spécialité
|
||||
- Note (étoiles, modifiable par tap)
|
||||
- Boutons actions : Appeler | SMS | Email | Copier
|
||||
- Section "Biens associés" : liste des biens où ce contact intervient
|
||||
- Section "Historique" : notes d'échanges avec date
|
||||
- Champ "Notes" libre
|
||||
- Infos artisan : taux horaire, remise habituelle
|
||||
|
||||
3. FORMULAIRE NOUVEAU CONTACT `/app/contact/nouveau.tsx` :
|
||||
- Catégorie (obligatoire) — change les champs affichés
|
||||
- Nom, prénom, société
|
||||
- Téléphone (avec format FR automatique)
|
||||
- Email
|
||||
- Ville + zone d'intervention
|
||||
- Spécialité (si artisan)
|
||||
- Note initiale
|
||||
|
||||
4. FONCTIONNALITÉ APPEL :
|
||||
Import `{ Linking } from 'react-native'`
|
||||
`Linking.openURL('tel:' + telephone)` — fonctionne sur iOS et Android
|
||||
|
||||
5. HOOK `/hooks/useContacts.ts` (compléter celui de l'Agent 1) :
|
||||
- searchContacts(query, categorie?)
|
||||
- getFavoris()
|
||||
- getBiensByContact(contactId)
|
||||
- toggleFavori(contactId)
|
||||
|
||||
Mets à jour AGENTS.md : Agent 6 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 7 — Module Visites (avec IA Claude)
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée le module Visites avec génération de compte-rendu par IA Claude.
|
||||
|
||||
⚠️ IMPORTANT SÉCURITÉ : L'appel à l'API Anthropic doit se faire via une Supabase Edge Function,
|
||||
jamais directement depuis le client mobile (la clé API ne doit pas être dans le code React Native).
|
||||
|
||||
1. EDGE FUNCTION SUPABASE `/supabase/functions/generate-rapport-visite/index.ts` :
|
||||
```typescript
|
||||
// Reçoit : { notes_brutes, checklist_reponses, bien_info }
|
||||
// Appelle l'API Anthropic Claude
|
||||
// Retourne : { rapport_structure }
|
||||
|
||||
const prompt = `Tu es assistant d'un marchand de biens immobiliers français.
|
||||
|
||||
À partir des notes de visite et de la check-list ci-dessous, génère un compte-rendu
|
||||
de visite professionnel et structuré en français.
|
||||
|
||||
Informations du bien : ${JSON.stringify(bien_info)}
|
||||
|
||||
Notes prises pendant la visite : ${notes_brutes}
|
||||
|
||||
Résultats de la check-list : ${JSON.stringify(checklist_reponses)}
|
||||
|
||||
Génère un compte-rendu avec ces sections :
|
||||
1. Résumé exécutif (3-4 phrases)
|
||||
2. Points positifs (liste)
|
||||
3. Points négatifs / travaux nécessaires (liste)
|
||||
4. Estimation des travaux (si des éléments permettent de l'estimer)
|
||||
5. Recommandation (Coup de cœur / Intéressant / À éviter + justification)
|
||||
6. Prochaines étapes suggérées
|
||||
|
||||
Sois concis, professionnel, et orienté investissement.`;
|
||||
```
|
||||
|
||||
2. ÉCRAN LISTE VISITES `/app/(tabs)/visites.tsx` :
|
||||
- Visites à venir (avec date et bien concerné)
|
||||
- Visites passées avec leur rapport
|
||||
- Bouton "Planifier une visite"
|
||||
|
||||
3. ÉCRAN NOUVELLE VISITE `/app/visite/nouvelle.tsx` :
|
||||
- Sélecteur de bien (liste ou scan QR code si bien a un QR)
|
||||
- Date et heure de la visite
|
||||
- Type : première visite / seconde visite / expert
|
||||
- Redirect vers l'écran de visite en cours
|
||||
|
||||
4. ÉCRAN VISITE EN COURS `/app/visite/[id].tsx` :
|
||||
|
||||
TAB 1 — CHECK-LIST :
|
||||
- Sections par catégorie (Structure, Toiture, Électricité, etc.)
|
||||
- Chaque item avec 4 états : ✅ OK | ⚠️ Attention | ❌ Problème | — Non vérifié
|
||||
- Champ note par item
|
||||
- Progression visuelle (X/Y items vérifiés)
|
||||
|
||||
TAB 2 — NOTES LIBRES :
|
||||
- Grande zone de texte pour notes rapides
|
||||
- Bouton microphone : transcription vocale (expo-av)
|
||||
- Bouton photo : ajouter une photo directement liée à la visite
|
||||
|
||||
TAB 3 — ESTIMATION :
|
||||
- Budget travaux min/max estimé sur place
|
||||
- Durée estimée
|
||||
- Avis global (Coup de cœur / Intéressant / Neutre / À éviter)
|
||||
- Score d'opportunité (slider 1-10)
|
||||
|
||||
BOUTON "GÉNÉRER LE RAPPORT IA" :
|
||||
- Loading spinner avec message "Analyse en cours..."
|
||||
- Appel à la Edge Function Supabase
|
||||
- Affiche le rapport généré
|
||||
- Bouton "Copier" et "Modifier" le rapport
|
||||
- Sauvegarde automatique dans visites.rapport_genere
|
||||
|
||||
5. HOOK `/hooks/useVisite.ts` :
|
||||
- startVisite(bienId, dateVisite)
|
||||
- saveChecklist(visiteId, reponses)
|
||||
- saveNotes(visiteId, notes)
|
||||
- generateRapport(visiteId) → appel Edge Function
|
||||
- fetchVisitesByBien(bienId)
|
||||
|
||||
Mets à jour AGENTS.md : Agent 7 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 8 — Agenda & tâches
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée le module Agenda : gestion des tâches quotidiennes du marchand de biens.
|
||||
|
||||
1. ÉCRAN AGENDA `/app/(tabs)/agenda.tsx` :
|
||||
|
||||
VUE "AUJOURD'HUI" (défaut) :
|
||||
- Tâches du jour groupées par bien
|
||||
- Section "En retard" en rouge en haut
|
||||
- Section "Aujourd'hui"
|
||||
- Section "Cette semaine"
|
||||
|
||||
VUE CALENDRIER :
|
||||
- react-native-calendars
|
||||
- Points colorés sur les jours avec tâches
|
||||
- Tap sur un jour → liste des tâches du jour
|
||||
|
||||
2. COMPOSANT TÂCHE `/components/agenda/CarteTache.tsx` :
|
||||
- Checkbox (tap pour cocher = fait)
|
||||
- Titre + description courte
|
||||
- Badge bien associé (avec couleur de l'étape)
|
||||
- Date + heure
|
||||
- Badge priorité
|
||||
- Icône type (téléphone, email, rendez-vous, admin...)
|
||||
- Swipe droit : Snooze +1 jour
|
||||
- Swipe gauche : Supprimer
|
||||
|
||||
3. CRÉATION TÂCHE :
|
||||
Modal bottom sheet avec :
|
||||
- Titre (obligatoire)
|
||||
- Type de tâche (Select avec icônes)
|
||||
- Bien associé (optionnel — searchable Select)
|
||||
- Contact associé (optionnel)
|
||||
- Date et heure d'échéance (DateTimePicker)
|
||||
- Priorité (toggle 3 niveaux)
|
||||
- Rappel (30min avant / 1h / 1 jour / pas de rappel)
|
||||
|
||||
4. TÂCHES AUTO-GÉNÉRÉES :
|
||||
Créer une fonction `genererTachesDelaisLegaux(bienId)` qui génère automatiquement
|
||||
les tâches importantes lors des changements d'étape :
|
||||
- Compromis signé → "SRU 10 jours : fin le [date]"
|
||||
- Compromis signé → "Déblocage financement : échéance [date+45j]"
|
||||
- Acte signé → "Déclaration IS : rappel [date+3mois]"
|
||||
|
||||
5. NOTIFICATIONS :
|
||||
Configurer expo-notifications pour :
|
||||
- Rappel de tâche (heure configurée)
|
||||
- Alerte délai légal (veille)
|
||||
|
||||
6. HOOK `/hooks/useTaches.ts` :
|
||||
- fetchTachesJour(date)
|
||||
- fetchTachesEnRetard()
|
||||
- createTache(data)
|
||||
- toggleTacheStatus(id)
|
||||
- snooze(id, jours)
|
||||
- genererTachesDelaisLegaux(bienId, etapeName)
|
||||
|
||||
Mets à jour AGENTS.md : Agent 8 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## AGENT 9 — Dashboard
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md.
|
||||
|
||||
Crée le tableau de bord : vue d'ensemble de l'activité du marchand de biens.
|
||||
|
||||
ÉCRAN `/app/(tabs)/index.tsx` :
|
||||
|
||||
1. EN-TÊTE :
|
||||
- "Bonjour [Prénom] 👋"
|
||||
- Date du jour
|
||||
- Météo rapide (optionnel, via Open-Meteo API gratuite)
|
||||
|
||||
2. ALERTES URGENTES (si existantes) :
|
||||
Carte rouge en haut : tâches en retard + délais légaux proches (< 3 jours)
|
||||
|
||||
3. BARRE KPIs (scroll horizontal, 4 métriques) :
|
||||
- Biens actifs : nombre total
|
||||
- En compromis : nombre
|
||||
- Marge prévue : somme des marges nettes des analyses
|
||||
- Tâches du jour : nombre (avec badge rouge si en retard)
|
||||
|
||||
4. PIPELINE RÉSUMÉ :
|
||||
Barre horizontale proportionnelle avec chaque étape et son nombre de biens
|
||||
Tap sur une étape → filtre la liste en dessous
|
||||
|
||||
5. BIENS EN COURS :
|
||||
FlatList horizontale des 5 derniers biens actifs
|
||||
Chaque carte : titre, étape, date de la dernière action
|
||||
Tap → fiche bien
|
||||
|
||||
6. TÂCHES DU JOUR :
|
||||
3-5 tâches prioritaires
|
||||
Bouton "Voir tout" → onglet Agenda
|
||||
|
||||
7. DERNIÈRES VISITES :
|
||||
2-3 dernières visites avec score d'opportunité
|
||||
Tap → rapport de visite
|
||||
|
||||
8. STATISTIQUES MENSUELLES (bottom) :
|
||||
- Biens analysés ce mois
|
||||
- Offres faites
|
||||
- Taux de conversion piste → offre
|
||||
- Biens vendus (si applicable)
|
||||
|
||||
HOOK `/hooks/useDashboard.ts` :
|
||||
Utilise React Query pour fetcher en parallèle :
|
||||
- getNombreBiensParEtape()
|
||||
- getKPIsFinanciers()
|
||||
- getTachesUrgentes()
|
||||
- getDernieresVisites()
|
||||
Toutes les données mises en cache 5 minutes, refresh au focus de l'écran.
|
||||
|
||||
Mets à jour AGENTS.md : Agent 9 = ✅ Terminé.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## PROMPT DE DEBUG UNIVERSEL
|
||||
## (À utiliser quand quelque chose ne marche pas)
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules et AGENTS.md pour le contexte.
|
||||
|
||||
J'ai une erreur dans le module [NOM DU MODULE] :
|
||||
|
||||
ERREUR : [coller le message d'erreur exact]
|
||||
|
||||
FICHIER CONCERNÉ : [nom du fichier]
|
||||
|
||||
CE QUI DEVRAIT SE PASSER : [description du comportement attendu]
|
||||
|
||||
CE QUI SE PASSE : [description du bug]
|
||||
|
||||
Diagnostique le problème et propose un fix. Tiens compte de la stack technique
|
||||
définie dans .cursorrules (Expo + Supabase + TypeScript strict).
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ═══════════════════════════════════════════
|
||||
## PROMPT D'AMÉLIORATION UI
|
||||
## (Quand un écran fonctionne mais est laid)
|
||||
## ═══════════════════════════════════════════
|
||||
|
||||
```
|
||||
Lis .cursorrules.
|
||||
|
||||
L'écran [NOM] fonctionne mais l'interface n'est pas assez soignée pour une utilisation
|
||||
professionnelle quotidienne sur mobile.
|
||||
|
||||
Améliore le design avec ces critères :
|
||||
- Style sobre et professionnel (pas de couleurs vives inutiles)
|
||||
- Lisible en extérieur (fort contraste)
|
||||
- Actions principales facilement accessibles en une main (zone du pouce)
|
||||
- Chargement : skeletons pendant le fetch (pas de spinner seul)
|
||||
- États vides : message explicatif + bouton d'action (ex: "Aucune visite — Planifier une visite")
|
||||
- Feedback tactile sur les boutons (Haptics.impactAsync)
|
||||
- Gestion d'erreur visible (toast ou banner rouge en haut)
|
||||
|
||||
Couleurs de l'app :
|
||||
- Primaire : #1D4ED8 (bleu professionnel)
|
||||
- Succès : #16A34A
|
||||
- Attention : #D97706
|
||||
- Danger : #DC2626
|
||||
- Fond : #F9FAFB
|
||||
- Texte : #111827
|
||||
```
|
||||
Reference in New Issue
Block a user