Estructura del proyecto
Un monorepo Bun + Turbo: dos apps de Cloudflare Workers y los paquetes compartidos que las unen.
text
Apps
apps/api: el worker de la API Hono. Las rutas están ensrc/index.ts; la lógica de negocio se expone como procedimientos oRPC ensrc/orpc. El acceso a datos usa Drizzle sobre D1.apps/web: la app web TanStack Start, también un Worker. Las rutas basadas en archivos desrc/routesse renderizan en el servidor y se hidratan en el cliente.
Paquetes
@my-app/backend-contract: el contrato oRPC. Declara las entradas y salidas de los procedimientos con Zod, y ambas apps dependen de él, así que un cambio en el contrato es un error de compilación en ambos lados hasta corregirlo.@my-app/ui: componentes Base UI compartidos, la hoja de estilos global y tus ajustes deConfig.brand.@my-app/transactional: plantillas de react-email, renderizadas a HTML por el módulo de correo.
Los paquetes usan el espacio de nombres de tu proyecto. Impórtalos con el alias, p. ej. @my-app/ui/components/ui/button.
El flujo del contrato oRPC
Añadir un endpoint de API toca tres sitios, todos totalmente tipados:
- Declara el procedimiento en
packages/backend-contract(nombre, entrada/salida Zod). - Impleméntalo en
apps/api/src/orpc. - Llámalo desde la app web con el cliente tipado
backend, con autocompletado y comprobación de tipos.
Qué carpetas existen depende de los módulos que elijas, consulta Módulos.