Y su puta madre para encontrar un nombre con "crypto" o "crypt" que no estuviera pillado ya y me gustara.
Motivación
Llenar portafolio y aprender, básicamente. Quiero ver si soy capaz de crear yo solo una webapp completa, funcional y profesional que no parezca el producto de un cursillo de Java. Con su backend separado del frontend, persistencia en BD, dockerización, despliegue y mantenimiento (y posible ampliación). Estoy podrido de trabajar con proyectos así, pero nunca he hecho uno yo solo desde cero (aunque sea así de simple). Hay cosas que sé hacer, cosas que no hecho nunca y cosas que no sé ni por dónde empezar a mirar, así que me vendrá bien para aprender.
Explicación de la falla
El proyecto consta de una web para visualizar el precio de varias criptomonedas y del servicio de backend al que consulta para ello.
La cosa es sencilla: un servicio que recibe peticiones (en este caso peticiones AJAX de un front web, pero puede recibir de cualquiera a través de un endpoint), hace llamadas a la API de un servicio de terceros que devuelve la información, persiste los resultados en un Mongo y tiene una task que cada una vez al día manda un correo a una dirección con el precio de las monedas en ese momento (y tal vez algo más, no lo tengo claro aún). Aparte de eso, tiene otra task que cada sesenta minutos hace una llamada a la API y persiste los resultados para confeccionar un histórico de precios de cada moneda.
El front tendrá versión desktop y mobile y además de mostrar el precio de las monedas cada vez que se entre el usuario podrá realizar cuando quiera un refresco de precios por moneda y en total, enviando otra petición al servidor, y mostrará el historial de cada moneda. Esto último tengo que ver como lo hago, tal vez me monte una gráfica o algo así. Para el diseño del front me inspiraré en Coinbase, que me mola mucho lo limpio y minimalista que es sobre todo en mobile. Igual le doy una vuelta de tuerca y lo hago más terror cartoon para que vaya acorde con el nombre, en cuyo caso le pediré ayuda a mi novia que es diseñadora gráfica. El front iría en su repositorio por separado, claro.
La idea es que el servicio sea escalable si algún día me apetece, porque la API que uso para consultar precios tiene más llamadas, con lo que la estructura seguirá un estándar que permita escalabilidad. También tiene que recuperarse de errores y ser todo lo robusto posible. No quiero ver 404 ni excepciones no capturadas.
El Trello con las tareas está incompleto, voy añadiendo y ampliando las existentes conforme se me ocurren.
Restricciones
Que va a ser todo gratuito de momento, desde la instancia en la que la suba hasta el usuario que uso para la API de precios. Tal vez acabe pasando por caja para extender el tier de la API de consulta de precios, porque si tiene mucho tráfico me quedaré sin transacciones, que en el tier gratuito son pocas, y la web no funcionará. Si llega el momento en que es viable planteármelo no me dolería rascarme el bolsillo, señal de que la web tiene tráfico.
Tecnologías
- Java para el backend.
- HTML, CSS, JS para el frontend.
- MongoDB para persistencia.
- Docker y Kubernetes.
- Google Cloud (o similar siempre que tenga tier gratuito.
Herramientas
- IntelliJ IDEA
- Visual Studio Code
- Postman
- Gitkraken
- Trello
- Spotify con una playlist de grunge de los 90
Tareas, sin orden concreto
- Creación de la app y prueba de concepto
- Tareas automatizadas
- Capa de persistencia en MongoDB
- Cacheado (opcional)
- Historial de precios
- Envío de correo automático
- Creación del frontend
- Dockerización
- Despliegue
- Documentación + proposición de mejoras
Como digo, está incompleto y es ampliable. Por ejemplo "creación del frontend" no es una sola tarea, claro.
Tareas futuribles por si algún día me apetece
- Portar la aplicación a Spring Boot
- Usar algún framework de JS para el front
- Añadir funcionalidades a la página