SaaS Starter

Instalación

Setup local del monorepo en menos de 5 minutos.

Última actualización 20 jul 2026

Prerrequisitos

  • Bun 1.3+
  • Node 22+ (sólo para herramientas que aún no soportan Bun)
  • PostgreSQL 15+ (local o Docker)
  • Git

Clone & install

git clone <your-repo> my-saas
cd my-saas
bun install

Variables de entorno

cp apps/server/.env.example apps/server/.env

Editá apps/server/.env:

  • DATABASE_URL — connection string de Postgres
  • BETTER_AUTH_SECRET — generá uno con openssl rand -base64 32
  • BETTER_AUTH_URLhttp://localhost:3005 en dev

Database

cd apps/server
bunx prisma migrate dev   # el cliente Prisma ya se genera en `bun install` (postinstall)

Run

# desde la raíz
bun run dev

Servicios de desarrollo (Docker)

El stack de desarrollo incluye Postgres, Redis y MailHog (trampa SMTP para tests E2E):

docker compose -f docker-compose.dev.yml up -d

MailHog captura todos los emails salientes. Web UI: http://localhost:8025. Para enrutar el servidor a través de él, configurá SMTP_HOST=localhost y SMTP_PORT=1025 en apps/server/.env.

Tests E2E (Playwright)

La suite E2E vive en tests/ (@app/e2e). Corre sobre Node (no Bun) y maneja el stack real. Con Postgres + Redis levantados (docker compose -f docker-compose.dev.yml up -d postgres redis):

bun run e2e          # corre la suite completa contra tu dev stack ya corriendo
bun run e2e:golden   # solo los golden paths (bootstrap, registro, onboarding, billing, dashboard)
bun run e2e:install  # instala el browser Chromium de Playwright (una vez)

bun run e2e:golden es lo que gatea CI en cada PR (job e2e-golden de .github/workflows/ci.yml): levanta server + client por su cuenta y aísla un schema Postgres por corrida. La suite completa corre de noche (.github/workflows/e2e-nightly.yml) contra el stack completo de compose, que además incluye el worker BullMQ y MailHog.

Para espejar el gate localmente antes de pushear:

bash scripts/ci-local.sh --e2e   # lint + typecheck + test + api-freshness + golden E2E

Troubleshooting

@prisma/client did not initialize — corré bunx prisma generate desde apps/server/.

El servidor crashea con Invalid environment — el .env no existe o le faltan vars requeridas.

En esta página