Aurora est un CMS administrable conçu autour d'un éditeur bloc (Editor.js) et d'un modèle de contenu flexible. Chaque contenu possède plusieurs traductions indépendantes, un type personnalisable, des tags et un statut de publication.
L'administration est une SPA Vue intégrée à Symfony via symfony/ux-vue. Le stockage utilise PostgreSQL, l'internationalisation repose sur vue-i18n, et l'édition concurrente est gérée par un système de verrouillage optimiste avec résolution de conflits 3-way façon Git.
- Éditeur bloc Editor.js - titres, listes, images, tableaux, code, citations, intégrations (YouTube, Vimeo…), plus trois blocs custom : Callout, MediaText et Two Columns
- Templates de démarrage - 12 modèles prêts à l'emploi regroupés en catégories (Article, Marketing, Mise en page, Technique) applicables en un clic
- Multi-langue - traductions indépendantes par locale (fr, en, es, de) avec champ
slugverrouillé/déverrouillé par traduction - Types de contenu dynamiques - définir des types de post (Article, Page, etc.) depuis l'admin
- Tags, médias vedettes, SEO - méta-titre et méta-description comptés en temps réel
- Optimistic locking - deux admins peuvent éditer le même contenu ; le second est prévenu d'un conflit lors de sa sauvegarde et peut fusionner les modifications
- Résolution de conflits 3-way - comparaison bloc par bloc entre base / local / remote avec acceptation manuelle par bloc ou en batch (inspiré de Git merge)
- Rôles - utilisateurs et développeurs avec impersonification depuis l'admin
- Demandes d'accès - visiteurs peuvent demander l'accès, l'admin approuve ou refuse par e-mail
- Invitations - envoi d'invitations par e-mail avec message et identifiants optionnels
- Thème - mode sombre et mode clair
- Prévisualisation - rendu fidèle du contenu avant publication
Quand deux administrateurs modifient simultanément le même contenu, le second voit ses modifications bloquées à la sauvegarde. Aurora propose alors trois actions :
- Voir la version actuelle - aperçu de la version en base sans perdre son travail local
- Fusionner - ouvre un merge editor plein écran qui diffe les blocs Editor.js entre l'état de base (au chargement), local (en cours) et remote (en base), classifie chaque bloc (
unchanged,local-modified,remote-modified,local-added,remote-added,conflict…) et permet de choisir version par version - Forcer ma sauvegarde - écrase la version en base (Doctrine incrémente quand même le
@Versionpour bloquer les futures sauvegardes conflictuelles)
Le verrouillage optimiste utilise la colonne #[ORM\Version] de Doctrine combinée à EntityManager::lock() pour détecter les conflits de manière atomique.
| Couche | Technologie |
|---|---|
| Backend | Symfony 7.4, PHP 8.4+ |
| Base de données | PostgreSQL |
| Frontend | Vue 3, Vue i18n, Editor.js |
| Style | Tailwind CSS 4 |
| Emails | Symfony Mailer (SMTP) |
| Build | Vite 8 |
| Tests | Vitest, PHPUnit, Playwright |
Obligatoires
| Outil | Version | Notes |
|---|---|---|
| PHP | 8.4+ | Extensions : pdo_pgsql, intl, ctype, iconv |
| PostgreSQL | 14+ | Séquences natives utilisées par Doctrine |
| Node.js | 20+ | |
| Composer | 2+ | |
| pnpm | 9+ | |
| Docker + docker compose | v2+ | Mailpit (SMTP dev) - seul service conteneurisé |
Binaires système optionnels
| Binaire | Module | Usage | Installation |
|---|---|---|---|
pdftoppm (poppler-utils) |
GED | Aperçus des PDF | brew install poppler / sudo apt install poppler-utils |
gs (Ghostscript) |
GED | Aperçus des PDF, quand pdftoppm est absent |
brew install ghostscript / sudo apt install ghostscript |
La GED dégrade proprement :
PdfThumbnailGeneratoressaiepdftoppm, puisgs, puis renvoie l'icône de repli. Rien ne casse si aucun des deux n'est là.
📋 Liste exhaustive des prérequis (système, extensions PHP, binaires CLI, services externes, vars d'env, spécificités prod) :
docs/aurora-core/ops/prerequisites.md- à consulter avant chaque install/déploiement.
Aucun, au-delà de PostgreSQL et d'un SMTP de développement. Les transports
Messenger sont en doctrine://default, donc aucun broker (RabbitMQ, Redis)
n'est requis pour faire tourner Aurora tel quel.
Les modules qui demandaient un Ollama local ou un microservice docTR - Billing
OCR, Assistant IA - ont été extraits puis archivés en août 2026. Voir
docs/aurora-client/getting-started/installing_modules.md.
git clone https://github.com/axelraboit/aurora.git
cd aurora
make install-devmake install-dev installe les dépendances Composer (app + outils), pnpm, crée les répertoires runtime et exécute les migrations.
Copier et configurer l'environnement :
cp .env .env.localVariables minimales à renseigner dans .env.local :
DATABASE_URL="postgresql://user:password@127.0.0.1:5432/aurora"
MAILER_DSN="smtp://localhost:25"
APP_SECRET=your-secret-hereCharger des données de démonstration (optionnel - recrée la base entièrement) :
make fixturesmake start # serveur Symfony (démarré en arrière-plan)
make watch # Vite HMR - dans un second terminalmake start ne lance plus Vite : les deux serveurs sont indépendants, et un
site sans assets à recompiler n'a pas besoin du watcher.
make install-prod # dépendances, migrations, build assetsPour les déploiements suivants (nécessite un tag git sur le commit courant) :
make deploy-prodAurora est testé à trois niveaux :
make test-frontend # Vitest - composables et composants Vue
make test-backend-unit # PHPUnit - tests unitaires
make test-backend-integration # PHPUnit - tests d'intégration (contrôleurs)
make test-e2e # Playwright - end-to-end
make test # tout lancer (frontend + backend)Les navigateurs Playwright ont besoin de quelques bibliothèques système :
sudo apt install -y libnspr4 libnss3 libasound2t64
pnpm exec playwright install chromiumLe serveur Symfony est démarré automatiquement par Playwright (symfony server:start --port=8000). Pour cibler une URL existante à la place, définir E2E_BASE_URL :
E2E_BASE_URL=http://localhost:8000 pnpm test:e2eLe scénario complet de conflit à deux onglets est désactivé par défaut (configuration de fixtures requise) ; l'activer avec :
E2E_FULL=1 pnpm test:e2e# Développement
make start # serveur Symfony (démarré en arrière-plan)
make watch # Vite HMR (second terminal)
make stop # arrêter les services Docker
# Tests
make test-backend # tous les tests backend (PHPUnit)
make test-backend-unit # tests unitaires backend uniquement
make test-backend-integration # tests d'intégration backend uniquement
make test-frontend # tests frontend (Vitest)
make test-e2e # tests end-to-end (Playwright)
make test # frontend + backend
# Qualité du code
make fix # auto-correction (Rector, PHP-CS-Fixer, ESLint) + PHPStan
make stan # PHPStan seul
# Base de données
make migrate # exécuter les migrations
make migration # générer une nouvelle migration
make fixtures # drop DB + migrations + fixtures
# Utilitaires
make help # lister toutes les commandes disponiblesMIT