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

42 Barcelona Computer Science — Common Core (ongoing) Peer-to-peer, project-based. No teachers, no lectures.

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