Symfony 8 · DDD · CQRS · Hexagonal

La plateforme tout-en-un
des associations et des collectifs.

Conversations, événements, cotisations, kanban, sondages, cagnottes, jeux, planning — 87 widgets construits sur une architecture hexagonale stricte avec des bounded contexts DDD et un bus CQRS.

17
Bounded contexts
34
Widgets en production
58
Controllers Stimulus
PHPStan 8
Niveau d'analyse statique

Stack technique

Choix techniques modernes, sans dette ni magie cachée.

PHP 8.5
strict_types, readonly, enums
Symfony 8
Messenger, Mercure, Security
Doctrine ORM 3
UUID v7, attributs PHP
PostgreSQL 16
JSON, full-text search
Stimulus 3
58 controllers, zéro framework SPA
Tailwind CSS 4
CSS variables, thèmes dynamiques
Mercure SSE
temps réel sans WebSocket
Redis 7
cache + queues Messenger
PHPUnit 11
unitaires + intégration + Panther E2E

Architecture hexagonale stricte

Le domaine n'a aucune dépendance externe. Symfony, Doctrine et Mercure sont des adapters branchés sur des ports.

Domain

PHP pur. Aggregates, Value Objects, Domain Events, interfaces de Repository et de Port.

  • Aucun import Symfony / Doctrine
  • Value Objects immutables avec equals()
  • Aggregates émettent leurs propres Domain Events

Application

Orchestration via CQRS. Commands modifient, Queries retournent des Read Models DTO.

  • Handlers #[AsMessageHandler]
  • Read Models distincts des entités
  • Domain Events publiés après persistance

Infrastructure

Implémente les ports : repositories Doctrine, clients HTTP, adapters Mercure, chiffrement.

  • Tokens OAuth chiffrés (libsodium)
  • Mappers JSON ↔ Domain par plateforme
  • Webhooks signés vérifiés en entrée

UI

Adapters entrants : controllers HTTP, console, webhooks. Aucune logique métier.

  • Controllers dispatch CommandBus / QueryBus
  • CSP script-src 'self' — Stimulus only
  • Templates 100 % responsives, mobile-first
HTTP Request
Controller
CommandBus
Handler
Aggregate
Repository (port)
Doctrine (adapter)

17 bounded contexts

Chat
Conversations, messages, salles
Identity
Utilisateurs, orgs, memberships, thèmes
Planning
Événements, répétitions, entraînements
Cotisation
Cotisations, paiements, relances
Finance
Cagnottes, fonds de groupe
Collaboration
Polls, kanban, signup-list, whiteboard
Gaming
Bibliothèque, soirées, fiches JDR
Sport
Tournois, scoreboards, lineups
Content
Quiz, revue de presse, photos, tarot
Notification
Mercure SSE, sons, badges
Friendship
Demandes, relations, statuts
Utility
Météo, devises, covoiturage, GPS
Classification
Tags, métadonnées médias
Billing
Plan, abonnement, facture
PageBuilder
Pages publiques par canal
SharedKernel
UUID, Email, Bus interfaces
UI
Web, API, Console, Webhook

Widgets composables

Chaque conversation devient un espace de travail. Insérez n'importe quel widget depuis le menu +.

📊
Sondage
Collaboration
📅
Calendrier
Planning
💰
Cagnotte
Finance
🗂️
Kanban
Collaboration
🎯
Quiz
Content
🎬
Visio WebRTC
Communication
🏆
Tournoi
Sport
🎲
Soirée jeux
Gaming
🚗
Covoiturage
Utility
🌤️
Météo
Utility
📍
Localisation
Utility
🖼️
Mur photos
Content
📢
Annonce
Collaboration
🃏
Tirage tarot
Content
🎭
Texte théâtre + TTS
Content
Feuille de match
Sport
🏃
Parcours GPS
Utility
🎨
Tableau blanc
Collaboration

…et 16 autres déjà en production. Connectez-vous pour les essayer →

Comptes de démonstration

Toutes les données sont pré-chargées : organisation MJC Montrouge, 11 membres, 7 canaux, événements, cotisations, salles, page publique.

💡 Astuce : dès la première connexion, un tutoriel interactif guide pas à pas dans l'interface. Pour le relancer : bouton Tutoriel en bas à droite de l'écran de chat.
Loading…
Loading the web debug toolbar…
Attempt #