Monorepo : frontend Vite/React, backend Moleculer/ActivityPods, déploiement Docker via GitHub Actions sur VPS Infomaniak.
.
├── frontend/ Vite + React 18 + TS + SemApps providers
├── backend/ Moleculer + @activitypods/app
├── docker/ Caddyfile + backend.Dockerfile + bootstrap.sh
├── docker-compose.yml stack prod (caddy + moleculer + fuseki + redis)
├── docker-compose.dev.yml stack dev (fuseki + redis seuls)
├── docs/ ARCHITECTURE.md, deploy.md, Figma PDF, etc.
└── .github/ workflows ci.yml + deploy.yml + setup-vps.yml
cd frontend
npm install
npm run devdocker compose -f docker-compose.dev.yml up -d # Fuseki + Redis (loopback)
cd backend
npm install
npm run dev # Moleculer hot-reloadVoir backend/README.md pour les détails (env vars, tunnel ngrok, etc.).
- Vite + React 18 + TypeScript
- React Router 6
- react-i18next (FR / EN, switchable depuis le profil)
- ra-core + SemApps providers (
@semapps/auth-provider,@semapps/semantic-data-provider) — pas de react-admin UI - CSS pur (Sass modulaire) — voir
frontend/src/styles/ - Fonts servies en local : Adelphe Floréal (serif) + Bricolage Grotesque (sans)
| Route | Affiche |
|---|---|
/ |
Home — wordmark centré, 4 boutons aux coins |
/read, /read/:id |
Lecture d'une lettre (auth requise) |
/write, /write/:draftId |
Composer (auth requise) |
/about |
Manifeste : 9 éléments clés + 3 piliers |
/me |
Profil, brouillons, à relire, langue, login/logout Solid |
/login, /auth-callback |
Flow Solid-OIDC |
En mode déconnecté, seuls À propos et Moi sont visibles dans les coins. Lire et Écrire apparaissent une fois le Pod connecté.
Demo (par défaut) — pas de backend, données mockées dans frontend/src/data/mock.ts, badge "Demo — données fictives" sur /me.
Live — quand VITE_FRONTEND_URL pointe sur une URL publique (le frontend déployé, ou un tunnel ngrok en dev), le login Solid s'active et les lettres viennent du Pod de l'utilisateur via SemApps.
Cible : VPS Infomaniak Debian 13, stack Docker complète (Caddy + Moleculer + Fuseki + Redis). Tout est piloté par GitHub Actions :
| Workflow | Déclencheur | Effet |
|---|---|---|
ci.yml |
PR / push | typecheck + build frontend |
setup-vps.yml |
manuel | exécute docker/bootstrap.sh sur le VPS (install Docker, ufw, hardening SSH) |
deploy.yml |
push main | build frontend → rsync dist + backend + compose → docker compose up -d --build |
Procédure complète dans docs/deploy.md.
Voir docs/ARCHITECTURE.md pour le détail des contraintes Kind (17/jour, peer review a priori, cercles, fermeture 22h-7h), du modèle de données (ontologie kind:, shape trees), des services Moleculer custom (PeerReview, Circles, RateLimit, TimeWindow) et du plan de phasing.