Creo que soy un tipo de persona especial, de esas que hacen cosas fuera de lo común. La vida me presentó la oportunidad de estudiar desarrollo de software cuando descubrí que la programación no solo era mi vocación, sino que mis habilidades y características personales encajaban perfectamente con este campo.
Así que emprendí un viaje atípico, con la intención de ‘hackear’ el sistema de formación tradicional, del que no dejo de oír quejas acerca de su exceso de teoría y falta de actualización. Decidí que lo haría más rápido, fuera de la ruta habitual. Lo que descubrí fue que el viaje sería más largo de lo esperado, pero también que todas mis sospechas sobre mi idoneidad para el desarrollo de software eran totalmente ciertas.
Me he demostrado a mí mismo, y a cualquiera que quiera fijarse, que tengo una gran capacidad para el aprendizaje y la mejora continua, pensamiento crítico, resolución de problemas y una serie de habilidades más que válidas para este tipo de trabajo. ¿Algún problema que me hiciera dudar de mis capacidades? Ninguno. He comprobado que mis habilidades son más que suficientes y que el cielo es el límite.
Tengo una serie de logros obtenidos, sorprendentemente poco habituales para alguien que hace ahora 2 años empezaba desde cero. He desarrollado proyectos como un marketplace de NFTs, un exchange descentralizado, una DAO, un sistema de cadena de suministro y muchas cosas más. Además, he participado en hackathones, ganado premios y reconocimientos, he trabajado en entornos colaborativos simulando un entorno laboral real… y todo en solo 25 meses.
Sé que voy a hacerlo cada vez mejor. Solo tengo que mirar hacia atrás en mi historia personal para ver los enormes avances que he logrado en diferentes áreas, siempre terminando por hacer un trabajo excepcional.
Y sí, es posible que haya ciertas cosas que jueguen en mi contra, pero hay muchas más que juegan a mi favor. Solo hace falta que un equipo con un poco de visión sepa ver el diamante en bruto que hay más allá de las apariencias.
Estoy preparado para comenzar la segunda etapa de mi viaje, uniéndome a un equipo estimulante y con una visión innovadora, donde pueda dar lo mejor de mí y mucho más. No lo sé todo, y hay muchas cosas que quisiera saber, pero la prueba de que hay un enorme potencial para seguir creciendo y hacer cosas de las que sentirme orgulloso está aquí, a la vista de todos. Ahora solo necesito que me den la oportunidad de subir a su barco para comenzar a remar.
El objetivo es hacer algo diferente, pero hacerlo muy bien.
.
Solidity - Java - Javascript - Typescript - HTML - CSS - SQL - React - Angular - Spring boot - Foundry
Project Under Development
Un innovador NFT(Token no fungible) interactivo para la gestión de perfiles laborales.
Facilita la conexión segura con otros profesionales, permitiendo compartir automáticamente información privada, como teléfono o email, exclusivamente con tus contactos .
Desarrollado con React - Typescript - Solidity - Foundry - Html - CSS - Tailwind - Rainbowkit - Ethers.js - IPFS
Hackathon achievements
Primer Premio con Medic+ al mejor workflow smart contract/test en la Hachathon 2024 de Educateth(Smart contract y test desarrollados por mi)
Tercer puesto con Wave-Labs.tech en la Bankathon 2024 de Tower Bank con un exchange peer to peer mediante escrow
Finalista con Wave-Labs.tech en la Bitcoin Virtual Hackathon 2004 con ICP
Algunos de mis proyectos
Money Bank Escrow
Solidity - Foundry - React - Typescript - HTML - CSS - Tailwind - Wagmi - RainbowKit
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.
Garden Tech marketplace nft
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.
JAVA App to manage a store or warehouse
Java - Spring Boot - Angular - Typescript - HTML - CSS - PostgreSQL
Para loguearte utiliza el siguiente usuario: user y el siguiente password: user123 (tarda alrededor de 1 minuto en levantarse el back alojado en la capa gratuita de render.com)
Puedes clickar en las imágenes para ampliarlas y ver su funcionamiento.
Descubre los puntos clave al pasar el ratón sobre los iconos
En la app, los gráficos dan aún más info al pasar el ratón sobre ellos

Gráficos con información detallada acerca de los productores
1 of 15Gráficos con información detallada acerca de los productos
2 of 15Solo podrá acceder a la app alguien con permisos
3 of 15Puedes acceder al listado de productores y de productos organizados por categorías y niveles de color
4 of 15Productores y número de productos por productor
5 of 15Stock por cada uno de los productores
6 of 15Procedencia de los productores
7 of 15Porcentaje de cada producto sobre el stock de cada productor
8 of 15Numero de productos por cada productor
9 of 15Stock por cada uno de los productos
10 of 15Rangos de precios de todos los productos
11 of 15Estados del total de productos: activo o inactivo
12 of 15Estados del total del stock: activo o inactivo
13 of 15Alta de productos por meses
14 of 15Precios de los productos agrupados por categoría
15 of 15
Posibilidad de añadir un nuevo producto o productor
1 of 4 End TourPosibilidad de editar o eliminar cualquier producto o productor
2 of 4 End TourLos productos están agrupados por categoría y orden alfabético dentro de ellas
3 of 4 End TourLas categorías se separan visualmente por niveles de color
4 of 4 End TourRETOS Y APRENDIZAJES
Es una aplicación que inicié durante el Bootcamp Full stack del Campus Dual del Cluster Tic Galicia, al que he añadido las siguientes mejoras por mi cuenta una vez finalizado
-
Migración a Postgre SQL
Inicialmente, la aplicación utilizaba HSQLDB en local, lo que limitaba la escalabilidad y accesibilidad de los datos. Llevé la base de datos a PostgreSQL en Supabase, aprendiendo a configurar conexiones remotas seguras y a optimizar consultas.
-
Conexión producto-productor
Diseñé nuevas relaciones entre tablas para vincular productos con contactos/productores, asociando cada producto con un productor y simulando un entorno de gestión real, y ofreciendo una visión más completa de los datos. Además, desarrollé nuevos endpoints en Spring Boot y actualicé el frontend en Angular para manejar estas relaciones.
-
Visualización de datos ampliado
Creé un conjunto de gráficos para mostrar visualmente información relacionada con los contactos/productores, equilibrando así la funcionalidad con la parte destinada a la gestión de productos, ya que solo se mostraba información referente al stock de estos. Expandir las capacidades de visualización, creando nuevas gráficas, me ayudó a familiarizarme con el uso de librerías de gráficos en Angular de forma eficiente.
-
Despliegue con Docker en Render
Desplegué el backend en Render.com, un entorno accesible desde cualquier lugar, garantizando estabilidad y continuidad del servicio. Utilicé Docker para contenerizar la aplicación para el despliegue. Esto incluyó la configuración de variables de entorno y la gestión de imágenes Docker para integrar PostgreSQL con la aplicación Spring Boot.
-
Capa de autenticación con JWT
Añadi una capa de control de acceso, pensando el que solo un propietario pudiera acceder a la aplicación. Implementé un sistema de login basado en JWT, integrando una nueva tabla users en la base de datos para gestionar credenciales. Esto me permitió mejorar la seguridad y garantizar que solo usuarios autorizados interactuaran con la app.
Super Pioneros Innovators Community DAO
Community to which I belong
Solidity - Foundry - React - Next - Javascript - HTML - CSS - Wagmi/Viem/RainbowKit - Local storage
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
Hay ciertas personas que tienen un chispa ardiendo en su interior.
Que sienten la necesidad de crear algo diferente y nuevo.
Que ven cosas donde no las hay y creen que algo que todavía no existe es posible.
ALGUNAS PERSONAS DESEAN IMAGINAR EL FUTURO
Y algunos sabemos que la pasión, la mejora constante y la creatividad
son los ingredientes básicos de la innovación.