The pipeline collects listings from multiple marketplaces, normalizes noisy specs, and trains a regression stack tuned for outlier resistance. It exposes predictions through a Streamlit interface for instant valuation checks.
The Lab
Quantifying chaos, one experiment at a time. Select any project to expand its full technical profile.
Pixel Ladder executes inference client-side so image files never leave the browser. The app streams tiles through ONNX Runtime Web to keep memory usage predictable while preserving print-grade detail.
Teachers upload textbooks or define chapters, and the platform generates three-tier homework sheets — struggling, average, advanced — tailored to each student. Assignments are completed on paper, scanned, OCR'd, and corrected by a teacher-controlled LLM pipeline, with every job queued, health-checked, and logged for auditability before flowing into dashboards with per-student progress and class-wide difficulty heatmaps. The stack is a Python-first monorepo: a Next.js UI with zero business logic talking to a FastAPI backend that owns all persistence, job orchestration, and pluggable LLM calls (Ollama, LM Studio, or OpenRouter), built GDPR-first for EU secondary schools.
This assistant orchestrates pharmacy workflows through retrieval-augmented prompts and guarded tool calls. It answers stock questions, creates order drafts, and escalates edge cases to human staff.
The final project for the UPC Postgraduate Course in Artificial Intelligence with Deep Learning (2026). The modular pipeline benchmarks detector families — one-stage YOLO against two-stage Faster R-CNN, both from scratch and fine-tuned — and trackers from SORT to ByteTrack, BoT-SORT and OC-SORT. It adds re-identification and Kalman-predicted re-detection to survive occlusion, learns the two team colours from crops with no manual labelling, reads jersey numbers via OCR, and exports an annotated video plus a per-frame CSV ready for tactical statistics.
The system detects players and ball trajectories frame by frame, reconstructs match phases, and outputs tactical heatmaps for coaching review. The objective is reliable analytics under occlusion-heavy conditions.
Players draft a constitution and issue decrees from a throne room, which are debated by AI-simulated historical figures — Aristotle, Machiavelli, Marx, Turing, Curie, Nietzsche, and more — who vote For, Against, or Blank based on their documented philosophies, each persona powered by an LLM that can run locally or in the cloud. What began as a menu-driven simulator grew into a full JRPG-style experience: a walkable overworld, sprite-based NPCs with branching dialogue, battle-styled debate mechanics with approval bars, procedurally generated chiptune audio, and persistent local saves powered by a client-side SQLite database.
The app builds the enemy list from your aircraft's battle-rating bracket (down 1.0, up to your chosen uptier, excluding your own nation) and renders each matchup as two verdicts side by side: the enemy's strongest edge over you, and yours over them, backed by a row of compared performance stats. A tips panel covers the fighter you are flying (climb speed, role, what to do and what to avoid), and a tactics section explains the core Air RB maneuvers such as boom & zoom, energy fighting, rolling scissors and yo-yos, each with a diagram, a step-by-step execution, and the situations to use it in or avoid it in. The roster is modelled in Prisma over SQLite, with favorites, recents and highlighted targets persisted client-side so the reference stays tuned to the aircraft you actually fly.
A deterministic transform stage converts every filing, PDF or SEC inline-XBRL HTML, into canonical Markdown: a page router sends each page to the cheapest engine that reads it correctly and stamps its provenance, so every figure downstream is traceable. A single LLM step — the only one that costs money, about $0.04 per document — extracts structured exposures with role, direction, magnitude, confidence and a verbatim quote, and 73 canonical factors collapse synonyms like Brent, WTI and crude into one node. A local FastAPI panel with server-rendered SVG charts drives the pipeline end to end and answers questions such as “if oil rises, who suffers?” — a directional ranking read from filings, not a forecast.
Postings land every day in a self-hosted PostgreSQL warehouse organised in bronze, silver and gold layers. A local LLM extracts role, seniority, skills, cloud stack, languages and salary from each description, and a curated taxonomy folds synonyms so Postgres and PostgreSQL count once. The gold layer stores dated, immutable readings of the market, so “what was in demand in September, as we knew it in September” stays answerable after the corpus is re-enriched. Every ranking carries the share of the corpus it stands on, relisted postings — which inflate raw volume by about a third — are separated from genuine new demand, and a FastAPI panel shows the trends, term co-occurrence and pipeline health. On top of the warehouse sits a match against my CV and preferences, chosen on a bench of 28 systems scored by NDCG@20 with bootstrap intervals: rules over the extracted columns narrow 23,000 postings to 1,000, a 0.8B decision model answers six typed yes/no questions on the full text of each (seniority, remote, agency, autonomy…), and an LLM judge reads only the top 100. Cross-publisher duplicates — portals that copy and aggregators that rewrite — are folded without a model.
Plain Markdown files with YAML front-matter are the source of truth — readable in fifteen years without the app — and SQLite is only an index rebuilt from them. Documents are classified and extracted by a vision model served on loopback; the client refuses any other address, and tests prove the module that knows your data cannot import a network client. Laboratory reports go in end to end with no model at all: tables are read by page geometry, analytes mapped against a canonical catalogue, and an evaluation harness scores the reader against hand-written answers (135 right, 2 wrong, 0 missing on the reference report). Per-analyte trends and the printable A4 summary render from the same templates.