Try it locally
The portal runs entirely on your machine, with the real sign-in flow. No Cloudflare account, no real email, no Docker.
Run
Node.js 22 or later, from apps/theme-hub:
npm ci
(cd ../../packages/core && npm ci)
npm run db:local
npm run devnpm run dev builds the interface and then starts the Worker on http://localhost:8787.
Sign in
The interface opens in English (default language); the account menu lets you switch to French, Ukrainian or Arabic.
- Open
http://localhost:8787. - Enter
[email protected]and request a code. - Click Read the local test code (“Lire le code de test local” in French), then sign in.
Only the email delivery is replaced by a local inbox. This inbox exists only in the local environment, on a localhost address. Locally, [email protected] is a platform administrator.
Try a theme
- Create an organization.
- New theme: import
theme/DWA.css(repository root). The validator and preview appear; the reference theme passes without errors. - Save the draft, then publish.
- In VS Code, run DWA : se connecter au portail (connect to the portal) with
http://localhost:8787, then DWA : choisir un thème d’organisation (choose an organization theme).
Local data is in apps/theme-hub/.wrangler/, ignored by Git.
Never deploy the local environment
The local environment uses a public development secret. No deployment is configured for now; it will be covered by a dedicated procedure.
Architecture
| Component | Service | Role |
|---|---|---|
| API and interface | Cloudflare Workers + Static Assets | Web API, extensions API, React interface served by the Worker |
| Database | Cloudflare D1 (SQLite) | Organizations, members, groups, themes, versions, reports, sessions, activity log |
| Files | Cloudflare R2 or organization storage | Published CSS |
| Authentication | Better Auth, in the Worker | Email codes, SSO OIDC, sessions |
| Assistant | Claude API (optional) | Fixes proposed in the editor |
No permanent server and no PostgreSQL database: locally, D1 and R2 are simulated by Miniflare. The tests also simulate S3, Azure, the OIDC provider and the Claude API: no request goes out to a remote service.