Yousuf Boutahar

I build the whole product. And I ship it myself.

Senior Fullstack Engineer — Product & Experience Engineer SABAU STRAPPING

I have spent 4 years and 1 month writing Python and TypeScript in production: FastAPI and PostgreSQL at the back, Next.js at the front, containers and deployment at the end. The AI microservices I build and run on top are the proof of how far that goes.

commits since August 2022
~4,800
on a 29,000-commit product
6th of ~35
microservices of my own in production
4
of professional experience
4 years and 1 month
Portrait of Yousuf Boutahar
Gran Canaria, Spain. Remote.

01 · About

About

I work at both scales: inside a large product with a team of thirty-five, and alone, from the data schema to deployment, owning an entire service.

I started in August 2022 on a training and sales platform with 29,000 commits and around thirty-five authors. I landed 3,784 commits there, moved from pure frontend to owning whole backend domains in Django, and ended up leading the modernization of the interface: out went the off-the-shelf template, in came an architecture we built ourselves, with standards, a style guide and a component library. Branch per issue, code review and shared tests: that is the craft of working alongside other people.

Since January 2026 I have been doing the opposite, and I like it just as much. I am the sole or main author of four microservices of my own in production — RAG over our operations chat history, an agent layer, a memory service and MCP servers — plus the platform frontend. I also deploy and run a self-hosted secrets manager, which I put behind mandatory SSO. Every piece comes with its data model, its containers, its CI/CD, its tests and its documentation; and the ones that go to Kubernetes, a Helm chart I wrote myself, which is how I package and deploy them onto the production cluster.

What interests me most about applied AI is not wiring up a model; it is measuring one. I compare architectures on a shared benchmark with ground truth, watch cost per operation against a hard limit, and write the decision down so it can be reviewed a year from now. The product side comes from writing requirements and change requests with real clients, and from nearly two years of teaching.

  • Large product, large team

    3,784 commits and 4,399 frontend files touched on a product with 29,000 commits and around 35 authors. Technical leadership of the frontend, team-wide standards and systematic code review.

  • From data schema to deployment

    Four microservices of my own and the main frontend in production, with my name on almost every commit: FastAPI, Next.js, PostgreSQL, Docker, GitHub Actions, tests, Helm chart, observability and documentation. I package and deploy my services onto the cluster with charts I wrote myself.

  • Applied AI, measured

    RAG with hybrid search over pgvector, agent graphs with LangGraph, my own MCP servers, and evaluation with ground truth, a scoring rubric and cost-per-query control.

  • Explaining and mentoring

    Nearly two years of programming and robotics workshops in secondary schools, a civil service exam preparation course and internal technical courses. It shows in code review, and in the decisions you have to defend to people who are not engineers.

02 · Experience

Experience

4 years and 1 month of engineering since August 2022, on top of an earlier teaching stretch that also overlaps the first year.

  1. Jan 2026 – Present

    Senior Product & Experience Engineer

    SABAU STRAPPING · Canary Islands, remote

    I own product and AI services end to end, from the data model through to deployment on Kubernetes, plus the platform frontend. That is the formal job title; the work itself is full-stack, end to end, and that is how I introduce myself.

    • I design and operate a RAG service over operational conversation history: semantic contexts grouped by topic rather than by time, hybrid vector and keyword search on PostgreSQL with pgvector, and query routing based on how broad the question is.
    • I build the agent layer with LangGraph and LangChain 1.0: a multi-server MCP client that degrades gracefully when a server is unavailable, a scoped tool registry, response streaming over Server-Sent Events and tracing with LangSmith.
    • I stood up a memory service with three specialized stores behind a single gateway, where facts are invalidated with an evidence stamp rather than overwritten, so we can reconstruct what was known at any point in time.
    • I write my own MCP servers with FastMCP over streamable HTTP: API key authentication, Docker image, Helm chart with a persistent volume and ingress restricted by IP allowlist, all deployed by me onto the production cluster.
    • I maintain the frontend in Next.js 16 and React 19 with internationalization by BCP 47 tags across nine regions, and tests in three layers with Vitest, Testing Library and Cypress with cypress-axe.
    • Python3.12
    • FastAPI
    • LangGraph1.0
    • MCP
    • PostgreSQL + pgvector
    • Neo4j
    • NATS
    • Next.js16
    • React19
    • Kubernetes
    • Helm3
    • Docker
  2. Aug 2022 –Jan 2026

    Full-Stack Developer, with technical leadership of the frontend

    Talentus · Gran Canaria, Spain

    Online training, sales management and public funding compliance reporting platform: 3,784 commits, sixth contributor out of around thirty-five authors.

    • I led the end-to-end modernization of the interface: I replaced an off-the-shelf template with an architecture we built ourselves, defined the team’s technical standards and style guide, and built a library of reusable components.
    • I mentored other developers through systematic code review and coordinated the work between the frontend and backend teams and the stakeholders in agile ceremonies.
    • I ran an infrastructure provider migration and coordinated several microservice projects running in parallel.
    • I took ownership of entire Django domains: advertising campaigns, social media automation, a public portal with technical SEO, and a statistics charting layer. In 2025 I moved to integrations, building a workflow engine with service-to-service authentication and retries.
    • I optimized production queries with fast and slow paths and cache invalidation, and worked across 205 Behave scenario files on a GitLab CI pipeline with self-hosted runners.
    • Django4.2
    • Django REST Framework
    • Celery
    • Django Channels
    • PostgreSQL
    • React17
    • TypeScript
    • Material UI5
    • Redux
    • Auth0
    • Behave
    • GitLab CI

05 Teaching

03 · Case studies

Case studies

Six pieces that stand up to questions: why it was decided that way, what was ruled out, how it was measured.

Company work is described through skills and architectural decisions. No internal names, no clients and no business figures.

  1. 02 · Applied security

    Federated sign-in with OIDC, shipped in a single day

    The problem
    A self-hosted secrets manager had to go behind mandatory single sign-on, with no username-and-password back door. Authentication is the last thing you can afford to leave half-finished.
    The approach
    An OIDC client with signature validation against JWKS, entry and callback endpoints with an audit log, and a schema migration for existing users. I added two things almost nobody does: a threat model written before touching any code, and an automated test for the algorithm confusion attack. To avoid depending on the real provider locally, I set up a mock identity provider and exercised the flow end to end.
    The result
    Mandatory single sign-on in production, with Prometheus and Grafana watching the service, backup, restore and diagnostic scripts run through ShellCheck, and TruffleHog in the pipeline so no secret slips into a commit.
    from threat model to flow in production
    1 day
    algorithm confusion covered by an automated test
    alg=none
    • OIDC
    • OAuth2
    • JWKS
    • Vaultwarden
    • PostgreSQL 16
    • Nginx
    • +5
  2. 03 · Evaluation with data

    Three agent memory architectures, measured before choosing

    The problem
    The agents needed a memory that does not invent things and can be audited. The market offers managed options from all the major vendors, and choosing on instinct costs you every month on the bill and every week in poorly grounded answers.
    The approach
    I built a shared benchmark with ground truth, an expected output schema and a scoring rubric, plus a real-time cost guard with a hard limit so no evaluation could run away. On that base I designed three specialized stores behind a single gateway that routes on write and merges on read: Neo4j 5 with Graphiti for relationships with temporal validity, Mem0 for experiential memory, and PostgreSQL with pgvector for canonical facts. Facts are invalidated with an evidence stamp, never overwritten.
    The result
    The decision was documented with the accuracy and the cost per operation of each option, not with an opinion. The service is in production, instrumented with OpenTelemetry, and its dashboard draws the memory graphs with @xyflow/react and dagre so auditing is visual rather than a hand-written query.
    architectures compared on the same benchmark
    3
    real-time cost guard on every evaluation
    Hard limit
    • Neo4j 5
    • Graphiti
    • Mem0
    • PostgreSQL + pgvector
    • FastAPI
    • OpenTelemetry
    • +2
  3. 04 · Backend and operations

    Self-hosted n8n in queue mode, delivered with an emergency runbook

    The problem
    Business processes had to be automated without depending on the managed version of n8n and without the data leaving the organisation’s own infrastructure. And a service like that is worth nothing if nobody can bring it back up when it fails in the middle of the night.
    The approach
    I stood it up with Docker Compose: n8n in queue mode, PostgreSQL 15 as the state database, Redis 7 as the job queue, and health checks plus CPU and memory limits on every container so a runaway workflow cannot take the rest down with it. Integration with the platform backend runs over service-to-service token authentication with retries. And I wrote in Bash what you actually need once the service is alive: backup, restore, a health monitor, a stress test and manual scaling.
    The result
    It shipped with sixteen operations documents — high-availability architecture, emergency runbook, operations guide, backup strategy, alerting and production verification — and with the embedded credentials stripped out of the repository. Automating the work is the easy half: what gets handed over is a service somebody else can run without calling me.
    operations documents handed over with the service
    16
    backup, restore, monitoring and stress-test scripts
    14
    • Self-hosted n8n
    • Docker Compose
    • PostgreSQL 15
    • Redis 7
    • Bash
    • Health checks and resource limits
    • +1
  4. 05 · Web performance

    From 46 MB to 4 MB of images on a live site

    The problem
    A restaurant with a menu and a photo gallery was serving 46 MB of images. On a phone on mobile data, standing outside the door deciding where to eat, that is not a slow site: it is a site that does not exist.
    The approach
    Bulk processing with Pillow from Python, WebP with JPEG fallbacks via a picture element and responsive srcset, and a high-priority preload of the LCP image. Critical CSS inlined in the head so the first block paints before the bundle lands, and a loading skeleton system that detects whether the container holds an image, a video or an embedded frame and applies the right strategy to each, with a pure CSS fallback in case the script fails.
    The result
    46 MB of images turned into 4 MB, with individual reductions of up to 98.4%. The same work left the entire bilingual menu, 124 dishes, served from a single data file and switching language without a reload.
    total weight of the site’s images
    46 MB → 4 MB
    largest reduction on a single image
    98.4%
    • Astro
    • Tailwind CSS 4
    • astro:assets
    • Pillow
    • WebP
    • Cloudflare Pages
  5. 06 · Architecture

    Hexagonal analytics: dropping the vendor without touching the domain

    The problem
    Analytics on the main frontend was tied to an external vendor. Any change of vendor, or any outage on their side, worked its way into the product code, which is exactly where a third-party dependency must never reach.
    The approach
    Hexagonal architecture, with the full discipline: a repository interface that defines what the domain needs, a storage manager behind it, and a transport layer with a circuit breaker and retry so a vendor outage can neither drag the interface down nor lose events. The domain has no idea who is on the other side.
    The result
    When the call came to drop the external vendor, it was dropped: the adapter was swapped and the domain was left untouched. That is precisely the ports and adapters argument, demonstrated in production instead of on a whiteboard.
    domain changes when the vendor was dropped
    0
    regions served with BCP 47 tags, one of them RTL
    9
    • TypeScript 5.9
    • Next.js 16
    • React 19
    • Hexagonal architecture
    • Vitest

04 · Stack

Stack

The inventory, grouped by domain, with versions where the version matters.

Languages
  • Python3.12
  • TypeScript5.9
  • JavaScript ES2020+
  • SQL
  • Bash
  • Semantic HTML5
  • Modern CSS
Frontend
  • React19 and 17
  • Next.js16
  • Astro6
  • Tailwind CSS4
  • Radix UI
  • Vite7
  • Three.js with React Three Fiber
  • Material UI5
  • Anime.js4
  • Zod
  • React Hook Form
  • TanStack Table
Backend
  • FastAPI
  • Django4.2
  • Django REST Framework
  • Celery
  • Django Channels
  • Uvicorn
  • Gunicorn
  • Async SQLAlchemy2
  • Alembic
  • Pydanticv2
  • asyncpg
AI and agents
  • LangGraph1.0
  • LangChain1.0
  • MCP (Model Context Protocol), server and client
  • FastMCP
  • langchain-mcp-adapters
  • LangSmith
  • OpenAI API
  • RAG with hybrid search
  • embeddings
  • Graphiti
  • Mem0
  • spaCy
  • scikit-learn
Data and messaging
  • PostgreSQL16
  • pgvector
  • Neo4j 5 with a bitemporal graph
  • Redis7
  • MySQL and MariaDB
  • MongoDB
  • NATS as an event bus
  • Redis-backed queues
Containers and orchestration
  • Docker
  • Multi-environment Docker Compose
  • Kubernetes
  • Helm3
  • Traefik as Ingress Controller
  • cert-manager with Let’s Encrypt
  • NFS storage
Platform and automation
  • Linux (Rocky and Debian)
  • Nginx as a reverse proxy with TLS
  • certbot
  • systemd
  • firewalls and secure remote access
  • self-hosted n8n in queue mode
Observability
  • Prometheus
  • Grafana with dashboards and alerts
  • structlog
  • OpenTelemetry
Security
  • OIDC and OAuth2 with JWKS validation
  • Service-to-service JWT
  • Self-hosted Vaultwarden
  • Content Security Policy
  • TruffleHog in the pipeline (CI)
CI/CD and deployment
  • GitHub Actions
  • GitLab CI
  • GitHub Container Registry
  • release by version tag
  • Cloudflare Pages with declarative headers and redirects
Quality and testing
  • pytest with async and parallel support
  • Vitest
  • Jest
  • Cypress with cypress-axe
  • Behave (Gherkin)
  • mypy in strict mode
  • Ruff
  • ESLint
  • Prettier
  • ShellCheck
Mobile (learning project)
  • React Native0.74
  • Expo SDK51
  • Expo Router
  • NativeWind
  • Jest 30 with jest-expo
Tooling
  • uv
  • pnpm
  • npm
  • Git
  • GitHub CLI
  • Playwright

Everything on this list has commits of mine behind it. That is why you will not find Terraform here, or public cloud, or languages I do not write: a short, true list answers a technical interview better than a long one. The mobile block is a learning project, and it stays here for what came next: I went back two years later, documented that coverage was zero and closed it out with 45 tests in seven suites.

05 · Teaching and outreach

Teaching and outreach

Nearly two years of teaching before I did this full time, and one more course that already overlapped my first year of development. The habit never left me.

I ran programming and robotics workshops in secondary schools across Gran Canaria for nearly two years, coordinated the workshop programme and its team of instructors, and led a preparation course for the civil service IT technician entrance exam. Later, inside a product company, I taught internal technical courses on web development and qualified in train-the-trainer methodology and e-learning design.

It goes here because it is a senior engineering skill, not biographical decoration. Explaining recursion to a group of sixteen-year-olds, without losing anyone and with the clock running, trains exactly the same muscle as defending an architectural decision to the person paying for the project, writing a decision record someone will read a year from now, or leaving a code review that teaches instead of correcting.

Mar 2021 – Aug 2022

Coordinator and instructor, programming and robotics workshops

Instituto Universitario de Ciencias y Tecnologías Cibernéticas

I coordinated the calendar, the materials and the instructor team, and taught secondary school groups directly.

Oct 2020 – Aug 2022

Ciberlandia programme lead — workshops in secondary schools

Instituto Universitario de Ciencias y Tecnologías Cibernéticas

I delivered a technology outreach programme inside secondary schools, part-time for nearly two years.

Aug 2022 – Jan 2023

Instructor, civil service IT technician exam preparation course

Flou

Full syllabus, my own materials and question banks in the real exam format, with individual follow-up across the group.

Throughout my time at Talentus

Technical courses on web development

Talentus

Internal technical training on web development, alongside code review and the frontend team standards.

2023

Train-the-trainer methodology and e-learning design

Professional qualification

Adult training methodology and online learning path design: the craft of teaching, written down.

06 · Education

Education

07 · Contact

Contact

If you are hiring for a senior full-stack, product or frontend role, get in touch and we can talk it through with the data in front of us.

I reply to anything that comes with a bit of context: what you are building, on what stack, and what you expect from the person. Native Spanish, fluent professional English in technical settings.