Le dépôt est un espace de travail pnpm piloté par Turborepo. Chaque application est un Worker que vous pouvez lancer en local avec Wrangler.
Organisation
| Chemin | Contenu | Port local |
|---|---|---|
apps/web | Éditeur Nuxt, design system en Panda CSS | 3000 |
apps/api | API Hono | 4000 |
apps/realtime | Salles Yjs | 8788 |
apps/sites | Sites publiés, <slug>.localhost:8790 | 8790 |
apps/runner | Workflows serveur, tables, authentification des visiteurs | 8791 |
apps/mcp | Serveur MCP | 8792 |
packages/* | Bibliothèques partagées, importées depuis les sources | — |
docs/ | Architecture, guide de déploiement, processus des agents | — |
Installation
Installez
Utilisez la version de pnpm fixée dans
package.json.bashpnpm install # also runs nuxt prepare + panda codegen for web cp apps/api/.dev.vars.example apps/api/.dev.vars cp apps/sites/.dev.vars.example apps/sites/.dev.vars cp apps/realtime/.dev.vars.example apps/realtime/.dev.vars cp apps/mcp/.dev.vars.example apps/mcp/.dev.vars # fill in DATABASE_URL (a Neon dev branch) and the shared keysMigrez la base de données
Appliquez
packages/db/migrationsà votre branche de développement avecpnpm --filter @malla/db db:migrate,DATABASE_URLétant défini.Lancez
bashpnpm dev # every Worker and the editor through turbo pnpm --filter web dev # just the editor pnpm --filter api dev # just one Worker
Bac à sable local
pnpm sandbox lance toute la pile (Postgres, api, realtime, sites, runner et l'éditeur) sans .dev.vars ni DATABASE_URL à configurer. Postgres est remplacé par PGlite, les migrations de packages/db/migrations sont appliquées au démarrage et les secrets réservés au développement sont générés une seule fois. Les données persistent d'un lancement à l'autre ; appuyez sur Ctrl+C pour arrêter.
pnpm sandbox # start; data persists between runs
pnpm sandbox --reset # wipe the sandbox data first, then start
| Service | URL |
|---|---|
| Éditeur | http://localhost:3200/login |
| API | http://localhost:4200/health |
| Temps réel | ws://localhost:8988 |
| Sites | http://<slug>.localhost:8990 (après publication) |
| Runner | http://localhost:8991/health |
| Postgres | postgres://postgres@127.0.0.1:5599/postgres |
Connectez-vous avec demo@malla.local et le mot de passe demo-password-123. Le premier démarrage crée cet utilisateur, son espace de travail et un site appelé "Demo site" avec le slug demo. Les ports n'entrent pas en conflit avec pnpm dev ni avec la pile e2e : les trois peuvent donc tourner en même temps. Le bac à sable ne lance pas le Worker MCP et n'a ni clé d'e-mail ni clé d'IA : il n'envoie aucun e-mail (donc pas de liens de connexion) et l'IA intégrée est désactivée. Tout ce qu'il génère se trouve dans scripts/sandbox/.data/ ; scripts/sandbox/README.md décrit comment changer les ports et donne les détails.
Contrôles qualité
pnpm check-types # TypeScript across the monorepo
pnpm test # Vitest unit tests in every package
pnpm --filter web build # production build of the editor
pnpm e2e # Playwright against the full local stack
graphify update . # refresh the code knowledge graph
La suite e2e démarre sa propre pile dans un répertoire d'état propre à chaque checkout, pour que des worktrees parallèles n'entrent jamais en collision, et conserve une capture d'écran par test dans apps/web/e2e/.screenshots/.
Conventions
- Vue 3
<script setup lang="ts">, TypeScript strict, imports explicites (les imports automatiques sont désactivés). - L'interface de l'éditeur est stylée avec Panda CSS, uniquement avec des jetons sémantiques ; les animations passent par
app/motion(GSAP). - Toutes les modifications du document passent par les ops et
editor.document.transact; ne modifiez jamais le document directement. - Petits commits Conventional Commits, un changement logique par commit. Les règles complètes sont dans
docs/frontend-conventions.md.