Empieza tu aplicación directamente por la primera funcionalidad.
Bones es un monorepo de TypeScript con todo lo que rodea a tu producto ya construido, probado y conectado: inicio de sesión, organizaciones, permisos, una consola de administración, registros, correo, un blog, documentación y cuatro idiomas, en una aplicación web, una aplicación de escritorio y tres sitios públicos. Clónalo, y lo primero que escribes es la parte que de verdad es tu producto.
| FUNCIONALIDAD | owner | administrator | standard |
|---|---|---|---|
| page.admin.view | concedido | concedido | no concedido |
| admin.users.view | concedido | concedido | no concedido |
| admin.roles.create | concedido | no concedido | no concedido |
| admin.terms.update | concedido | no concedido | no concedido |
| application.organizations.create | concedido | concedido | concedido |
| chatbot | concedido | concedido | concedido |
- WORKSPACES
- 9
- COMPONENTES COMPARTIDOS
- 36
- ROUTERS DE TRPC
- 18
- CLIENTES
- 5
Seis meses de fontanería, ya escritos.
Quince piezas que toda aplicación necesita, cada una construida, probada y documentada. Cada tarjeta enlaza a una página sobre el problema que resuelve y cómo se compara.
Un inicio de sesión que ya funciona
Correo y contraseña o Google, con better-auth. Correos de verificación y de restablecimiento, gestión de sesiones, tokens bearer para la versión de escritorio y un interruptor en la consola de administración que desactiva un método de acceso sin desplegar.
Dos niveles de control de acceso
Funcionalidades concedidas a los roles de la plataforma y, encima, una tabla aparte por organización. Ambas se aplican en el middleware de tRPC y se resuelven en la sesión, así que la pantalla y el servidor leen la misma respuesta.
Organizaciones con miembros de verdad
Miembros, avatares y un perfil por organización. Los roles son propios de cada organización, el último administrador no se puede quitar y la membresía se desactiva en lugar de borrarse.
Una consola de administración incluida
Usuarios, organizaciones, roles, permisos, indicadores de funcionalidad, métodos de acceso, configuración del sitio y términos versionados con aceptación por usuario — construidos, no esbozados.
Registros que puedes pasarle a un auditor
Cada escritura en la base de datos y cada solicitud, estructuradas y anonimizadas, rotadas en disco y archivadas en S3 de forma programada. Comprobaciones de estado y una cuenta de propietario creada desde la primera migración.
Un blog que se publica como archivos estáticos
Redacta, edita y publica desde la consola de administración. Los metadatos en Postgres, el cuerpo de las publicaciones y los archivos en S3, y una compilación estática aparte que convierte cada publicación en un archivo HTML de verdad — indexable sin ejecutar una sola línea de JavaScript.
Documentación que cambia con el código
El porqué, el qué y el cómo de cada funcionalidad, en MDX dentro del repositorio, editados en el mismo pull request que el código. Un sitio estático con búsqueda integrada, y cada página disponible en Markdown para herramientas de IA.
Correos a la altura del producto
Plantillas escritas en React y convertidas a las tablas y los estilos en línea que exigen los clientes de correo reales, con tokens generados desde el sistema de diseño. Mailpit recoge cada mensaje en desarrollo, y SES los envía en producción.
Un chatbot ya conectado a un modelo
Claude en Bedrock en producción y un modelo local de Ollama en desarrollo, detrás de una sola interfaz de proveedor. Las respuestas llegan token a token, las conversaciones se guardan por organización y el acceso pasa por la misma tabla de permisos que todo lo demás.
Un backend, cinco clientes
Una aplicación web, una aplicación de escritorio con sus propias rutas, este sitio, el blog y la documentación, todos llamando a un solo backend. Las aplicaciones lo llaman con tRPC y tipos completos, así que un campo renombrado rompe la compilación, no la producción.
Coherente hasta el final
Un solo archivo de tokens detrás de la aplicación web, la aplicación de escritorio, este sitio, el blog, la documentación y cada correo. Los componentes compartidos están especificados en COMPONENTS.md y dibujados en Storybook, y un control escrito dos veces se unifica en lugar de copiarse.
Cuatro idiomas, de derecha a izquierda incluido
Inglés, francés, español y hebreo en cada superficie, desde las aplicaciones hasta los correos y los mensajes de error. El hebreo refleja cada diseño, y la CI falla si un texto de la interfaz se salta la traducción.
Comprobado según WCAG 2.2 AA
El sitio de marketing, el blog, la documentación y cada historia de Storybook, en claro y en oscuro, en cada pull request. axe aplica sus reglas, y una segunda comprobación confirma los puntos de referencia, los encabezados y las etiquetas de los que depende un lector de pantalla.
Protecciones en el código, analizadas en cada cambio
Entradas acotadas, consultas parametrizadas, límites de frecuencia, subidas verificadas y una CSP en cada página. Semgrep, OWASP ZAP, una comprobación de la CSP y otra de secretos se ejecutan en cada pull request.
Pruebas contra el sistema real
Pruebas de backend contra un Postgres real en un contenedor desechable, cada historia de Storybook en un Chromium real y una compilación de cada sitio. Cada pull request ejecuta solo los jobs que toca su cambio.
Tres pasos, y ninguno es «esperar a que compile».
En marcha en poco tiempo
Un entorno de desarrollo coherente significa que bastan unos pocos comandos para ponerse a trabajar. Uno de ellos arranca a la vez el backend, la aplicación web, el sitio de marketing, el blog y la documentación.
Conviértelo en tu SaaS
Construyas lo que construyas, ya estás mucho más cerca. El inicio de sesión, las organizaciones, los permisos, la consola de administración, el correo y cuatro idiomas están hechos, y cada router y cada página que añadas los tiene.
Despliégalo
Llévalo a producción y empieza a conseguir usuarios. Todo está en AWS, con niveles fáciles de cambiar a medida que crece tu aplicación: Starter, Growth y High availability, cada uno con una sola línea.
Un repositorio que un desarrollador heredaría con gusto. Un repositorio que una IA puede retomar.
En Bones, cada permiso es una fila en una tabla y una llamada de middleware en un procedimiento. Nada se aplica solo en la interfaz, y nada se esconde detrás de un servicio que no puedes leer.
Lo mismo vale para lo que un modelo tiene que leer. Las reglas, las especificaciones y los motivos están en el repositorio, así que un agente trabaja a partir de lo que hace el código en lugar de deducirlo.
- Frameworks estándar — Fastify, tRPC, Drizzle, React. Ningún runtime propietario al que llamar.
- Permisos aplicados en el middleware del servidor, no escondidos en la interfaz.
- Migraciones que ejecutas tú mismo, contra tu propio Postgres.
- Pruebas contra una base de datos real en un contenedor desechable, no contra un mock.
- Convenciones escritas en lugar de deducidas: nueve reglas estrictas en CLAUDE.md y treinta y cuatro especificaciones de componentes en COMPONENTS.md.
- Los comentarios explican por qué se tomó una decisión, nunca qué hace la línea siguiente.
- El trabajo terminado, registrado en NOTES.md; el pendiente, numerado en TODOS.md — el contexto está en disco, no en la cabeza de alguien.
- Cada componente y cada página en Storybook, para que un cambio se compruebe en lugar de adivinarse.
- Cada página de la documentación en Markdown, y todo el sitio en /llms.txt, para que un agente lea por qué se construyó una parte antes de cambiarla.
export const rolesRouter = router({
list: protectedProcedure.query(() =>
db.select().from(roles)
),
create: requirePermission("admin.roles.create")
.input(z.object({ name: z.string().min(1) }))
.mutation(async ({ input }) => {
const [created] = await db
.insert(roles)
.values({ name: input.name })
.returning();
return created;
}),
});Herramientas populares y bien documentadas. Quien contrates, y cualquier IA que uses, ya las conoce.
- TypeScript
- Fastify
- tRPC
- Zod
- Drizzle
- Postgres
- Better Auth
- Pino
- React
- Vite
- Mantine
- Tauri
- Next.js
- Fumadocs
- React Email
- i18next
- Storybook
- Vitest
- Testcontainers
- Playwright
- oxlint
- Docker
- GitHub Actions
- AWS
Los cimientos están hechos. Construye el resto.
Inicia sesión y empieza con un stack que ya funciona — y quédate con cada uno de sus archivos.
Suscríbete a las novedades
Nuevas versiones y publicaciones, por correo. Date de baja desde cualquier mensaje.