Projects / Data & software

I work with data.
I build
applications.

An app to tailor a CV, another to track expenses, a map of live trains. Take a look at the projects I build, how they work and the decisions behind them.

Take a look at the projects

Selected work

Aplica Jobs landing page showing an example CV assessment
Local landing page · the assessment shown is the page’s sample content.

Aplica Jobs

Local development

Different jobs call for different parts of your experience. Aplica compares your CV with a job description and prepares a tailored PDF from the profile you already have.

Python · FastAPI · PostgreSQL · Claude

A closer look — Aplica Jobs

From job description to PDF

A saved profile carries over between applications. The app checks it against a job description, then uses Celery and ReportLab to generate the document in the background.

A deliberate choice

Code applies rules to the model’s assessment of the match. The final assessment is not left entirely to the language model.

Where it stands

It runs locally. Job descriptions are pasted as text, and there is no payment system or public demo yet. The images show the landing page and its examples, not a real application.

View another image
Madrid map with trains labelled by line
Public demo captured on 5 October 2026.

Renfe Madrid

Live demo

See where Madrid’s Cercanías trains are on a live map. Filter by line and select a train to see its details.

JavaScript · Leaflet · GTFS-RT

A closer look — Renfe Madrid

From feed to map

RENFE’s data becomes markers on an OpenStreetMap map. Proxy functions sit between the browser and the train feeds.

What it depends on

The map relies on RENFE’s data service. It does not plan routes or replace the operator’s travel updates.

Text, voice notes or receipts sent through Telegram, processed in the background and collected in a web dashboard.
From a message to an expense record · diagram of the documented workflow.

Tikeo

Private project

Record an expense without leaving Telegram. Tikeo accepts text, voice notes and receipt photos, and brings the transactions together in a web dashboard.

FastAPI · PostgreSQL · Celery · Telegram

A closer look — Tikeo

Different inputs, one record

Voice transcription and receipt reading run as background tasks. Transactions are stored in PostgreSQL and displayed in the dashboard.

Documented scope

The code is private. Expense recording and the dashboard are documented as implemented. Budgets, subscription detection and weekly reports were dropped from the scope.

On my desk

EU Flight Delay Predictor

Data collection

I’m assembling the data to study how flight delays spread between European airports. Modelling comes later; the first job is to build a dataset I can trust.

Python · pandas · Open-Meteo · Eurostat

A closer look — EU Flight Delay Predictor

What exists today

Weather and passenger data are available, with validation still in progress. The flight data has not been acquired yet.

The question ahead

The aim is to compare tabular models with a Transformer that can use the context of other flights. There is no trained model, API or dashboard yet.

Project archive

More work, on a different scale. Open a project to take a closer look.

UAM RAG AgentMaster’s thesis

A way to ask questions about course material without opening every document. For my master’s thesis, I connected vector search to a language model.

LlamaIndex · MongoDB · Groq · Streamlit

Giving the answer some context

The question becomes a vector. MongoDB retrieves ten excerpts from the course materials, and Groq uses them as context for the answer.

What you can inspect

The repository includes the implementation and the Streamlit interface. The hosted demo failed to start when checked on 5 October 2026, so I have included a diagram and linked to the code.

View project image

Task TrackerCode available

An annual grid for marking the days you complete a task. Each account stores its progress in a database, so it can be opened on another device.

FastAPI · PostgreSQL · JavaScript

Where progress lives

The browser displays the grid, while FastAPI and PostgreSQL store progress for each account. Progress can also be exported and imported as JSON.

Current access

The former Railway demo is unavailable. The repository is linked so you can inspect the project.

HangmanCode available

A familiar game with English words and dictionary definitions as clues. A small project connecting game logic to an API.

Python · FastAPI · JavaScript

When the dictionary is unavailable

External services supply the words and definitions. A local fallback list allows a game to start when those services are unavailable.

What is available

The repository includes the backend, interface and tests for the game logic.

Jeff-ChefCode available

Start with the ingredients you have and get a Spanish recipe suggestion. The interface collects the list, and an AWS function sends it to the model.

React · AWS Lambda · OpenAI

The integration

React handles the ingredient list and displays the recipe. An AWS Lambda function calls OpenAI separately from the code delivered to the browser.

What to expect

The recipe depends on the model’s response. The project shows how the interface, AWS function and OpenAI fit together.

EMT MadridCode available

Another view of Madrid’s transport network: BiciMAD stations and bus stops on a map.

Python · JavaScript · Leaflet

The work

An exploration of transport data through heatmaps and information attached to stations and stops. The code shows how the data connects to the visualisation.

Where the link goes

The link opens the repository. No live service is offered here.

Mascotas en MadridNotebook

An exploratory analysis of pet census data and dog areas across Madrid’s districts. The notebook contains the charts and the steps behind the analysis.

pandas · Seaborn · Matplotlib

Scope

This is descriptive data exploration, not a predictive model or a web application.

California HousingNotebook

A clustering exercise using California housing data: grouping observations and looking at what they have in common.

pandas · NumPy · scikit-learn

Scope

The analysis is in the notebook. Its clusters are the output of a segmentation method, not a property valuation.

JALTCode available

A small sales lead tracking project built with HTML, CSS and JavaScript.

HTML · CSS · JavaScript

A small scope

The repository contains the lead tracking interface: a small, self-contained HTML, CSS and JavaScript project.

About

Start by understanding the problem.

Jefferson Ortiz

I build applications that connect data, APIs and interfaces. This collection ranges from small tools to applications with background processing.

Alongside what I have built, I want to share the choices behind it and the parts I have yet to figure out.

Read my CV

Code that leaves room for change

I separate responsibilities when they change for different reasons. An abstraction needs to solve a problem that is already there.

Keeping track of decisions

I write down what I try, why I choose an approach and what remains unfinished. That includes the things that do not go as planned.

Contact

Let’s talk.

Have a question about a project, or something of your own to share? Send me a message.