BossHunter
스마트 구직 에이전트(소스 공개, PolyForm 비상업적 라이선스; 상업적 이용은 별도 서면 허가 필요)
링크로 보낸 모든 요청에 1분 이내에 답변이 준비됩니다
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.
비즈니스JavaScript · TypeScriptGitHub @benjaminfiliot-wq온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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).
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗