Trabajo
ClienteCliente · Producto a medida
Brainstorming

CMS de Brainstorming

CMS editorial a medida: una API en Hono sobre Cloudflare Workers y un administrador en Angular, con edición por bloques, autoguardado, historial y vista previa.

Ver sitio en vivo

Captura de CMS de Brainstorming
SYSTEM.md

El problema

El equipo editorial necesitaba publicar guías y artículos en varios sitios sin pedir cambios de código, y con control sobre quién puede editar qué.

Qué construí

Construí dos repositorios independientes: una API en Hono sobre Cloudflare Workers (Drizzle, PostgreSQL y contrato OpenAPI) y un administrador en Angular con editor de texto enriquecido y por bloques.

Resultado

Un CMS propio con historial, biblioteca de archivos y estado de publicación por sitio.

Decisiones que importaron

  1. 01

    El contrato manda

    Las rutas se definen con esquemas Zod que validan las entradas y generan OpenAPI 3.1. Angular importa una copia versionada del contrato y genera sus tipos a partir de ella.

  2. 02

    Autoguardado sin perder cambios

    Guarda tras 1,2 segundos de pausa. Ante un conflicto o un error detiene los reintentos y conserva los cambios locales.

  3. 03

    Restaurar sin publicar

    El historial permite restaurar una versión como borrador; lo publicado no cambia hasta publicar de nuevo.

  4. 04

    Acceso por invitación

    Un administrador único y editores con permisos. Al navegador solo llega la clave pública de Supabase.

Tecnologías

  • Angular
  • Hono
  • Cloudflare Workers
  • PostgreSQL
  • Drizzle
  • OpenAPI
  • Supabase

Modelo C4. La línea con pulso es el recorrido principal de una solicitud.

Nivel 1 · quién usa el sistema y con qué se conecta

HTTPS1Deploy · content API2JWTHTTPSEquipo editorialEscribe y publicaCMS deBrainstormingGuías y artículosSitios deBrainstorming[Astro · Vercel]Reciben lo publicadoSupabase Auth[Supabase Auth]Identidad de los usuariosResend[Resend]Invitaciones por correo

Nivel 2 · las aplicaciones y almacenes que lo componen

HTTPS1REST ·OpenAPI ·2JWT · joseR2 APISQL · HyperdriveDeploy · content API3React EmailEquipo editorialEscribe y publicaAdministrador[Angular 22 · Cloudflare Pages]Editor por bloques y vistapreviaResend[Resend]Invitaciones por correoAPI del CMS[Hono · Cloudflare Workers]Contrato OpenAPI generadocon ZodSitios deBrainstorming[Astro · Vercel]Reciben lo publicadoSupabase Auth[Supabase Auth]Identidad de los usuariosBiblioteca dearchivos[Cloudflare R2]PDF e imágenesBase de datos[PostgreSQL · Supabase ·Hyperdrive]Contenido, historial yusuarios

Nivel 3 · los componentes dentro de la API

calls1rulesport2JWT · jose3portSQL ·HyperdriveportR2 APIportVercel APIRutas Hono[Hono · @hono/zod-openapi]Validan entradas con ZodServicios deaplicación[Application services]Identidad, contenido,archivos y publicaciónDominio[Result · errors]Result y errores deaplicaciónAdaptador deidentidad[jose]Verifica los JWTSupabase Auth[Supabase Auth]Identidad de los usuariosRepositorio[Drizzle]Consultas con DrizzleBase de datos[PostgreSQL · Supabase ·Hyperdrive]Contenido, historial yusuariosAdaptador dearchivos[R2 binding]Sube y sirve por UUIDBiblioteca dearchivos[Cloudflare R2]PDF e imágenesPublicador[Vercel API]Dispara y confirma losbuildsSitios deBrainstorming[Astro · Vercel]Reciben lo publicado
  • Persona
  • Sistema
  • Contenedor
  • Base de datos
  • Externo
  • Recorrido principal
  1. 01Editor
  2. 02Admin Angular
  3. 03API Hono
  4. 04PostgreSQL
  5. 05Publicación por sitio

CV

Descarga mi CV

Déjame tu correo y te envío el CV ahí. Primero verifico que el correo es tuyo con un código.