CleanPath est une application web d'accompagnement à la prévention, à la réduction des risques, à l'arrêt de consommation et à la prévention des rechutes. Elle ne pose pas de diagnostic et ne remplace ni un professionnel de santé ni les services d'urgence.
artifacts/cleanpath: interface React 19, TypeScript, Vite, Tailwind CSS et composants Radix.artifacts/api-server: API Express, authentification par cookie sécurisé et distribution du frontend en production.lib/db: accès PostgreSQL avec Drizzle.artifacts/cleanpath/src/store: état local, synchronisation par compte et coffre chiffré par PIN.artifacts/cleanpath/src/content: contenus configurables, dont les parcours guidés.artifacts/cleanpath/src/types: modèles métier partagés côté interface.
Les données applicatives sont regroupées dans un document JSON par utilisateur. Cette structure permet d'ajouter des catégories sans migration SQL, mais toute nouvelle catégorie doit aussi être déclarée dans le store, le coffre et l'export.
L'expérience principale comporte six sections:
- Aujourd'hui
- Journal
- SOS
- Parcours
- Chat
- Profil
Les anciennes fonctions restent accessibles depuis les hubs Journal et Profil.
Prérequis: Node.js et pnpm.
pnpm install
pnpm run dev:api
pnpm run dev:webL'interface est disponible sur http://localhost:5173 et l'API sur http://localhost:5000.
Copier .env.example et renseigner:
DATABASE_URL: connexion PostgreSQL.APP_ORIGIN: origine publique de l'application.CORS_ORIGIN: origine autorisée par l'API.PORT: port local de l'API.GEMINI_API_KEY: clé Gemini utilisée par le chat IA.GEMINI_MODEL: modèle Gemini, par défautgemini-2.5-flash.PASSWORD_RESET_BASE_URL: base prévue pour les futurs liens de réinitialisation.
Aucun secret ne doit être placé dans le frontend.
Les migrations SQL sont idempotentes dans lib/db/src/index.ts:
- ajout de
users.email_verified_at; - ajout de
auth_sessions.user_agentetauth_sessions.last_seen_at; - création de
password_reset_tokens; - création de
login_attempts.
Les nouvelles données métier restent dans le document JSON utilisateur:
substanceTrackings;plannedCheckIns;careAppointments;- champs enrichis du journal de consommation.
- état de synchronisation visible côté interface, avec reprise après reconnexion.
- plans de réduction progressifs rattachés aux suivis par produit.
- préférences de notifications discrètes, heures silencieuses et rappels reportés.
La réinitialisation de mot de passe dispose des tables et endpoints, mais l'envoi réel d'email reste à brancher sur un fournisseur dédié avant usage public complet.
pnpm run typecheck
pnpm run build:productionLe dépôt ne possède pas encore de configuration de lint ni de suite de tests automatisés complète. Les vérifications disponibles restent le typecheck et le build de production.
Les parcours sont définis dans artifacts/cleanpath/src/content/programs.ts. Un parcours contient un identifiant stable, une introduction et des étapes courtes. De nouveaux parcours peuvent être ajoutés dans ce fichier sans modifier les écrans.
- synchronisation isolée par compte;
- stockage local de secours;
- coffre AES-GCM protégé par PIN;
- export JSON;
- mémoire du chat désactivée par défaut;
- aucune publicité ciblée ni tracker publicitaire;
- chatbot local structuré, sans envoi à une API d'IA externe.
Le manifest et le service worker rendent l'application installable. Le shell, /urgence, /sos, /plan-securite et /contacts sont prévus parmi les ressources essentielles. La synchronisation distante indique les états chargement, en attente, hors ligne, erreur ou à jour, et reprend lorsque la connexion revient.