I'm a Computer Science Engineer with a passion for hardware and low-level programming. I've been tinkering with electronics and doing small Arduino projects since I was 14, and ever since I was introduced to assembly language and VHDL in college, I've known that this is the field of Computer Science I want to dedicate my life to.
I'm also really interested in fullstack web development. Backend infrastructure, APIs and frontend design are the building blocks of the Internet as we know it. Furthermore, I believe web applications are some of the best ways to offer services, since they aren't limited by any physical restriction and can be used by anyone with an Internet connection.
Outside of my professional life, I love reading, going for runs and planes. I looove planes and everything related to the world of aviation.
Current
(Just graduated college, taking a short break 😅).
June 2025 - August 2025
Built production-grade web scrapers through the systematic analysis of network traffic on target websites. I also implemented model validation schemes at early stages of data processing pipelines.
My bachelor's thesis consisted in the development of an integral monitoring system for indoor environmental parameters, such as temperature, humidity, carbon monoxide concentration, methane concentration, etc.
The system is based on a series of interconnected stations of sensors arranged in a star-like topology. Stations at the edges are wireless stations, not only because they communicate through radio messages, but also because they operate autonomously using the on-board battery as their sole power supply. Each of these stations uploads its sensor data to the system database by relaying it to the "central station" it's associated with.
Central stations monitor the same parameters as wireless stations, as well as the concentrations of several gases in the air. These stations need to be plugged into a power outlet for continuous use, and aside from taking their own readings, they are also responsible for uploading both their sensors' telemetry and that from their associated wireless stations to the system database. To do this, they connect to a ThingsBoard cloud client via MQTT, which then invokes the custom made FastAPI API endpoint that inserts the environmental data into the database.
In addition, a web application has also been developed so that users can monitor their stations remotely. From that applications, users can view their stations' readings in real time and access the complete history of values recorded by any of them. This is thanks to the interactive graphs generated with Plotly that plot the entire sequence of values taken for each environmental parameter by every station owned by the user. Furthermore, the app also provides a convenient interface for users to manage their stations.
Here are the repositories with the codebase for every part of the project.
Firmware repository
Web application repository
API repository
Together with @alfonsoperezs, we developed FileMind, an advanced online file manager. This system accepts and parses a wide variety of common file types, such as PDF, TXT, CSV, DOCX, images, etc. Furthermore, the app extracts text content and metadata from files and stores all that information —including structured JSON metadata— in a PostgreSQL database. Moreover, this file manager also supports enhanced filtering and keyword-based search.
In addition, this file manager ships two advanced features not typically found in similar systems. The first of those is automatic generation of file summaries using an AI API. The feature is the ability to apply OCR (Optical Character Recognition) to scanned PDFs, by using the pytesseract tool running in our local machine.
Regarding the technical side, it must be noted that this app uses FastAPI, SQLAlchemy and the aforementioned pytesseract for the backend, while the frontend was built with React.
Line Code Learner is a web application built with Flask where users can learn and practice line coding. It has a theory section explaining how each of the line coding schemes encodes data, as well as their main characteristics, advantages and disadvantages.
Furthermore, the app has a graph generation tool that uses Matplotlib to create customizable graphs from a given binary array and line coding scheme. This feature is what makes the app particularly useful for practicing and solving line coding problems.
Additionally, visitors can create their accounts and log into them, which allows them to store the graphs they generate in their accounts. Registered users can also update their color preferences and profile data.
Considerable effort has been put into making this app as production-grade as possible, which is why a comprehensive test suite with more than 120 tests has been developed. The tests suite was designed using a layered approach, resulting in unit, integration and end-to-end tests.
Boolean Learner is a simple Java Swing desktop application built. Its purpose is to learn and practice basic boolean operations. For this reason, it has two operation modes, each in their own app window: tables view and calculator. The tables view prompts the user to select a boolean operation (and, or, nand, etc.) and then prints the truth table for that particular operation. This mode acts as a small field guide or reference for boolean operators, while the calculator mode can be used to practice boolean algebra with these operators. The calculator mode offers, as its name implies, a boolean calculator, which takes two boolean values and an operation as input and displays the result of applying that operation to those two values.
This application was developed using an MVC (Model-View-Controller) architecture and the Singleton design pattern.
This C script allows users to launch a Google Maps location search directly from the terminal. When passing the name of a location as an argument, the script opens Google Chrome and navigates to the Google Maps result page for the specified argument. It does this by appending the given location to Maps' place search base URL and then opening the Chrome browser with that composite URL.
This Python file contains lists of Spanish words and their translations to German, all classified by topic. The script itself has two modes of operation: vocabulary display and training. The vocabulary display prompts the user to select a given topic, and then prints the list of words stored for that topic, along with their translations to German. The training mode is the main one in the script. It asks the user to choose a specific topic, iterates through the words in that topic's list in random order and checks that the user writes the correct translation to German for each one.
I designed, built and installed a custom setup for an LED strip to light my house's staircase directly, without having to turn on the ceiling lamp and wake up anyone sleeping in nearby bedrooms. The strip can be turned on by pressing either capacitive touchbuttons installed at each end of the stairs, and it is turned off automatically after a few seconds. An Arduino Pro Mini controls the touchbutton actions, as well as the timing sequence and the input to the relay that toggles the power circuit feeding the LED strip.
P.S. kudos to my dad for helping with the installation of the wood supports and to my mum for braiding the wires for the bottom touchbutton 😄.
Presented and submitted the final version of my bachelor's thesis project (TFG) Automatic monitoring of environmental conditions in indoor spaces. This project consisted in the development of an integral system to monitor indoor environmental parameters, such as temperature, humidity, carbon monoxide concentration, etc. It included the development of the necessary firmware for the sensor stations, as well as the design and development of a web application to track the readings uploaded by each sensor station in real time.
This bachelor's thesis was presented before the corresponding evaluation board on June 4, 2026.