Contruí un linktr.ee ¿de que sirvió?

Demo
Repositorio del proyecto

Este proyecto llegó a mí estando en Twitter, cuando leí de hacer un proyecto de app que te dé los archivos para subir una web de links simil linktr.ee. En ese entonces, lo hice para CLI y funcionó; me gustó y aprendí el flujo de las herramientas de terminal, pero no quedé conforme con que solo pudiera ser usado así.

Mi conocimiento anterior a empezar el proyecto, fue haber hecho, por ejemplo, un editor de archivos README con AsciiDoc (estilo readme.so), pero eso se quedaba en el frontend, y esto me aportaba además crear y desplegar backend. Entonces lo hice para entender mejor el flujo del front al back, lo que me forzó a utilizar herramientas con las que no había tenido contacto antes, como Docker, entre otras.

La tarea de pasar de la version de CLI a una Web App implicó resolver muchos problemas interesantes en el camino. En este artículo desarrollo algunos.

Lo primero es como el CLI estaba escrito en Python, decidí hacer la API REST con Flask para aprovechar lo que tenía ya hecho; pero tuve problemas de ejecución en "producción" (y que hoy entiendo, gracias a la IA que ayuda a comprender más fácilmente), debido a cómo Flask maneja el inicio del servicio. Reescribí todo con Node.js, que tenía una documentación más clara para mí, y que al usar JavaScript yo no era ajeno a él, por React.

Luego tuve problemas al no poder aplicar estilos que se comportaran igual tanto en los selects como en inputs; solucioné esto usando con una librería para React especifica para controlar mejor todo lo referido a selects.

En el backend tuve problemas con las rutas locales de archivos en el contenedor desplegado en Render. Al no poder usar la terminal para ver el árbol de archivos, o explorar las rutas, tuve que ir revisando con logs que inserte dentro del programa, para entender cómo estaban construidas las rutas hasta dar con la correcta, ya que las dinámicas no funcionaban como esperaba o no apuntaban a donde quería.

Por último, otro de los que recuerdo fue tener problemas con el famoso CORS. Al final, mi solución para no complicarme la vida fue poner el clásico origin *. Al no controlar el flujo de conexión entre Vercel y Render, decidí no complicarme; para un proyecto público y práctico personal me sirvió, pero entiendo que a nivel de seguridad no es lo óptimo.

En conclusión, fue un proyecto que tuvo problemas no esperados, como siempre, y en donde si bien no lo planteé desde un principio bien, aprendí a resolver problemas reales. Quizás uno de mis grandes fallos, y donde más tiempo perdí, fue en no pensarlo más antes de programar y no tomar las decisiones importantes previamente. Más allá de eso, fue interesante y mi primer acercamiento al backend.