Setup local
Cómo clonar, configurar y levantar el monorepo ixiclinic en tu máquina.
Esta guía te lleva de un clon recién hecho a tener el stack completo corriendo en local.
Prerrequisitos
- Node.js ≥ 18 (el repo declara
engines.node >= 18.0.0). - pnpm 9.15.9 — la versión está fijada en
packageManager. La forma recomendada es habilitar Corepack:corepack enable && corepack prepare pnpm@9.15.9 --activate. - PostgreSQL — una base accesible vía
DATABASE_URL(local o gestionada). - Solo si vas a tocar ixiclinic Connect (
bridge/): Bun (para compilar el binario; eldevusa tsx). - Solo si vas a tocar ixiclinic Desktop (
ixiclinic-desktop/): Rust + Bun + los prerrequisitos de Tauri.
Pasos
# 1. Clonar e instalar
git clone <repo> ixiclinic
cd ixiclinic
pnpm install # instala todo el workspace
# 2. Variables de entorno del API
cp .env.example apps/api/.env.local
# Edita apps/api/.env.local y rellena al menos:
# DATABASE_URL, JWT_SECRET (≥32), JWT_REFRESH_SECRET (≥32)
# 3. Preparar la base de datos (desde la raíz)
pnpm --filter @ixiclinic/api db:migrate # aplica las migraciones
pnpm --filter @ixiclinic/api db:seed # opcional: datos de demo
# 4. Levantar todo
pnpm devNota: El API carga su configuración desde
apps/api/.env.local(verapps/api/src/config/env.ts, que haceconfig({ path: '.env.local' })). El.env.examplede la raíz es la plantilla, pero el archivo efectivo que lee el API esapps/api/.env.local.
Variables de entorno
El API valida sus variables con Zod al arrancar (apps/api/src/config/env.ts). Si falta una
requerida o no cumple la longitud mínima, el proceso aborta con un mensaje claro.
| Variable | Requerida | Default | Notas |
|---|---|---|---|
DATABASE_URL | Sí | — | Cadena de conexión PostgreSQL |
JWT_SECRET | Sí | — | Mínimo 32 caracteres |
JWT_REFRESH_SECRET | Sí | — | Mínimo 32 caracteres |
PORT | No | 5000 | Puerto del API |
HOST | No | 0.0.0.0 | Host de escucha |
NODE_ENV | No | development | development · production · test |
CORS_ORIGINS | No | http://localhost:3000 | Lista separada por comas |
GITHUB_RELEASES_TOKEN | No | — | PAT para proxyar releases privados (Desktop/Connect) |
GITHUB_RELEASES_REPO | No | (vacío) | Repo owner/repo de releases a proxyar (Desktop/Connect) |
Nota:
GITHUB_RELEASES_TOKENyGITHUB_RELEASES_REPOson opcionales: alimentan el proxy de descargas de ixiclinic Desktop / Connect. Sin el token, esos endpoints responden 503 con un mensaje explicativo. Configúralos solo si vas a servir esos binarios.
El frontend usa NEXT_PUBLIC_API_URL (apps Next.js) y VITE_API_URL (lab-site); ambos
apuntan por defecto a http://localhost:5000.
Puertos de desarrollo
pnpm dev levanta todos los servidores a la vez:
| App | Puerto |
|---|---|
apps/admin | 3000 |
apps/console | 3001 |
apps/portal | 3002 |
apps/api | 5000 |
apps/lab-site | 5173 |
apps/landing | 5174 |
apps/docs | 5175 |
Levantar una sola app
Para no arrancar todo el stack, usa el filtro de pnpm:
pnpm --filter @ixiclinic/api dev
pnpm --filter @ixiclinic/admin dev
pnpm --filter @ixiclinic/console dev
pnpm --filter @ixiclinic/portal dev
pnpm --filter @ixiclinic/landing dev
pnpm --filter @ixiclinic/lab-site dev
pnpm --filter @ixiclinic/docs devScripts de raíz
pnpm dev # turbo run dev (todos los servidores)
pnpm build # turbo run build
pnpm lint # turbo run lint
pnpm typecheck # turbo run typecheck
pnpm format # prettier sobre **/*.{ts,tsx,md,json}
pnpm clean # turbo run clean + borra node_modules y .turboScripts de base de datos (desde apps/api)
pnpm db:generate # genera migraciones Drizzle desde el esquema
pnpm db:migrate # aplica migraciones (drizzle-kit migrate)
pnpm db:push # empuja el esquema directo (solo dev)
pnpm db:studio # abre Drizzle Studio
pnpm db:seed # carga datos de demo
pnpm test # corre los tests con vitestPara el detalle del esquema, los entornos de PostgreSQL (dev vs producción) y las particularidades de las migraciones, ver Base de datos.