Cargando la bóveda…
Cargando la bóveda…
Boilerplate moderno con Next.js 16, auth (Clerk o Supabase), pagos (Stripe + Mercado Pago), Postgres con Drizzle, panel admin, y endpoints de IA con Claude integrados. De clone a deploy en menos de 30 minutos.
Un template Next.js que tiene resueltas las piezas que siempre tenés que armar de nuevo cuando empezás un SaaS:
Lo que NO incluye: tu producto. Eso lo ponés vos. Pero la base está lista para que el día 1 te concentres en la lógica de negocio, no en repetir el setup de Stripe webhooks otra vez.
npx create-nucleo-saas mi-app
cd mi-app
cp .env.example .env.localEl wizard te va a preguntar:
.env.local mínimo viable:
# Database
DATABASE_URL="postgres://..."
# Auth (uno de los dos)
CLERK_SECRET_KEY="sk_test_..."
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY="pk_test_..."
# o
NEXT_PUBLIC_SUPABASE_URL="..."
SUPABASE_SERVICE_ROLE_KEY="..."
# Pagos
STRIPE_SECRET_KEY="sk_test_..."
STRIPE_WEBHOOK_SECRET="whsec_..."
MERCADOPAGO_ACCESS_TOKEN="APP_USR-..." # opcional
# Email
RESEND_API_KEY="re_..."
# IA
ANTHROPIC_API_KEY="sk-ant-..."Si seleccionaste Stripe en el wizard, el .env.example tiene solo las variables de Stripe. Lo mismo para los otros providers. No vas a tener que andar averiguando qué dejar y qué borrar.
npm install
npm run db:push # corre las migraciones iniciales
npm run devAndá a http://localhost:3000 y vas a ver el landing del template. /sign-up para crear el primer usuario, que automáticamente queda como admin.
app/ — rutas#app/
├── (marketing)/ # landing, pricing, blog (estático rápido)
├── (auth)/ # sign-in, sign-up, reset
├── (dashboard)/ # app autenticada
│ ├── overview/
│ ├── settings/
│ ├── billing/
│ └── team/ # solo si activaste multi-tenant
├── (admin)/ # panel admin (solo role=admin)
└── api/
├── webhooks/ # Stripe, MP, Clerk webhooks listos
└── ai/ # endpoints IA con cachinglib/ — lógica#lib/
├── db/ # schema Drizzle + queries comunes
├── auth/ # helpers de auth, abstracción del provider
├── payments/ # checkout, subscriptions, webhooks
├── ai/ # client Claude con prompt caching y retries
├── email/ # templates React Email
└── jobs/ # background jobs (Inngest opcional)El template viene con un endpoint base que ya tiene cosas resueltas:
// app/api/ai/chat/route.ts (resumido)
export async function POST(req: Request) {
const user = await requireUser()
await checkRateLimit(user.id, 'ai-chat')
const { messages } = await req.json()
const response = await anthropic.messages.create({
model: 'claude-sonnet-4-6',
max_tokens: 2000,
system: [
{ type: 'text', text: SYSTEM_PROMPT, cache_control: { type: 'ephemeral' } }
],
messages,
})
await logUsage(user.id, response.usage)
return Response.json({ message: response.content[0] })
}Cosas que ya están resueltas:
Para hacer tu propio endpoint, copiá este y reemplazá el SYSTEM_PROMPT.
El template trae 3 tiers configurados en Stripe (test mode):
Editá los precios reales en lib/payments/plans.ts. La lógica de gates (qué feature está en qué tier) está en lib/payments/feature-gates.ts.
npm i -g vercel
vercelConfigurá las variables de entorno en el dashboard de Vercel. La DB tiene que estar en otro lado (Supabase, Neon, Railway).
docker compose upEl docker-compose.yml incluye Postgres + app. Listo para Railway, Fly.io, o tu VPS.
Próximas versiones (v2.2 y siguientes):
PRs bienvenidos. Repo público con licencia MIT.