LastSaaS

Plantilla / kit de inicio SaaS: completo, facturación con Stripe, gestión de productos, multiinquilino; controles agentivos mediante MCP

Documentación

LastSaaS

CI codecov Go Report Card

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.

Página del Proyecto


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.

LastSaaSShipFastSupastarterMakerKitPegasusGravity
PrecioGratis (MIT)$169$299+$199–599$249/año<$1K
StackGo + ReactNext.jsNext.js / NuxtNext.jsDjangoNode + React
Multi-TenenciaRBAC completoSolo equiposSolo equipos
Marca BlancaCompletaParcialParcial
Webhooks19 eventos
Claves APICon ámbitoBásica
Monitoreo de Salud8 gráficos
Analítica de ProductoPanel PM de 5 pestañas
Sistema de CréditosDos paquetesBásico
Servidor MCP26 herramientas
Panel de AdministraciónCompletoBásico
Facturación StripeCompleta

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 lastLoginAt a 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 Gotelemetry.Track() / TrackBatch() / TrackPageView() / TrackCheckoutStarted() / TrackLogin() para registro directo de eventos en proceso (sin sobrecarga HTTP)
  • API REST de telemetríaPOST /telemetry/track (anónimo, con límite de velocidad) para vistas de página; POST /telemetry/events y /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/docs con detalles de endpoint expandibles
  • Referencia de API en Markdown en /api/docs/markdown para 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 servidor
  • lastsaas change-password — Restablecer la contraseña de cualquier usuario
  • lastsaas send-message — Enviar mensajes del sistema a los usuarios
  • lastsaas transfer-root-owner — Transferir la propiedad del tenant raíz
  • lastsaas config list|get|set — Gestionar variables de configuración
  • lastsaas version — Mostrar versiones del binario y de la base de datos
  • lastsaas status — Verificar la salud del sistema
  • lastsaas 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 recursoslastsaas://dashboard y lastsaas://health para 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

CapaTecnología
BackendGo 1.25, gorilla/mux
FrontendReact 19, TypeScript, Vite 7, Tailwind CSS 4
Base de datosMongoDB (Atlas o local)
AutenticaciónJWT (acceso + actualización), bcrypt, Google/GitHub/Microsoft OAuth, Magic Links, TOTP MFA
FacturaciónStripe (stripe-go v82) — Checkout, Billing Portal, Webhooks, Tax
Correo electrónicoResend
GráficosRecharts
Métricasgopsutil v4
PDFgofpdf (generación de facturas)
SeguridadDOMPurify (frontend), HMAC-SHA256 (webhooks)
DespliegueDocker, 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_ o pk_live_)
  • Clave secreta (comienza con sk_test_ o sk_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
  • Eventos a los que suscribirse — selecciona estos 8 eventos:
    • checkout.session.completed
    • invoice.paid
    • invoice.payment_failed
    • customer.subscription.updated
    • customer.subscription.deleted
    • charge.refunded
    • charge.dispute.created
    • charge.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:

  1. Inicia sesión como propietario del tenant raíz
  2. Ve a Admin → Planes y crea tus planes de suscripción
  3. Configura precios, intervalos de facturación, días de prueba, derechos (entitlements) y asignaciones de crédito
  4. Opcionalmente crea paquetes de crédito en Admin → Paquetes de Crédito
  5. 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:

  1. Cambia a modo en vivo en el Panel de Stripe
  2. Crea un nuevo endpoint de webhook con tu URL de producción y los mismos 8 eventos
  3. 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 versionadas
  • dev.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

VariableRequeridaDescripción
DATABASE_NAMEIdentidad del proyecto: nombre compartido = base de usuarios compartida
MONGODB_URICadena de conexión de MongoDB
JWT_ACCESS_SECRETSecreto para firmar tokens de acceso
JWT_REFRESH_SECRETSecreto para firmar tokens de actualización
FRONTEND_URLURL del frontend para CORS y enlaces de correo
APP_NAMENombre de tu aplicación (usado en correos, interfaz)
STRIPE_SECRET_KEYNoClave API secreta de Stripe
STRIPE_PUBLISHABLE_KEYNoClave publicable de Stripe (enviada al frontend)
STRIPE_WEBHOOK_SECRETNoSecreto de firma del webhook de Stripe
GOOGLE_CLIENT_IDNoID de cliente de Google OAuth
GOOGLE_CLIENT_SECRETNoSecreto de Google OAuth
GOOGLE_REDIRECT_URLNoURL de redirección de Google OAuth
RESEND_API_KEYNoClave API del servicio de correo Resend
FROM_EMAILNoDirección de correo del remitente (predeterminado: noreply@yourdomain.com)
FROM_NAMENoNombre 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

  1. Una instancia de LastSaaS en ejecución (local o desplegada)
  2. 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

VariableRequeridaDescripción
LASTSAAS_URLURL base de la instancia de LastSaaS (p. ej. http://localhost:4290 o https://your-app.fly.dev)
LASTSAAS_API_KEYClave de API de tenant raíz con autoridad de admin (comienza con lsk_)

Herramientas Disponibles (26)

HerramientaDescripción
get_aboutVersión del software y entorno
dashboard_statsConteos de usuarios/tenants y resumen de salud
list_tenantsLista paginada de tenants con búsqueda y filtros
get_tenantTenant detallado con plan, facturación y miembros
list_usersLista paginada de usuarios con búsqueda y filtros
get_userUsuario detallado con métodos de autenticación y membresías
list_transactionsTransacciones financieras con búsqueda y filtros
get_financial_metricsSeries temporales de ingresos, ARR, DAU, MAU
search_logsBúsqueda de texto completo en registros con filtros de severidad/categoría/fecha
get_log_severity_countsConteos de registros por nivel de severidad
get_system_healthEstadísticas actuales de CPU, memoria, disco y HTTP
get_health_metricsDatos de salud en series temporales (por nodo o agregados)
list_nodesNodos del servidor con estado y versión
get_integrationsSalud de integraciones de terceros
list_configTodas las variables de configuración en tiempo de ejecución
get_configDetalles de una variable de configuración individual
list_plansPlanes de suscripción con precios y derechos (entitlements)
get_planInformación detallada del plan
list_entitlement_keysCatálogo de claves de entitlements
list_credit_bundlesPrecios de paquetes de crédito
list_announcementsAnuncios publicados y en borrador
list_promotionsCódigos de promoción y cupones de Stripe
list_api_keysInventario de claves de API (solo vistas previas)
list_root_membersEquipo de administración e invitaciones pendientes
list_webhooksConfiguraciones de webhooks salientes
list_webhook_event_typesTipos de eventos de webhook disponibles
get_webhookDetalle 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:

  1. 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:

  1. get_financial_metrics — consulta datos de series temporales:
    { "range": "30d", "metric": "revenue" }
    
    Devuelve puntos de datos de ingresos diarios (valores en centavos) para graficar, p. ej.:
    2026-01-27: $1,250.00
    2026-01-28: $890.00
    ...
    2026-02-25: $2,100.00
    
  2. get_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:

  1. list_tenants — busca por nombre:
    { "search": "Acme Corp" }
    
    Devuelve tenants coincidentes con IDs, nombres de plan y estado de facturación.
  2. get_tenant — obtiene los detalles completos usando el ID del tenant:
    { "id": "6789abc..." }
    
    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.

Ejemplo 4: Buscar Errores Críticos

Solicitud: "¿Hubo algún error crítico en la última hora?"

Llamadas a herramientas:

  1. search_logs — filtra por severidad y tiempo:
    {
      "severity": "critical",
      "fromDate": "2026-02-26T14:00:00Z",
      "perPage": "50"
    }
    
    Devuelve entradas de registro con marcas de tiempo, categorías, mensajes y metadatos. Por ejemplo:
    [critical] 14:23:05 billing — Stripe webhook signature verification failed
    [critical] 14:31:12 security — Log injection pattern detected in user input
    
  2. get_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:

  1. 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 connections
    
  2. get_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:

  1. 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:

  1. 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 seats
    
  2. list_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:

  1. list_webhooks — muestra todos los webhooks configurados:
    "Production" — https://api.example.com/webhooks — 12 events — active
    "Staging" — https://staging.example.com/hooks — 5 events — active
    
  2. get_webhook — obtiene el historial de entrega del webhook de producción:
    { "id": "abc123..." }
    
    Devuelve intentos de entrega recientes con códigos de estado, tiempos de respuesta y cualquier fallo:
    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:

  1. list_users — busca por correo electrónico:
    { "search": "alice@example.com" }
    
    Devuelve el usuario coincidente con ID, estado de verificación y último inicio de sesión.
  2. get_user — obtiene los detalles completos:
    { "id": "def456..." }
    
    Devuelve:
    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:

  1. 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 ago
    
  2. get_health_metrics — obtiene datos agregados de series temporales:
    { "range": "24h" }
    
    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.
  3. 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:

  1. Agrega los modelos de datos de tu producto en backend/internal/models/
  2. Agrega handlers de API en backend/internal/api/handlers/
  3. Conecta las rutas en backend/cmd/server/main.go
  4. Agrega páginas de frontend en frontend/src/pages/
  5. 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
  6. Usa el sistema de créditos — verifica y descuenta créditos para funciones basadas en uso
  7. Usa los entitlements — controla el acceso a funciones con middleware.RequireEntitlement(db, "feature_name") y middleware.RequireActiveBilling()
  8. Usa el almacén de configuración — agrega ajustes configurables en tiempo de ejecución sin redesplegar
  9. Usa el emisor de eventos — emite eventos desde tus handlers y se entregarán automáticamente a los webhooks configurados
  10. Usa claves de API — tus endpoints admiten automáticamente autenticación tanto con JWT como con claves de API
  11. Usa el sistema de marca — tu interfaz hereda automáticamente el tema de marca blanca mediante el BrandingContext
  12. Usa el sistema de telemetría — rastrea eventos personalizados con telemetry.Track() en Go o POST /telemetry/events desde 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