Experience
Three internships and two qualifications on one axis. Bar width is elapsed time.
- Full-Stack Developer Intern — SIB (Solution Integrale Building)
- Apr 2026 – present · 5 mo
- Bachelor of Technology (DBT), Computer Engineering & Digital Governance — Ecole Superieure de Technologie (EST)
- 2025 – 2026 · 2025–2026(year only)
- Application Developer Intern — COPREF
- Jul 2025 – Aug 2025 · 2 mo
- BTS, Information Systems Development — Centre BTS Ibn Sina
- Sep 2023 – Jun 2025 · 1 yr 10 mo
- Web Developer Intern — SIB (Solution Integrale Building)
- Jul 2024 – Aug 2024 · 2 mo
Apr 2026 – Present

Full-Stack Developer Intern
SIB (Solution Integrale Building) · Kenitra, Morocco
- Building a bilingual (FR/EN) HR ERP managing personnel, payroll, leave, field attendance and material/equipment resources — a React.js SPA over a Python FastAPI backend, with 39 REST modules, a 1,400-line SQLAlchemy domain model and 80+ Alembic migrations.
- Built an HR assistant combining Rasa intent recognition with a retrieval-augmented generation pipeline (LangChain, ChromaDB, Google Gemini) over internal HR data, with role-scoped retrieval so each user can only reach records their permission scope allows.
- Diagnosed a vector-search failure where roughly 10,000 near-duplicate records collapsed Chroma’s HNSW index; replaced approximate search with a cached exact-cosine implementation, restoring correct top-1 retrieval at millisecond latency.
- Automated candidate onboarding by extracting structured profiles from PDF CVs via the Gemini API, using OpenCV face detection to pull the applicant photo and remove manual data entry from hiring.
- Optimized bulk attendance and site-sync endpoints by eliminating N+1 query patterns, cutting hundreds of redundant MySQL round-trips per request; backed the system with 75 pytest suites.
Retrieval correctness: Queries that had been returning the wrong record returned the right one
Spot-checked rather than scored: queries that had been returning the wrong record were re-run after the switch and returned the expected one. No before/after accuracy figure was recorded. The stronger guarantee is structural — an exhaustive cosine scan over roughly 10,000 vectors returns the true nearest neighbour by construction, which an approximate index does not.
Attendance and site-sync round-trips: Hundreds of redundant MySQL round-trips removed per request
Counted from the SQL statements SQLAlchemy emitted for a single request, with engine echo enabled, before and after the change.
Jul 2025 – Aug 2025

Application Developer Intern
COPREF · Kenitra, Morocco
- Built an internal desktop management application in VB.NET with a SQL Server backend.
- Designed the relational schema and implemented full CRUD interfaces for data entry and reporting.
- Optimized SQL queries and application logic, reducing report generation time by about 40%.
Report generation time: About 40% faster
Timed by stopwatch on the same report before and after the query and logic changes. Not controlled for dataset size or machine load, so the figure is approximate and is stated as such.
Jul 2024 – Aug 2024

Web Developer Intern
SIB (Solution Integrale Building) · Kenitra, Morocco
- Developed and maintained internal web applications supporting daily company operations, modeling modules in UML before implementation.
- Integrated MySQL databases, refactored existing code for maintainability and fixed reported bugs, working in an Agile team.

