RiskPilot Website FR GitHub

Architecture #

Overview #

Navigateur
    ↓
Nginx :8080
    ├── SPA React / TypeScript / Vite / Material UI
    └── API Symfony / PHP-FPM
           ├── PostgreSQL
           ├── Redis → Symfony Messenger
           ├── stockage documentaire privé
           └── SMTP / Gmail API / Microsoft Graph

Nginx is the single entry point to the compose. PostgreSQL is the source of truth. Redis uses AOF and transports messages asynchronously.

Secure feed #

Symfony checks JWT signature, session, account activity and role. The controller resolves each relationship in the current organization; repositories filter reads by tenant. The audit log records sensitive mutations.

Roles and documents #

SUPER_ADMIN → ADMIN → RISK_MANAGER → VIEWER. AUDITOR and ACTION_OWNER inherit reading. The documents add ACLs READ, EDIT, and MANAGE.

Evolution rules #

Any resource must filter by organization, revalidate relationships, authorize API side, log mutations, migrate schema, and provide tenant/RBAC testing.

Asynchronous flows #

The backend publishes emails to Redis; the Messenger worker consumes them and selects SMTP, Gmail or Microsoft Graph depending on the tenant. The scheduler executes acceptance expirations and review reminders. A worker failure does not necessarily prevent business change: watch the queue.

Network #

Nginx exposes 8080. PostgreSQL, Redis, PHP-FPM and Vite remain private to the Docker network. In production, an external reverse proxy terminates TLS. Never directly expose base, Redis or PHP-FPM.

Scalability and recovery #

Application services can be reconstructed from images; data resides in PostgreSQL, Redis, documents and JWT keys. Any scaling must preserve sessions, asynchronous transport, and access to shared storage.

Architectural controls #

Check service health, migrations, tenant isolation, API permissions, persistent volumes, Messenger processing, scheduler and HTTPS termination after each delivery.