Files
mdb/GUIDE_COMPLET.md
Bastien COIGNOUX 695d4e76d0 pocket
2026-05-04 08:28:32 +02:00

6.7 KiB

GUIDE COMPLET — Prompts Cursor

App Marchand de Biens — Expo + PocketBase


PROMPT 1 — Fondation (Setup + Auth + Navigation)

Lis .cursorrules et AGENTS.md.

Je crée une app React Native Expo pour marchand de biens immobiliers. Backend : PocketBase sur http://localhost:8090 (déjà lancé, collections déjà créées).

Collections existantes dans PocketBase : users, etapes_pipeline, contacts, biens, analyses_financieres, visites, taches, notes_biens, documents_biens, devis_travaux

PARTIE A — Initialisation : Dans le dossier actuel, initialise l'app Expo : npx create-expo-app@latest app --template tabs cd app

Installe ces dépendances dans app/ : pocketbase @tanstack/react-query zustand nativewind tailwindcss @react-native-async-storage/async-storage expo-image-picker expo-document-picker expo-haptics

PARTIE B — Fichier .env.local à la racine de app/ : EXPO_PUBLIC_PB_URL=http://localhost:8090

PARTIE C — Service PocketBase app/services/pocketbase.ts :

  • Client singleton PocketBase
  • Persistance session avec AsyncStorage
  • Export : pb, getCurrentUserId(), isAuthenticated()

PARTIE D — Types TypeScript app/types/collections.ts : Interfaces pour toutes les collections (étendent RecordModel de pocketbase) : UserRecord, BienRecord, ContactRecord, VisiteRecord, TacheRecord, EtapePipelineRecord, AnalyseFinanciereRecord, NoteRecord, DocumentRecord, DevisRecord

  • types BienCreate, BienUpdate (Omit + Partial)

PARTIE E — Constantes app/constants/metier.ts : ETAPES_DEFAUT (9 étapes avec couleurs) CATEGORIES_CONTACTS avec labels français TYPES_BIENS avec labels français AVIS_VISITE avec labels et couleurs

PARTIE F — Auth : app/context/AuthContext.tsx : login, logout, user courant, redirect auto app/app/auth/login.tsx : email + password, couleur primaire #1D4ED8 app/app/auth/register.tsx : email, password, nom, prénom

PARTIE G — Navigation : 5 onglets dans app/app/(tabs)/ :

  • index.tsx → Dashboard (icône grid)
  • biens.tsx → Biens (icône home)
  • visites.tsx → Visites (icône clipboard)
  • contacts.tsx → Contacts (icône people)
  • agenda.tsx → Agenda (icône calendar)

Écrans de détail :

  • app/bien/[id].tsx
  • app/bien/nouveau.tsx
  • app/contact/[id].tsx
  • app/visite/[id].tsx
  • app/calculateur/[bienId].tsx

Chaque écran de détail = placeholder avec titre pour l'instant. FAB "+" sur les onglets Biens et Contacts.

L'app doit se lancer avec : cd app && npx expo start L'auth doit fonctionner avec un compte créé sur PocketBase. Mets à jour AGENTS.md quand c'est terminé.


PROMPT 2 — Pipeline + Fiche Bien + Calculateur

Lancer SEULEMENT après que le Prompt 1 tourne

Lis .cursorrules et AGENTS.md. L'auth et la navigation fonctionnent. Je construis le cœur de l'app.

HOOK app/hooks/useEtapes.ts :

  • fetchEtapes() : étapes du user triées par ordre
  • initEtapesDefaut() : crée les 9 étapes si l'user n'en a pas encore

HOOK app/hooks/useBiens.ts :

  • fetchBiens(filters?) : avec expand etape
  • fetchBienDetail(id) : avec expand etape, visites, notes
  • createBien(data), updateBien(id, data), deleteBien(id)
  • moveBienToEtape(bienId, etapeId)

ONGLET BIENS app/app/(tabs)/biens.tsx : Switch Kanban / Liste : MODE KANBAN : ScrollView horizontal, une colonne par étape Header colonne : nom + couleur + nombre de biens Card bien : titre, ville, surface, prix achat formaté, badge priorité Long press → bottom sheet : changer étape | supprimer MODE LISTE : FlatList triable, barre de recherche FAB "+" → /bien/nouveau

FORMULAIRE app/app/bien/nouveau.tsx : 3 étapes avec barre de progression :

  1. type_bien, adresse, ville, code_postal
  2. surface_habitable, nb_pieces, prix estimé, source, is_off_market
  3. Résumé + Créer → PocketBase → redirect /bien/[id]

FICHE BIEN app/app/bien/[id].tsx : Sections : Header | Infos | Finances | Visites | Notes | Documents Auto-save notes debounce 500ms.

HOOK app/hooks/useAnalyse.ts :

  • fetchAnalyse(bienId), saveAnalyse(bienId, data)
  • calculateResults(data) : toutes les formules de .cursorrules

CALCULATEUR app/app/calculateur/[bienId].tsx : Recalcul temps réel. Sections : Acquisition | Travaux | Portage | Revente Résultats colorés : vert >15% | orange 8-15% | rouge <8% Scénarios -10%/réaliste/+10%. Bouton Enregistrer.

Mets à jour AGENTS.md.


PROMPT 3 — Contacts + Visites IA + Agenda + Dashboard

Lancer SEULEMENT après que le Prompt 2 tourne

Lis .cursorrules et AGENTS.md. Pipeline, fiche bien et calculateur fonctionnent.

CONTACTS app/app/(tabs)/contacts.tsx : SectionList par catégorie, recherche live, appel direct Linking.openURL tel: Fiche contact : coordonnées, biens associés, notes

VISITES app/app/(tabs)/visites.tsx : Écran visite app/app/visite/[id].tsx avec 3 tabs : Tab 1 Check-liste : 4 états par item (OK/Attention/Problème/Non vérifié) Tab 2 Notes : zone texte + bouton photo Tab 3 Estimation : sliders travaux, avis global, score 1-10 Bouton "Générer rapport IA" → pb.send('/api/generate-rapport') → affiche markdown

Hook serveur pocketbase/pb_hooks/generate_rapport.pb.js : routerAdd("POST", "/api/generate-rapport", (c) => { const info = $apis.requestInfo(c); if (!info.authRecord) return c.json(401, {error: "Non autorisé"}); const { notes_brutes, checklist_reponses, bien_info } = info.data; const response = $http.send({ url: "https://api.anthropic.com/v1/messages", method: "POST", headers: { "x-api-key": $os.getenv("ANTHROPIC_API_KEY"), "anthropic-version": "2023-06-01", "content-type": "application/json" }, body: JSON.stringify({ model: "claude-sonnet-4-20250514", max_tokens: 1500, messages: [{ role: "user", content: "Génère un compte-rendu de visite professionnel en français. Bien: " + JSON.stringify(bien_info) + " Notes: " + notes_brutes + " Checklist: " + JSON.stringify(checklist_reponses) }] }), timeout: 30 }); const result = JSON.parse(response.raw); return c.json(200, { rapport: result.content[0].text }); }, $apis.requireRecordAuth());

AGENDA app/app/(tabs)/agenda.tsx : Vue Aujourd'hui : En retard (rouge) + Aujourd'hui + Cette semaine Card tâche : checkbox, titre, badge bien, swipe snooze/supprimer Création : bottom sheet

DASHBOARD app/app/(tabs)/index.tsx : Alertes urgentes | KPIs | Mini pipeline | Derniers biens | Tâches du jour

Mets à jour AGENTS.md : tous modules terminés.


PROMPT DEBUG

Lis .cursorrules. Erreur dans [MODULE] : ERREUR : [message exact] FICHIER : [nom] Stack : Expo + PocketBase v0.23+. Diagnostique et corrige.

PROMPT UI

Lis .cursorrules. L'écran [NOM] fonctionne. Améliore l'UI pour usage pro en extérieur. Couleurs : #1D4ED8 | #16A34A | #D97706 | #DC2626