Groselia

Redes sociales que funcionan solas

Mi rol

Cofundador
Ingeniería
Diseño de producto y de marca

Descripción

Groselia maneja las redes sociales de startups de tecnología en primer lugar, y también de empresas de otras industrias y tamaños: estrategia, diseño, publicación, respuestas a comentarios y reportes, en todos los canales, desde una sola plataforma.

Equipo

Danilo ParmegianiCofundador
Pedro CritchiCofundador

Contexto

Empecé Groselia con Pedro, en un equipo de dos. Él se encarga de marketing, ventas y operaciones; yo diseñé la marca y el producto y construí la plataforma sobre la que funciona, desde la base de datos hasta la última animación. Mientras fue self-service, más de 200 personas se registraron para usarla, y hoy maneja el contenido y las redes sociales de nuestros clientes. En junio de 2026 levantamos un pre-seed de R$100k de Link Vector, la aceleradora de Link School of Business, donde me gradué, y dos meses después del giro a servicio, Groselia factura más de R$15.000 al mes.

Herramientas

Codex
Claude Code
Figma
Adobe tools

Stack

  • React
  • Next.js
  • TypeScript
  • Tailwind
  • Supabase
  • Frontier LLMs
  • Trigger.dev
  • Stripe
  • Vercel

Cronología

2025–hoy

En números

R$180k+
run rate anual
200+
cuentas creadas
350
marcas configuradas
9,700+
commits
520+
pull requests
47
edge functions

Desafío

Construir dejó de ser el cuello de botella. Ser visto pasó a serlo.

La IA desplomó el costo de hacer software. Un fundador sin formación en ingeniería puede lanzar un producto en un fin de semana, y todos los demás también. Lo que no se abarató fue lograr que alguien lo note. La distribución es una operación continua, no una tarea: publicar todos los días, en ocho redes que quieren cada una un formato distinto, responder cada comentario y leer números que cada app reporta a su manera.

Las startups lo pagan de una de tres formas. Contratan un equipo que todavía no pueden pagar, juntan una docena de herramientas que resuelven cada una un pedazo, o no publican nada y lo pagan con crecimiento. Groselia existe para ser la cuarta opción.

Cómo llegó hasta aquí

Groselia cambió de forma cuatro veces antes de encontrar lo que es. Cada giro conservó lo que funcionaba y dejó el resto.

  1. Fines de 2025 – feb 2026

    Argibee

    Una plataforma de diseño de marca con IA. Empezó como prototipo a fines de 2025 y se volvió una empresa de verdad en febrero de 2026. No encontró su mercado, pero su motor de brand kits se convirtió en la columna vertebral de todo lo que vino después.

  2. abr 2026

    Videos en motion

    Groselia empezó como videos de lanzamiento al estilo Apple hechos con plantillas de After Effects. Validé todo el pipeline a mano, y después vi que no podía escalar al nivel de calidad que buscábamos.

  3. jun 2026

    Pre-seed de Link Vector

    Entramos a la Startup School de Link School of Business, un programa de 100 días para fundadores grabado como reality show (mira la temporada). Cerró con un demo day en el que presenté Groselia en el escenario, y con nuestro pre-seed de R$100k de Link Vector, la aceleradora de Link School of Business, donde me gradué.

    Mi pitch en el demo day
  4. ago 2026

    Lovable para marketing

    Una conversación en lugar de un formulario: describe la campaña y Groselia la planea, la escribe y la publica. Un agente de chat con herramientas, no un elenco de bots.

  5. sep 2026

    Un social media manager

    Los clientes no querían que la IA hiciera su contenido. Querían que sus propias fotos se publicaran bien y que sus comentarios tuvieran respuesta. Quitamos la generación y nos enfocamos a fondo en manejar los canales.

  6. Hoy

    Service as a software

    Vendemos el trabajo, no la herramienta. Nuestro equipo maneja las redes sociales de cada cliente en la plataforma, y eso le permite a una persona sacar adelante lo que antes requería una agencia.

Construida en público

Construimos en público desde el principio. Cuando todavía era Argibee, compartimos el camino en YouTube, desde el lanzamiento de la lista de espera de Argibee hasta el primer video en el que mostramos Groselia. El resto de la historia, video a video, está en nuestro canal.

El lanzamiento de la lista de espera de Argibee
El primer video mostrando Groselia

Marca

Quería que la marca de Groselia fuera audaz: algo que haga que la gente se detenga a mirar, en el sitio web, en la app y en cada post de nuestras redes. Dondequiera que alguien la encuentre, tiene que impresionar, ganarse un poco de admiración y dar ganas de contratarnos por lo que acaba de ver. Sobre todo, tenía que verse increíble para las startups de tecnología, el ecosistema del que somos parte y los primeros clientes para los que construimos.

Diseñé toda la marca usando el plugin de Figma dentro de Codex: el logo, la tipografía y cómo se combina con el símbolo en las proporciones correctas, las imágenes, la biblioteca de íconos SVG, los estilos de texto y una paleta de colores ordenada. Cada decisión fue a un mismo board, medida, para poder compararla y discutirla.

Codex junto al archivo de Groselia en Figma: el sistema de logo, el logo sobre cada color de fondo, el símbolo en toda la paleta y la paleta de colores
Los boards de marca, hechos en Figma con el plugin de Figma dentro de Codex.

El símbolo

El símbolo llegó primero y se quedó. Tres pétalos suaves girando alrededor de un centro: viene desde la primerísima versión de la empresa, y el nuevo logo se construyó alrededor de él, no encima: su geometría se copió y se escaló, nunca se redibujó.

El logotipo

El logotipo usa TT Commons Pro Bold, en minúsculas, convertido a vectores para que se vea igual en todas partes. Con su espaciado natural se sentía suelto junto al símbolo, así que lo ajusté a −4% de tracking, moviendo cada letra 6.4 unidades más a la izquierda a 160px. Suena mínimo; llevó la palabra de 564 a 520 unidades de ancho y la hizo leerse como una sola forma.

Una retícula de H

Todo se mide en H, la altura visible del logotipo, sobre una retícula de H/10. Así el logo escala sin que nadie tenga que volver a calcularlo a ojo.

Para el logo apilado dibujé seis opciones, tres tamaños de símbolo (1.50H, 1.75H, 2.00H) contra dos separaciones (0.15H, 0.25H), y elegimos B: un símbolo de 1.75H, 0.15H sobre la palabra. Para el horizontal comparé separaciones de 0.20H a 0.35H y me quedé con un símbolo de 1.10H con una separación de 0.35H.

1.75H0.15HH

El logo apilado sobre su retícula de construcción. H es la altura del logotipo; la retícula es H/10.

Logo horizontal de Groselia

Horizontal

Símbolo 1.10H · separación 0.35H

Logo apilado de Groselia

Apilado

Símbolo 1.75H · separación 0.15H

Logo símbolo de Groselia

Símbolo

Proporción original, 0.93 : 1

Colour

The palette is fifteen colours, loud on purpose. But the logo only ever comes in four treatments: blue symbol with black text, blue with white, all black and all white. The other colours are grounds, never the symbol.

To prove that, I put the symbol and both lockups on twelve backgrounds, 24 studies each, and kept the ones where its silhouette survives. On blue grounds the symbol goes monochrome. Click a colour to copy it.

Tipografía

TT Commons Pro hace todo el trabajo: seis pesos de Light a ExtraBold, una escala de once pasos de 12 a 96px e itálicas reales. Migré a ella las 688 capas de texto del archivo, así que el brand book, la app y el sitio web ahora hablan con una sola voz.

Fuente principal

TT Commons
Pro

TT Commons ProDisplay · 01
→Groselia@
Reels → Posts
Nº 128⅝ e

Ícono de la app

El ícono de la app es el único lugar donde la marca se vuelve 3D: el símbolo en porcelana, en capas, iluminado desde arriba y con un poco de brillo. En una actualización posterior reduje el símbolo un 10% para que respire dentro de su recuadro. También tiene su propio lockup con el logotipo, el ícono a 1.5H.

Ícono de la app de Groselia

Un mundo de objetos 3D

Alrededor del logo vive un elenco de objetos 3D: un corazón con ojos saltones, burbujas de chat, un hashtag, destellos. Son la voz de la marca en el sitio web y en nuestros posts, y nunca están quietos: flotan y, en el sitio, reaccionan al cursor. Estos también: empújalos, o jala uno hacia atrás y suéltalo.

Neo doodles

Para todo lo plano está Neo, nuestro set de íconos: contornos negros gruesos, rellenos de la paleta y un brillo blanco. En el sitio web cada uno empieza como un ícono de línea simple en un chip blanco y se convierte en su doodle cuando pasas el cursor, con sus partes llegando una a una: el disco aparece, las barras caen, el brillo se dibuja. Son los doodles y la animación del propio sitio, copiados tal cual. Pasa el cursor sobre uno.

Conexiones oficiales
Sin esfuerzo
Pausa cuando quieras
Todo registrado
Datos privados
Sal cuando quieras
Respuestas con tu voz
Revisión humana
Leads marcados
Anuncios pagados
Landing page
Rediseño de producto
Rebranding
Destello
Corazón
Trofeo

Producto

Todo en Groselia se hace escribiendo en un solo chat. Escribes qué debe salir y cuándo, y Groselia lo programa, lo publica, responde los comentarios y te cuenta qué funcionó. El trabajo llega como un plan que el dueño aprueba, en lugar de una docena de pantallas por operar.

Una conversación, no un dashboard

¿Cómo nos fue la semana pasada?

La mejor semana desde junio.

  • El alcance subió 38%, impulsado por el reel de latte art (41K vistas en Instagram, 64K en TikTok).
  • Los guardados se duplicaron en el carrusel de espresso. La gente guarda recetas.
  • Hay comentarios esperando. 14 preguntas sobre envíos y molienda, la mayoría sin responder.

El patrón es claro: video entre las 5 y las 7 p. m., fotos en la mañana. Yo seguiría eso las próximas dos semanas.

hace 2 días

¡Buenos días! Dos cosas te necesitan esta semana:

  • La cosecha de Carmo de Minas llega a los estantes el viernes, y todavía no hay nada planeado.
  • 14 preguntas esperan en tus posts, la mayoría sobre envíos.

¿Por dónde quieres empezar?

Elige una
hace 8 minutos

Groselia empezó como un formulario: elige un objetivo, llena los campos, recibe una campaña. Nadie quiere llenar formularios sobre su propio negocio, así que ahora cada marca tiene una conversación en su lugar.

Abres tu marca y escribes. Pregunta qué publicar esta semana, sube fotos desde tu celular, o escribe “responde los comentarios de ayer”. El agente mira antes de responder: tu calendario, lo que funcionó, la memoria de la marca.

Cuando necesita algo de ti, hace una ronda corta de preguntas que respondes con un toque. Luego propone un plan: los posts con sus fechas y horarios, las respuestas, cualquier cambio. Editas lo que quieras, lo apruebas y ves cómo se llena el calendario.

La tarjeta de aquí es el chat real, rehecho en el navegador con los propios tokens de la app. Adelante, úsalo.

Diseñado dos veces: para dueños de negocios, y luego para nosotros

El primer público fueron dueños de pequeños negocios que manejan sus propias redes sociales. No piensan en campañas, embudos ni frecuencia de publicación; piensan “¿qué publico esta semana?”. Así que lo difícil fue esconder la maquinaria: onboarding en cuatro preguntas, un brand kit que se llena desde un enlace, un calendario que puedes arrastrar, cada pantalla en diecisiete idiomas y usable en el celular.

Después aprendimos que los clientes no querían operar ninguna herramienta, por simple que fuera. Querían el trabajo hecho. Así que nosotros pasamos a ser los usuarios principales. Una persona de nuestro equipo maneja muchas marcas, y la misma app tuvo que sumar workspaces multimarca, ciclos que abren con una reunión y cierran con un reporte, un paso de aprobación en cada post y una sola bandeja de entrada para todas las redes. Los clientes siguen entrando, pero ahora la app es donde ven el trabajo, no donde lo hacen.

noviembre de 2026

Lun
103
Mar
113
Mié
123
Jue
133
Vie
143
Sáb
152
Dom
162
8:00

Por qué pagamos 40% sobre el mercado

Importado
6
Nueva cosecha
49:00

Nueva cosecha: Carmo de Minas

Publicado
5
Detrás de escena
17:30

POV: primer turno en la tostaduría

Publicado
Recetas
9:00

Cómo calibramos el espresso

Publicado
12:00

Opinión impopular sobre el tostado oscuro

Publicado
Falló
Detrás de escena
1218:00

Calificando los pedidos de nuestros clientes de siempre

Publicado
8:30

La hora del croissant

Programado
3
Vacantes
11:00

Conoce a Ana, nuestra head barista

Manual
RecetasNueva cosecha+1
17:00

Latte art en cámara lenta

Programado
9:00

En qué se convierte 1 kg de café verde

Programado
7
Detrás de escena
11:00

Dentro de la tostaduría, de principio a fin

Programado
Recetas
18:30

Cold brew en 60 segundos

Borrador
Falta vídeo
Nueva cosechaPromo
9:00

La nueva cosecha ya está en los estantes

Programado
Borrador
Vacantes
10:00

Buscamos jefe de tostado

Programado
17:00

Iced latte, de principio a fin

Borrador
Promo
10:00

Tu mesa del sábado

Programado
15:00

Llegó la temporada del espresso tonic

Borrador
Recetas
11:00

La guía del pour-over en 4 minutos

Programado
Promo
18:00

Conoce el empaque de Oakline

Borrador
4

Hecha para que la lean agentes

Cada vez más, el primer lector de una marca o de una página web es una IA. Por eso todo en Groselia está escrito tanto para agentes como para personas. La memoria de una marca es un conjunto de documentos Markdown simples, preferencias, qué hacer y qué no, datos de la marca, que el agente lee antes de cada respuesta y edita él mismo con cuatro herramientas, como los asistentes de IA mantienen su propia memoria. Las personas abren y editan esos mismos documentos en el brand kit.

Insights pasa por un solo núcleo compartido que leen tanto el dashboard como el agente, así que cuando preguntas “¿qué está funcionando?”, la respuesta sale de los números que ves. Y el sitio web hace lo mismo con los asistentes a los que la gente pregunta por nosotros: groselia.com sirve un llms.txt, un llms-full.txt más largo y un archivo de comparación, todos generados desde una sola fuente de datos en el código, así que lo que una IA diga sobre nuestros precios o nuestra seguridad no puede alejarse del sitio.

Interacciones en el tiempo

Por semana, últimos 30 días, por fecha de publicación

Tasa de int.7,69%

Funciones clave

  • Un brand kit desde un enlace

    Pega un sitio web y conecta tus cuentas. Groselia lee el sitio, revisa tus posts anteriores y completa por sí sola logo, colores, fuentes, voz y audiencia.

  • Una conversación

    Un agente de IA con 41 herramientas escribe los textos de tus medios, elige horarios según tus propios datos de interacción, lee métricas y redacta respuestas, y luego lo junta todo en un plan.

  • Un calendario para ocho redes

    Instagram, LinkedIn, TikTok, YouTube, X, Facebook, Threads y Reddit, cada una en su formato nativo, con los posts anteriores importados para que el calendario nunca esté vacío.

  • Cada comentario respondido

    Comentarios y DMs de todas las redes en una sola bandeja de entrada, con respuestas redactadas con la voz de la marca y todo lo delicado reservado para una persona.

  • Insights en lenguaje simple

    Alcance, vistas e interacción en todas las cuentas, con honestidad sobre lo que cada plataforma reporta y lo que no, y una respuesta a “¿qué está funcionando?”.

  • Ciclos y aprobaciones

    El trabajo funciona en ciclos. Cada uno abre con una reunión y cierra con un reporte que la IA escribe a partir de los números, y cada post puede esperar la aprobación del cliente.

Construida con agentes de IA

Construí Groselia con agentes de IA como mi equipo de ingeniería. Codex y Claude Code escribieron el código, cada cambio en su propia rama, mientras yo lo diseñaba, revisaba cada pull request y decidía qué salía a producción.

Y dicté la mayoría de mis prompts en vez de escribirlos, con Wispr Flow. Un buen prompt es un brief largo y detallado, y hablando podía darlo tan rápido como lo pensaba.

  • Codex

    Agente de código

  • Claude Code

    Agente de código

  • Wispr Flow

    Dictado por voz

Sitio web

El sitio web es donde la marca habla fuerte. Lo diseñé y construí en Next.js. Está en diecisiete idiomas y le pasa el idioma de cada visitante a la app cuando se registra.

Un hero para jugar

El logo gira mientras carga la página, y luego viene el hero: objetos 3D que flotan, se inclinan con el mouse y el cursor los empuja, y una escena de scroll que termina en “Hecho para ti”.

groselia.com
El hero de groselia.com: “We run your socials. You run your business.”, con los objetos 3D alrededor del corazón

La app real, rehecha

“Inside your Groselia” muestra la plataforma tal como es, rehecha en código a partir de las pantallas de la propia app, con una marca de demostración.

groselia.com
“Inside your Groselia”: la pantalla de conexión de canales de la plataforma

Un blog

Notas sobre manejar redes sociales. Los posts son archivos MDX simples, uno por idioma, sin CMS, y cada uno tiene su propio feed y datos estructurados para que los buscadores y los asistentes de IA lo lean bien.

groselia.com
El blog de groselia.com, con el primer post iluminado bajo el cursor y más posts debajo

Un formulario que califica leads

Cada “Agendar una llamada” abre un formulario corto antes del calendario: quién eres, dónde publicas, qué necesitas y tu presupuesto. Cada paso se guarda en nuestra base de datos a medida que avanzas, así que vemos incluso respuestas a medias, y un formulario completo le avisa a nuestro equipo por Slack.

groselia.com
La página de agendamiento: “Let's talk about your social media.”, con el formulario junto a los tres pasos

Responsive, siempre

Cada página está diseñada también para celulares, no solo achicada para que quepa. Donde no hay hover, las secciones se activan al llegar al centro de la pantalla.

La página de inicio en un celular
“Always in sync with your team” en un celular, con su primera tarjeta activa
El formulario de agendamiento en un celular, en el paso que pregunta qué necesitas y tu presupuesto mensual

Ingeniería

Arquitectura

Construí la plataforma yo mismo, con la IA como compañera. La app es React y Vite, la landing es Next.js, y ambas viven en un mismo proyecto de Supabase: Postgres con row-level security, auth, realtime y storage, y 47 edge functions. Todo lo lento o programado corre en Trigger.dev, las redes sociales llegan a través de una sola API de publicación, y Stripe maneja planes, tarjetas y el boleto brasileño.

También hay un servidor MCP y un plugin de Codex, para que Groselia se pueda usar desde dentro de un agente de IA: las mismas marcas, posts y borradores, como herramientas.

Dónde se usa

El núcleo

Supabase

Detrás

La app, el sitio web y el servidor MCP están alojados en Vercel.

Pasa el cursor o toca una caja para ver qué hace y con qué se comunica.

El recorrido de un post

La mejor forma de ver cómo encajan las partes es seguir un post, desde una frase en el chat hasta sus números en Insights. Avanza paso a paso, o déjalo correr.

Web app

El dueño pide

“Publica las fotos de la cosecha el viernes, en Instagram y LinkedIn.” El mensaje va a la edge function del agente, que devuelve su respuesta en streaming.

ReactStream SSE

El agente

El agente corre sobre los mejores modelos del mercado, de Anthropic, OpenAI y otros proveedores, como una sola edge function con streaming y un loop de herramientas. El modelo recibe 41 herramientas propias más búsqueda y lectura web, con hasta ocho pasos por turno. Lo difícil nunca fue el modelo. Fue asegurar que el agente siempre sepa qué es cierto ahora mismo.

Así que en cada turno, antes de que el modelo vea el mensaje, la función reconstruye el contexto desde la base de datos: la fecha y la hora en la zona horaria del dueño, los documentos de memoria de la marca, el calendario en vivo, los planes abiertos, los documentos subidos y un resumen continuo de los mensajes anteriores. La parte estable del prompt queda en caché por una hora; esta parte nunca se cachea, así que no puede quedar desactualizada.

Dos reglas definieron el resto. Todo lo público o irreversible va a un plan que el dueño aprueba, nunca sale directo. Y un post solo existe si una herramienta lo creó en este turno, lo que terminó con la época en que el agente describía trabajo que no había hecho. Además, el agente no está atado a un modelo: cuando uno más pequeño y barato fue lo bastante bueno, pasé el chat a ese, para bajar el costo por conversación.

Contexto, rehecho en cada turno

Instrucciones y herramientasen caché por una hora
Fecha y horala zona horaria del dueño
Documentos de memoriapreferencias, qué hacer y qué no
Calendario en vivocada post y su estado
Planes abiertospropuestos y aprobados
La historia hasta ahoraun resumen continuo
→El LLMModelos de punta · hasta 8 pasos→

Llamadas a herramientas

✓get_posting_times
✓get_insights
✓propose_plan

Plan esperando aprobación

Semana de cosecha: 3 posts, 4 respuestas

El agente, armando su contexto
// Volatile block: time + memory + live calendar + active plans + rolling summary.
// Rebuilt each turn (never cached) so the agent always sees current state.
const volatileSystem = () => {
  const parts = [
    nowBlock,
    renderMemories(memories),
    renderCalendar(calendar, todayISO),
    renderPlans(plans),
  ]
  if (documents.length) parts.push(renderDocuments(documents))
  if (rollingSummary) parts.push(`STORY SO FAR (summary of earlier messages in THIS conversation):\n${rollingSummary}`)
  // … then a line for each of the brand's other conversations
  return parts.join('\n\n')
}

Modelo de datos

Unas 55 tablas, en unos pocos grupos claros. Un workspace tiene miembros y marcas; todo lo demás cuelga de la marca, así que la row-level security puede responder una sola pregunta en todas partes: ¿esta persona es miembro de esta marca?

Quién

  • Workspaces
  • Miembros
  • Roles por marca
  • Perfiles

La marca

  • Marcas
  • Colores, fuentes, logos
  • Productos y personas
  • Documentos de memoria
  • Documentos de marca

Chat

  • Conversaciones
  • Mensajes
  • Planes
  • Ítems del plan

El calendario

  • Posts
  • Uno por red
  • Métricas de posts
  • Comentarios de posts

Canales

  • Cuentas conectadas
  • Métricas diarias de cuentas
  • Configuración de canales

Bandeja de entrada y ciclos

  • Hilos de la bandeja
  • Mensajes de la bandeja
  • Borradores de respuesta
  • Ciclos
  • Reportes de ciclo

Todo lo que está debajo de “Quién” lleva un brand id; la row-level security lo verifica en cada lectura y escritura.

Confiabilidad y seguridad

Groselia publica en cuentas reales, así que las fallas caras son un post que sale dos veces, o un post que en silencio nunca sale. Ahí está la mayor parte de la ingeniería.

1Aprobar dos veces se ejecuta una

El ejecutor de planes reclama el plan, y luego cada ítem, con un update condicional, y cada clave de idempotencia sale del propio id del ítem. Un doble clic o un reintento repite la ejecución en lugar de publicar otra vez.

2Webhooks firmados y reprocesados

Cada entrega de la API de publicación debe traer una firma HMAC válida. Los handlers son idempotentes porque las entregas pueden llegar más de una vez, y un job reprocesa cualquier evento perdido cada diez minutos.

3Rechazar antes de encolar

Un solo archivo de reglas compartido dice qué acepta cada red (Instagram necesita medios, YouTube necesita video, nada de mezclar en Facebook). El programador lo revisa antes de encolar cualquier cosa, y un post rechazado vuelve como Falló, con el motivo, en lugar de quedarse en el calendario como Programado.

4Acceso verificado en cada llamada

Row-level security en Postgres, una verificación de rol en cada edge function y acceso MCP vía OAuth con PKCE, con alcance por marca y por acción, revocable desde una sola página.

Durante un tiempo mi app local y la de producción compartían una sola base de datos de producción, y una migración que se adelantó a un deploy una vez vació la página de Brand Kits en vivo. Desde entonces el trabajo de backend se hace primero en una rama de Supabase y se integra a producción junto con el código que lo necesita.

Calidad y flujo de trabajo

Cerca de 1,000 casos de prueba en 140 archivos de test cubren la app, el servidor MCP y las edge functions. Algunas verificaciones existen porque algo se rompió una vez: un test de paridad hace fallar el build si a cualquiera de los 17 idiomas le falta una clave, y las suites de base de datos del MCP corren con datos sintéticos y hacen rollback al final.

El agente tiene sus propios evals. Uno le hace al agente en producción un conjunto fijo de preguntas sobre el rendimiento de una marca, cada una en una conversación nueva, y verifica que haya leído Insights con el período correcto y que su respuesta traiga los mismos números que muestra la página de Insights.

Una sola persona entregó más de 520 pull requests tratando a los agentes de IA como un equipo. Cada cambio tiene su propia rama en su propio git worktree, así que Claude Code y Codex pueden trabajar en varias cosas a la vez sin pisarse. Cada uno corre sus tests y el chequeo de tipos, abre un pull request pequeño, y nada se mergea antes de que yo lo lea.

Un cambio→Su propio worktree→Claude Code o Codex→Tests y tipos→Un PR pequeño→Mi revisión→Merge y deploy

Desafíos técnicos

Cada uno parecía un bug en la interfaz y resultó ser algo más profundo: la forma de un stream, un timestamp, lo que una red realmente reporta, un reloj.

Hacer que la generación se sienta en vivo · Realtime

Generar un mes de posts era un spinner y después doce posts apareciendo de golpe. Se sentía lento, pero el problema no era el modelo. Era la granularidad.

Cambié la salida del modelo a JSON Lines y la transmití en streaming, insertando cada post en cuanto se cerraba su línea. El calendario escucha los cambios de Postgres con Supabase Realtime y dibuja placeholders primero, así que los posts se van escribiendo uno por uno.

La misma espera ahora se siente como ver a alguien trabajar.

Dos timestamps que nunca coincidían · Datos

Supabase avisó que la base de datos estaba por quedarse sin disk IO. Las lecturas estaban bien. Algo estaba reescribiendo las mismas filas: 344k inserts para guardar 83k mensajes.

La sincronización de la bandeja de entrada comparaba el timestamp que guardaba con el que volvía a leer. Postgres lo devolvía como +00:00 y nosotros lo escribíamos como Z, así que cada conversación parecía cambiada y cada barrido la volvía a descargar. Comparar instantes en lugar de strings lo resolvió.

Comparando dos timestamps
export function sameInstant(a: string | null | undefined, b: string | null | undefined): boolean {
  if (a == null && b == null) return true;
  if (a == null || b == null) return false;
  if (a === b) return true;
  const ta = Date.parse(a);
  const tb = Date.parse(b);
  return Number.isFinite(ta) && Number.isFinite(tb) && ta === tb;
}

Inserts para guardar 83k mensajes

344k→uno por mensaje nuevo

Conversaciones releídas en cada barrido

todas→solo las cambiadas

Las escrituras repetidas pararon, y los historiales de la bandeja de entrada que nunca terminaban se sincronizaron por primera vez.

Un cero no siempre es un cero · Analítica

Nuestro proveedor de analítica devuelve la misma estructura para todas las redes y llena con 0 todo lo que una red no reporta. Instagram “tenía” cero clics en cada post. Los gráficos mentían con educación.

Un registro de métricas por plataforma que guarda lo que cada red realmente reporta, deja en null el resto al ingerirlo y permite que cada gráfico muestre, degrade u oculte una métrica con honestidad.

Insights en ocho redes que nunca muestran un número que nadie midió.

Sesión cerrada por un reloj adelantado · Auth

A mi cofundador se le cerraba la sesión en el instante en que entraba: quince renovaciones de token por segundo y luego un rate limit. Nadie más podía reproducirlo.

El reloj de su computadora estaba más de una hora adelantado, así que cada token nuevo parecía vencido. Envolví el almacenamiento de la sesión para volver a anclar el vencimiento al reloj local cuando se guarda una sesión.

Renovaciones de token por segundo

15→0

El inicio de sesión funciona con cualquier reloj de dispositivo, y la consola avisa cuando uno está desfasado.

Aprendizajes

El gusto es la ventaja

Cuando la IA abarata construir, todos pueden lanzar, y casi todo se ve igual. Lo que sigue siendo escaso es el criterio: saber qué dejar fuera, cómo debe sentirse una pantalla, cuándo una animación es una de más. Para un equipo de dos que no puede gastar más que nadie, el gusto es lo que hace que Groselia se vea y funcione como algo mucho más grande, y es la única parte que nunca le entregaría a un modelo.

Vende el resultado, no la herramienta

Nadie quería operar un software de marketing, por bueno que fuera. Querían que los vieran. Vender el trabajo en lugar de la app hizo que el producto importara más, no menos: se volvió el motor que usamos todos los días, así que cada detalle áspero se arregló.

El contexto le gana al ingenio

El agente mejoró cuando supo más, no cuando el prompt se volvió más ingenioso. Darle el calendario en vivo, la memoria y los planes abiertos en cada turno, y hacer que pregunte antes de actuar, hizo más que cualquier mejora de modelo.

La IA cambia el tamaño del equipo

Con agentes escribiendo la mayor parte del código en paralelo, mi trabajo pasó a ser decidir qué construir, revisar cada cambio y mantener la vara alta. Una persona ahora puede sacar adelante lo que antes requería un equipo, siempre que siga siendo el editor.

Siguiente proyecto

Todos los proyectos