LastSaaS
Plantilla / kit de inicio SaaS: completo, facturación con Stripe, gestión de productos, multiinquilino; controles agentivos mediante MCP
Documentación
LastSaaS
El último boilerplate SaaS que necesitarás.
LastSaaS es una base SaaS completa y lista para producción, construida enteramente mediante conversación con Claude Code. Te ofrece gestión de cuentas multi-tenant, autenticación, control de acceso basado en roles, marca blanca, facturación con Stripe, claves API, webhooks salientes, una interfaz de administración completa, monitoreo de salud del sistema, seguimiento de uso basado en créditos y analítica de producto con telemetría — todo lo que necesitas para lanzar un negocio SaaS, listo para personalizar según tu producto específico.
El cuello de botella para construir software ya no es la capacidad de ingeniería — es la imaginación. LastSaaS lo demuestra: una sola persona con una visión clara y un agente de IA puede levantar lo que antes requería un equipo y meses de trabajo. Y como fue construido con Claude Code, el código está listo para bifurcarse para ingeniería agéntica — apunta un agente de IA hacia él y sigue construyendo tu producto mediante conversación.
Por Qué Existe LastSaaS
Todo producto SaaS necesita la misma base aburrida: cuentas de usuario, equipos, roles, autenticación, paneles de administración, facturación, límites de uso, marca, webhooks, claves API. Históricamente, construir esa base significaba semanas de trabajo de plomería antes de poder escribir una sola línea de tu producto real.
LastSaaS elimina eso. Haz un fork, apunta un agente de IA hacia él y comienza a construir tu producto sobre una base que ya maneja:
- Aislamiento multi-tenant con acceso basado en roles
- Autenticación JWT con rotación de tokens de refresco
- Integración OAuth con Google, GitHub y Microsoft
- Autenticación sin contraseña mediante magic links
- MFA/TOTP con códigos de recuperación
- Verificación de correo electrónico y restablecimiento de contraseñas
- Invitaciones a equipos y gestión de miembros
- Facturación con Stripe: suscripciones, precios por asiento, pruebas gratuitas y paquetes de créditos
- Derechos de plan y middleware de aplicación de facturación
- Marca blanca con temas personalizados, logotipos, páginas de aterrizaje y páginas personalizadas
- Autenticación con claves API (ámbitos de administrador y usuario)
- Webhooks salientes con 19 tipos de eventos y firma HMAC-SHA256
- Seguimiento de uso basado en créditos (suscripción + paquetes comprados)
- Códigos de promoción y gestión de cupones mediante Stripe
- Panel de analítica de producto (embudo de conversión, KPIs, cohortes de retención, métricas de participación)
- Sistema de eventos de telemetría con SDK de Go y API REST para seguimiento de eventos personalizados
- Una interfaz de administración completa para gestionarlo todo
- Documentación de API integrada (HTML y Markdown)
- Monitoreo de salud del sistema en tiempo real
- Panel de métricas financieras (ingresos, ARR, DAU, MAU)
- Servidor MCP (Model Context Protocol) para acceso administrativo impulsado por IA
- Herramientas CLI para administración del servidor
- Auto-versionado con migraciones de base de datos
- Despliegue de producción en Fly.io
Esta es infraestructura de código abierto para la era agéntica del software — donde la persona con la idea también es quien la lanza. El código sigue patrones consistentes que los agentes de IA navegan con fluidez, para que puedas seguir evolucionándolo de la misma manera en que fue construido.
Cómo Se Compara
Si estás evaluando boilerplates SaaS, probablemente has visto ShipFast, Supastarter, MakerKit, SaaS Pegasus y Gravity. Aquí está por qué los fundadores técnicos eligen LastSaaS en su lugar.
Gratis y de código abierto. ShipFast cuesta $169, MakerKit va de $199 a $599, Supastarter comienza en $299, SaaS Pegasus cobra $249/año y Gravity está por debajo de $1K. LastSaaS tiene licencia MIT — haz un fork, lánzalo, nunca pagues una tarifa de licencia. Eres dueño del código por completo.
Backend en Go, no otro proyecto Next.js. ShipFast, Supastarter, MakerKit y Gravity son todos stacks de JavaScript/TypeScript. SaaS Pegasus usa Django. LastSaaS combina un backend en Go con un frontend de React + TypeScript — lo que te da despliegue de binarios compilados, bajo uso de memoria (un contenedor Alpine de 14MB) y el modelo de concurrencia por el que Go es conocido. Si tu SaaS manejará tráfico real o quieres un backend que no sea un monolito de Node.js, esto importa.
Multi-tenencia genuina. ShipFast no tiene multi-tenencia en absoluto. SaaS Pegasus y Gravity ofrecen funciones básicas de equipos pero no un aislamiento de tenant real. LastSaaS te da una arquitectura multi-tenant completa: aislamiento de datos por tenant, RBAC de tres niveles (propietario/administrador/usuario), invitaciones a equipos, transferencia de propiedad, registros de actividad por tenant y facturación por tenant. Esta es la diferencia entre "los usuarios pueden colaborar" y "cada cliente tiene su propio espacio de trabajo aislado".
Marca blanca integrada. La mayoría de los boilerplates te dan un interruptor de tema como máximo. LastSaaS incluye un sistema completo de marca blanca: nombre de aplicación personalizado, logotipo, colores, fuentes, página de aterrizaje, páginas personalizadas, inyección de CSS, favicon, navegación configurable con control de derechos y personalización de páginas de autenticación. Si estás construyendo una plataforma donde los clientes ven tu marca (no la tuya más un framework), esto ahorra semanas.
Webhooks salientes, no solo webhooks de Stripe. Ninguna de las alternativas — ShipFast, Supastarter, MakerKit, SaaS Pegasus o Gravity — incluye un sistema de webhooks salientes. LastSaaS incluye 19 tipos de eventos en facturación, ciclo de vida de equipos, ciclo de vida de usuarios, créditos y eventos de seguridad, con firma HMAC-SHA256, seguimiento de entrega y eventos de prueba. Tus clientes pueden integrarse con tu plataforma desde el primer día.
Claves API con acceso por ámbito. ShipFast, Supastarter y MakerKit no incluyen gestión de claves API. LastSaaS proporciona claves API con prefijo lsk_ y ámbitos de autoridad de administrador y usuario, almacenamiento con hash SHA-256 y seguimiento de último uso — listas para que tus clientes construyan integraciones.
Monitoreo de salud y paneles financieros. Ningún boilerplate competidor incluye monitoreo de salud del sistema. LastSaaS recopila métricas de CPU, memoria, disco, HTTP y MongoDB cada 60 segundos en todos los nodos, con 8 gráficos en tiempo real, alertas de umbral y retención de 30 días. El panel financiero te da series temporales de ingresos, ARR, DAU y MAU listas para usar.
Analítica de producto con telemetría. Ningún boilerplate competidor incluye analítica de producto. LastSaaS instrumenta automáticamente el recorrido del cliente — visitante → registro → página de planes → checkout → conversión de pago → actualización — y lo visualiza como un embudo de conversión. El panel de PM incluye KPIs SaaS (MRR, ARR, ARPU, LTV, tasa de abandono, conversión de pruebas), análisis de cohortes de retención, métricas de participación (DAU/WAU/MAU para suscriptores de pago) y un explorador de eventos personalizados. Un SDK de Go y una API REST te permiten rastrear tus propios eventos con cero configuración.
Servidor MCP para operaciones nativas de IA. Esto es único de LastSaaS. Un servidor integrado de Model Context Protocol con 32 herramientas de solo lectura te permite conectar Claude (o cualquier IA compatible con MCP) directamente a tu aplicación en ejecución. Consulta tu tendencia de ARR, investiga picos de errores, audita claves API o revisa la salud del sistema — todo en lenguaje natural. Ningún otro boilerplate SaaS ofrece acceso administrativo agéntico.
Construido para desarrollo asistido por IA. LastSaaS fue construido enteramente mediante conversación con Claude Code, y el código está diseñado para seguir construyéndose de esa manera. Patrones consistentes, nombres claros y una estructura que los agentes de IA navegan con fluidez. Haz un fork, apunta un agente hacia él, describe tu producto y continúa. Los boilerplates competidores fueron construidos para desarrollo manual — LastSaaS está construido para la forma en que se hace software hoy.
| LastSaaS | ShipFast | Supastarter | MakerKit | Pegasus | Gravity | |
|---|---|---|---|---|---|---|
| Precio | Gratis (MIT) | $169 | $299+ | $199–599 | $249/año | <$1K |
| Stack | Go + React | Next.js | Next.js / Nuxt | Next.js | Django | Node + React |
| Multi-Tenencia | RBAC completo | — | ✓ | ✓ | Solo equipos | Solo equipos |
| Marca Blanca | Completa | — | Parcial | Parcial | — | — |
| Webhooks | 19 eventos | — | — | — | — | — |
| Claves API | Con ámbito | — | — | — | Básica | — |
| Monitoreo de Salud | 8 gráficos | — | — | — | — | — |
| Analítica de Producto | Panel PM de 5 pestañas | — | — | — | — | — |
| Sistema de Créditos | Dos paquetes | — | — | Básico | — | — |
| Servidor MCP | 26 herramientas | — | — | — | — | — |
| Panel de Administración | Completo | — | ✓ | ✓ | ✓ | Básico |
| Facturación Stripe | Completa | ✓ | ✓ | ✓ | ✓ | ✓ |
Características
Autenticación e Identidad
- Registro con correo/contraseña con hash bcrypt
- Verificación de correo electrónico mediante Resend
- OAuth con Google, GitHub y Microsoft con vinculación automática de cuentas
- Inicio de sesión sin contraseña mediante magic links por correo
- Autenticación de dos factores MFA/TOTP con asistente de configuración
- Códigos de recuperación para acceso de respaldo de MFA
- Tokens de acceso JWT (30 min) + tokens de refresco (7 días) con rotación
- Bloqueo de cuenta después de intentos de inicio de sesión fallidos
- Flujo de restablecimiento de contraseña con tokens seguros
- Aplicación de fortaleza de contraseña
- Gestión de sesiones — lista de sesiones activas, revocación individual o de todas las sesiones
- Revocación de sesiones al cambiar la contraseña
Multi-Tenencia
- Tenant raíz (administrador del sistema) + tenants de clientes
- Los usuarios pertenecen a tenants mediante membresías
- Roles: propietario, administrador, usuario con permisos jerárquicos
- Invitaciones a equipos con notificaciones por correo
- Transferencia de propiedad entre miembros
- Registro de actividad por tenant
- Autoservicio de configuración del tenant
Facturación y Créditos (Stripe)
- Planes de suscripción con facturación mensual y anual (porcentaje de descuento anual configurable)
- Modelos de precios: tarifa plana o por asiento (con asientos incluidos, límites mín/máx de asientos)
- Pruebas gratuitas con días de prueba configurables por plan y prevención de abuso de pruebas
- Paquetes de créditos para compras únicas
- Dos paquetes de créditos: créditos de suscripción (se restablecen o acumulan) + créditos comprados
- Stripe Checkout (basado en redirección) para el cobro de pagos
- Portal de Facturación de Stripe para autoservicio del cliente (métodos de pago, facturas)
- Soporte multi-moneda con moneda predeterminada configurable
- Stripe Tax cálculo automático de impuestos
- Códigos de promoción y cupones — crea y gestiona mediante la interfaz de administración, vinculados a Stripe
- Generación de facturas — números de factura secuenciales, descarga en PDF, desglose de impuestos
- Historial de transacciones — por tenant y a nivel de administración con búsqueda y filtros
- Métricas financieras — series temporales de ingresos, ARR, DAU, MAU con gráficos
- Middleware de aplicación de facturación — bloquea suscripciones vencidas de funciones de pago
- Middleware de derechos — controla funciones según el plan (derechos booleanos y numéricos)
- Exención de facturación para cuentas especiales (tenant raíz, cuentas de demostración)
- Gestión de suscripciones por administrador — cancelar, modificar, reasignar planes
- Manejo de reembolsos y disputas — manejadores de webhook para
charge.refunded,charge.dispute.created,charge.dispute.closed
Marca Blanca
- Nombre de aplicación personalizado, eslogan y logotipo (modos de texto, imagen o ambos)
- Colores de tema (primario, acento, fondo, superficie, texto) con paletas de tonos generadas automáticamente
- Fuentes personalizadas (cuerpo y encabezados)
- Página de aterrizaje personalizada con HTML configurable
- Páginas personalizadas servidas en
/p/{slug}con metadatos SEO - Inyección de CSS personalizado
- Inyección de HTML en el encabezado (analítica, metaetiquetas)
- Carga de favicon
- Biblioteca de medios para gestión de imágenes/recursos
- Barra lateral de navegación configurable con elementos controlados por derechos
- Personalización de páginas de autenticación (encabezados y subtítulos de inicio de sesión/registro)
- Personalización de HTML del panel
- Soporte de imagen Open Graph
Claves API
- Crea claves API con prefijo
lsk_ - Dos niveles de autoridad: administrador (resuelve automáticamente al tenant raíz) y usuario (requiere X-Tenant-ID)
- Almacenamiento con hash SHA-256 — la clave cruda se muestra solo en la creación
- Seguimiento de marca de tiempo de último uso
- Interfaz de administración para gestión de claves
- Soporta autenticación tanto con JWT como con claves API en todos los endpoints
Webhooks salientes
- 19 tipos de eventos en 5 niveles:
- Facturación: subscription.activated, subscription.canceled, payment.received, payment.failed
- Ciclo de vida del equipo: member.invited, member.joined, member.removed, member.role_changed, ownership.transferred
- Ciclo de vida del usuario: user.registered, user.verified, user.deactivated
- Créditos y facturación: credits.purchased, plan.changed, tenant.created, tenant.deactivated
- Auditoría y seguridad: user.deleted, tenant.deleted, api_key.created, api_key.revoked
- Firma de payload HMAC-SHA256 con secretos con prefijo
whsec_ - Seguimiento de entrega con códigos de respuesta, cuerpos de respuesta y duración
- Entrega de eventos de prueba
- Regeneración de secretos
- Filtrado por tipo de evento por webhook
Interfaz de administración
- Panel de control con recuentos de usuarios/tenants, resumen de salud y métricas de negocio
- Gestión de usuarios — listar, buscar, ver perfiles, editar, suspender, suplantar, eliminar con verificación previa de propiedad
- Gestión de tenants — listar, ver, editar, asignación de planes, control de estado, gestión de suscripciones
- Resumen financiero — historial de transacciones de todos los tenants, gráficos de ingresos/ARR/DAU/MAU
- Analítica de producto — embudo de conversión, KPIs SaaS, cohortes de retención, métricas de engagement, explorador de eventos personalizados
- Gestión de planes — crear, editar, archivar, derechos, configuración por asiento, días de prueba
- Gestión de paquetes de créditos — crear, editar, ordenar, activar/desactivar
- Promociones — crear y gestionar códigos de promoción y cupones de Stripe
- Editor de marca — colores de tema, logotipos, fuentes, página de aterrizaje, páginas personalizadas, CSS, navegación
- Gestión de claves API — crear, ver, revocar
- Gestión de webhooks — crear, editar, eliminar, probar, ver historial de entrega
- Anuncios — publicar anuncios a nivel de sistema
- Visor de registros del sistema con filtrado por severidad, búsqueda y filtrado por usuario
- Editor de variables de configuración (cadenas, números, enums, plantillas)
- Mensajería en la aplicación — enviar mensajes a usuarios individuales
- Miembros raíz — gestionar el equipo de administración con invitaciones y cambios de rol
- Exportación CSV para usuarios y tenants
- Suplantación de administrador — iniciar sesión como cualquier usuario para depuración
- Monitoreo de salud del sistema (ver más abajo)
- Verificaciones de salud de integraciones — estado de MongoDB, Stripe, Resend, Google OAuth
- Acceso de administración en tres niveles: usuario (solo lectura), admin (lectura-escritura), propietario (operaciones destructivas)
Monitoreo de salud del sistema
- Registro automático de nodos con heartbeat (intervalo de 30s)
- Recopilación de métricas cada 60s: CPU, memoria, disco, red, estadísticas de solicitudes HTTP, estadísticas de MongoDB, runtime de Go
- Middleware de métricas HTTP con seguimiento de latencia percentil (p50/p95/p99)
- Alertas basadas en umbrales (niveles de advertencia/crítico configurables)
- Retención automática de datos de 30 días mediante índices TTL de MongoDB
- Panel en tiempo real con 8 gráficos de series temporales (Recharts)
- Modos de agregado, superposición de todos los nodos y filtro de nodo único
- Selección de rango de tiempo: 1h, 6h, 24h, 7d, 30d
- Panel de salud de integraciones (conectividad de MongoDB, Stripe, Resend, Google OAuth)
Analítica de producto y telemetría
- Embudo de conversión — Visitantes → Registros → Vistas de página de planes → Checkouts → Conversiones pagadas → Mejoras, con tasas de conversión en cada paso
- KPIs SaaS — MRR, ARR, ARPU, LTV, tasa de abandono, tasa de conversión de prueba a pago, mediana de tiempo hasta la primera compra, recuento de suscriptores activos
- Cohortes de retención — tabla de retención de cohortes semanal o mensual con mapa de calor codificado por colores (rastrea
lastLoginAta lo largo del tiempo) - Métricas de engagement — DAU/WAU/MAU para suscriptores de pago, sesiones promedio por usuario, principales funciones por uso, tendencia de consumo de créditos
- Explorador de eventos personalizados — navegar por todos los tipos de eventos, ver gráficos de tendencia, filtrar por nombre y rango de tiempo
- SDK de telemetría Go —
telemetry.Track()/TrackBatch()/TrackPageView()/TrackCheckoutStarted()/TrackLogin()para registro directo de eventos en proceso (sin sobrecarga HTTP) - API REST de telemetría —
POST /telemetry/track(anónimo, con límite de velocidad) para vistas de página;POST /telemetry/eventsy/telemetry/events/batch(autenticado) para eventos personalizados - Auto-instrumentación — registro, verificación de correo electrónico, inicio de sesión, checkout, activación/cancelación de suscripción y cambios de plan se rastrean automáticamente
- Retención de 365 días — los eventos de telemetría caducan automáticamente mediante índice TTL de MongoDB
- Límite de velocidad — 60 req/min por IP para seguimiento anónimo, 120 req/min por usuario para eventos autenticados
Autoservicio del usuario
- Edición de perfil (nombre para mostrar, correo electrónico)
- Preferencia de tema (claro/oscuro)
- Gestión de contraseña
- Configuración y gestión de MFA
- Visor de sesiones con revocación remota
- Eliminación de cuenta con limpieza de datos
- Exportación de datos (compatible con GDPR)
- Gestión de facturación (selección de plan, compras de créditos, historial de facturas, descarga de PDF)
- Flujo de incorporación
Documentación de API integrada
- Referencia de API HTML interactiva en
/api/docscon detalles de endpoint expandibles - Referencia de API en Markdown en
/api/docs/markdownpara integración en documentación externa - Referencia completa de eventos de webhook con descripciones de payload
- Auto-versionada desde el archivo VERSION
Administración CLI
lastsaas setup— Inicializar el sistema (crear tenant raíz + propietario)lastsaas start/stop/restart— Gestión de procesos del servidorlastsaas change-password— Restablecer la contraseña de cualquier usuariolastsaas send-message— Enviar mensajes del sistema a los usuarioslastsaas transfer-root-owner— Transferir la propiedad del tenant raízlastsaas config list|get|set— Gestionar variables de configuraciónlastsaas version— Mostrar versiones del binario y de la base de datoslastsaas status— Verificar la salud del sistemalastsaas mcp— Iniciar el servidor MCP (ver Servidor MCP más abajo)
Servidor MCP (Acceso de administración con IA)
Un servidor Model Context Protocol integrado brinda a asistentes de IA como Claude acceso de solo lectura a tus datos de administración: paneles, usuarios, tenants, finanzas, registros, salud y más. Útil para hacer preguntas como "¿cuál es nuestra tendencia de ARR?" o "muéstrame registros críticos de la última hora" en lenguaje natural.
- 32 herramientas de solo lectura en 14 categorías — sin operaciones de escritura, seguro por diseño
- 2 recursos —
lastsaas://dashboardylastsaas://healthpara contexto automático - Autenticación con clave API — requiere una clave API de tenant raíz, misma autenticación que la API de administración
- Transporte Stdio — se ejecuta localmente, compatible con Claude Desktop y Claude Code
Categorías de herramientas:
- Acerca de — versión del software y entorno
- Panel — recuentos de usuarios/tenants, resumen de salud
- Tenants — listar con filtrado, vista detallada con miembros
- Usuarios — listar con búsqueda, vista detallada con métodos de autenticación y membresías
- Finanzas — historial de transacciones, métricas de series temporales de ingresos/ARR/DAU/MAU
- Registros — búsqueda de texto completo con filtros de severidad/categoría/fecha, recuentos de severidad
- Salud — métricas actuales del sistema, datos de salud de series temporales, lista de nodos, estado de integraciones
- Configuración — listar e inspeccionar variables de configuración en tiempo de ejecución
- Planes — detalles de planes, claves de derechos, paquetes de créditos
- Anuncios — listar anuncios publicados y borradores
- Promociones — códigos de promoción de Stripe con detalles de cupones
- Seguridad — inventario de claves API (solo vistas previas), miembros del tenant raíz
- Webhooks — configuraciones de webhook, referencia de tipos de eventos, historial de entrega
Seguridad
- Encabezados de seguridad (CSP, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
- Límite de velocidad en endpoints de autenticación
- Límites de tamaño del cuerpo de solicitud
- Protección contra inyección NoSQL (escape de entrada de regex)
- Protección XSS mediante DOMPurify para HTML inyectado
- Resolución de IP de proxy de confianza (Fly-Client-IP)
- Verificación de firma de webhook (entrante de Stripe, saliente HMAC-SHA256)
- Procesamiento de webhook idempotente mediante índice único de ID de evento
- Detección de inyección en registros del sistema con alertas críticas automáticas
- Rotación de tokens de actualización con revocación basada en familia
Listo para producción
- Compilación multi-etapa con Docker (Go + Node + Alpine)
- Despliegue en Fly.io con máquinas de auto-stop/auto-start
- Servicio de SPA desde el binario de Go (sin necesidad de servidor web separado)
- CORS, encabezados de seguridad, límite de velocidad
- Apagado elegante con drenaje de conexiones
- Auto-versionado con migración de base de datos al inicio
- Mensajes de notificación de versión a usuarios administradores después de actualizaciones
Pila tecnológica
| Capa | Tecnología |
|---|---|
| Backend | Go 1.25, gorilla/mux |
| Frontend | React 19, TypeScript, Vite 7, Tailwind CSS 4 |
| Base de datos | MongoDB (Atlas o local) |
| Autenticación | JWT (acceso + actualización), bcrypt, Google/GitHub/Microsoft OAuth, Magic Links, TOTP MFA |
| Facturación | Stripe (stripe-go v82) — Checkout, Billing Portal, Webhooks, Tax |
| Correo electrónico | Resend |
| Gráficos | Recharts |
| Métricas | gopsutil v4 |
| gofpdf (generación de facturas) | |
| Seguridad | DOMPurify (frontend), HMAC-SHA256 (webhooks) |
| Despliegue | Docker, Fly.io |
Requisitos previos
- Go 1.25+ — instalar
- Node.js 22+ — instalar
- MongoDB — ya sea:
- MongoDB Atlas (el nivel gratuito M0 funciona bien)
- Edición comunitaria local de MongoDB
- Git
Opcional
- Clave API de Resend — para verificación de correo electrónico, restablecimiento de contraseñas e invitaciones
- Credenciales de Google OAuth — para inicio de sesión con Google
- Credenciales de GitHub OAuth — para inicio de sesión con GitHub
- Credenciales de Microsoft OAuth — para inicio de sesión con Microsoft
- Cuenta de Stripe — para facturación (suscripciones, compras de créditos, facturas)
- Cuenta de Fly.io — para despliegue en producción
Inicio rápido
1. Clonar el repositorio
git clone https://github.com/jonradoff/lastsaas.git
cd lastsaas
2. Ejecutar el script de configuración
./scripts/setup.sh
Esto te pedirá:
- Nombre de la base de datos — la identidad del proyecto (dos proyectos que comparten un nombre comparten la misma base de usuarios)
- URI de MongoDB — tu cadena de conexión de Atlas o
mongodb://localhost:27017 - Secretos JWT — generados automáticamente
- Credenciales de Google OAuth — opcional, presiona Enter para omitir
- Clave API de Resend — opcional, presiona Enter para omitir
- Nombre de la aplicación y configuración de correo electrónico
Escribe un archivo .env y copia la plantilla de configuración.
3. Iniciar el backend
set -a && source .env && set +a
cd backend
go run ./cmd/server
El servidor se inicia en http://localhost:4290.
4. Iniciar el frontend
En una terminal separada:
set -a && source .env && set +a
cd frontend
npm install
npm run dev
El frontend se inicia en http://localhost:4280.
5. Inicializar el sistema
Ejecuta la configuración CLI para crear el tenant raíz y la cuenta de administrador:
cd backend
go run ./cmd/lastsaas setup
Esto crea el tenant raíz (tu organización de administración) y la cuenta de propietario. Ahora puedes iniciar sesión en http://localhost:4280.
Configuración de facturación de Stripe
La integración de Stripe es opcional pero necesaria para suscripciones de pago, compras de paquetes de créditos y generación de facturas. Si omites esta sección, LastSaaS funciona como una plataforma solo de nivel gratuito.
1. Crear una cuenta de Stripe
Regístrate en stripe.com y completa la incorporación. Puedes usar el modo de prueba durante el desarrollo.
2. Obtener tus claves API
Ve a Panel de Stripe → Desarrolladores → Claves API y copia:
- Clave publicable (comienza con
pk_test_opk_live_) - Clave secreta (comienza con
sk_test_osk_live_)
3. Crear un endpoint de webhook
Ve a Panel de Stripe → Desarrolladores → Webhooks → Agregar endpoint:
- URL del endpoint:
https://your-domain.com/api/billing/webhook- Para desarrollo local con la CLI de Stripe:
stripe listen --forward-to localhost:4290/api/billing/webhook
- Para desarrollo local con la CLI de Stripe:
- Eventos a los que suscribirse — selecciona estos 8 eventos:
checkout.session.completedinvoice.paidinvoice.payment_failedcustomer.subscription.updatedcustomer.subscription.deletedcharge.refundedcharge.dispute.createdcharge.dispute.closed
Después de crear el endpoint, copia el secreto de firma (comienza con whsec_).
4. Establecer variables de entorno
Agrega estas a tu archivo .env:
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
5. Crear planes en la interfaz de administración
Una vez que el backend esté en ejecución con Stripe configurado:
- Inicia sesión como propietario del tenant raíz
- Ve a Admin → Planes y crea tus planes de suscripción
- Configura precios, intervalos de facturación, días de prueba, derechos (entitlements) y asignaciones de crédito
- Opcionalmente crea paquetes de crédito en Admin → Paquetes de Crédito
- Opcionalmente crea códigos de promoción en Admin → Promociones
Los Productos y Precios de Stripe se crean automáticamente cuando los clientes finalizan la compra: no necesitas configurar nada en el Panel de Stripe más allá de las claves de API y el webhook.
6. Puesta en producción
Cuando estés listo para producción:
- Cambia a modo en vivo en el Panel de Stripe
- Crea un nuevo endpoint de webhook con tu URL de producción y los mismos 8 eventos
- Actualiza tus variables de entorno de producción con las claves en vivo y el secreto del webhook
Configuración
Los archivos de configuración se encuentran en backend/config/:
dev.example.yaml/prod.example.yaml— plantillas versionadasdev.yaml/prod.yaml— tus configuraciones reales (ignoradas por git)
Configura LASTSAAS_ENV=dev o LASTSAAS_ENV=prod para seleccionar qué configuración cargar. El valor predeterminado es dev.
Los secretos se referencian como ${ENV_VAR} en YAML y se expanden desde variables de entorno al momento de la carga. Los valores predeterminados usan la sintaxis ${VAR:default}.
Variables de Entorno
| Variable | Requerida | Descripción |
|---|---|---|
DATABASE_NAME | Sí | Identidad del proyecto: nombre compartido = base de usuarios compartida |
MONGODB_URI | Sí | Cadena de conexión de MongoDB |
JWT_ACCESS_SECRET | Sí | Secreto para firmar tokens de acceso |
JWT_REFRESH_SECRET | Sí | Secreto para firmar tokens de actualización |
FRONTEND_URL | Sí | URL del frontend para CORS y enlaces de correo |
APP_NAME | Sí | Nombre de tu aplicación (usado en correos, interfaz) |
STRIPE_SECRET_KEY | No | Clave API secreta de Stripe |
STRIPE_PUBLISHABLE_KEY | No | Clave publicable de Stripe (enviada al frontend) |
STRIPE_WEBHOOK_SECRET | No | Secreto de firma del webhook de Stripe |
GOOGLE_CLIENT_ID | No | ID de cliente de Google OAuth |
GOOGLE_CLIENT_SECRET | No | Secreto de Google OAuth |
GOOGLE_REDIRECT_URL | No | URL de redirección de Google OAuth |
RESEND_API_KEY | No | Clave API del servicio de correo Resend |
FROM_EMAIL | No | Dirección de correo del remitente (predeterminado: noreply@yourdomain.com) |
FROM_NAME | No | Nombre del remitente (predeterminado: LastSaaS) |
Estructura del Proyecto
lastsaas/
backend/
cmd/
server/main.go Entry point (HTTP server, route wiring)
lastsaas/main.go CLI administration tool + MCP server
config/ YAML config files
internal/
api/handlers/ HTTP handlers (auth, admin, tenant, billing, branding, webhooks, etc.)
apicounter/ API call counters for integration health
auth/ JWT, password hashing, Google/GitHub/Microsoft OAuth, TOTP MFA
config/ Config loader with env variable expansion
configstore/ Runtime configuration (DB-backed, cached)
db/ MongoDB connection, collections, indexes
email/ Resend email service with templates
events/ Internal event emitter (drives webhook deliveries)
health/ System health monitoring service
middleware/ Auth, tenant, RBAC, rate limiting, metrics, security, billing enforcement
models/ All data models
planstore/ Plan seeding
stripe/ Stripe service (Checkout, Billing Portal, Customers, Prices, Subscriptions)
syslog/ System logging service with injection detection
telemetry/ Telemetry event collection, Go SDK, and PM analytics queries
version/ Version management and auto-migration
frontend/
src/
api/client.ts Axios API client with token refresh
components/ Layout, AdminLayout, BrandingThemeInjector, shared components
contexts/ Auth, Tenant, and Branding React contexts
pages/
admin/ Admin interface (dashboard, users, tenants, plans, billing, branding, etc.)
admin/health/ Health monitoring components and charts
app/ Customer-facing pages (dashboard, billing, team, settings, activity)
app/settings/ User settings tabs (profile, security, MFA, sessions, billing)
auth/ Login, signup, MFA challenge, magic link, verification, password reset
public/ Landing page and custom pages
types/index.ts TypeScript type definitions
scripts/
setup.sh Interactive setup script
Dockerfile Multi-stage production build
fly.toml Fly.io deployment config
VERSION Current version number
Documentación de la API
LastSaaS incluye documentación de API integrada y autoalojada:
- Referencia HTML interactiva:
GET /api/docs— tarjetas de endpoints expandibles con ejemplos de solicitud/respuesta - Referencia Markdown:
GET /api/docs/markdown— para incrustar en documentación externa
La documentación se genera a partir del código y siempre coincide con la versión en ejecución. Cubre todos los endpoints, parámetros, formatos de solicitud/respuesta y los 19 tipos de eventos de webhook con descripciones de payload.
Configuración del Servidor MCP
El servidor MCP permite que los asistentes de IA consulten tus datos de administración en lenguaje natural. Envía solicitudes de solo lectura a la API de administración de LastSaaS mediante una clave de API.
Requisitos previos
- Una instancia de LastSaaS en ejecución (local o desplegada)
- Una clave de API de tenant raíz: crea una en Admin → Claves de API con autoridad de admin
Uso con Claude Desktop
Agrega a tu configuración de Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json en macOS):
{
"mcpServers": {
"lastsaas": {
"command": "/path/to/lastsaas",
"args": ["mcp"],
"env": {
"LASTSAAS_URL": "https://your-app.fly.dev",
"LASTSAAS_API_KEY": "lsk_your_api_key_here"
}
}
}
}
Uso con Claude Code
Agrega a .mcp.json de tu proyecto:
{
"mcpServers": {
"lastsaas": {
"command": "/path/to/lastsaas",
"args": ["mcp"],
"env": {
"LASTSAAS_URL": "https://your-app.fly.dev",
"LASTSAAS_API_KEY": "lsk_your_api_key_here"
}
}
}
}
Compilar el binario CLI
cd backend
go build -o lastsaas ./cmd/lastsaas
Variables de Entorno
| Variable | Requerida | Descripción |
|---|---|---|
LASTSAAS_URL | Sí | URL base de la instancia de LastSaaS (p. ej. http://localhost:4290 o https://your-app.fly.dev) |
LASTSAAS_API_KEY | Sí | Clave de API de tenant raíz con autoridad de admin (comienza con lsk_) |
Herramientas Disponibles (26)
| Herramienta | Descripción |
|---|---|
get_about | Versión del software y entorno |
dashboard_stats | Conteos de usuarios/tenants y resumen de salud |
list_tenants | Lista paginada de tenants con búsqueda y filtros |
get_tenant | Tenant detallado con plan, facturación y miembros |
list_users | Lista paginada de usuarios con búsqueda y filtros |
get_user | Usuario detallado con métodos de autenticación y membresías |
list_transactions | Transacciones financieras con búsqueda y filtros |
get_financial_metrics | Series temporales de ingresos, ARR, DAU, MAU |
search_logs | Búsqueda de texto completo en registros con filtros de severidad/categoría/fecha |
get_log_severity_counts | Conteos de registros por nivel de severidad |
get_system_health | Estadísticas actuales de CPU, memoria, disco y HTTP |
get_health_metrics | Datos de salud en series temporales (por nodo o agregados) |
list_nodes | Nodos del servidor con estado y versión |
get_integrations | Salud de integraciones de terceros |
list_config | Todas las variables de configuración en tiempo de ejecución |
get_config | Detalles de una variable de configuración individual |
list_plans | Planes de suscripción con precios y derechos (entitlements) |
get_plan | Información detallada del plan |
list_entitlement_keys | Catálogo de claves de entitlements |
list_credit_bundles | Precios de paquetes de crédito |
list_announcements | Anuncios publicados y en borrador |
list_promotions | Códigos de promoción y cupones de Stripe |
list_api_keys | Inventario de claves de API (solo vistas previas) |
list_root_members | Equipo de administración e invitaciones pendientes |
list_webhooks | Configuraciones de webhooks salientes |
list_webhook_event_types | Tipos de eventos de webhook disponibles |
get_webhook | Detalle del webhook con historial de entrega |
Ejemplos de MCP
Estos ejemplos muestran cómo funcionan las herramientas MCP en la práctica. Cada ejemplo enumera la solicitud del usuario y las llamadas exactas a herramientas que se ejecutan en segundo plano.
Ejemplo 1: Verificar el Resumen del Negocio
Solicitud: "¿Cómo va mi SaaS hoy?"
Llamadas a herramientas:
dashboard_stats— devuelve una instantánea:Users: 1,284 (12 new today) Tenants: 89 (3 new this week) Health: All systems healthy Active alerts: 0
Ejemplo 2: Investigar la Tendencia de Ingresos
Solicitud: "Muéstrame nuestra tendencia de ingresos de los últimos 30 días"
Llamadas a herramientas:
get_financial_metrics— consulta datos de series temporales:
Devuelve puntos de datos de ingresos diarios (valores en centavos) para graficar, p. ej.:{ "range": "30d", "metric": "revenue" }2026-01-27: $1,250.00 2026-01-28: $890.00 ... 2026-02-25: $2,100.00get_financial_metrics— continúa con ARR:{ "range": "30d", "metric": "arr" }
Ejemplo 3: Encontrar un Tenant Específico
Solicitud: "Busca el tenant Acme Corp y muéstrame sus detalles"
Llamadas a herramientas:
list_tenants— busca por nombre:
Devuelve tenants coincidentes con IDs, nombres de plan y estado de facturación.{ "search": "Acme Corp" }get_tenant— obtiene los detalles completos usando el ID del tenant:
Devuelve información del plan, estado de facturación, saldos de crédito, fechas de suscripción y una lista completa de miembros con roles.{ "id": "6789abc..." }
Ejemplo 4: Buscar Errores Críticos
Solicitud: "¿Hubo algún error crítico en la última hora?"
Llamadas a herramientas:
search_logs— filtra por severidad y tiempo:
Devuelve entradas de registro con marcas de tiempo, categorías, mensajes y metadatos. Por ejemplo:{ "severity": "critical", "fromDate": "2026-02-26T14:00:00Z", "perPage": "50" }[critical] 14:23:05 billing — Stripe webhook signature verification failed [critical] 14:31:12 security — Log injection pattern detected in user inputget_log_severity_counts— proporciona la distribución general:critical: 2, high: 15, medium: 89, low: 342, debug: 1,204
Ejemplo 5: Monitorear la Salud del Sistema
Solicitud: "¿Cómo está la salud del sistema? ¿Están funcionando todas las integraciones?"
Llamadas a herramientas:
get_system_health— devuelve métricas actuales:CPU: 12.3% Memory: 245 MB / 512 MB (47.8%) Disk: 1.2 GB / 8 GB (15.0%) HTTP: 1,234 requests (p95 latency: 45ms) MongoDB: 12 active connectionsget_integrations— verifica la conectividad de terceros:MongoDB: healthy (3ms response) Stripe: healthy (120ms response, 89 calls/24h) Resend: healthy (95ms response, 12 calls/24h) Google OAuth: healthy
Ejemplo 6: Auditar el Uso de Claves de API
Solicitud: "Muéstrame todas las claves de API activas y cuándo se usaron por última vez"
Llamadas a herramientas:
list_api_keys— devuelve el inventario (las claves completas nunca se exponen):"Production Automation" (admin) — lsk_...a3f2 — last used: 2 hours ago "CI/CD Pipeline" (admin) — lsk_...b7e1 — last used: 15 minutes ago "Customer Integration" (user) — lsk_...c9d4 — last used: 3 days ago "Old Test Key" (admin) — lsk_...d1e5 — last used: never
Ejemplo 7: Revisar Planes de Suscripción
Solicitud: "¿Qué planes ofrecemos y cuántos suscriptores tiene cada uno?"
Llamadas a herramientas:
list_plans— devuelve todos los planes con precios y conteos de suscriptores:Starter: $9/mo ($86/yr) — 45 subscribers — 5 seat limit Pro: $29/mo ($278/yr) — 31 subscribers — 25 seat limit, per-seat pricing Enterprise: $99/mo ($950/yr) — 8 subscribers — unlimited seatslist_credit_bundles— muestra las compras de crédito disponibles:Small Pack: 100 credits — $5.00 — active Medium Pack: 500 credits — $20.00 — active Large Pack: 2000 credits — $60.00 — active
Ejemplo 8: Verificar la Entrega de Webhooks
Solicitud: "¿Se están entregando nuestros webhooks correctamente? Muéstrame el historial reciente del webhook de producción"
Llamadas a herramientas:
list_webhooks— muestra todos los webhooks configurados:"Production" — https://api.example.com/webhooks — 12 events — active "Staging" — https://staging.example.com/hooks — 5 events — activeget_webhook— obtiene el historial de entrega del webhook de producción:
Devuelve intentos de entrega recientes con códigos de estado, tiempos de respuesta y cualquier fallo:{ "id": "abc123..." }2026-02-26 14:30:01 — subscription.activated — 200 OK (120ms) 2026-02-26 14:15:22 — payment.received — 200 OK (95ms) 2026-02-26 13:45:10 — member.joined — 500 Error (340ms)
Ejemplo 9: Búsqueda de Usuario y Membresía
Solicitud: "Encuentra al usuario con correo alice@example.com y muéstrame sus membresías de tenant"
Llamadas a herramientas:
list_users— busca por correo electrónico:
Devuelve el usuario coincidente con ID, estado de verificación y último inicio de sesión.{ "search": "alice@example.com" }get_user— obtiene los detalles completos:
Devuelve:{ "id": "def456..." }Email: alice@example.com (verified) Auth: password + Google OAuth MFA: TOTP enabled Memberships: — Acme Corp (owner) — joined 2026-01-15 — Side Project Inc (admin) — joined 2026-02-10 Last login: 2 hours ago
Ejemplo 10: Análisis Profundo de Métricas de Salud
Solicitud: "Muéstrame las tendencias de CPU y memoria en todos los nodos de las últimas 24 horas"
Llamadas a herramientas:
list_nodes— identifica todos los nodos del servidor:node-1 (v1.0.0) — healthy — last seen: 30s ago node-2 (v1.0.0) — healthy — last seen: 28s agoget_health_metrics— obtiene datos agregados de series temporales:
Devuelve puntos de datos cada 60 segundos con % de CPU, % de memoria, % de disco, conteos de solicitudes HTTP y percentiles de latencia, listos para graficar.{ "range": "24h" }get_health_metrics— opcionalmente profundiza en un nodo específico:{ "node": "node-1", "range": "24h" }
Despliegue
Fly.io
LastSaaS incluye un Dockerfile y configuración de Fly.io para el despliegue en producción.
# Install flyctl if needed
curl -L https://fly.io/install.sh | sh
# Create the app (first time only)
flyctl apps create your-app-name --org your-org
# Set production secrets
flyctl secrets set \
DATABASE_NAME="your-db-name" \
MONGODB_URI="mongodb+srv://..." \
JWT_ACCESS_SECRET="$(openssl rand -hex 32)" \
JWT_REFRESH_SECRET="$(openssl rand -hex 32)" \
FRONTEND_URL="https://your-app-name.fly.dev" \
APP_NAME="YourApp" \
STRIPE_SECRET_KEY="sk_live_..." \
STRIPE_PUBLISHABLE_KEY="pk_live_..." \
STRIPE_WEBHOOK_SECRET="whsec_..."
# Deploy
flyctl deploy
El Dockerfile compila tanto el backend Go como el frontend React en un único contenedor Alpine de ~14MB. El binario Go sirve la SPA del frontend directamente: no se requiere nginx ni un servidor web separado.
Otras Plataformas
La imagen Docker funciona en cualquier lugar donde se ejecuten contenedores. La única dependencia externa es MongoDB. Configura las variables de entorno enumeradas anteriormente y expón el puerto 8080.
Haz un Fork y Sigue Construyendo con IA
LastSaaS se construyó enteramente mediante conversación con Claude Code: cada funcionalidad, cada handler, cada componente se describió en lenguaje natural y fue implementado por un agente de IA. Pero el punto real no es que se haya construido de esta manera, sino que está diseñado para seguir construyéndose de esta manera.
El código sigue patrones consistentes, usa nombres claros y mantiene una estructura que los agentes de IA navegan con fluidez. Haz un fork, apunta Claude Code hacia él y comienza a describir tu producto. El agente ya comprende los patrones (autenticación, tenancy, facturación, middleware, eventos) y construye sobre ellos de forma natural. No estás empezando desde cero; estás continuando una conversación.
Esto es lo que ya está preparado para ti:
- Agrega los modelos de datos de tu producto en
backend/internal/models/ - Agrega handlers de API en
backend/internal/api/handlers/ - Conecta las rutas en
backend/cmd/server/main.go - Agrega páginas de frontend en
frontend/src/pages/ - Usa el contexto de tenant — cada solicitud autenticada lleva el tenant del usuario, por lo que tu lógica de producto obtiene multi-tenancy sin esfuerzo
- Usa el sistema de créditos — verifica y descuenta créditos para funciones basadas en uso
- Usa los entitlements — controla el acceso a funciones con
middleware.RequireEntitlement(db, "feature_name")ymiddleware.RequireActiveBilling() - Usa el almacén de configuración — agrega ajustes configurables en tiempo de ejecución sin redesplegar
- Usa el emisor de eventos — emite eventos desde tus handlers y se entregarán automáticamente a los webhooks configurados
- Usa claves de API — tus endpoints admiten automáticamente autenticación tanto con JWT como con claves de API
- Usa el sistema de marca — tu interfaz hereda automáticamente el tema de marca blanca mediante el BrandingContext
- Usa el sistema de telemetría — rastrea eventos personalizados con
telemetry.Track()en Go oPOST /telemetry/eventsdesde clientes externos, y aparecerán automáticamente en el panel de PM
Política de Privacidad
LastSaaS es software autoalojado: tú controlas tu base de datos, tu hosting y tus datos. El servidor MCP se conecta a tu instancia de LastSaaS mediante la API HTTP usando herramientas de solo lectura: no se transmiten datos a Metavert LLC ni a terceros.
Para la política de privacidad completa, consulta: https://www.metavert.io/lastsaas-privacy-policy
Licencia
MIT - Copyright 2026 Metavert LLC