/

Hi, I'm

Abdelkrim
El Ayachi

I build robust systems for the web and verify them rigorously.

Software Engineer & Quality Enthusiast — Focused on building reliable, real-time applications and scalable architectures.

Download CV
01

Experience

Tester

INVOLYS July 2024 – Present

Tested the ERP Vectis module — manual functional and regression testing, plus automated test execution with Selenium. Reported and documented defects in Jira and followed them through the defect lifecycle with the development team.

Web Developer Intern

ALBRI WEB July 2023 – Sept 2023

Developed responsive themes and integrated custom plugins. Focused on performance optimization, SEO, and cross-browser compatibility to deliver high-quality web experiences.

02

Featured Projects

Two disciplines, one engineer — product builds, and the quality work that keeps them honest.

Cyber Copilot

Python · FastAPI · Vue 3 · Pinia · MySQL · OpenSearch · LLM tool-calling

SOC analysts drown in Wazuh alerts. Triaging each one means pivoting by hand across alert history, past investigations, and asset records — slow, repetitive, and easy to get wrong under volume.

Give an autonomous agent the same read-only tools an analyst uses and let it run the triage loop: read the alert, decide what context it needs, call a tool, read the result, repeat — until it reaches a verdict, with every step recorded for a human to audit.

A Python/FastAPI backend polls the Wazuh Indexer on an interval; a policy engine decides which alerts open an investigation; each one is handed to an agentic tool-calling loop over MySQL and OpenSearch. The LLM layer is provider-agnostic — any OpenAI-compatible endpoint or a local Ollama model, switched with one env variable. A Vue 3 + Pinia dashboard surfaces verdicts, evidence, and the full action timeline.

The AI is deliberately walled off from all user-identifying data — every tool query excludes it — so analyst attribution can't bias a verdict. Hard budgets on steps, tool-result size, and total conversation cap cost and stop indecisive loops; any failure still records an ERROR verdict, so nothing hangs at IN_PROGRESS.

Next: authentication and a way to cancel a running investigation. After that, extend the tool architecture additively — Suricata, CloudTrail, threat-intel enrichment — as new tool classes rather than a redesign of the loop.

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.

Vectis — INVOLYS

Manual Testing · Selenium · Regression · Postman · Jira

Vectis is INVOLYS's ERP suite — a large, module-heavy business platform where a regression in one module can quietly break workflows in another.

A broad functional surface, frequent releases, and deep data dependencies between modules — manual regression alone couldn't keep pace with the release cadence.

Ran functional and regression testing for assigned modules: writing and executing test cases, reproducing and documenting defects in Jira, and following them through the defect lifecycle with the development team.

Contributed to a Selenium regression suite for the highest-risk flows, which reduced repetitive manual regression work and freed time for exploratory testing.

A faster, more trustworthy regression signal on every release, and earlier defect detection — before changes reached UAT.

Praxis — INVOLYS

Manual Testing · Functional · Regression · API Testing · Jira

Praxis is another INVOLYS business application I test alongside Vectis, with its own release stream and user workflows.

Validating new features and change requests against existing behaviour without a full automated safety net, under tight release windows.

Ran functional testing on new features and change requests, executed regression passes on each build, and validated API behaviour with Postman where the UI didn't tell the whole story.

Risk-based prioritisation — depth where regression is most likely or most costly — paired with clear, reproducible defect reports to keep the feedback loop with developers short.

Consistent release validation and fewer defects escaping to production.

03

Technical Philosophy

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 Selenium 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 Selenium test suite that ran fast and felt great — until I realized many of the tests were flaky and passing by accident. Speed without reliability is just noise. Rewrote them with proper waits and assertions.

05

Professional Context

Tools I love

Neovim and tmux in the terminal, VS Code when I want an IDE, Obsidian for notes, and Linux for everything. Firefox DevTools for debugging. 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.

Certifications

Agile with Atlassian Jira · Meta JavaScript Programming · Version Control (Git) · Google Python Professional.

The path so far

2022 Started the Digital Development diploma at ISTA
2023 Web development internship at Albri Web
2024 Earned the Digital Development diploma
2024 Started working as a Tester at Involys
2025 Earned the Bachelor's degree at IGA
2025 Studying the Engineering cycle at ISGA