Introducción
¿Recuerdan cuando les conté sobre cómo creé una API histórica que devolvía efemérides de cualquier día del año? Bueno, ese proyecto ha evolucionado de una manera que nunca imaginé. Lo que comenzó como un simple endpoint para mi bot de Discord ahora se ha convertido en una plataforma donde la comunidad puede contribuir activamente a preservar y compartir la historia.

Cuando lancé la API de "Un Día Como Hoy", mi objetivo era simple: ofrecer un servicio que compartiera hechos históricos. Pero con el tiempo me di cuenta de que esto podía ser mucho más que un simple repositorio de datos estáticos. La historia es visual, y las imágenes tienen el poder de transportarnos en el tiempo de una manera que las palabras por sí solas no pueden lograr.
El problema de las imágenes históricas
Después de añadir el frontend a la API, me encontré con un desafío interesante: tenía cientos de efemérides, pero no tenían imágenes asociadas. Claro, podría haberme sentado yo solo a buscar y añadir imágenes para cada evento histórico, pero seamos honestos, eso tomaría años. Y más importante aún, ¿por qué debería hacerlo solo cuando hay una comunidad ahí afuera que podría estar igual de interesada en contribuir?

Fue entonces cuando recordé uno de los pilares fundamentales del desarrollo moderno: la colaboración abierta. Si algo he aprendido de mi experiencia con el código abierto, es que las mejores cosas se construyen en comunidad.
La solución: GitHub como puente
La respuesta estaba frente a mí todo el tiempo: GitHub. La plataforma que uso diariamente para gestionar el código del proyecto podía convertirse también en el canal perfecto para recibir contribuciones de la comunidad. Pero no quería que fuera complicado, no quería que la gente tuviera que clonar repositorios, crear branches manualmente o escribir código para contribuir.
Necesitaba algo simple, intuitivo, que cualquier persona pudiera usar sin importar su nivel técnico.
Cómo funciona
La nueva funcionalidad que implementé tiene tres componentes principales que trabajan juntos de manera armoniosa:
1. Autenticación con GitHub OAuth
Lo primero era permitir que los usuarios se autenticaran de manera segura. En lugar de crear un sistema de usuarios desde cero, decidí aprovechar GitHub OAuth. Esto tiene varias ventajas:
- Los usuarios no necesitan crear otra cuenta más
- La autenticación es segura y confiable
- Automáticamente obtengo el username para atribuir las contribuciones
- Es perfectamente compatible con el flujo de Pull Requests
Cuando visitas la página y decides contribuir con una imagen, simplemente haces clic en "Iniciar sesión con GitHub" y listo. Te va a permitir subir la imagen sin problema.

2. Sistema de contribuciones
Una vez autenticado, el proceso es increíblemente simple:
- Navegas por las efemérides del día
- Encuentras una que te interese y que no tenga imagen (o quieras mejorar)
- Subes una imagen relevante desde tu computadora
- El sistema automáticamente crea un Pull Request en el repositorio
Sí, leíste bien. Automáticamente. El usuario no tiene que saber qué es un Pull Request, no tiene que saber Git, no tiene que saber nada de programación. Simplemente sube una imagen y el sistema se encarga del resto.
3. Ranking de contribuidores
Porque la comunidad merece reconocimiento, implementé un sistema de ranking que muestra:
- Top contribuidores por cantidad de efemérides aportadas
- Perfil de contribuidor con todas sus aportaciones
- Reconocimiento visible en cada efeméride que incluya el nombre del contribuidor
Esto no solo motiva a contribuir, sino que también crea un sentido de comunidad y propiedad compartida del proyecto.


La magia detrás de escena
Para los curiosos técnicos, déjenme contarles un poco sobre cómo funciona esto por detrás:
GitHub Service
Creé un servicio especializado que se comunica con la API de GitHub para:
def create_image_pr(self, ephemeris_id, image_data, filename, date_str, contributor):
# Obtiene el SHA de la rama main
main_sha = self._get_branch_sha('main')
# Crea una nueva rama para la contribución
branch_name = f'contrib/image-{ephemeris_id}-{timestamp}'
self._create_branch(branch_name, main_sha)
# Sube la imagen a la nueva rama
self._create_file(branch_name, image_path, image_data, commit_message)
# Crea el Pull Request automáticamente
pr_data = self._create_pull_request(branch_name, title, body)
Todo esto sucede en cuestión de segundos. El usuario sube una imagen y segundos después hay un Pull Request esperando revisión en GitHub.
Base de datos extendida
La base de datos ahora incluye el campo github_username en cada efeméride, lo que permite:
- Atribuir correctamente cada contribución
- Generar rankings precisos
- Mostrar el perfil de cada contribuidor
- Trackear el historial de contribuciones
Endpoints nuevos
Añadí varios endpoints que hacen posible toda esta funcionalidad:
/auth/github- Inicia el flujo de OAuth/auth/github/callback- Maneja la respuesta de GitHub/contribute/image- Recibe y procesa contribuciones de imágenes/ranking- Devuelve el ranking de contribuidores/ranking/user/<username>/contributions- Muestra todas las contribuciones de un usuario
Por qué esto importa
Este cambio va más allá de simplemente añadir una funcionalidad nueva. Representa un cambio de filosofía completamente, ahora quiero que la comunidad sea parte de ello.
De un proyecto personal a un proyecto comunitario.
La historia no le pertenece a una sola persona, le pertenece a todos. Y todos deberían tener la oportunidad de contribuir a preservarla y compartirla. Al abrir las puertas a las contribuciones, estoy confiando en que la comunidad ayudará a hacer crecer este proyecto de maneras que yo solo nunca podría lograr.
Además, esto es un ejercicio práctico de lo que significa realmente el open source. No es solo publicar tu código en GitHub y esperar que alguien lo use. Es crear mecanismos que faciliten la colaboración, que inviten a otros a ser parte del proyecto, que reconozcan y valoren cada contribución.
Cómo puedes contribuir
Si te interesa ser parte de este proyecto, es muy simple:
- Visita un-dia-como-hoy.onrender.com
- Navega por las efemérides del día
- Si encuentras una sin imagen haz clic en ella
- Inicia sesión con tu cuenta de GitHub
- Sube una imagen relevante
- ¡Listo! Tu nombre quedará asociado a esa efeméride
No necesitas saber programar, no necesitas entender Git, solo necesitas tener una imagen relevante y ganas de contribuir.
No sube la imagen inmediatamente, esta limitada a que se revise, esto para evitar que se suba cualquier barbaridad.
Aprendizajes técnicos
Para los desarrolladores que estén leyendo esto y estén considerando implementar algo similar, aquí hay algunos aprendizajes clave:
1. OAuth no es tan complejo como parece
Por años evité implementar OAuth pensando que era demasiado complejo. La realidad es que con las librerías correctas y siguiendo la documentación de GitHub, puedes tenerlo funcionando en cuestión de horas.
2. La API de GitHub es poderosa
Puedes hacer prácticamente todo lo que harías manualmente en GitHub a través de la API. Crear branches, subir archivos, crear Pull Requests, todo es posible programáticamente.
3. La experiencia de usuario es clave
No importa qué tan potente sea tu backend si el frontend es confuso. Invertí mucho tiempo en hacer que el flujo de contribución fuera lo más simple e intuitivo posible. (espero que se note)
4. El reconocimiento motiva
El sistema de ranking no es solo vanidad. Es una forma de reconocer el esfuerzo de quienes contribuyen y motivar a otros a hacer lo mismo.
El futuro del proyecto
Esta nueva funcionalidad es solo el comienzo. Tengo planes para añadir:
- Badges y logros para contribuidores frecuentes
- Permitir que los usuarios puedan subir efemérides completas desde cero
Pero todo esto lo haré escuchando a la comunidad. Después de todo, ahora esto es un proyecto de todos.
Conclusión
Lo que comenzó como un script de web scraping para obtener efemérides ha evolucionado en una plataforma colaborativa donde la comunidad puede contribuir activamente a preservar y compartir la historia. Esta transformación no habría sido posible sin los valores del código abierto: transparencia, colaboración e innovación compartida.
Si hay algo que este proyecto me ha enseñado es que cuando abres las puertas a la colaboración, cosas mágicas pueden suceder. No sabemos qué dirección tomará este proyecto, pero lo que sí sé es que será mucho mejor con la ayuda de todos ustedes.
Así que los invito a ser parte de esta historia. Literalmente. Visiten la página, encuentren una efeméride que les interese y contribuyan con una imagen. Su nombre quedará registrado en la historia de este proyecto, y quién sabe, tal vez inspiremos a otros a hacer lo mismo con sus proyectos.
Desde La Cueva Del NeanderTech, gracias por ser parte de esta comunidad. Nos vemos en el próximo post, mis queridos cibernícolas.
Referencias
"La colaboración permite que personas comunes logren resultados extraordinarios."

