I study Software Engineering at Epitech, in Madrid. Outside of school I ship my own projects: Onbars, a calisthenics app, and a WhatsApp bot that runs 24/7 on a Raspberry Pi.
Each row is a layer of the stack I actually work with, from the Unix foundations up to the tools I use today.
01 — UNIX FOUNDATIONS
Systems & C
This is where it started: manual memory, fork/exec, pipes, and code that segfaults until you understand exactly why.
02 — MODERN STACK & PIPELINES
Tooling & Automation
Docker and Git frame every project. Bash and GitHub Actions handle the repetitive parts, TypeScript and React the interfaces.
03 — AI-ASSISTED
Working with Claude
Refactoring large codebases, reviewing diffs, prototyping an architecture before committing to it — faster, without skipping the reading.
Linux
Bash
Python
Git
React
Docker
TypeScript
Claude
CSFML
Unix Systems
PERSONAL PROJECTS
Side Projects
Web design · Local SEO
I redesigned a Madrid fishing shop's website
DRM Fishing sells online from an ageing PrestaShop store: awkward on a phone, photos lost in the layout, hard to find your way around and browse. I rebuilt it from scratch and pitched it to the owner — the redesign is a proposal, not live on their domain yet.
Onbars — find your park. Train with others. Level up.
Onbars is a mobile app for street workout and calisthenics athletes. It solves three problems: finding a good outdoor pull-up and dip bar setup nearby, knowing how good you actually are compared to others, and finding people to train with.
Real parks, not guesses — imported from open map data, then verified by the athletes who train on them. One tap opens directions straight in Google Maps.
THE COMMUNITY
You never train alone again.
Meetups at the park, Kings to dethrone, badges validated by the community — in person or on video.
WHAT IT DOES
Five tabs, everything a street workout athlete needs.
Compete
A live leaderboard ranked by the Onbars score. Filter by exercise and by tier so you're only measuring yourself against people at your level.
Map
An interactive map of street workout parks with one-tap directions. Every park has its own page — photos, equipment, water access, night lighting, reviews — filled in by the athletes themselves to earn points. Switch to list view to sort by distance and filter for water, lighting, verified spots, or top-rated.
Workout
Log routines from the real street workout catalogue, statics included — front lever, planche, handstand. Make a routine public and it shows on your profile for others to clone, or start Get to Work for a live, timed session. A weekly AI coach breaks down your training — volume, rest discipline, strengths and weaknesses — from stats computed in code, never invented.
Social
Discover athletes near you, propose a meetup, and track it from invite to history. Skill badges are validated by the community after in-person or video verification.
Profile
Score, tier, badges, and a full breakdown of how the score is built. Certify your maxes with video so your numbers count on the leaderboard.
Built with its community
Onbars isn't another app that counts your reps — there are already ten thousand of those. Parks, equipment, reviews: the map is filled in by the athletes who use it, and it gets better with every park the community fills in. The point isn't the score — it's getting people off their phones, out to train, and meeting new athletes.
Currently focused on a real-world launch in Madrid, the historic heart of street workout culture in Europe.
UNDER THE HOOD
A full-stack production mobile app — solo-built architecture, security, and AI pipeline.
Onbars is a full-stack cross-platform mobile app (iOS, Android, Web) built solo, covering the whole stack: native mobile client, REST API backend, PostgreSQL database, on-device computer vision, third-party auth, cloud storage, and a live production deployment.
4 097
parks imported and rendered on the map
124
backend API endpoints
37
vulnerabilities found & fixed (7 critical)
React Native / Expo
TypeScript
Zustand
UI Kitten
React Native Reanimated
react-native-maps
react-native-vision-camera
fast-tflite — MoveNet
FastAPI
Prisma / PostgreSQL
Supabase
Groq — Llama 3.3 70B
JWT + Google OAuth
Fly.io
On-device rep counting
MoveNet pose estimation via TensorFlow Lite runs fully on-device through react-native-vision-camera frame processors — no video upload, no server round-trip. A custom finite-state machine tracks elbow flexion and extension frame by frame to detect and count valid reps, with range-of-motion checks to reject partial ones.
A map that carries the app
Google Maps API with 4,097 imported parks rendered through custom clustering, live check-ins gated by a 500m geofence, and a one-tap button that opens directions in Google Maps.
LLM training analysis
The backend is wired to Groq (Llama 3.3 70B): every stat is computed in code, the model only writes the weekly coaching narrative — no invented numbers, cached per ISO week, answered in the user's language.
37 vulnerabilities found, 37 fixed
An internal audit caught 7 critical issues, including a Google OAuth identity-spoofing bypass, a self-certification exploit that could grant Gold tier, and a PII leak exposing every user's email. Fixed with server-only privilege fields, strict Pydantic validation, and a public/owner-only data split.
Infrastructure & security notes
Ships natively on iOS and Android, and as a web app — React Native Web plus a Leaflet map shim — sharing about 95% of the codebase.
JWT sessions plus Google OAuth (native Sign-In and Google Identity Services on web), capped at 30 days, tokens kept in expo-secure-store — never AsyncStorage.
Row-Level Security enabled on every table, and 5 Supabase Storage buckets with server-generated, user-scoped file paths.
Rate limiting on the auth surface (login, register, OAuth) and a distributed scheduler lock so cron jobs don't double-run across Fly.io instances.
Boot-time production config guardrails — the backend fails closed if misconfigured.
A separate autonomous agent runs nightly on a Raspberry Pi, working the backend on its own branch for review each morning.
A standalone admin dashboard for park, user, and content moderation, with its own auth and audit log.
Always-on notification hub running on a Raspberry Pi
Node.js
whatsapp-web.js
CoinMarketCap
Claude
systemd
cron
It started as a way to watch my Claude Code usage limits from my phone, then grew into a notification hub and a crypto assistant. It runs under systemd on a Raspberry Pi at home.
Polls Anthropic's OAuth usage API every 5 minutes and pings me when a session or weekly limit is hit — and again when it resets.
Answers crypto commands with live CoinMarketCap data, plus an automatic market brief every morning at 7:30.
Exposes a local HTTP endpoint any other script on the Pi can call to push a notification — including the page that tells me the cat has been fed.
Vertical platformer — Doodle Jump meets the Chrome dino
Godot 4.6
GDScript
A meteor hits and the ground turns into a wall of debris that keeps rising. You play a dino jumping from platform to platform to stay above it. Survive 5 minutes and you win. Made solo in Godot for a school project.
Auto-bounce off platforms, a geyser for a huge jump, and birds you can stomp for an extra heart.
The blast wall never stops climbing and keeps getting faster, so standing still is not an option.
Solo (3 hearts) or 2-player co-op on the same screen, sharing 6 hearts.
A multi-robot pathfinding solver in C. It computes optimal distances with a reverse BFS from the exit in O(R+T), extracts non-overlapping shortest paths, distributes the robots by traversal cost, and resolves collisions turn by turn.
A C solver for the largest empty square in an obstacle-filled grid. A single-pass dynamic-programming tabulation in O(N) handles a 10,000 x 10,000 grid in a few milliseconds, with the grid held in one flat allocation.
A Unix shell in C. The parser builds a binary execution tree from right-associative operator precedence, then walks it: fork/exec, pipe IPC, redirections (>, >>, <, <<), built-ins and environment variables.
An air traffic control simulator in CSFML holding 60 FPS with over 1,000 aircraft on screen. An adaptive quadtree partitions the map so collision checks only compare neighbours — 50x to 100x fewer checks than the naive pass. Includes tower protection circles and a dynamic storm system.