Lanzar en 5 minutos
Tutorial paso a paso con capturas para tener tu SaaS funcionando en 5 minutos
Lanzar en 5 minutos
Sigue este tutorial paso a paso para tener tu SaaS completamente funcional. No necesitas experiencia previa.
Al final tendrás:
- Landing page profesional
- Login con Google
- Pagos con Stripe
- Panel de usuario y admin
- Desplegado en producción
Requisitos: Node.js 18+, una cuenta de GitHub y una terminal (Terminal en Mac, PowerShell en Windows).
1. Clona e instala el proyecto
Abre tu terminal y ejecuta estos 3 comandos:
git clone https://github.com/victorgxn/empiezatusaas-boilerplate.git mi-saas
cd mi-saas
npm installgit clone— descarga el código del boilerplate en una carpeta llamadami-saas(puedes cambiar el nombre)cd mi-saas— entra en la carpeta del proyectonpm install— instala todas las dependencias (tarda 1-2 minutos)
Si npm install da errores de dependencias, usa npm install --legacy-peer-deps.
2. Configura las variables de entorno
Copia el archivo de ejemplo:
cp .env.example .envEsto crea un archivo .env con todas las variables que necesitas rellenar. Vamos una por una.
3. Base de datos (Neon)
Necesitas una base de datos PostgreSQL. Usaremos Neon porque es gratis y se configura en 1 minuto.
Crea una cuenta en Neon
Ve a neon.tech y regístrate (puedes usar tu cuenta de GitHub).
Crea un nuevo proyecto
Haz click en "Create project". Ponle el nombre que quieras (ej: mi-saas).
Copia el connection string
Neon te mostrará un connection string que empieza por postgresql://. Cópialo entero.
Pégalo en tu .env
Abre el archivo .env y busca la línea DATABASE_URL. Pega tu connection string:
DATABASE_URL="postgresql://tu-usuario:tu-password@ep-xxx.region.aws.neon.tech/neondb?sslmode=require"4. Auth secret
Better Auth necesita un secreto para firmar los tokens de sesión. Genera uno ejecutando esto en tu terminal:
openssl rand -base64 32Copia el resultado y pégalo en tu .env:
BETTER_AUTH_SECRET="el-string-que-te-generó-openssl"
BETTER_AUTH_URL=http://localhost:30005. Crea las tablas en la base de datos
Ejecuta estos 2 comandos para crear las tablas que necesita el proyecto:
npx prisma generate
npx prisma db pushprisma generate— genera el cliente de Prisma para que tu código pueda hablar con la base de datosprisma db push— crea las tablas:User,Session,Account,VerificationySubscription
¿Atascado? Pasa capturas de tu error a ChatGPT o pregunta en el Discord de EmpiezaTuSaaS.
6. Arranca el proyecto
npm run devAbre http://localhost:3000 en tu navegador. Deberías ver tu landing page funcionando.
Ya tienes la landing page, la base de datos y la autenticación básica (email/password) funcionando. Los siguientes pasos son opcionales pero recomendados.
7. Google OAuth (login con Google)
Crea un proyecto en Google Cloud
- Ve a Google Cloud Console
- Crea un proyecto nuevo (o usa uno existente)
- Ve a Credentials → Create Credentials → OAuth client ID
- Tipo: Web application
Configura las URLs
Authorized JavaScript origins:
http://localhost:3000
Authorized redirect URIs:
http://localhost:3000/api/auth/callback/googleAñade las credenciales a tu .env
GOOGLE_CLIENT_ID="tu-client-id.apps.googleusercontent.com"
GOOGLE_CLIENT_SECRET="tu-client-secret"Prueba el login
- Ve a http://localhost:3000
- Click en "Iniciar sesión"
- Click en "Continuar con Google"
- Deberías ver la página de pricing (necesitas pagar para acceder al dashboard)
¿Atascado? Pasa capturas de tu error a ChatGPT o pregunta en el Discord de EmpiezaTuSaaS.
8. Pagos con Stripe
Tip: Si usas Cursor, Windsurf o Claude Code, puedes instalar el MCP de Stripe para crear productos, precios y webhooks directamente desde tu editor con IA — sin tocar el dashboard.
Obtén tus claves de Stripe
- Ve a dashboard.stripe.com
- Activa el modo test (toggle arriba a la derecha)
- Ve a Developers → API keys
- Copia la Publishable key y Secret key
Crea tus productos
En Stripe Dashboard → Products → Add product:
| Producto | Precio | Tipo |
|---|---|---|
| Starter | 49 EUR | One-time (pago único) |
| Pro | 99 EUR | One-time (pago único) |
| Lifetime | 199 EUR | One-time (pago único) |
Copia los Price IDs de cada producto (empiezan con price_).
Configura el webhook
- Ve a Developers → Webhooks → Add endpoint
- URL:
https://tu-dominio.vercel.app/api/stripe/webhooks - Eventos:
checkout.session.completed,customer.subscription.created,customer.subscription.updated,customer.subscription.deleted,invoice.paid,invoice.payment_failed - Copia el Webhook signing secret
Para desarrollo local usa Stripe CLI:
stripe listen --forward-to localhost:3000/api/stripe/webhooksAñade las variables de Stripe a tu .env
STRIPE_SECRET_KEY=sk_test_...
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PRICE_ID_STARTER=price_...
STRIPE_PRICE_ID_PRO=price_...
STRIPE_PRICE_ID_LIFETIME=price_...Prueba un pago
- Inicia sesión en tu app
- Verás la página de pricing (paywall)
- Elige un plan y usa la tarjeta de prueba:
4242 4242 4242 4242(cualquier fecha futura, cualquier CVC) - Después de pagar, verás el dashboard completo
¿Atascado? Pasa capturas de tu error a ChatGPT o pregunta en el Discord de EmpiezaTuSaaS.
9. Emails con Resend
Obtén tu API key
- Ve a resend.com y crea una cuenta
- Ve a API Keys → Create API Key
- Copia la key
Verifica tu dominio
- En Resend, ve a Domains → Add Domain
- Escribe tu dominio (ej:
tusaas.com) - Resend te dará registros DNS (TXT y MX) — añádelos en tu proveedor de dominio (Cloudflare, Namecheap, etc.)
- Espera a que se verifique (puede tardar unos minutos)
Añade las variables a tu .env
RESEND_API_KEY=re_...Configura los emails en tu app
Edita config/site.ts con los emails de tu dominio verificado:
supportEmail: "soporte@tusaas.com", // Donde recibes notificaciones
noReplyEmail: "noreply@tusaas.com", // Remitente de emails automáticosEn desarrollo puedes usar delivered@resend.dev como remitente sin verificar dominio. Para producción necesitas tu dominio verificado.
¿Atascado? Pasa capturas de tu error a ChatGPT o pregunta en el Discord de EmpiezaTuSaaS.
10. Personaliza tu marca
Edita config/site.ts con los datos de tu proyecto:
export const siteConfig = {
name: "Tu SaaS",
description: "La descripción de tu producto",
domain: "tusaas.com",
url: process.env.NEXT_PUBLIC_APP_URL || "https://tusaas.com",
supportEmail: "soporte@tusaas.com",
noReplyEmail: "noreply@tusaas.com",
};Checklist final
| Paso | Verificación |
|---|---|
| Proyecto clonado | npm run dev funciona sin errores |
| Base de datos | Neon conectado, tablas creadas |
| Auth | Login con Google funciona |
| Paywall | Después de login ves la página de pricing |
| Pagos | Pago con tarjeta test 4242 4242 4242 4242 funciona |
| Dashboard | Después de pagar ves el dashboard |
| Emails | Recibes email de bienvenida al registrarte |
¿Atascado? Pasa capturas de tu error a ChatGPT o pregunta en el Discord de EmpiezaTuSaaS.