Mobile En cours

D&D Companion — Application cross-platform D&D 5e

Application Flutter offline-first de gestion de personnages et de campagnes pour Donjons & Dragons 5e (2014). Architecture propre avec Drift, Riverpod, go_router, synchronisation cloud via FastAPI/Python. iOS, Android, macOS, Windows, Linux.

FlutterDartDriftRiverpodFastAPIPythonPostgreSQLDocker
← Tous les projets

Contexte

Projet personnel — application cross-platform d’assistance pour Donjons & Dragons 5e édition (2014), conçue pour fonctionner prioritairement hors ligne avec synchronisation cloud optionnelle.

L’application cible à la fois les joueurs (gestion de leur fiche de personnage) et les maîtres du jeu (gestion de campagnes, suivi de combat, bibliothèque de monstres). Elle est disponible sur 5 plateformes depuis une seule base de code : iOS, Android, macOS, Windows, Linux.

Fonctionnalités implémentées (MVP)

Gestion des personnages

  • Création de personnage complet (race, classe, caractéristiques, background, équipement)
  • Fiche de personnage interactive : PV, dés de vie, jets de mort, CA, ressources, sorts
  • Calculs automatiques : modificateurs, bonus de maîtrise, CA depuis l’armure équipée
  • Export / import JSON pour partage entre joueurs et MJ (hors ligne)
  • Bibliothèque de sorts SRD en français, emplacements de sorts par niveau

Campagnes et MJ

  • Création de campagnes avec code d’invitation
  • Vue MJ : accès aux fiches des joueurs, gestion des dossiers
  • Bibliothèque de monstres (SRD + homebrew) avec stat blocks complets
  • Création / modification de monstres personnalisés

Combat Tracker

  • Initialisation du combat : sélection des participants (PJ + monstres)
  • Suivi de l’ordre d’initiative, PV actuels, conditions (étourdi, à terre…)
  • Ressources des combattants (emplacements de sorts, charges de capacités)

Compte cloud et synchronisation

  • Authentification JWT (inscription / connexion) avec stockage sécurisé du token
  • Synchronisation manuelle des données avec résolution de conflits (last-write-wins par updated_at)
  • Mode hors ligne complet : l’application fonctionne intégralement sans connexion

Stack technique

Application Flutter

  • Flutter 3.22+ / Dart 3.3+
  • Drift 2.x (ORM SQLite, offline-first, code generation)
  • Riverpod 3.x (state management réactif)
  • go_router (navigation déclarative)
  • Freezed + json_annotation (modèles immuables, sérialisation)
  • Dio (client HTTP) + flutter_secure_storage (tokens JWT)
  • share_plus + file_picker (export/import JSON)

Backend (FastAPI)

  • FastAPI 0.115.x + Python 3.12
  • SQLAlchemy 2.0 async + Alembic (migrations)
  • Pydantic v2, Uvicorn, authentification JWT
  • PostgreSQL 16

Infrastructure

  • Docker + Docker Compose
  • Nginx + Let’s Encrypt (SSL)
  • Hébergement VPS (Hetzner / OVH)

Architecture

Pattern Feature-first avec séparation stricte data / presentation :

lib/
  core/       → database (Drift), auth, router, providers, sync
  features/   → character / campaign / combat / monster / spells
    data/     → repository
    presentation/
      screens/   → UI
      providers/ → Riverpod
      widgets/   → composants
  shared/     → constantes SRD, utilitaires D&D

Données SRD (sorts, races, classes, monstres) pré-chargées en base locale via srd_seed.dart au premier lancement — aucune connexion requise pour jouer.

Un projet similaire ?
Réponse sous 24 heures.
Me contacter →