Étape 10 sur 10
Création du MVP
Des prompts optimisés pour Cursor, Claude Code, Codex, Lovable, Bolt et v0. Votre SaaS se code tout seul.
Stack recommandée
- Frontend
- Next.js 16 avec l'App Router et Tailwind CSS
- Backend
- Server Actions Next.js, sans service séparé
- Base de données
- PostgreSQL managé sur Supabase
- Authentification
- Supabase Auth, email et Google
- Paiement
- Stripe Checkout et portail client
- Hébergement
- Vercel
Un seul dépôt, un seul déploiement, aucun serveur à administrer : c'est ce qui permet de tenir les quatre-vingt-dix heures de la roadmap. L'agrégation bancaire est le seul vrai morceau technique du projet — tout le reste doit être du service managé pour lui laisser la place.
Modèle de données
usersLe compte de l'artisan, ses préférences de relance et son abonnement.
- id uuid primary key
- email text not null unique
- plan text not null default 'trial'
- created_at timestamptz not null
bank_connectionsLe lien vers un compte bancaire agrégé, et l'état de son consentement.
- id uuid primary key
- user_id uuid references users
- provider_account_id text not null
- status text not null
- last_synced_at timestamptz
clientsLes clients facturés, avec leur délai de paiement observé.
- id uuid primary key
- user_id uuid references users
- name text not null
- email text
- average_payment_days integer
invoicesLes factures émises et leur état d'encaissement.
- id uuid primary key
- client_id uuid references clients
- amount_cents integer not null
- issued_on date not null
- due_on date not null
- settled_at timestamptz
transactionsLes mouvements bancaires importés, avant et après rapprochement.
- id uuid primary key
- bank_connection_id uuid references bank_connections
- amount_cents integer not null
- booked_on date not null
- label text
- matched_invoice_id uuid references invoices
remindersLes relances préparées, validées et envoyées.
- id uuid primary key
- invoice_id uuid references invoices
- level integer not null
- status text not null
- sent_at timestamptz
Écrans du MVP
- 1
Connexion du compte bancaire
Le premier écran : sans lui, rien à montrer.
- 2
Saisie des factures en attente
Quatre champs par facture, au démarrage puis au fil de l'eau.
- 3
Tableau des encours
La liste triée par ancienneté, avec le total dû.
- 4
Fiche client
L'historique de paiement et le délai habituel.
- 5
Préparation de relance
Le texte proposé, relu et validé avant envoi.
- 6
Historique des relances
Ce qui est parti, quand, et ce que ça a donné.
- 7
Abonnement
Essai, passage au payant, portail de facturation.
Ordre de construction
Générer dans cet ordre évite de se retrouver bloqué à mi-parcours.
- 01Authentification et modèle de données, avant toute interface
- 02Saisie manuelle des factures : elle rend l'application testable sans la banque
- 03Connexion bancaire et import des transactions
- 04Rapprochement automatique, avec son écran de confirmation des cas ambigus
- 05Tableau des encours, une fois que les données sont fiables
- 06Modèles et envoi des relances
- 07Abonnement Stripe en dernier : rien à facturer avant que le reste tourne
Prompts prêts à coller
Un prompt par outil, adapté à sa façon de fonctionner.
À surveiller : Lovable a tendance à ajouter des tableaux de bord et des graphiques non demandés. Rappeler à chaque itération que l'écran central est la liste, pas un dashboard.
À surveiller : Bolt part vite sur une stack complète. Fixer explicitement React plus Tailwind et l'état en mémoire, sinon il installe une base de données et perd du temps.
À surveiller : v0 rend un seul composant à la fois : ne pas lui demander le parcours complet. Vérifier le rendu mobile, souvent traité en dernier.
À surveiller : Cursor élargit le périmètre s'il n'est pas borné. Le « commence par, rien d'autre » est ce qui tient la session.
À surveiller : Lui faire lire les fichiers existants d'abord évite qu'il réinvente des conventions déjà posées ailleurs dans le dépôt.
À surveiller : Codex travaille bien sur une fonction bornée avec des critères d'acceptation explicites, mal sur une consigne ouverte. Découper le reste du produit de la même façon.