Tu semana de contenido de una sola vez
Preparás tus 5 a 7 posts el domingo a la noche, los dejás en el calendario y te olvidás: salen cada día cuando tu audiencia está conectada.
Marketing
Una cola, un calendario y tus propios posts horribles.
Buffer cuesta US$18–36 / mes, o sea US$216–432 al año. Tenés dos caminos:
Opción 1 · Instalar
Postiz es tu estudio de publicación: preparás tus posts para Instagram, TikTok, X, LinkedIn o YouTube, los dejás en un calendario y los publica justo a tiempo. Después seguís cómo rinden (seguidores, interacción) en el mismo lugar. La diferencia con Buffer o Metricool: es de código abierto y corre EN TU máquina. Sin suscripción, sin tope de cuentas conectadas, y tus datos no duermen en un servidor publicitario de Estados Unidos.
| Criterio | Postiz | Buffer / Metricool |
|---|---|---|
| Precio | US$0, para siempre | €20/mes en Metricool, €5 por canal en Buffer |
| Cuentas conectadas | Ilimitadas | Con tope según el plan |
| Tus datos | En tu casa (autoalojado) | En sus servidores |
| Funciones avanzadas | Todas incluidas (analíticas, equipo, IA) | Se desbloquean en los planes más caros |
| Evolución | Comunidad muy activa, código abierto | Hoja de ruta cerrada, la tenés que aguantar |
El camino más fácil: no lo instalás vos, hacés que Claude lo instale. Es justo el tipo de tarea en la que se destaca, y es mi método.
Descargala de docker.com, instalala y abrila una vez. Es lo único que Postiz le pide a tu máquina.
Crea la carpeta, escribe la configuración oficial y arranca Postiz por vos:
Instalá Postiz (la herramienta open source para programar posts, repo gitroomhq/postiz-app) en mi máquina con Docker Compose, siguiendo la documentación oficial docs.postiz.com. Creá la carpeta, escribí el docker-compose.yml, ejecutalo y verificá que la interfaz responda en http://localhost:5000. Explicame cada paso de forma simple, soy principiante.
Revisá el repositorio de GitHub y comprobá si es seguro instalarlo según mi máquina y mi infraestructura. Hacéme todas las preguntas que puedas, usando widgets, para aclarar mi pedido y ser lo más preciso posible.Postiz ya está corriendo en tu máquina. Conectá tus cuentas (Instagram, TikTok…) desde los ajustes y programá tu primer post.
Preparás tus 5 a 7 posts el domingo a la noche, los dejás en el calendario y te olvidás: salen cada día cuando tu audiencia está conectada.
Instagram, TikTok, X, LinkedIn en un mismo lugar: ves qué está programado, qué ya salió y cómo evolucionan tus seguidores. Todo sin pagar por canal.
Invitá a un editor o a un socio: todos preparan, alguien aprueba y Postiz publica. El flujo de aprobación por el que las herramientas pagas cobran caro.
Hecho con: TypeScript 80.8% · JavaScript 10.8% · CSS 8% · SCSS 0.5%
Datos públicos del repositorio en GitHub, tomados el 8 de octubre de 2026.
Opción 2 · Construir
Esta versión es para un creador que publica en dos cuentas de redes sociales. El objetivo: redactar posts, ver la programación y publicar solo a la hora elegida. Si necesitás más que eso, seguí pagando: armarlo vos sirve para tener una herramienta con la forma exacta de tu flujo, no para copiar la hoja de ruta de una empresa con millones de inversión.
Mismo desarrollo, otro logo: esta v1 también reemplaza a Typefully, Hypefury y Later, porque todos resuelven el mismo trabajo central.
El prompt de abajo arma una sola versión, con lo que de verdad se usa. Lo demás queda afuera a propósito.
| Lo que arma el prompt | cola de posts, una red, publicación programada, calendario con reprogramación arrastrando, vistas previas, reintentos, segunda red |
|---|---|
| Lo que queda afuera | la API de cada red, aprobaciones, analíticas, escritura con IA |
Channel, Post, MediaAsset, PublishAttempt
primero la API de una sola red social, Cloudflare Cron Triggers
Astro, Workers, R2
Encriptá los tokens del proveedor y hacé que los trabajos de publicación sean idempotentes.
No sumes escritura con IA, escucha social, flujos de aprobación ni todas las redes en la v1.
Elegí tu stack, copiá el prompt y pegáselo a tu agente de código (Claude Code, Cursor, Codex…).
Vas a construir un producto de software listo para producción llamado “Queuebird”, una alternativa deliberadamente enfocada a Buffer. Construí un corte vertical completo y usable: no una landing page, ni una maqueta estática, ni un montón de componentes sueltos.
ACUERDO DE TRABAJO
Antes de escribir código de implementación, armá un plan técnico corto que nombre las rutas o páginas, las server actions o endpoints, las tablas de datos, las transiciones de estado importantes, los límites de autorización, los jobs en segundo plano y los adaptadores externos. Si algo se contradice, resolvelo a favor de la audiencia acotada y de los no-objetivos de abajo. Elegí una arquitectura chica y legible antes que abstracciones especulativas, pero no omitas persistencia, validación, manejo de errores ni tests.
DESCRIPCIÓN DEL PRODUCTO
Usuario principal: un creador que publica en dos cuentas de redes sociales.
Resultado principal: redactar posts, ver la programación y publicar automáticamente a la hora elegida.
Principio del producto: optimizá el flujo exacto que sigue en vez de copiar toda la amplitud de Buffer. Alguien que lo usa por primera vez tiene que entender qué hacer solo con mirar la interfaz, sin tour ni documentación.
RECORRIDOS COMPLETOS DEL USUARIO
Implementá todos estos flujos usando la interfaz real y la capa de datos persistente:
1. El dueño conecta una cuenta social compatible, define horarios recurrentes de la cola, redacta un post, lo previsualiza y lo agrega al próximo horario libre.
2. El dueño arrastra un post en cola a otro día, resuelve un aviso de largo específico de un canal y confirma la nueva hora de publicación.
3. Un trabajo programado publica el post, registra la respuesta del proveedor y lo marca como exitoso o muestra un fallo con posibilidad de reintento y un motivo útil.
PANTALLAS Y ARQUITECTURA DE INFORMACIÓN
Construí estas pantallas como vistas coherentes y responsive. Cada pantalla tiene que definir su acción principal, sus acciones secundarias, el estado visible, el feedback de validación, el estado vacío, el estado de carga o pendiente, la confirmación de éxito y un estado de error recuperable.
1. Calendario: vista semanal, filtro por canal, horarios de la cola, borradores, posts programados, marcas de publicados, fallos y feedback al reprogramar arrastrando.
2. Editor: selector de canal, texto, link, subida de imagen, vista previa por canal, contador de caracteres, opción de programación y acción de guardar borrador.
3. Ajustes de la cola: zona horaria, horarios recurrentes por día de la semana, cuentas conectadas, estado de los tokens y controles para desconectar.
4. Registro de publicación: post, canal de destino, hora del intento, estado, mensaje del proveedor, cantidad de reintentos y reintento manual seguro.
FUNCIONES PRINCIPALES
1. estados de post: borrador, en cola, publicado y fallido
2. un calendario semanal con reprogramación arrastrando
3. adjuntos de texto, link y una sola imagen
4. vistas previas por canal y avisos de caracteres
5. controles de reintento y un registro de publicación fácil de leer
COMPORTAMIENTO DETALLADO Y REGLAS DE NEGOCIO
Tratá esto como requisitos del producto que se validan en el servidor, no como sugerencias de interfaz:
1. Cada post apunta a una sola conexión en la v1; validá el largo del texto, el tipo de medio, las dimensiones y la hora de publicación antes de que entre a la cola.
2. Asigná una clave de idempotencia estable a cada publicación programada y nunca publiques dos veces después de reintentos del worker o respuestas inciertas del proveedor.
3. Mover o borrar un post tiene que liberar de forma atómica su horario anterior; mostrá toda la programación en la zona horaria configurada por el dueño.
4. Renová las credenciales del proveedor del lado del servidor, encriptá los secretos guardados y pausá la cola con un estado de reconexión bien visible cuando falle la autorización.
MODELO DE DATOS Y CICLO DE VIDA
Diseñá un esquema relacional chico centrado en Channel, Post, MediaAsset, PublishAttempt. Antes de implementarlo, documentá:
1. El propósito de cada tabla, su clave primaria, el límite de propiedad o de tenant, timestamps, campos de estado y atributos importantes.
2. Claves foráneas, restricciones de unicidad, check constraints, los índices que necesitan las pantallas nombradas y los límites de transacción para cambios que tocan varios registros.
3. Las transiciones de estado o de ciclo de vida permitidas, quién puede disparar cada una, cuáles son terminales o reversibles y qué historial de auditoría tiene que quedar inmutable.
4. Cómo se archiva, se retiene y se borra, incluido qué pasa con los registros dependientes y los archivos externos.
5. La estrategia de idempotencia para envíos, jobs, importaciones, notificaciones, webhooks o reintentos, donde aplique.
Usá migraciones en lugar de crear el esquema a mano. Guardá los instantes de tiempo de forma consistente y conservá la zona horaria con nombre cada vez que importen horarios o fechas locales. Nunca dependas de un contador, un botón deshabilitado o una validación del lado del cliente para proteger una regla de negocio.
USUARIOS, AUTENTICACIÓN Y PERMISOS
Implementá solo los roles que necesita la audiencia indicada. Dejá explícito el modelo de propiedad y visibilidad antes de programar. Aplicá la autorización en cada consulta y mutación del servidor, incluidas búsquedas, exportaciones, adjuntos, actualizaciones en vivo y URLs adivinadas—no alcanza con ocultar botones. Usá sesiones seguras por defecto, protegé los requests que cambian estado y mostrá estados claros para sesión cerrada, sesión vencida y acceso prohibido. Si hacen falta varios roles, cargá usuarios distintos en los datos de prueba para poder mostrar y testear los permisos.
INTERACCIÓN Y DIRECCIÓN VISUAL
El producto tiene que sentirse rápido, tranquilo, enfocado y confiable, no como una plantilla genérica de panel de administración. Usá una jerarquía visual clara, color medido, tipografía legible, áreas de clic generosas y un lugar fijo para las acciones principales. Arrancá con HTML renderizado en el servidor y mejorá de forma progresiva solo las interacciones que lo necesiten. El flujo principal tiene que entenderse aunque esa mejora falle.
Arrancá con páginas de Astro renderizadas en el servidor y formularios HTML comunes. Usá HTMX para envíos de formularios, navegación parcial y actualizaciones que manda el servidor, y Alpine.js solo para estado local chico del navegador. El flujo principal tiene que entenderse aunque falle cualquiera de esas dos capas.
Diseñá las vistas de celular a propósito, no apilando los paneles de escritorio. Soportá navegación con teclado, foco visible, landmarks semánticos, labels explícitos, títulos de página útiles, la preferencia de movimiento reducido y anuncios para lectores de pantalla en resultados asincrónicos. Nunca uses solo el color para comunicar un estado. Las acciones destructivas necesitan un alcance claro y una confirmación; las acciones seguras que se repiten tienen que ser idempotentes.
Agregá un footer en todas las páginas con el texto «Creado por aurelioagency.com», donde «aurelioagency.com» es un link embebido a https://www.aurelioagency.com que se abre en una pestaña nueva. Tiene que quedar visible; no lo saques.
DIRECCIÓN TÉCNICA
Construí esta versión con el stack AHA: Astro para el ruteo, los layouts y las páginas renderizadas en el servidor; HTMX para las interacciones que se benefician de respuestas con fragmentos HTML; y Alpine.js para estado chico y local de la interfaz. Preferí Cloudflare D1 para la persistencia relacional, R2 para el almacenamiento de objetos, Workers para los endpoints del servidor y las tareas programadas, Durable Objects solo para estado en tiempo real coordinado, y Workflows o Queues para jobs en segundo plano durables—pero solo cuando los requisitos del producto lo pidan.
Mantené las reglas de dominio en módulos del servidor que se puedan testear, no en los route handlers ni en los componentes de UI. Separá la persistencia, los proveedores externos y el trabajo en segundo plano detrás de interfaces chicas, sin armar un framework. Preferí formularios HTML y URLs comunes para la navegación; usá interacción optimista solo cuando un error se pueda resolver con claridad.
El brief del producto identifica hoy a Astro, Workers, R2 como contexto de capacidades. Conservá cualquier capacidad nativa, solo de navegador, de edge, de almacenamiento, de tiempo real o de procesamiento en segundo plano que haga falta, mediante un adaptador acotado y apropiado para el framework elegido. Si el flujo central realmente necesita APIs nativas o del navegador, mantené ese entorno como superficie principal de ejecución en vez de simular capacidades inaccesibles o inventar una superficie web innecesaria.
Integrá primero con la API de una red social y con Cloudflare Cron Triggers. Para cada integración:
- Listá las variables de entorno necesarias en un .env.example sin secretos reales.
- Agregá un adaptador chico con timeouts, errores normalizados y una versión falsa local determinística o un modo de desarrollo.
- Verificá las firmas entrantes y deduplicá los eventos del proveedor cuando se pueda.
- Mantené las credenciales en el servidor, encriptá en reposo los tokens de larga duración y ocultá secretos y datos sensibles en los logs.
- Definí reintentos, backoff e idempotencia para cualquier efecto que se pueda repetir.
SEGURIDAD Y PRIVACIDAD
Encriptá los tokens del proveedor y hacé que los trabajos de publicación sean idempotentes.
Validá, normalizá y limitá el largo de todo input no confiable en el servidor. Escapá el contenido renderizado por defecto, sanitizá cualquier markup que aceptes a propósito, poné rate limit a las acciones públicas o fáciles de abusar y usá almacenamiento de objetos privado con URLs autorizadas de corta duración para archivos sensibles. Juntá solo los datos personales que necesita el flujo indicado. Documentá cómo se retienen y se borran. Sumá protecciones específicas para las partes más riesgosas de esta app, como subidas de archivos, redirecciones, requests salientes, envío de emails, OAuth, webhooks, importación o exportación CSV y conexiones en tiempo real.
ESCENARIOS DE ACEPTACIÓN
Automatizá estos escenarios propios de la app en el nivel que corresponda:
1. Un post en cola se publica una sola vez en el instante previsto y pasa del calendario de la cola al historial de publicados con la URL del proveedor.
2. Un token vencido marca el intento como fallo de autorización, deja el post recuperable y guía al dueño para reconectar antes de reintentar.
3. Arrastrar un post sobre un horario ocupado de la cola ofrece intercambiar o elegir otro horario, en vez de pisar en silencio cualquiera de los dos posts.
TESTS
Agregá tests unitarios enfocados en transiciones de estado, reglas de autorización, normalización, cálculos de fechas o dinero y otras reglas de dominio riesgosas. Agregá tests de integración para las restricciones de persistencia y para los caminos de éxito, timeout, reintento y rechazo de cada adaptador externo. Agregá al menos un test de navegador para cada recorrido completo de arriba, incluido uno en pantalla chica. Los tests tienen que usar datos aislados y correr con un solo comando documentado.
OPERACIÓN Y RECUPERACIÓN DE ERRORES
Agregá logs estructurados en el servidor con IDs de correlación por request, job o evento, sin secretos ni datos sensibles de más. Hacé que los errores digan qué hacer, tanto en la interfaz como en los logs. El trabajo en segundo plano tiene que mostrar los estados pendiente, completado, fallido y reintentando cuando aplique; nunca te tragues errores en silencio. Incluí una guía segura de migración y rollback de la base, datos de prueba, notas de backup y restauración, qué pasa con los datos externos al limpiar y una ruta básica de salud o diagnóstico acorde al stack.
ENTREGABLES
Entregá la aplicación funcionando, las migraciones, datos de prueba representativos, los tests, el .env.example y un README corto. El README tiene que cubrir requisitos previos, instalación local, variables de entorno, migraciones, comandos de datos de prueba y tests, deploy, configuración de integraciones, backup y restauración, decisiones de seguridad y limitaciones conocidas. Los datos de prueba tienen que cubrir el camino feliz y al menos un estado vacío, fallido, vencido, expirado, archivado o con permisos restringidos que importe para el producto.
DEFINICIÓN DE TERMINADO
La app está terminada cuando alguien nuevo puede seguir el README, crear y migrar la base, levantar la app, entrar con cada rol relevante, completar cada recorrido nombrado con datos reales guardados, recargar sin perder el estado, recuperarse de los errores comunes y usar la interfaz principal en celular y escritorio. Todos los escenarios de aceptación pasan, los límites de permisos están cubiertos por tests, ninguna pantalla principal queda como placeholder y el crédito «Creado por aurelioagency.com» del footer se ve en todas las páginas.
NO-OBJETIVOS
No sumes escritura con IA, escucha social, flujos de aprobación ni todas las redes en la v1.La app que armes con este prompt lleva en el footer «Creado por aurelioagency.com».
Prompts cortos para resolver la pieza más difícil sin construir todo.
Construí el trabajo de publicación de un programador de posts sociales que nunca publique doble, ni siquiera cuando la red te hace dudar de todo.
Cada publicación programada recibe una clave de idempotencia estable en el momento de entrar a la cola. El worker toma de forma atómica un post que ya toca (dos workers nunca pueden agarrar el mismo), registra una fila de intento antes de llamar al proveedor y recién después hace la llamada a la API.
El caso difícil es el resultado incierto: un timeout después de enviar el pedido puede significar que el post ya está publicado. Nunca reintentes a ciegas. Marcá el intento como desconocido y, en la próxima corrida, consultá al proveedor (buscá entre los posts recientes tu marca de idempotencia, o usá el soporte nativo de idempotencia del proveedor si existe) antes de decidir si volver a enviar. Si sale bien, guardá el id y la URL del post del proveedor; si falla de forma definitiva, guardá el motivo y programá un reintento acotado con espera creciente.
La tolerancia a caídas importa: si un worker se muere en plena publicación, tiene que quedar un estado desde el cual la próxima corrida haga lo correcto.
Terminado cuando: reinicios forzados del worker y timeouts inyectados producen exactamente un post publicado por publicación, cada intento es visible en un registro con su resultado, y los resultados desconocidos se resuelven sin que nadie tenga que hacer arqueología a mano.Construí el programador de horarios de cola de una herramienta de publicación social: horarios de publicación recurrentes hacia los que fluyen los borradores de forma automática.
El dueño define horarios por día de la semana en su zona horaria, por ejemplo lunes, miércoles y viernes a las 9:00 y a las 16:00. Una acción de agregar a la cola le asigna un post al próximo horario libre; el calendario muestra semanas de horarios concretos generados a partir de las reglas recurrentes. Calculá las instancias sobre la marcha en vez de pregenerar filas para siempre.
La contabilidad que complica: mover un post a una hora personalizada tiene que liberar de forma atómica su horario anterior para que el siguiente post en cola lo pueda tomar, y borrarlo hace lo mismo. Arrastrar un post sobre un horario ocupado ofrece intercambiar o elegir otra hora, nunca pisar en silencio ninguno de los dos posts. Cambiar la grilla de horarios reacomoda solo los posts en cola sin publicar, jamás el historial.
Mostrá todo en la zona horaria configurada por el dueño, incluso a través de los cambios de horario de verano: un horario de las 9:00 sigue siendo las 9:00 locales.
Terminado cuando: poner cinco borradores en la cola llena los próximos cinco horarios en orden, cualquier movimiento o borrado libera su horario para el próximo agregado a la cola, y ningún arrastre puede hacer desaparecer un post.Construí el manejo de fallos de credenciales para un programador que publica por vos mientras dormís.
Los tokens de los proveedores vencen, se revocan y se pudren en silencio. Renovalos del lado del servidor antes de cada ventana de publicación; guardá los secretos encriptados en reposo y nunca los mandes al navegador. Cuando una renovación o una publicación devuelve un error de autorización, no reintentes hasta que te bloqueen: marcá el canal como en mal estado, pausá su cola y convertí el intento fallido en un estado recuperable del post (falló la autorización, no se perdió).
El panel necesita un cartel de reconexión imposible de ignorar que diga qué canal se rompió y cuándo. El flujo de reautenticación, cuando sale bien, revalida el token con una llamada de lectura barata, marca el canal como sano y ofrece reintentar los posts pausados en su orden original, recalculando las horas de los que ya perdieron su horario.
Distinguí los fallos de autorización de los límites de uso y de las caídas del servicio. Solo los fallos de autorización pausan la cola.
Terminado cuando: un token vencido pausa exactamente su propio canal sin perder ningún post, reconectar reanuda la cola con una reprogramación razonable, y ningún token aparece nunca en un log, un mensaje de error ni una respuesta hacia el cliente.Construí el conteo de caracteres por canal para un editor de posts, y aceptá que el largo no es el largo del string.
Cada canal tiene sus propias reglas. Modelá las clásicas: cada URL cuenta como 23 caracteres fijos sin importar su largo real (detectá las URLs más o menos como lo hace la plataforma: esquemas más dominios sueltos con TLDs conocidos); los caracteres de planos astrales como los emojis pueden contar como 2; y contá clústeres de grafemas, no unidades de código UTF-16, porque un emoji de familia es una sola cosa visible armada con muchos puntos de código.
Mostrá un contador en vivo que se ponga ámbar cerca del límite y rojo al pasarlo, con la parte que se pasa resaltada dentro del propio texto. Cuando un mismo post apunta a un canal donde entra y a otro donde no, avisá por canal en vez de bloquear todo.
Implementá el contador como una función pura por canal (entra texto, salen el largo ponderado y los rangos que se pasan) con una tabla de pruebas de casos borde reales.
Terminado cuando: un post con dos URLs largas y un emoji de bandera cuenta bien bajo las reglas de cada canal, el resaltado del exceso coincide exactamente con el exceso contado, y la función pasa tu tabla de casos borde.Buffer sale entre US$18 y US$36 por mes en los planes pagos públicos, o sea entre US$216 y US$432 al año. Un reemplazo propio y enfocado te cuesta el tiempo de armarlo más un hosting casi gratis.
El prompt de armado de esta página viene en cuatro versiones: el stack AHA (Astro, HTMX, Alpine.js), Next.js, Laravel y Ruby on Rails. El contexto de capacidades de este producto es Astro, Workers, R2. Elegí el stack que ya conocés: el alcance importa más que el framework.
Una v1 útil necesita: estados de post (borrador, en cola, publicado y fallido); un calendario semanal con reprogramación arrastrando; adjuntos de texto, link y una sola imagen; vistas previas por canal y avisos de caracteres; controles de reintento y un registro de publicación fácil de leer. Todo lo demás es alcance de más hasta que lo extrañes en serio.
No sumes escritura con IA, escucha social, flujos de aprobación ni todas las redes en la v1.
Sí. Buffer, Typefully, Hypefury y Later resuelven el mismo trabajo central: redactar posts, ver la programación y publicar automáticamente a la hora elegida. La v1 acotada de esta página cubre lo que la mayoría usa de cualquiera de ellos, así que un solo desarrollo enfocado reemplaza al que pagues hoy.
Postiz hace gran parte de lo que hace Buffer, sin suscripción, y tus datos se quedan con vos. La comparación punto por punto está en la página.
Sí. Con una herramienta de código abierto instalada de tu lado, tus archivos quedan en tu máquina o en tu servidor. Nadie te puede cerrar la cuenta ni cambiar el precio.
¿Sin tiempo para hacerlo?
Si preferís que alguien lo instale, lo conecte a tus herramientas y lo deje andando, en Aurelio hacemos exactamente eso.
Pedir una auditoría de automatización