Saltearse al contenido

Arquitectura

Stack

CapaTecnologia
FrontendReact 19, Tailwind CSS, Vite
BackendExpress, TypeScript, Drizzle ORM
Base de datosPostgreSQL 15
InfraDocker, Docker Compose
CLICommander.js, Inquirer

Estructura del monorepo

apps/
server/ API REST + logica de negocio
web/ Frontend React
packages/
cli/ CLI (@openfactu/cli)
ui/ Componentes UI compartidos
common/ Hooks y utilidades React
pdf/ Generacion de PDFs
sdk/ SDK para integraciones externas
plugin-sdk/ SDK para desarrollo de plugins
plugins/ Plugins instalados

Multi-tenancy

Cada empresa tiene su propio schema de PostgreSQL. Las tablas globales viven en public, las de negocio en tenant_nombre. El middleware tenantContext resuelve el tenant del JWT y crea un cliente Drizzle para ese schema.