What actually backs this platform
Architecture, security boundaries, deployment shape, shipped versions, and quality status — each with a source and a timestamp, not just an assertion. Operational details (hosts, credentials, internal logs) are deliberately excluded.
How the pieces connect
Central sign-in gateway; every app redirects here when unauthenticated.
Next.js 16 App Router apps sharing the design system and auth cookie.
Auth.js v5 config, JWT sessions, RBAC helpers, app registry.
CSS design tokens, AppShell, DataTable, and brand components.
Locale resolution and dictionaries for en/nl/fr/de/lb.
Shared platform schema: users, RBAC, audit log, EduMatch, TimelineAI.
Per-app isolated Postgres instances, deliberately not shared.
Background job queues for Vionto's render pipeline and AppBuilder's AI generation.
SSO and RBAC boundaries
Hub issues a JWT session on a cookie scoped to the shared apex domain. Every other app validates that session; none of them hold a separate credential store.
Role/permission checks run in each app's own middleware and API routes against the shared platform schema — a client-side role flag is never trusted for access control.
Testora and AppBuilder each run against their own Postgres instance specifically so a bug in one app's queries can't reach platform user data.
API keys and connection strings are decrypted server-side from an age-encrypted file at deploy time; they are not present in any client bundle or public repository file.
Delivery topology
Docker Compose stack behind a reverse proxy, deployed by pushing to main. Each app builds as its own standalone Next.js image; a background worker process runs alongside the apps that need one (Vionto, AppBuilder).
- GitHub Actions triggers on push to main.
- The deploy job connects over SSH to the host and runs the repository's deploy script.
- The script pulls the latest commit, decrypts environment secrets from the committed encrypted file, and rebuilds images sequentially.
- The reverse proxy routes each subdomain to its container; the stack restarts with zero manual steps.
Host address, credentials, and internal service ports are intentionally not published here — see the Rules section above.
Is it actually up right now
Polled from each app’s public /api/status endpoint at the moment you loaded this page — genuinely live, not a cached number.
Build, accessibility, performance
Passing
Method: GitHub Actions API: latest completed run of ci-status.yml on main (lint + typecheck + package tests — build excluded, needs CI secrets, tracked separately).
As of 2026-09-02
96 / 100
Method: Lighthouse CI (treosh/lighthouse-ci-action) against the deployed showcase, on a daily schedule; committed snapshot read from main.
As of 2026-09-01
89 / 100
Method: Lighthouse CI (treosh/lighthouse-ci-action) against the deployed showcase, on a daily schedule; committed snapshot read from main.
As of 2026-09-01