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.

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.
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.
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.
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.
25 modelos · 53 migraciones
Cada capa habla a través de la misma capa de datos tipada, en vez de una API REST.
se despliega solo en cada merge a main
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.
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.
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.
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.



