programaConNosotros es una comunidad de estudiantes y profesionales de ingeniería de software que cofundamos en Tucumán, Argentina, en 2020 — y la plataforma de código abierto que venimos construyendo para ella desde 2024 está en vivo hoy en programaconnosotros.com.

DIZENZ patrocina a la comunidad, y lidero el desarrollo de la plataforma junto a un grupo rotativo de colaboradores de la propia comunidad. Esto no es un proyecto para un cliente. Es software que construimos para algo que nosotros mismos empezamos, lo que significa que sentimos cada detalle sin pulir en carne propia y cada mejora llega justo donde vivimos.

Este caso de estudio cuenta cómo la plataforma pasó de ser un sitio institucional simple a una red social completa, y las decisiones de ingeniería que le permitieron a una comunidad de voluntarios seguir construyéndola.

Agustín presentando detalles técnicos del proyecto en una Dev Meetup de programaConNosotros en Once57 Cowork (20 de febrero de 2026).
Agustín presentando detalles técnicos del proyecto en una Dev Meetup de programaConNosotros en Once57 Cowork (20 de febrero de 2026).
01

El Desafío

Durante sus primeros cuatro años, programaConNosotros vivió enteramente en WhatsApp y Discord. Eventos, charlas, cursos, ofertas laborales y la propia historia de la comunidad quedaban en el scroll de los chats: valiosos y reales, pero casi imposibles de volver a encontrar una vez que pasaban. Alguien nuevo no tenía un solo lugar donde ver qué era la comunidad, y mucho menos sumarse.

La idea original en 2024 era modesta: construir un sitio institucional. Pero un sitio estático no resuelve el problema de fondo —un historial de chat no es un archivo, y una comunidad que solo existe en grupos de chat no tiene un hogar durable. Lo que la comunidad realmente necesitaba era un lugar propio: una plataforma en la que los miembros pudieran loguearse, contribuir y crecer, no solo una página que la describe desde afuera.

02

El Enfoque

El alcance creció en consecuencia. Lo que arrancó como un sitio institucional se convirtió en una red social completa con cuentas de usuario: perfiles, notificaciones, likes y comentarios en publicaciones de consejos, un directorio de miembros. Cada evento, charla, curso y testimonio vive ahora en una base de datos en vez de un hilo de chat, buscable y permanente.

WhatsApp y Discord

  • Eventos, charlas y cursos enterrados en el scroll del chat
  • Ofertas laborales e historia perdidas apenas pasaban de largo
  • Ningún lugar único donde alguien nuevo pudiera ver qué era la comunidad

La Plataforma

  • Cuentas de miembros con perfiles y un directorio de miembros
  • Notificaciones, likes y comentarios en publicaciones de consejos
  • Cada evento, charla, curso y testimonio en un solo lugar

Una base de datos, no un hilo de chat

Cada entidad que produce la comunidad vive ahora en Postgres —buscable, permanente y propiedad de quienes la construyeron.

buscablepermanentepropiedad de la comunidad
Del scroll efímero del chat a una plataforma durable y buscable.

La decisión más importante fue construir la plataforma en sí misma como un proyecto de la comunidad. Es de código abierto, y cualquier miembro puede contribuir —lo que hace que la plataforma sea también el propio campo de entrenamiento de la comunidad: ingenieros que nunca subieron código a producción pueden trabajar en un código real de Next.js/Postgres, abrir pull requests reales, y construir un historial público en GitHub, revisado y mergeado por sus pares.

Abre un PR real

Trabaja en un código real de Next.js/Postgres —muchas veces su primer pull request a producción.

Revisado por pares

Revisado y mergeado por otros miembros de la comunidad, no por mantenedores externos.

Historial público en GitHub

Se despliega en programaconnosotros.com y pasa a formar parte de un historial público de contribuciones.

abierto a cualquier miembro de la comunidadun campo de entrenamiento tanto como un código
Cualquier miembro puede abrir un PR —revisado por pares, mergeado, y parte de un historial público.
03

Un Producto Real, Construido a la Vista de Todos

El stack es Next.js 16 con App Router y Server Actions en vez de una capa REST —el mismo patrón que usamos en DIZENZ— respaldado por Postgres a través de Prisma: 25 modelos y 53 migraciones que cubren desde eventos y propuestas de charlas hasta proyectos de software construidos por la propia comunidad.

La autenticación está hecha a mano en vez de tercerizada: contraseñas hasheadas con bcrypt, sesiones respaldadas en base de datos detrás de una cookie httpOnly, y códigos con límite de tiempo y de intentos para verificación de email y recuperación de contraseña. Las subidas de los usuarios van directo del navegador a S3 mediante URLs prefirmadas y se sirven a través de CloudFront, y todo se despliega solo: Kamal empuja cada build nuevo a un servidor propio en AWS detrás de Let's Encrypt en cada merge a main, en vez de delegar eso a un PaaS.

Next.js 16 App RouterServer ActionsPrismaPostgresauth con bcryptS3 + CloudFrontKamalLet's Encrypt

25 modelos · 53 migraciones

Cada capa habla a través de la misma capa de datos tipada, en vez de una API REST.

sin capa RESTcookies de sesión httpOnlyAWS autogestionado

se despliega solo en cada merge a main

El stack: Server Actions de Next.js sobre Postgres, desplegado en cada merge.

Un bug en particular es un buen ejemplo del tipo de detalle con el que se topa un proyecto de esta escala. Los flyers de los eventos son fotos de 4 a 5MB sacadas directo del celular, y WhatsApp descarta silenciosamente la vista previa de un link cuando la imagen supera aproximadamente 600KB-1MB —así que los links de eventos compartidos mostraban el logo de la comunidad en vez del flyer real. La solución fue hacer pasar cada flyer por el optimizador de imágenes de Next antes de entregarle la URL a los crawlers de redes sociales, generando al vuelo un og:image redimensionado y compatible con los scrapers en vez de apuntar directo a la imagen sin procesar.

Subida Cruda del Flyer

  • Fotos de 4 a 5MB sacadas directo del celular
  • WhatsApp descarta la vista previa a partir de ~600KB–1MB
  • Los links compartidos mostraban el logo de la comunidad

Optimizado al Vuelo

  • Cada flyer pasa por el optimizador de imágenes de Next
  • Se genera un og:image redimensionado y compatible con scrapers
  • Los crawlers de redes sociales reciben el flyer real

La solución

Apuntar los crawlers al optimizador, no a la imagen sin procesar —sin mantener un pipeline extra de re-codificación.

optimizador de imágenes de Next.jsog:imagesin pipeline extra
WhatsApp descarta silenciosamente las vistas previas grandes —el flyer ahora pasa primero por el optimizador de Next.

Como todo el código está abierto a colaboradores trabajando en paralelo, el entorno de desarrollo tuvo que escalar con ellos: cada worktree de git tiene su propia base de datos Postgres aislada, que se crea y se puebla automáticamente, así dos personas —o dos agentes de IA— pueden trabajar en features distintas al mismo tiempo sin pisarse los datos.

Nuevo worktree de git

Cada colaborador —o agente de IA— hace checkout de un worktree aislado para su feature.

Base de datos Postgres aislada

Una base de datos dedicada se crea y se puebla sola automáticamente, sin configuración manual.

Trabajo en paralelo, sin choques

Dos personas, o dos agentes de IA, trabajan en features distintas sin pisarse los datos.

escala con la cantidad de colaboradoresel mismo aislamiento para personas y agentes de IA
Cada worktree tiene su propia base de datos poblada —trabajo en paralelo sin choques de datos.
04

Lo Que Construimos

La plataforma hoy cubre más de 30 rutas a lo largo de toda la actividad de la comunidad:

Gestión de Eventos

Creación, inscripción con límite de cupos, listado de sponsors, y un flujo de propuestas de charlas que convierte una propuesta aprobada en una charla programada.

Charlas, Cursos y Proyectos

Un archivo de charlas, un catálogo curado de cursos, una vidriera de proyectos de software construidos por la comunidad, y una página de podcast.

Club de Lectura

Una biblioteca de libros y un lector de artículos integrado en la plataforma, que trae, limpia y renderiza de forma segura artículos externos del lado del servidor.

Herramientas, Historia y Galería

Un catálogo de herramientas, una página ilustrada de historia de la comunidad, una galería de fotos, y momentos destacados curados de las propias conversaciones de WhatsApp de la comunidad.

Testimonios y Anuncios

Testimonios de miembros, anuncios de la comunidad, y notificaciones dentro de la app.

Capa de Administración

Dashboards de analítica, seguimiento de visitas de página, y visores de logs de errores y de aplicación —construida internamente en vez de tercerizada a un SDK externo.

05

Resultados

La plataforma está en desarrollo continuo desde 2024, construida y revisada de la misma forma en que construiríamos cualquier producto de producción:

1.338

commits desde junio de 2024

305

pull requests mergeados

18

identidades de colaboradores

~46.000

líneas de TypeScript en ~480 archivos

Un gate local antes de cada push

Lint, format check, tests y build —forzado localmente antes de que cualquier cambio llegue a la rama compartida, con 68 suites de tests que cubren la capa de server actions.

lint
format
test
build