Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

287 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BikeVoyager

Application full-stack de planification d'itinéraires vélo (API ASP.NET Core + frontend React) avec routage, POI, export GPX et synchronisation cloud.

CI Déploiement manuel Licence MIT

Démo live

Ce que ça démontre

  • Conception full-stack cohérente: frontend React/Vite + API .NET 10, avec contrat HTTP canonique /api/v1/*.
  • API Minimal API versionnée et testée, avec endpoints de routage, boucle, POI, cloud sync, feedback et exports.
  • Sécurité applicative concrète: CORS d'origines autorisées, origin guard, cookies HttpOnly, rate limiting par politique, headers de sécurité.
  • Gestion d'un moteur externe lourd (Valhalla) avec readiness, endpoint de statut et mise à jour déclenchable.
  • Intégrations externes côté backend uniquement: Valhalla, Overpass, Google Drive, OneDrive.
  • Qualité logicielle automatisée par CI: restore/build/test, lint/format, E2E Playwright, audits vulnérabilités.
  • Déploiement manuel reproductible via GitHub Actions (workflow_dispatch) sur runner self-hosted Linux avec Docker Compose.

Captures

Capture 1 - Planification

Capture 2 - Carte

Capture 3 - Données         Capture 4 - Aide

Architecture

flowchart LR
    UI["Frontend Web<br/>React + Vite + TypeScript"] --> API["API ASP.NET Core (.NET 10)<br/>/api/v1/*"]
    API --> VAL["Valhalla<br/>Routing / Loop"]
    API --> OVP["Overpass API<br/>POI autour d'itinéraire"]
    API --> GDR["Google Drive API"]
    API --> ODR["Microsoft Graph / OneDrive"]
Loading

Schéma détaillé: docs/ARCHITECTURE.md

Stack technique

  • Backend: ASP.NET Core net10.0, Minimal APIs, FluentValidation, Serilog, architecture Domain / Application / Infrastructure.
  • Frontend: React 19.2.8, TypeScript 5.9.x, Vite 8.2.0, Mantine 8.3.18, Cesium 1.144.0, i18next.
  • Tests: xUnit (BikeVoyager.UnitTests, BikeVoyager.ApiTests), Vitest (frontend), Playwright E2E.
  • AppHost local: .NET Aspire (Aspire.AppHost.Sdk 13.4.6, Aspire.Hosting.Redis 13.4.6).
  • Conteneurs: Dockerfiles backend/frontend avec bases épinglées (dotnet/sdk:10.0.302, dotnet/aspnet:10.0.10, node:24.19.0-alpine, nginx:1.31.3-alpine) + stack Compose front/api/valhalla/valhalla-bootstrap.
  • Moteur de routage: image Valhalla épinglée par digest SHA256 dans deploy/home.compose.yml et infra/valhalla.compose.yml.

Démarrage rapide (dev local)

Prérequis:

  • .NET SDK 10.0.302 ou patch compatible dans la même bande (CI: actions/setup-dotnet@v6)
  • Node.js 24.19.0 + npm (CI: actions/setup-node@v7, fichier .nvmrc)
  • Docker + Docker Compose (nécessaires pour Valhalla)
  • PowerShell (pwsh) pour les scripts scripts/dev-*

Installation:

git clone https://github.com/arnaud-wissart-lab/BikeVoyager.git
cd BikeVoyager
dotnet restore BikeVoyager.sln
npm --prefix frontend ci

Lancement local (backend + frontend, et Valhalla si données disponibles):

./scripts/dev-up

Arrêt:

./scripts/dev-down

Option AppHost (.NET Aspire):

dotnet run --project backend/src/BikeVoyager.AppHost/BikeVoyager.AppHost.csproj

Tests

Backend (unitaires + API):

dotnet test backend/tests/BikeVoyager.UnitTests/BikeVoyager.UnitTests.csproj
dotnet test backend/tests/BikeVoyager.ApiTests/BikeVoyager.ApiTests.csproj

Frontend (unitaires / intégration):

npm --prefix frontend run test

E2E (Playwright):

npx --prefix frontend playwright install --with-deps chromium
npm --prefix frontend run e2e

Commandes agrégées:

./scripts/dev-test
./scripts/dev-audit      # Unix/Git Bash
./scripts/dev-audit.ps1  # PowerShell Windows

Pipeline CI référence: .github/workflows/ci.yml

Maintenance dépendances et SDK

Les versions de référence sont ancrées dans global.json, .nvmrc, frontend/package.json, frontend/package-lock.json, les fichiers .csproj et les images Docker épinglées. Avant de proposer un alignement, vérifier les versions déclarées et verrouillées, puis distinguer les correctifs de sécurité des montées majeures fonctionnelles.

Commandes de contrôle recommandées:

dotnet list BikeVoyager.sln package --vulnerable --include-transitive
dotnet list BikeVoyager.sln package --outdated --include-transitive
npm --prefix frontend audit --omit=dev
npm --prefix frontend audit
npm --prefix frontend outdated

Politique minimale:

  • appliquer en priorité les correctifs de sécurité et les versions patch/mineures compatibles ;
  • garder Node aligné sur .nvmrc (24.19.0) et frontend/package.json (24.x) ;
  • garder les types Node sur la ligne 24.x ;
  • ne pas monter Mantine, i18next, React i18next ou une image Docker majeure sans validation dédiée ;
  • après tout alignement, exécuter ./scripts/dev-test, ./scripts/dev-audit ou ./scripts/dev-audit.ps1 sous PowerShell Windows, npm --prefix frontend run lint, npm --prefix frontend run build et les E2E si le frontend ou le lockfile change.

Sécurité & configuration

Protections API appliquées:

  • Versioning canonique: /api/v1/* (docs/API.md).
  • Session anonyme: cookie chiffré/signé via Data Protection (HttpOnly, SameSite=Lax, Path=/api, Secure si HTTPS).
  • Cookies cloud OAuth côté API: bv_cloud_pending_sid, bv_cloud_auth_sid (HttpOnly, Path=/api).
  • Origin guard sur les routes /api/* + enforcement des origines selon ApiSecurity:AllowedOrigins.
  • Rate limiting global + politiques dédiées compute-heavy, export, feedback.
  • Hors Development: HSTS, redirection HTTPS, X-Content-Type-Options, Referrer-Policy, X-Frame-Options, Permissions-Policy.

Variables d'environnement courantes (placeholders):

# Cloud OAuth (API)
CloudSync__GoogleDrive__ClientId=__GOOGLE_CLIENT_ID__
CloudSync__GoogleDrive__ClientSecret=__GOOGLE_CLIENT_SECRET__
CloudSync__OneDrive__ClientId=__ONEDRIVE_CLIENT_ID__
CloudSync__OneDrive__ClientSecret=__ONEDRIVE_CLIENT_SECRET__

# Feedback (deploy/home.env)
FEEDBACK__ENABLED=true
FEEDBACK__SENDEREMAIL=contact@EXAMPLE.TLD
FEEDBACK__SENDERNAME=BikeVoyager
FEEDBACK__RECIPIENTEMAIL=contact@EXAMPLE.TLD
FEEDBACK__SUBJECTPREFIX=[BikeVoyager]
FEEDBACK__SMTP__HOST=smtp-relay.brevo.com
FEEDBACK__SMTP__PORT=587
FEEDBACK__SMTP__USESSL=true
FEEDBACK__SMTP__USERNAME=__BREVO_SMTP_LOGIN__
FEEDBACK__SMTP__PASSWORD=__BREVO_SMTP_KEY__

# Origines autorisées (exemple)
ApiSecurity__AllowedOrigins__0=https://bike.EXAMPLE.TLD
ApiSecurity__AllowedOrigins__1=http://localhost:5173

Guides détaillés:

Licence

Projet sous licence MIT. Voir LICENSE.

About

Application web full-stack en .NET et React dédiée à la planification de parcours, illustrant une architecture propre, une API structurée et une intégration continue complète.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages