MallaDocs

Desarrollo local

La estructura del monorepo, cómo ejecutar cada Worker en local y los controles de calidad.

Guía para desarrolladores

El repositorio es un workspace de pnpm gestionado con Turborepo. Cada app es un Worker que puedes ejecutar en local con Wrangler.

Estructura

RutaQué esPuerto local
apps/webEditor Nuxt, sistema de diseño con Panda CSS3000
apps/apiAPI con Hono4000
apps/realtimeSalas Yjs8788
apps/sitesSitios publicados, <slug>.localhost:87908790
apps/runnerFlujos de trabajo de servidor, tablas, autenticación de visitantes8791
apps/mcpServidor MCP8792
packages/*Librerías compartidas, importadas desde el código fuente—
docs/Arquitectura, guía de despliegue, proceso de agentes—

Puesta en marcha

  1. Instala

    Usa la versión de pnpm fijada en package.json.

    bash
    pnpm 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 keys
    
  2. Migra la base de datos

    Aplica packages/db/migrations a tu rama de desarrollo con pnpm --filter @malla/db db:migrate y DATABASE_URL definido.

  3. Ejecuta

    bash
    pnpm dev                          # every Worker and the editor through turbo
    pnpm --filter web dev             # just the editor
    pnpm --filter api dev             # just one Worker
    

Sandbox local

pnpm sandbox ejecuta todo el stack (Postgres, api, realtime, sites, runner y el editor) sin .dev.vars y sin DATABASE_URL que configurar. Postgres es PGlite, las migraciones de packages/db/migrations se aplican al arrancar y los secretos de desarrollo se generan una sola vez. Los datos se conservan entre ejecuciones; presiona Ctrl+C para detenerlo.

bash
pnpm sandbox                      # start; data persists between runs
pnpm sandbox --reset              # wipe the sandbox data first, then start
ServicioURL
Editorhttp://localhost:3200/login
APIhttp://localhost:4200/health
Realtimews://localhost:8988
Siteshttp://<slug>.localhost:8990 (después de publicar)
Runnerhttp://localhost:8991/health
Postgrespostgres://postgres@127.0.0.1:5599/postgres

Inicia sesión como demo@malla.local con la contraseña demo-password-123. El primer arranque crea ese usuario, su espacio de trabajo y un sitio llamado "Demo site" con el slug demo. Los puertos no chocan con pnpm dev ni con el stack de e2e, así que los tres pueden correr a la vez. El sandbox no arranca el Worker de MCP y no tiene claves de correo ni de IA: no envía correos (así que no hay enlaces de inicio de sesión) y la IA integrada está desactivada. Todo lo que genera vive en scripts/sandbox/.data/; scripts/sandbox/README.md explica cómo cambiar los puertos y los demás detalles.

Controles de calidad

bash
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 de e2e arranca su propio stack en un directorio de estado por checkout, así que los worktrees en paralelo nunca chocan, y guarda una captura de pantalla por test en apps/web/e2e/.screenshots/.

Convenciones

  • Vue 3 <script setup lang="ts">, TypeScript estricto, imports explícitos (los auto-imports están desactivados).
  • La interfaz del editor se estiliza con Panda CSS usando solo tokens semánticos; las animaciones pasan por app/motion (GSAP).
  • Todos los cambios del documento pasan por ops y editor.document.transact; nunca modifiques el documento directamente.
  • Commits pequeños con Conventional Commits, un cambio lógico por commit. Las reglas completas están en docs/frontend-conventions.md.