/

Hi, I'm

Abdelkrim
El Ayachi

I build things for the web and break them on purpose.

Developer & QA Tester — I write code, then I make sure it actually works.

Download CV
01

Things I've Built

fingerWorkout

Vue.js · Express · Socket.io · Redis · MongoDB

Typing practice tools are boring and solo. You grind through exercises alone, with no reason to come back. There's no energy, no stakes.

What if typing practice felt like a race? Real-time, multiplayer, with live scores updating as you type. Make it competitive and people will actually practice.

A real-time multiplayer typing app with live rooms, instant score updates via WebSockets, and dynamic content pulled from the Wikipedia API so you're never typing the same thing twice. Redis handles caching, JWT handles auth.

Chose Redis over persistent storage for session data — speed mattered more than durability here. Used Socket.io instead of raw WebSockets for automatic reconnection and fallback support. Worth the extra bundle size.

Better error handling on socket disconnects — users sometimes get stuck in ghost rooms. I'd also add persistent leaderboards instead of session-only rankings, and rethink the room cleanup logic.


YouTube Stream Downloader

Python · pytubefix · FFmpeg · pywebview

Every YouTube downloader I tried was either bloated with ads, sketchy, or gave you low-quality output. I just wanted the best quality without the noise.

YouTube serves audio and video as separate streams at the highest quality. If I download them separately and merge with FFmpeg, I get the best possible result with a simple pipeline.

A lightweight desktop app that downloads the highest quality audio and video streams separately, merges them with FFmpeg, and gives you a clean output. No accounts, no ads, no bloat.

Used pytubefix over the original pytube — more reliable but less documented. Went with a desktop UI (pywebview) instead of a web app because this is a personal tool, not a product. Simplicity won.

Add batch downloading, a more accurate progress bar (FFmpeg doesn't make this easy), and maybe a queue system for large downloads.


YouTube Auto-Pauser

Browser Extension · JavaScript

A browser extension that automatically pauses YouTube videos when you switch tabs. Small, useful, and scratched a personal itch. Built it in an afternoon, then spent another afternoon making it work on Firefox too.

02

The Lab

Experiments, half-baked ideas, and things I'm poking at.

exploring

Visual Regression Testing

Using Playwright to catch UI drift between deployments. Comparing screenshots pixel-by-pixel is crude but surprisingly effective for catching CSS regressions that humans miss.

thinking

WebSocket Reconnection

Exponential backoff with jitter? Or just let Socket.io handle it? Digging into what happens when your multiplayer room loses connection mid-race and how to recover gracefully.

reading

Clean Architecture in Express

Trying to separate concerns in Node.js backends without making it feel like enterprise Java. The sweet spot between "everything in one file" and "12 abstraction layers" is hard to find.

building

Docker for Dev Environments

Setting up reproducible development environments so "works on my machine" stops being an excuse. Basic Compose files for MongoDB + Redis + Node stacks.

03

How I Work

What I'm good at

  • Testing things until they break — and knowing why they broke
  • Building real-time features that actually feel responsive
  • Connecting frontend to backend cleanly, without over-engineering the glue
  • Automating the boring stuff so humans can focus on the interesting stuff

What I avoid

  • Over-engineering solutions before the problem is clear
  • Premature abstraction — if it's used once, it doesn't need a factory
  • Frameworks for the sake of frameworks
  • Writing tests that test the testing framework, not the product

How I think about building things

Start simple. Test early. Refactor when it hurts — not before. I'd rather ship something that works and improve it than architect something perfect that never launches. Code is meant to be changed; the first version is never the last.

Current tools

JavaScript Vue.js Node.js Express Laravel Playwright MongoDB MySQL Redis Git Linux Docker
04

Lessons I Paid For

×

The day I deleted a project folder

Accidentally wiped a project directory that had a .git repo — and no remote. Lost days of work. Now I push early and often, even on throwaway experiments. Backups aren't paranoia, they're professionalism.

×

Scope is the real enemy

Spent weeks building an e-learning platform prototype — real-time classrooms, video streaming, the works. It was too much for one person. Learned that the hardest skill isn't building; it's deciding what not to build.

×

Fast tests that lie

Built a Playwright test suite that ran in 2 minutes flat. Felt great — until I realized half the tests were flaky and passing by accident. Speed without reliability is just noise. Rewrote them all with proper waits and assertions.

05

A Bit More

Tools I love

VS Code with a minimal setup, Linux for everything, Firefox DevTools for debugging, and the terminal for anything that doesn't need a GUI. I like tools that get out of the way.

Current focus

Pursuing an engineering degree in Computer Science. Going deeper into architecture patterns, system design, and figuring out how to write code that future-me won't hate.

The path so far

2022 Started Digital Development diploma
2023 First internship — built WordPress sites at Albri Web
2024 QA Tester at Involys · Bachelor's in CS
2025 Engineering degree — going deeper