Chaque demande faite par votre lien a sa réponse prête en moins d'une minute : avec Studio, vous la validez d'un clic ; avec Signature, elle part seule.
Translation pending
BusinessJavaScript · TypeScriptGitHub @benjaminfiliot-wqOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗SaaS pour artisans : répond aux demandes de devis en moins d'une minute et relance à leur place, pour ne plus perdre de chantiers.
Le produit est en production. Ce fichier décrit le dépôt tel qu'il est, pas ce qui est prévu.
| Adresse | Ce qu'on y trouve |
|---|---|
prestiapp.fr | la vitrine, l'inscription, les tarifs, les pages légales |
qg.prestiapp.fr | la même application ; seule différence, / y est réécrit vers /controle (middleware.ts l. 65). La coque native charge https://qg.prestiapp.fr/dashboard (mobile/capacitor.config.ts) |
<slug>.<domaine neutre> et le domaine perso d'un artisan (offre Signature) | le site vitrine et le formulaire de demande de l'artisan, sans « presti » dans l'adresse |
Le routage est fait dans middleware.ts : prestiapp.fr, ses sous-domaines, *.vercel.app, localhost et *.localhost, et tout hôte commençant par 127.0.0.1 sont « maison » et ne sont jamais réécrits (isPrestiHost, l. 18-24) ; tout autre hôte est traité comme une surface artisan (/ → /site/<slug>, /demande → /p/<slug>, /infos-legales → /site/<slug>/infos-legales). Un domaine perso n'est résolu que s'il est vérifié en base.
Côté interne : /controle, le Poste de contrôle (onglets Aujourd'hui, Clients & abonnements, Apports, Messagerie, Comptabilité, Journal, Réglages — app/controle/page.tsx), et /direction, l'ancienne adresse, qui fait une redirection permanente vers /controle.
Next.js 15 (App Router, TypeScript, React 19) · Supabase (auth + Postgres) · déployé sur Vercel.
Le reste des dépendances de package.json, et à quoi elles servent ici :
@anthropic-ai/sdk — les réponses, les devis, l'assistance (lib/ai.ts, lib/ai/)stripe — l'abonnement de l'artisan à Presti et les gestes d'argent du Poste de contrôle@react-pdf/renderer — les devis et factures PDF (lib/DevisPDF.tsx, lib/renderPdf.ts)@serwist/next + serwist — la PWA et le service workerweb-push — les notifications web ; @capacitor/core — la coque nativeimapflow — la relève de la boîte d'entreprise (lib/releveCanal.ts)gsap + lenis — les animations de la vitrineplaywright, lighthouse, @axe-core/playwright, pgLes emails partent par Resend (lib/email.ts, RESEND_API_KEY).
npm install
cp .env.local.example .env.local # puis remplir les valeurs
npm run dev # http://localhost:3000
Scripts déclarés dans package.json : dev, build, start, lint, typecheck, prepare.
Deux mises en garde vérifiées :
npm run lint ne marche pas. Le script appelle next lint, mais aucune dépendance eslint n'est installée et il n'y a aucun fichier de configuration eslint à la racine. Les vraies barrières sont npm run typecheck, npx next build et node scripts/garde-commit.mjs..env.local.example est incomplet. Il déclare 6 variables (plus NEXT_PUBLIC_GA_ID, laissée en commentaire, donc non copiée par un cp) ; le code applicatif (app/, lib/, middleware.ts, next.config.mjs) en lit 43. Les deux clés Supabase publiques suffisent à démarrer le serveur, mais pas à se connecter : la connexion passe par un code à 6 chiffres envoyé par email (FLAGS.codeEmail = true, app/login/page.tsx), donc sans RESEND_API_KEY le parcours s'arrête à l'écran du code.Manquent notamment à .env.local.example : STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, DIRECT_URL (utilisée par scripts/appliquer-migration.mjs), VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_SUBJECT, CANAUX_KEY, IP_SEL, PRESTI_SECRET_CONNEXION, RECHERCHE_SCEAU_SECRET, FIREBASE_SERVICE_ACCOUNT, NEXT_PUBLIC_DOMAINE_NEUTRE, EMAIL_ENTREPRISE, IMAP_* et PRESTI_MAIL_IMAP_*, VERCEL_TOKEN / VERCEL_PROJECT_ID / VERCEL_TEAM_ID.
Si une valeur a été collée dans .env.local sans son nom (NOM=valeur est la seule forme lue par Node, Vercel et les scripts d'ici), node scripts/ranger-env.mjs dit ce qu'il ferait, et --ecrire le fait.
Après l'inscription, l'application redirige vers /outils si Supabase ouvre la session tout de suite ; sinon elle reste sur la page et demande d'ouvrir le lien de confirmation reçu par email (app/signup/page.tsx l. 72-80).
This is the beginning of the README. Read the rest at the original. Read the full README ↗