Plateforme d'analyse de risques visuels et d'assistance réglementaire (OSHA, INRS, ISO 45001), avec frontend React, backend Express et persistance PostgreSQL via Prisma.
flowchart LR
U[User Browser] --> V[Vercel Frontend\nReact + Vite]
V -->|HTTPS /api| R[Railway Backend\nExpress + Prisma]
R --> P[(PostgreSQL)]
R --> G[Gemini API]
V --> F[Firebase Auth]
R --> S[Sentry]
V --> S
- Analyse d'image avec scoring de risque, recommandations et niveau de confiance.
- Assistant RAG pour questions de conformité sécurité.
- Historique des analyses et des questions.
- Journalisation structurée backend et tracking d'erreurs frontend/backend.
- Frontend: React 19, Vite, TypeScript.
- Backend: Express, Prisma, PostgreSQL.
- AI: Google Gemini.
- Observability: pino, Sentry.
- CI/CD: GitHub Actions, Railway, Vercel.
- Installer les prerequis
node -v
npm -v
docker -v
docker compose version- Installer les dependances
npm ci- Configurer les variables backend
copy backend\.env.example backend\.env- Mettre a jour backend/.env.example valeurs dans backend/.env
- DATABASE_URL
- GEMINI_API_KEY
- ALLOWED_ORIGINS
- SENTRY_DSN (optionnel)
- Lancer en mode dev (serveur + frontend integre Vite middleware)
npm run dev- Lancer les checks qualite
npm run lint
npm run test
npm run build- Lancer les tests E2E Playwright
npm run e2e:install
set E2E_AUTH_EMAIL=your-test-user@example.com
set E2E_AUTH_PASSWORD=your-test-password
npm run e2eNotes E2E:
- Les flows upload/chat utilisent des mocks reseau Playwright pour rester stables (pas d'appel Gemini reel).
- Le flow auth cible email/password en CI. Google popup n'est pas inclus dans la suite headless.
- Build et demarrage
npm run docker:up- Endpoints locaux
- Frontend: http://localhost:8080
- Backend: http://localhost:3000
- Health: http://localhost:3000/api/health
- Metrics: http://localhost:3000/api/metrics
- Swagger: http://localhost:3000/api/docs
- Arret
npm run docker:down- Arret + purge volume PostgreSQL
npm run docker:down:volumesWorkflow: .github/workflows/ci-cd.yml
- Trigger: push et pull_request sur main/develop.
- Gates stricts: lint, tests, build.
- Deploy backend Railway sur push main (si secrets presents).
- Deploy frontend Vercel sur push main (si secrets presents).
Secrets attendus:
- RAILWAY_TOKEN
- RAILWAY_SERVICE
- VERCEL_TOKEN
- VERCEL_ORG_ID
- VERCEL_PROJECT_ID
- Creer un projet Railway et un service PostgreSQL.
- Relier le repo GitHub.
- Ajouter les variables runtime:
- DATABASE_URL
- GEMINI_API_KEY
- NODE_ENV=production
- ALLOWED_ORIGINS=https://your-frontend-domain
- SENTRY_DSN (optionnel)
- Confirmer la commande de start: npm run start:prod
- Verifier apres deploy:
- GET /api/health retourne status ok
- POST /api/analyze-risk fonctionne
- Creer un projet Vercel relie au repo.
- Definir root directory: frontend
- Build command: npm run build:frontend
- Ajouter variable:
- VITE_SENTRY_DSN (optionnel)
- Configurer l'URL backend cote frontend (proxy/rewrite selon environnement).
- Backend logs structures via pino avec request id et duree par requete.
- Endpoint backend/server.ts expose /api/metrics pour temps de reponse moyens/max.
- Sentry capture les exceptions backend et frontend.
- Lazy loading des sections principales frontend active dans frontend/src/App.tsx.
- Bundle analysis disponible via:
npm run build:analyze- Rapport genere: frontend/dist/bundle-report.html
- Endpoint history optimise avec pagination:
GET /api/history?limit=20&offset=0
Variables utiles:
- LOG_LEVEL=info|debug|error
- SENTRY_DSN
- SENTRY_TRACES_SAMPLE_RATE
- VITE_SENTRY_DSN
- backend/server.ts: routes API, securite, logging, metrics.
- backend/lib/prisma.ts: client Prisma.
- frontend/src: UI, auth Firebase, services API.
- docker-compose.yml: stack locale app + PostgreSQL.
- Dockerfile.backend: image backend prod.
- Dockerfile.frontend: image frontend statique.
- Ne jamais exposer GEMINI_API_KEY dans le frontend.
- Pour la production, privilegier backend-only access aux secrets et erreurs utilisateur explicites.