No description
Find a file
Gautier Stefanini a1116e05c5
Some checks are pending
CI / verify (push) Waiting to run
Aligner les valeurs de repli de NEXT_PUBLIC_SITE_URL sur fokan.fr
Le domaine réel est fokan.fr depuis un moment (.env, legal.ts, contact@fokan.fr,
BIMI), mais sitemap.ts, robots.ts, layout.tsx et checkout/route.ts gardaient
encore l'ancien fokan.g0tch.myds.me comme valeur par défaut si la variable
d'env est absente.
2026-08-09 09:18:34 +00:00
.github/workflows Un hook d'installation s'exécutait avant la première ligne du projet 2026-08-05 21:03:57 +00:00
docs Vérifier la carte grise par ses octets, pas son Content-Type déclaré, et fermer docling au réseau 2026-08-09 08:20:17 +00:00
drizzle Le modèle économique était gravé dans quinze écrans et trois pages légales 2026-08-08 19:18:49 +00:00
knowledge Corriger sept erreurs factuelles et logiques dans les guides, relevées par audit 2026-08-09 06:35:03 +00:00
public Les mails posaient leur fond sur un <body> que Gmail retire, et le compte pendait à un lien de 15 minutes 2026-08-05 21:04:27 +00:00
scripts Le gratuit n'a pas d'entreprise derrière, et trois écrans faisaient comme si 2026-08-08 19:51:36 +00:00
src Aligner les valeurs de repli de NEXT_PUBLIC_SITE_URL sur fokan.fr 2026-08-09 09:18:34 +00:00
.dockerignore Un hook d'installation s'exécutait avant la première ligne du projet 2026-08-05 21:03:57 +00:00
.env.example Aligner les valeurs de repli de NEXT_PUBLIC_SITE_URL sur fokan.fr 2026-08-09 09:18:34 +00:00
.gitignore Les mails posaient leur fond sur un <body> que Gmail retire, et le compte pendait à un lien de 15 minutes 2026-08-05 21:04:27 +00:00
.npmrc Un hook d'installation s'exécutait avant la première ligne du projet 2026-08-05 21:03:57 +00:00
CLAUDE.md Vérifier la carte grise par ses octets, pas son Content-Type déclaré, et fermer docling au réseau 2026-08-09 08:20:17 +00:00
docker-compose.yml Audit de sécurité et fonctionnel : correctifs appliqués, quiz rejouable (D-018) 2026-07-28 13:05:55 +00:00
Dockerfile Les mails posaient leur fond sur un <body> que Gmail retire, et le compte pendait à un lien de 15 minutes 2026-08-05 21:04:27 +00:00
drizzle.config.ts Audit de sécurité et fonctionnel : correctifs appliqués, quiz rejouable (D-018) 2026-07-28 13:05:55 +00:00
eslint.config.mjs Audit de sécurité et fonctionnel : correctifs appliqués, quiz rejouable (D-018) 2026-07-28 13:05:55 +00:00
next.config.ts Les mails posaient leur fond sur un <body> que Gmail retire, et le compte pendait à un lien de 15 minutes 2026-08-05 21:04:27 +00:00
package-lock.json Une carte entre dans le foyer, et la première couche y pose ses ZFE 2026-07-29 10:48:19 +00:00
package.json Les mails posaient leur fond sur un <body> que Gmail retire, et le compte pendait à un lien de 15 minutes 2026-08-05 21:04:27 +00:00
postcss.config.mjs Refonte du front (D-005), référentiel véhicules RDW (D-004) et Phase 0 du pilier maison 2026-07-25 18:42:06 +00:00
README.md Le modèle économique était gravé dans quinze écrans et trois pages légales 2026-08-08 19:18:49 +00:00
tsconfig.json Phase 0 : cadrage, base de connaissance v0 et app de test de désirabilité 2026-07-22 20:32:59 +00:00
tsconfig.scripts.json Les mails posaient leur fond sur un <body> que Gmail retire, et le compte pendait à un lien de 15 minutes 2026-08-05 21:04:27 +00:00
vitest.config.ts L'outbox se taisait pour tout le foyer dès qu'un seul membre avait reçu 2026-07-31 12:02:56 +00:00

fokan — la veille du foyer

Service web qui monte la garde sur les échéances dormantes du foyer (maison, véhicules, papiers, enfance & scolarité, animaux) et en tient le registre, sans jamais créer de tâche nouvelle pour l'utilisateur.

Personne ne retient tout ça — c'est normal. Nous, c'est notre métier.

Marque sœur de Kankwa, éditée par MIAW. Nom de code : fokan (naming définitif à confirmer).

L'essentiel

  • Un quiz de 2 minutes (9 écrans) plus des détections gratuites — adresse (BAN, DPE ADEME, Géorisques, ZFE, arrêtés, restrictions d'eau, calendrier scolaire de l'académie) et carte grise (champ K → référentiel RDW pour le modèle, RappelConso pour les rappels de ta version) — produisent le calendrier complet du foyer, 30 à 50 échéances, sans saisie obligatoire.
  • Le mail est le moteur : rappels rares, au bon moment, avec l'action incluse. Réaction en 10 s, ou ignorance sans conséquence — le glissement est dans le design.
  • Une carte des périmètres réglementaires : cinq couches (nucléaire, sécheresse, ZFE, PPRT, inondation), où la frontière EST la règle. Une couche est de la configuration, pas du code (D-022 → D-031).
  • Révélation graduée : avant la porte = l'inventaire (total, rythme de l'année, 2-3 échéances en clair, des halos sans frontière). Après = full reveal, veille active, rappels, flux ics vivant, catalogue de guides, enrichissement continu.
  • Deux modes d'accès, une variable (FOKAN_MODE, D-065) : gratuit — une adresse suffit, avec un plafond de comptes (FOKAN_PLACES_GRATUITES) et une liste d'attente au-delà — ou payant — 19,99 €/an par foyer via Stripe. Le défaut est payant, pour qu'une variable oubliée n'ouvre jamais l'accès par accident. Dans les deux cas la contrepartie ne s'affiche qu'après le quiz (D-028), et la porte du produit (getSubscription().isActive) ignore lequel des deux est actif.
  • La barrière : la base de connaissance des échéances françaises et le pipeline de compréhension de documents. Le produit, c'est le savoir ; le code n'est que son véhicule.

Où en est le produit

Brique État
Base de connaissance 78 fiches bicéphales (moteur + page SEO), validées par schéma. Quatre d'entre elles se filtrent sur une tranche de revenus déclarée au quiz (D-051) — elle retire une fiche hors de portée, elle n'affirme jamais un droit
Moteur de réconciliation Livré, pur, 905 tests verts
Carte des périmètres Livrée (D-022 → D-031) — 5 couches (nucléaire, sécheresse, ZFE, PPRT, inondation), fond IGN désaturé chargé par le navigateur, aperçu bridé structurellement
Fermeture du réseau cuivre Livrée (D-031) — 34 915 communes en base, date de coupure par commune, question fibre/ADSL au quiz
Rappels de véhicules RappelConso seul (D-032) — 1 662 campagnes, le défaut décrit en clair et en français. Le registre néerlandais est retiré : deux fois moins de campagnes, rien avant 2018, et c'est assumé. Le champ K qualifie depuis D-034 — 3 703 réceptions ingérées, « ta version » distinguée de « ton modèle », sans jamais rien masquer
Deux-roues motorisés Contrôle technique livré (D-031) — 5 ans puis 3 ans. Référentiel de modèles et barème Crit'Air deux-roues : non faits, assumés
Pages légales Livrées (D-028) — mentions, CGV, confidentialité ; les champs que le code ne peut pas connaître s'affichent en jaune
Gestes du foyer (« fait », muet, responsable, date apprise) Absents — les colonnes existent, rien ne les écrit, et chaque mail de rappel les promet. Voir audit du 30/07 § 1
Purge de conservation RGPD · récap annuel L215-1 Absents — deux engagements publiés et non tenus (D-028 § 6)
Quiz + écran de fabrication en flux Livré
Pilier maison Phases 0, 1 et 2 livrées (Géorisques, ZFE, veille CatNat/VigiEau)
Pilier véhicules Identification, rappels constructeur, Crit'Air/ZFE livrés ; distribution livrée côté moteur, en cours de sourcing côté donnée
Pilier papiers Fiches livrées ; les quatre titres d'identité se calent sur les vacances réelles de l'académie (D-019)
Pilier enfance & scolarité 5e pilier, ouvert le 28/07/2026 (D-019) — bourses collège et lycée, Parcoursup, inscriptions maternelle et lycée, assurance scolaire, DSE, et la déclaration de scolarité des 16-18 ans sans laquelle la Caf ne verse pas l'ARS (D-051)
Pilier animaux Fiches livrées ; garde-vacances calée sur le calendrier scolaire (D-019)
Calendrier scolaire Livré (D-019) — API Éducation nationale, grain académie, rafraîchi au passage hebdomadaire
Comptes, accès, notifications better-auth, scheduler quotidien — livrés. Deux portes d'accès : inscription gratuite (/api/activer) ou Stripe (clés de test), au choix de FOKAN_MODE (D-065)
Liste d'attente Livrée (08/08/2026, D-065) — pas de table : un subscription_status = "attente" et le passage de 4 h qui admet dans l'ordre d'arrivée. Relever FOKAN_PLACES_GRATUITES suffit à ouvrir des places
Contrats 8 types déclarables au quiz, 8 fiches
Rejeu du quiz Livré (28/07/2026) — un foyer dont l'accès est ouvert met à jour ses déclarations, garde-fou de cinq rejeux par an (D-060) : les dates sont conservées, le quota se recompte contre la période en cours (ou une année glissante quand il n'y en a pas, cas de l'accès gratuit), donc rien ne tourne à la date de remise à zéro
CI, lint, migrations versionnées Livrés (28/07/2026) — cf. .github/workflows/ci.yml, drizzle/
Sauvegardes Absentes — seul risque que le cadrage qualifie d'inacceptable (§ 24.2), différé à la demande du porteur de projet

Documents

Source de vérité

  • docs/cadrage-projet-fokan.md — cadrage produit + architecture technique de référence, validé point par point le 22 juillet 2026.
  • docs/decisions.md — journal des décisions post-cadrage (D-001 → D-062). Toute divergence avec le cadrage y est tranchée et datée.
  • CLAUDE.md — règles de travail sur ce dépôt (constitution produit, invariants d'architecture, stack).

Audit — ils se complètent, ils ne se remplacent pas

  • docs/audit-2026-07-30.mdconnaissance, piliers, documents, et le classement des ajouts par valeur pour un foyer français moyen. Répond aussi à « manque-t-il un pilier ». À lire avant d'ouvrir un chantier produit — le § 8 donne l'ordre.
  • docs/audit-2026-07-28.mdsécurité et exploitation, toujours la référence sur ces deux volets. Son seul point resté ouvert : E3, les sauvegardes.
  • docs/audit-mail-2026-07-30.md — le service mail de bout en bout : les cinq messages qui peuvent partir, leurs déclencheurs, leurs conditions.
  • docs/audit-ressources-2026-08-05.md — les conditions de ressources : pourquoi une seule question suffit malgré cinq dénominateurs différents, ce que coûte la conversion depuis le net mensuel, et l'audit aide par aide de ce qui mérite une fiche. Seule référence sur ce volet.

Par pilier

Phase 0 (historique — voir les avertissements en tête de chaque fichier)

Développement

npm install
npm run dev             # next dev -H 0.0.0.0
npm test                # vitest — priorité absolue : le moteur de réconciliation
npm run typecheck
npm run lint            # eslint-config-next, épinglé sur la version exacte de next
npm run knowledge:check # valide les 78 fiches YAML (Zod, IDs uniques, slugs, pages, barèmes de ressources à jour)
npm run db:generate     # génère une migration Drizzle depuis src/db/schema.ts
npm run db:migrate      # joue les migrations en attente — appelé automatiquement au démarrage du conteneur
npm run db:push         # ⚠️ raccourci dev uniquement — ne jamais l'utiliser en production (audit E2)
npm run reconcile:all   # rejoue la réconciliation sur tous les foyers
npm run vehicules:sync  # référentiel RDW (~2 h)
npm run distribution:queue  # file de sourcing des codes moteur, les plus utiles d'abord
npm run distribution:seed   # amorçage du référentiel de distribution, idempotent
npm run cuivre:sync     # fermeture du réseau cuivre (760 ko, ~5 s) — à jouer au déploiement
npm run rappels:sync    # rappels RappelConso (jouer vehicules:sync avant, il lit le catalogue)
npm run rappels:simuler -- <householdId>  # ce qui partirait aujourd'hui pour un foyer, sans envoyer

Le projet tourne en conteneur Docker (docker-compose.yml) : fokan-db (Postgres 16) et fokan-app, exposée sur 127.0.0.1:3100. Les crons vivent dans le même processus que Next.js (src/instrumentation.ts, pg-boss) : veille des arrêtés à 3 h, réconciliation à 4 h, rappels à 8 h, référentiel véhicules le dimanche à 0h30 — heure de Paris.

Roadmap

  1. Phase 0 — landing, quiz réel, hub à révélation graduée, carte, pages légales. (La contrepartie a quitté la landing : elle ne s'affiche qu'après le quiz, D-028.)
  2. MVP — la veille seule (en cours) : les rappels mail, la CI, les migrations, la carte et les gestes du foyer sont livrés ; restent le sourcing des intervalles de distribution et les sauvegardes (seul risque que le cadrage qualifie d'inacceptable, § 24.2 — traité à l'échelle du serveur, hors de ce dépôt depuis D-054).
  3. Phase 2 — pipeline de compréhension de documents (mail entrant) + bannette ; les contrats se renseignent par transfert de PDF. C'est aussi ce qui débloquerait les rappels de produits non-véhicules (bébés-enfants, maison, électroménager).
  4. Phase 3 — scan photo, multiplicateurs (foyer des parents, bien locatif — ⚠️ rouvre D-021 : « un compte ne porte qu'un foyer »), affiliation activée.

Prochains chantiers, dans l'ordre (D-054, qui reclasse l'audit du 30/07 § 8) : ① le sourcing des intervalles de courroie, seul travail qui fasse parler la distribution · ② le récap annuel, message encore absent (le mail de fin d'abonnement, lui, n'a plus d'objet tant que FOKAN_MODE=gratuit) · ③ la purge RGPD — son échéance change avec D-065 : elle n'était due qu'à la fin d'une première année d'abonnement non renouvelé, or un accès gratuit ne se termine jamais. Ce qui la déclenche désormais est le premier foyer dormant depuis douze mois, ce que la politique de confidentialité annonce · ④ nom et identité.

Les gestes du foyer — « fait » / « déjà fait », sourdine, reprise, responsable — sont livrés le 06/08/2026 (D-055) : c'était le premier de cette liste depuis l'audit du 30/07, et le seul chantier qui augmentait la valeur de tout l'existant.