Background
About
I'm a software engineer trained at 42 Barcelona, where I built the foundations from scratch: memory management in C, POSIX signal protocols, custom sorting algorithms, and direct framebuffer graphics. No lectures, no shortcuts — everything verified by peer review and automated graders.
That rigour carries forward. MadridFlow — a bilingual football editorial platform running in production — is where I applied those fundamentals to a full-stack system with real constraints: a streaming video proxy serving HTTP Range requests, an LRU cache with request deduplication, a dual-provider AI pipeline (Anthropic + OpenAI), and a 15-route Nginx architecture serving SSR pages indexed by 8 structured sitemaps.
I work well across the stack and I care about shipping things that actually work under real conditions.
Education
Skills
Evidence-based
Every item below is tied to a specific file in a real codebase. No skill is listed without a proof.
Systems & Algorithms
- C Libft, Printf, GNL, Minitalk, Push_swap, FDF — all from scratch
- POSIX signals (sigaction, SA_SIGINFO) Minitalk/src/client.c + server.c — bit-serial IPC protocol with ACK routing
- Manual memory management Libft/ft_calloc.c, GNL, Minitalk — malloc/free without GC
- Radix sort Push_swap-Radix-/algorithm.c — index-bit partitioning over two stacks
- Bresenham's line algorithm Fdf-Fills_de_Fer-/drawing.c — direct framebuffer rendering
- Isometric 3D projection Fdf-Fills_de_Fer-/settings.c — elevation map to screen coordinates
- Linked lists Push_swap-Radix-/utils.c + push_swap.h — custom doubly-linked structure
Backend
- Node.js · Express server/src/server.js (535 lines) — 50+ routes, tiered rate limiting, graceful shutdown
- MongoDB · Mongoose 9 schemas, nested subdocuments, indexed fields — server/src/models/Day.js
- LRU cache + request deduplication server/src/services/tweetCache.js — structuredClone, in-flight sharing, selective TTL
- HTTP streaming (Range / 206) server/src/routes/videoProxyRoutes.js (960 lines) — proxy with seek support
- Server-side rendering (Express) 6 SSR controllers, JSON-LD Article/BreadcrumbList/Person/ItemList
- 4-tier rate limiting server/src/server.js — per-endpoint limits keyed by IP and URL hash
- REST API design 50+ documented routes: public, admin, streaming, SEO
Frontend
- React 19 client/src/ — SmartTweet.jsx (47KB), Story.jsx (48KB), HomePage.jsx (30KB)
- React Router 7 client/package.json — react-router-dom ^7.9.6, SPA with bilingual routes
- Vite client/vite.config.js — ES modules, fast HMR, production builds
- GA4 (lazy / impact-zero) client/src/analytics/ga4.js — deferred until first user interaction, post-FCP
- Bilingual SPA (ES/EN) All routes, content fields, and metadata in both languages
DevOps & Infrastructure
- Docker · Docker Compose docker-compose.yml — 3-service orchestration, health checks, connection pooling
- Nginx (reverse proxy + SSR routing) nginx/default.conf — 12 location blocks routing SSR and SPA catch-all
- Cloudflare (CDN + origin certs) Staging noindex middleware, CF rules, HSTS preload
- Linux VPS Production deployment on Ubuntu, Docker Compose managed stack
- Helmet.js + security headers server/src/server.js — CSP, HSTS preload, CORS, mongo-sanitize
AI & Integrations
- Anthropic Claude SDK megaPromptService.js (714 lines) — claude-sonnet-4, prompt caching, cost tracking
- OpenAI SDK (GPT-4o-mini + Whisper) docker-compose.yml — caption ASR + translation fallback pipeline
- Batched AI generation megaPromptService.js — Promise.all batching with partial-success handling
- Robust JSON recovery 7-step parser: markdown fences, trailing commas, smart quotes, unterminated strings
SEO & Crawlability
- 8-sitemap architecture server/src/routes/seoRoutes.js (459 lines) — sitemap index with 8 sub-sitemaps
- Hreflang (ES/EN/x-default) Story sitemaps include xhtml:link alternate for both languages + x-default
- JSON-LD structured data Article, BreadcrumbList, Person, ItemList — one per SSR controller
- Programmatic noindex logic Thin tags (< 5 stories), unpublished entities, staging domain — all enforced server-side
- Googlebot log monitoring nginx/default.conf — map directive detects crawlers, separate log stream