OTROS Proyectos
Borme Scraper
Java - Spring Boot - Typescript - React - HTML - Tailwind - PostgreSQL
Puedes clickar en las imágenes para ampliarlas y ver detalles y funcionalidades
RETOS Y APRENDIZAJES
-
Análisis y Refinamiento del Proceso
El mayor reto fue análizar las entradas del BORME y mostrar los datos del modo más adecuado. No se trataba solo de "scrapear", sino de un proceso iterativo: 1. Obtener los datos en bruto. 2. Analizar el "ruido" (por ejemplo PDFs de índices, no necesarios) y optimizar el scraper para descartar lo que dificultase el proceso. 3. Aplicar Regex para extraer los datos correctos en un formato estructurado.
-
Pensamiento de Producto (Análisis de Datos)
Más allá del código, el reto fue decidir qué datos eran útiles. Implicó analizar el "ruido" (por ejemplo si "objeto social"(categoría de empresa) era útil a pesar de estar a menudo vacío) y priorizar el valor al usuario, para que las funciones de búsqueda y ordenación fueran realmente útiles.
-
Adaptación de Stack (Groovy/Svelte)
El segundo reto fue la adaptación inmediata a un stack desconocido (Groovy y Svelte). Aunque finalmente usé Groovy "al estilo Java", demostré mi capacidad de investigación y rigor (la habilidad real del ingeniero moderno) para "montar las piezas" de un stack nuevo (apoyado en IA y documentación) y entregar una aplicación funcional.
-
Diagnóstico de Entorno (H2 vs. PostgreSQL)
La migración de la base de datos de desarrollo (H2) a producción (PostgreSQL) reveló problemas de compatibilidad difíciles de diagnosticar. H2 era permisivo con errores (ej. tipos de datos) que PostgreSQL no toleraba, lo que exigió una depuración profunda de la lógica de persistencia y SQL.
-
Resolución de CORS (Proxy de Backend)
Diagnostiqué que el frontend no podía renderizar los PDFs de origen (HTTP) en la app (HTTPS). La solución fue implementar un endpoint en el backend (un proxy) que descargaba el PDF como bytes y lo servía de forma segura al frontend, demostrando "pensamiento sistémico" para resolver un bloqueo.
-
Dockerización y Entrega
La prueba exigía una entrega ejecutable. La aplicación está 100% "dockerizada" (Front y Back) y se puede levantar localmente con un script (SH), demostrando capacidad de empaquetado y entrega ejecutable.
-
Gestión de Stack vs. Tiempo
Se implementó una autenticación funcional (Basic Auth) y se entregó un producto operativo. Aunque quedaron mejoras pendientes (como optimizar la velocidad del scraper, implementar JWT, añadir un estado global para conservar búsquedas o refactorizar el front para mejorar la modularidad), el proyecto demostró una alta capacidad resolutiva bajo presión.
Puedes probar la app usando estas credenciales
Usuario: processor
Contraseña: borme-processor
Work wander
Java - Spring Boot - Ontimize - Typescript - Angular - HTML - SCSS - PostgreSQL
Video resumen de la mayoría de las funcionalidades
Puedes clickar en las imágenes para ampliarlas y ver detalles y funcionalidades
Descubre algunos puntos clave de Work Wander viendo la explicación
Mapa de posición del coworking con puntero ajustable.
1 of 5 End TourReseñas proporcionadas por los usuarios
2 of 5 End TourValoraciones de la calidad del coworking
3 of 5 End TourEventos que se celebran en la misma localidad del coworking
4 of 5 End TourInformación general, como precio, servicios, capacidad, etc
5 of 5 End TourRETOS Y APRENDIZAJES
Esta experiencia laboral potenció mis habilidades de trabajo en equipo aumentando mi capacidad de adaptación a un equipo profesional agile
-
Lógica de Negocio y BBDD
Diseñamos y creamos una base de datos PostgreSQL, gestionando las migraciones y cambios de esquema con Flyway. Desarrollamos e implementamos, por ejemplo, filtros combinados (multi-campo con diversos parámetros) que requerían consultas complejas. Gestionamos la paginación y caché de datos.
-
Arquitectura de Datos y Frontend (Angular)
Colaboramos en las decisiones sobre la arquitectura de datos (como gestión de coworkings, eventos, reseñas, etiquetas, etc) y como se muestran en la interfaz. Integramos visualizaciones de datos (gráficos), mapas interactivos, semáforos de actividad o calendarios.
-
Depuración (Debugging) de Backend
Resolvimos bugs persistentes relacionados con la lógica de negocio o los formatos de fechas, como el desajuste entre la hora local del usuario y la hora del servidor (UTC).
-
Gestión de Repositorio (Git)
Realizamos el Gitflow completo, gestionando y resolviendo conflictos de merge con Git (conflictos con las versiones de los códigos), asegurando la integridad del repositorio y la colaboración fluida del equipo.
-
Integración en Flujo Agile (Scrum Completo)
Nos integramos en el ciclo Scrum completo, desarrollando en sprints de dos semanas y participando en todas las ceremonias (Dailies, Plannings, Reviews y Retrospectivas). Además de crear y estimar historias de usuario (Jira, Scrum Poker) de manera activa.
-
Transferencia de tokens
Para facilitar las pruebas y la experiencia de usuario, la aplicación incluye una funcionalidad que permite a los usuarios obtener tokens USDT de prueba directamente desde el contrato. Si no se posee balance de dicho token se muestra un botón en la interfaz que, al ser presionado, interactúa con el contrato para enviar 100 tokens a la wallet conectada del usuario. Esto permite probar las funcionalidades de la dApp si se dispone de ether nativo en la red Sepolia.
Puedes probar la app con los usuarios
Usuario: Diego Contraseña: 123456789
Usuario: company Contraseña: democompany
Money Bank Escrow
Solidity - Foundry - React - Typescript - HTML - CSS - Wagmi - Viem - RainbowKit
Exchange que permite el intercambio ETH - USDT (simulados) entre particulares.
Es un prototipo de contrato inteligente y UI/UX desarrollado en Wavelabs.tech, en el que asumí la responsabilidad técnica, premiado con el 3er puesto en el hackathon internacional Towerbank Bankathon 2024.
Esta versión es una personalización del prototipo original, con varias mejoras visuales y de usabilidad.
Los activos se depositan en un escrow que se libera únicamente cuando un segundo usuario lo acepta, eliminando problemas de sincronización o conflictos en interacciones simultáneas.
Las ofertas de intercambio se pueden hacer de Eth a Usdt (simulados) y de Usdt a Eth.
Necesitarás una wallet en la red Sepolia para poder interactuar con la aplicación.
Puedes clickar en las imágenes para ampliarlas y ver su funcionamiento
Descubre los puntos clave de la Dapp viendo las explicaciónes
EL balance del usuario en Ether
1 of 7 End TourSe gestiona aquí la conexión y desconexión de la wallet del usuario.
2 of 7 End TourEl balance del usuario en Usdt
3 of 7 End TourLas ofertas que se hacen de Ether a cambio de Usdt
4 of 7 End TourLas ofertas que se hacen de Usdt a cambio de Ether
5 of 7 End TourValor de intercambio de 1 Ether y 1 Usdt a Dólares
6 of 7 End TourValor de intercambio de 1 Ether en Usdt y de 1 Usdt en Ether
7 of 7 End Tour
Se muestra el valor actual de 1 Ether y de 1 Usdt en dólares
1 of 5 End TourSe muestra el valor actual de 1 Ether en Usdt y de un Usdt en Ether
2 of 5 End TourSe muestra el valor actual de Ether en Usdt, y viceversa, para la cantidad que indique el usuario
3 of 5 End TourSe muestra el balance del usuario en la moneda seleccionada para la creación de la oferta
4 of 5 End TourPermite seleccionar en que moneda se creará la oferta
5 of 5 End TourRETOS Y APRENDIZAJES
-
Escrows
La dapp implementa un sistema de escrows, mediante el cual al crearse la oferta se está aprobando y enviando al contrato la cantidad ofertada, que se mantiene bloqueada hasta que es cancelada o aceptada por otro usuario.
-
Lógica de aceptación
He creado una lógica para la evitar la concurrencia en las transacciones, ya que al aceptarse la oferta se envía la cantidad del intercambio al ofertante y se recibe el importe de la oferta en la misma transacción, evitando que se pueda interactuar simultáneamente con la misma oferta, evitando inconsistencias o comportamientos no deseados.
-
Uso de API externa
Integra la API de CoinGecko para obtener valores actualizados de intercambio, para lograr que la información mostrada al usuario sea precisa y actualizada, mejorando la experiencia del usuario.
-
RainbowKit
Me he decantado por el uso de Wagmi y RainbowKit para manejar la conexión con la wallet del usuario, para proporcionar una experiencia más fluida en la conexión/desconexión y con mayor flexibilidad al permitir conectarse con una amplia variedad de wallets.
-
Transferencia de tokens
Para facilitar las pruebas y la experiencia de usuario, la aplicación incluye una funcionalidad que permite a los usuarios obtener tokens USDT de prueba directamente desde el contrato. Si no se posee balance de dicho token se muestra un botón en la interfaz que, al ser presionado, interactúa con el contrato para enviar 100 tokens a la wallet conectada del usuario. Esto permite probar las funcionalidades de la dApp si se dispone de ether nativo en la red Sepolia.
-
Firma de transacciones
Se implementa un sistema de firma de transacciones para mejorar la seguridad y autenticidad. Utiliza la función signMessage para firmar un mensaje compuesto por los detalles críticos de la transacción y un nonce único. La firma resultante se verifica en el contrato inteligente antes de ejecutar la transacción, lo que garantiza que solo el propietario de la wallet pueda autorizar las operaciones y previene las manipulaciones.
-
Seguridad
He prestado especial atención al diseño del contrato inteligente, usando siempre el patrón Checks-Effects-Interactions para evitar vulnerabilidades y problemas de concurrencia en las transacciones. Implementé lógica clara y robusta para gestionar estados en el escrow y asegurar transacciones seguras.
Sistema de Trazabilidad para Cadena de Suministro
Solidity - Foundry - Typescript - React - HTML - CSS - Tailwind - rainbowkit
Un prototipo funcional que usa tecnología blockchain para la trazabilidad de productos.
Desarrollada con
Solidity
Foundry
React
Typescript
Tailwind
Ethers.js
Rainbowkit
Solidity
Foundry
React
Typescript
Tailwind
Ethers.js
Rainbowkit
Para validar una solución de negocio, adapté un smart contract existente y construí esta interfaz funcional (MVP) en wave-labs.tech. El objetivo era testar la viabilidad de una herramienta blockchain para un caso de uso logístico muy concreto.
Posteriormente, mejoré el prototipo, añadiendo la capacidad de emitir un NFT al final del proceso para certificar la trazabilidad completa del producto.
Permite rastrear el movimiento de un producto a través de su cadena de suministro. Cada etapa, desde la fabricación hasta el cliente, queda registrada de forma inmutable en un smart contract, garantizando la transparencia y la integridad de los datos.
Garden Tech marketplace de nfts
Solidity - Foundry - React - Javascript - HTML - CSS - Ethers.js - IPFS
Puedes clickar en las imágenes para ampliarlas y ver su funcionamiento.
Descubre los puntos clave de la Dapp viendo la explicación
Se necesita una wallet Ethereum en Sepolia para interactuar con la Dapp.
1 of 4 End TourPuedes ir a tu perfil, a crear un NFT o volver al dashboard.
2 of 4 End TourClickando se accede a los detalles de cada NFT
3 of 4 End TourSe pueden comprar y vender pagando una pequeña comisión
4 of 4 End TourRETOS Y APRENDIZAJES
-
Proxy
He utilizado un proxy UUPS que permita realizar actualizaciones en el contrato sin perder los datos almacenados previamente, garantizando la modularidad y la capacidad de actualización. Ahora está apuntando a un contrato, pero podría apuntarse a otra implementación si fuese necesario, siempre teniendo cuidado de evitar conflictos entre variables y mantener la compatibilidad entre actualizaciones.
-
Lógica de compra
He creado una lógica para que se pueda comprar un NFT manteniéndolo a la venta o retirándolo en propiedad. Si el NFT es propio se puede retirar o editar el precio de venta. Esto requiere verificaciones de permisos directamente en el contrato inteligente y actualizar dinámicamente los estados en el frontend según la cuenta del usuario conectado, y tener en cuenta las acciones que podía realizar el propietario de un NFT (reclamar, modificar precio) y lo que podía hacer un comprador potencial (comprar, reclamar, o ambas).
-
Uso de IPFS para almacenaje de datos
Las imágenes y los metadatos se guardan de modo descentralizado en IPFS. A partir de los cids generados, y guardados en el contrato, se recuperan después los datos utilizando axios para mostrarlos en el frontend.
-
Test con covertura de más del 90%
Diseñé casos de prueba exhaustivos, verificando tanto los flujos básicos (creación, compra, reclamación) como escenarios límite (modificación de precios, roles no autorizados). Logré una cobertura de pruebas de más del 90%, con la parte más baja siendo un 88%, lo cual asegura la robustez del contrato ante diferentes casos de uso.
-
Varias páginas
Es una aplicación con varias pestañas que comienza a ganar en complejidad. He tenido que manejar el routing en React.
-
UX-UI
He teñido en cuenta la experiencia de usuario y, aunque podría pulirse, y mejorar el diseño, es algo que requiere mayor tiempo y atención.
Super Pioneros Innovators Community DAO
Aplicacion web
Desarrollada con
Solidity
Foundry
React
Next
Javascript
HTML
CSS
Wagmi/Viem/RainbowKit
Solidity
Foundry
React
Next
Javascript
HTML
CSS
Wagmi/Viem/RainbowKit
Solidity
Foundry
React
Next
Javascript
HTML
CSS
Wagmi/Viem/RainbowKit
Solidity
Foundry
React
Next
Javascript
HTML
CSS
Wagmi/Viem/RainbowKit
Solidity
Foundry
React
Next
Javascript
HTML
CSS
Wagmi/Viem/RainbowKit
Solidity
Foundry
React
Next
Javascript
HTML
CSS
Wagmi/Viem/RainbowKit
Solidity - Foundry - React - Next - Javascript - HTML - CSS - Wagmi/Viem/RainbowKit
Dapp web – Gestiona la DAO de la comunidad de innovadores WEB3 Super Pioneros
Conecta con un smart contract alojado en la Blockchain (actualmente en Sepolia)
Necesitarás una wallet y, para participar activamente, un token SuperPioneros. Te permitiría crear, visualizar y votar propuestas dentro de la DAO.
Puedes clickar en las imágenes para ampliarlas y ver su funcionamiento.
Descubre los puntos clave al pasar el ratón sobre los iconos
Solo los poseedores del token pueden participar
1 of 6 End TourNúmero de propuestas creadas
2 of 6 End TourPosibilidad de crear, ver y votar propuestas
3 of 6 End TourOpción de crear propuestas por parte de un integrante
4 of 6 End TourPosibilidad de retirar fondos, solo por parte del administrador.
5 of 6 End TourMinteo de nuevos tokens a los miembros de Super Pioneros
6 of 6 End Tour
Los miembros pueden votar propuestas no concluidas
1 of 5 End TourEl administrador puede ejecutar propuestas concluidas
2 of 5 End TourEsto solo es visible para el administrador
3 of 5 End TourNúmero total de propuestas creadas
4 of 5 End TourDescripción, fecha límite y votos acumulados
5 of 5 End TourRETOS Y APRENDIZAJES
Es una DAO desarrollada para la Comunidad de innovadores Super Pioneros (a la cual pertenezco), pensada para que sirva como punto neurálgico donde debatir y compartir.
-
Token Super Pioneros
EL token se Super Pioneros es el que da acceso a los miembros de la DAO. Desde la misma Dapp, el administrador, o persona que posea una determinada cuenta, puede emitir el token a la que cuenta que introduzca en el campo correspondiente.
-
Validación de accesos
Aseguro que solo el administrador pueda retirar los fondos, mintear los tokens y ejecutar propuestas tras el deadline. Asimismo los miembros no pueden acceder a la DAO y crear o votar transacciones si no son poseedores del token de Super Pioneros
-
Votaciones controladas
La lógica del smart contract permite la creación y votación de propuestas, asegurando que un usuario no pueda votar más de una vez en la misma propuesta. Para optimizar la experiencia del usuario, esta información se sincroniza con el localStorage, donde se registra si el usuario ya ha votado. Esto permite mostrar u ocultar dinámicamente los botones de votación en la interfaz. Además, estas entradas almacenadas se eliminan automáticamente una vez que la propuesta alcanza su fecha límite.
-
RainbowKit y Wagmi
La conexión de wallets se implementó utilizando RainbowKit y Wagmi/Viem, lo que permitió gestionar de forma eficiente los flujos de autenticación de usuarios en la Dapp. También se configuraron botones de conexión personalizados, asegurando una experiencia fluida y adaptada a las necesidades del proyecto
Dapp for management of crypto assets in solana
Aplicacion web
Desarrollada con
Angular
Javascript
Tailwind
Shyft
Nx
Angular
Javascript
Tailwind
Shyft
Nx
solana - Angular - Javascript - HTML - CSS - Tailwind - Shyft - Nx
Puedes conocer tu balance de tokens en Solana o tu balance de Sol,
hacer transferencias a cualquier dirección de Solana
o revisar tu historial de transacciones,
conectándote a esta app con una wallet de Solana.
Speed Run Ethereum Projects
Puedes experimentar y mintear tokens o NFTs de modo fácil y divertido en estas dApps si posees una wallet. ¡Pruébalas!
Haz click en las imágenes para verlas con más detalle
dApp Speed Run Ethereum Project 3 - Token Vendor
dApp Speed Run Ethereum Project 2 - Staking App
dApp Speed Run Ethereum Project 1 - Simple NFT
AI-Enhanced Weather Forecasting Tool
Aplicacion web
Desarrollada con
REACT
HTML
CSS
Javascript
AI OpenAI
OpenMeteo
REACT
HTML
CSS
Javascript
AI OpenAI
OpenMeteo
Javascript - REACT - HTML- CSS - Open_AI - Open_meteo
Proporciona el pronóstico del tiempo de cualquier lugar del mundo, utilizando inteligencia artificial.
Introduciendo una localidad (utiliza tildes para minimizar confusiones), o un código postal. Te devuelve una respuesta generada con inteligencia artificial del estado del tiempo de hoy y la previsión para los próximos días.
Utiliza datos meteorológicos oficiales y puedes obtener el pronóstico de cualquier ciudad del mundo. También puedes afinar la búsqueda para el lugar en que te encuentres o quieras localizar usando el código postal (solo España).
Simplemente introduce la localidad o el código postal y pulsa enter, o el botón consultar, para obtener la respuesta
Astronomical Calendar: Sun & Moon Phases
Aplicacion web
Javascript - REACT - HTML- CSS - Open_AI - Open_meteo
Desarrollada con
REACT
HTML
CSS
Javascript
OpenMeteo
REACT
HTML
CSS
Javascript
OpenMeteo
Proporciona el horario de inicio del amanecer y del anochecer para un ubicación determinada, además de la fase lunar actual y la próxima luna llena, en cualquier lugar del mundo.
Introduciendo una localidad (utiliza tildes para minimizar errores), o un código postal, te devuelve el horario del amanecer y del anochecer adaptados a cualquier ciudad, además de la fase lunar actual y la fecha de la próxima luna llena.
Utiliza los horarios recibidos de datos meteorológicos oficiales. También puedes afinar la búsqueda para el lugar en que te encuentres o quieras localizar usando el código postal (solo España). Evita confusiones con otras ciudades mundiales con el mismo nombre (Sudamérica).
Simplemente introduce la localidad o el código postal y pulsa enter, o el botón consultar, para obtener la respuest
App De Gestión de Proyectos
Aplicacion web
Desarrollada con
HTML
CSS
Javascript
HTML
CSS
Javascript
HTML
CSS
Javascript
Javascript - HTML- CSS
Una aplicación destinada a la gestión y seguimiento de las tareas de un proyecto.
Las tareas se pueden crear, eliminar y pasar a cualquiera de los estados disponibles, ya sea hacia la derecha como la izquierda(de iniciadas a completadas o viceversa).
Se pueden mover entre los diferentes estados usando las flechas disponibles o arrastrando y soltando.
Se guardan automáticamente en la memoria del navegador, asegurando que estén disponibles la próxima vez que utilices la aplicación.
Desarrollada durante el bootcamp Full Stack de Campus Dual del Cluster Tic Galicia - Mejorada posteriormente
App Para el minteo de nft
Aplicacion web
Desarrollada con
SOLIDITY
NEXT
Javascript
CSS
Ethers.js
IPFS
SOLIDITY
NEXT
Javascript
CSS
Ethers.js
IPFS
SOLIDITY - FOUNDRY - Javascript - REACT - Next - HTML- CSS - Ethers - IPFS
Desarrollada durante el bootcamp Blockchain
Puedes mintear uno de los NFT con fantásticas imágenes de planetas del Sistema Solar creadas por la NASA
Hay 20 diferentes, puedes descubrir cual es siguiente minteándolo para ti.
Los NFT que ya hayan sido emitidos se irán mostrando en la Dapp.
Tienen un coste simbólico de 0,01 ether (ether de pruebas).
Una vez que lo hayas minteado puedes agregarlo a tu wallet utilizando su ID.























































