Cuando empezamos Commet, tomamos algunas decisiones optimizadas puramente para salir al mercado rápido.
Una de ellas fue nuestro modelo original: Eventos → Productos → Suscripciones.
Es el modelo por defecto de los PSP clásicos (Stripe, Lemon Squeezy, Nuvei, etc.). Tiene sentido para su época y para el tipo de clientes para los que fueron construidos.
Pero no tenía sentido para nuestros usuarios.
Commet impulsa suscripciones para herramientas de IA y SaaS con precios basados en uso. Así que reconstruimos el modelo desde cero.
(Decker, nuestro CTO, escribió un análisis detallado sobre este cambio si querés entender el razonamiento completo.)
Nuevas entidades
Este rediseño introdujo dos entidades que no teníamos antes:
- Funcionalidades
- Planes
Funcionalidades
Las funcionalidades son los bloques de construcción atómicos de un modelo de precios. Representan capacidades a las que un usuario puede acceder:
- Funcionalidades booleanas: Marca personalizada, SSO, Acceso a la API
- Funcionalidades medidas: Llamadas a la API, Emails enviados, Almacenamiento usado
- Funcionalidades de puestos: Miembros del equipo, Usuarios administradores, Puestos de editor
Planes
Los planes son conjuntos reutilizables de funcionalidades con un precio por período de cobros y pagos. Podés asignar el mismo plan a N clientes sin redefinir nada.
Una suscripción ahora existe únicamente como el resultado de asignar un Plan a un Cliente.
El nuevo modelo es: Funcionalidades → Planes → Suscripciones

Cambios en el SDK
Funcionalidades
El modelo de Funcionalidades nos permite:
Verificar si un usuario específico tiene acceso a una funcionalidad
const { data } = await commet.features.canUse('team_members', 'user_123')
if (!data.allowed) {
return { error: 'Mejorá tu plan para agregar más miembros' }
}
if (data.willBeCharged) {
// Show overage confirmation
}Consultar el uso y la disponibilidad restante de cualquier funcionalidad medida
const feature = await commet.features.get('team_members', 'user_123')Suscripciones
Para crear una suscripción, ahora pasás el código del plan directamente al método de suscripción.
const subscription = await commet.subscriptions.create({
externalId: 'user_123',
planCode: 'pro',
})
redirect(subscription.data.checkoutUrl)Conclusión
Ahora podemos soportar los modelos de precios de nuestros usuarios de manera mucho más efectiva.
Los planes son más fáciles de crear, más fáciles de gestionar, y escalan de forma limpia a medida que tu producto crece.