尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Portail applicatif du MVP : Tableau de bord, Chantiers, Devis, Clients, Calculateur, Paramètres — avec authentification et données réelles.
Ce projet est pensé pour être développé seul, sans équipe externe, avec l'aide d'un assistant IA (Claude). Chaque étape ci-dessous peut être copiée- collée telle quelle.
npm install
cp .env.example .env.local
supabase/schema.sql.Project URL et anon public key
dans .env.local.npm run dev
Ouvrir http://localhost:3000 → vous êtes redirigé vers /login.
Cliquer sur Créer un compte : cela crée votre utilisateur, votre
entreprise et votre profil administrateur en une seule fois.
Dans Supabase → Table Editor → entreprises, copier l'id de votre
entreprise. Le coller à la place de <ENTREPRISE_ID> dans
supabase/seed.sql, puis exécuter ce fichier dans SQL Editor. La page
Chantiers affichera alors ces données réelles.
NEXT_PUBLIC_SUPABASE_URL et NEXT_PUBLIC_SUPABASE_ANON_KEY.git push redéploie automatiquement — aucune
intervention manuelle nécessaire ensuite.Stripe refuse les entreprises basées en Nouvelle-Calédonie : les forfaits sont encaissés par Lemon Squeezy, qui est le vendeur officiel vis-à-vis du client (« merchant of record ») : il encaisse la carte ou PayPal, applique les taxes, envoie la facture au client, puis reverse l'argent sur PayPal (la Nouvelle-Calédonie n'est pas dans sa liste de virements bancaires). Frais indicatifs : 5 % + 0,50 $ par paiement, plus des frais de versement PayPal — à revérifier sur leur page de tarifs.
supabase/migration-paiement-lemonsqueezy.sql dans Supabase →
SQL Editor, puis passer sa ligne à « Oui » dans supabase/ETAT-MIGRATIONS.md.https://devis-etanche.vercel.app/api/webhooks/lemonsqueezy, choisir une
phrase secrète au hasard, et cocher tous les événements subscription_….LEMONSQUEEZY_API_KEY, LEMONSQUEEZY_STORE_ID,
LEMONSQUEEZY_VARIANT_ARTISAN, LEMONSQUEEZY_VARIANT_PRO,
LEMONSQUEEZY_WEBHOOK_SECRET, et SUPABASE_SERVICE_ROLE_KEY (Supabase →
Project Settings → API, ⚠️ secrète, jamais publique), puis redéployer.Depuis /parametres, choisir un forfait payant ouvre la page de paiement
Lemon Squeezy ; une fois le paiement confirmé, le webhook met automatiquement
à jour entreprises.forfait. Le bouton « Gérer mon abonnement » renvoie
ensuite vers l'espace Lemon Squeezy (changer de forfait, de carte, résilier,
factures). À la fin d'un abonnement résilié ou impayé, l'entreprise revient
d'elle-même au forfait Découverte.
Pour encaisser réellement : activer la boutique dans Lemon Squeezy (questionnaire + vérification d'identité, compter jusqu'à quelques semaines), puis remplacer la clé, les numéros de variantes et le webhook de test par ceux du mode réel.
Exécuter supabase/storage.sql dans le SQL Editor (après avoir créé un
bucket public nommé photos depuis Storage → New bucket). Les photos
s'ajoutent alors directement depuis la fiche d'un chantier.
Chaque devis a une page dédiée (/devis/[id]) mise en page pour
l'impression. Le bouton "Exporter en PDF" déclenche l'impression du
navigateur (Ctrl/Cmd+P → "Enregistrer en PDF") — aucune dépendance
supplémentaire, fonctionne immédiatement.
public/sw.js) met en cache les pages principales
pour une consultation hors connexion.lib/offline/queue.ts) et synchronisées
automatiquement au retour du réseau.Sur /calculateur, le bouton "Générer un devis à partir de ce calcul"
transmet les quantités calculées vers /devis/nouveau, où elles arrivent
déjà réparties en lignes (désignation, quantité, prix unitaire par défaut,
modifiable avant enregistrement).
Chaque chantier a un token_public généré automatiquement. Depuis la fiche
chantier, le bouton "Copier le lien de suivi client" génère une URL du type
https://votre-site/espace-client/<token> à envoyer au client : il y voit
l'avancement, les zones et les dernières photos, sans jamais se connecter.
La sécurité repose sur le fait que le token est un UUID non devinable — les
données exposées sont volontairement limitées (pas de montants, pas
d'informations sur les autres chantiers) via la fonction Postgres
espace_client_chantier (voir fin de supabase/schema.sql).
lib/calc/etancheite.ts) est le seul endroit à modifier
pour ajuster des ratios : toutes les pages qui l'utilisent se mettent à
jour automatiquement.| Page | État |
|---|---|
| Tableau de bord | ✅ Connectée à Supabase (stats + chantiers récents réels) |
| Chantiers (liste + création) | ✅ Connectée, formulaire "Nouveau chantier" fonctionnel |
| Détail chantier | ✅ Connectée, zones réelles + formulaire "Ajouter une zone" |
| Devis (liste + création) | ✅ Connectée, formulaire avec lignes dynamiques et calcul auto HT/TTC |
| Clients (liste + création) | ✅ Connectée, formulaire "Nouveau client" fonctionnel |
| Calculateur | ✅ Formules DTU réelles, aucune donnée externe requise |
| Paramètres | ✅ Connectée : entreprise, équipe, forfait + paiement Lemon Squeezy |
| Connexion / Inscription | ✅ Fonctionnel (Supabase Auth) |
| Photos de chantier | ✅ Upload réel (Supabase Storage) |
| Export PDF devis | ✅ Page imprimable dédiée par devis |
| Mode hors ligne | ✅ Cache + file de synchronisation basique |
| Paiement / forfaits | ✅ Lemon Squeezy (page de paiement + webhook de mise à jour automatique) |
| Calculateur → Devis | ✅ Génération de devis pré-rempli en un clic |
| Espace client | ✅ Page publique de suivi via lien sécurisé (sans compte) |
Toutes les pages listées "✅ Connectée" lisent et écrivent réellement dans
Supabase — plus aucune donnée en dur dans app/.