Experience

Three internships and two qualifications on one axis. Bar width is elapsed time.

WorkStudy
Short spans are drawn at a minimum width so they stay legible, and marked not to scale. Durations in the list below are exact.
Full-Stack Developer InternSIB (Solution Integrale Building)
Apr 2026 – present · 5 mo
Bachelor of Technology (DBT), Computer Engineering & Digital GovernanceEcole Superieure de Technologie (EST)
2025 – 2026 · 2025–2026(year only)
Application Developer InternCOPREF
Jul 2025 – Aug 2025 · 2 mo
BTS, Information Systems DevelopmentCentre BTS Ibn Sina
Sep 2023 – Jun 2025 · 1 yr 10 mo
Web Developer InternSIB (Solution Integrale Building)
Jul 2024 – Aug 2024 · 2 mo

Apr 2026 – Present

SIB (Solution Integrale Building) logo

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

COPREF logo

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

SIB (Solution Integrale Building) logo

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.
Download CVContact