# Ali El Mufti > Lead Fullstack Developer & AI Expert based in Paris, France. 4+ years of professional experience in Angular, React, TypeScript, Java, Python, and AI integration (LLMs, RAG, agents). Available for freelance missions, consulting, or CDI — remote, hybrid, or on-site. Ali El Mufti (also known as aelmufti) is the engineer behind aelm.dev. He has led a team of 5 developers, shipped production AI features (notably a 6x faster LLM-powered real-estate search at Upfund), set up GitLab CI/CD pipelines on GCP, and migrated legacy Angular codebases with zero downtime. He holds an Engineering Degree from Grenoble INP Polytech (2021) and is referenced on Malt as an Angular Tech Lead. Fluent in French (native), English (Cambridge C1+), and Arabic (native). ## Profile - [Portfolio (FR/EN/AR)](https://aelm.dev): One-page CV with experience, skills, projects, FAQ - [Downloadable CV (PDF)](https://aelm.dev/cv-ali-elmufti.pdf): Latest résumé - [LinkedIn](https://www.linkedin.com/in/ali-el-mufti): Career history and endorsements - [GitHub (aelmufti)](https://github.com/aelmufti): Personal projects and contributions - [dev.to (@aelmufti)](https://dev.to/aelmufti): Engineering write-ups, often cross-posted from /notes/ with canonical home - [Uses](https://aelm.dev/uses/): Hardware, IDE and daily stack - [Now](https://aelm.dev/now/): Current focus, updated regularly ## Notes (engineering blog) - [Notes index](https://aelm.dev/notes/): All articles, newest first - [Atom feed](https://aelm.dev/notes/rss.xml): Subscribe in any feed reader - [The gap](https://aelm.dev/notes/the-gap/) - [Freelance ou CDI : ce que coder le simulateur m'a appris](https://aelm.dev/notes/freelance-ou-cdi-rex/) - [Crèche ou nounou : le vrai coût commence après les aides](https://aelm.dev/notes/creche-ou-nounou-le-vrai-cout/) - [One builder line and my rebuilds stopped being coffee breaks](https://aelm.dev/notes/angular-esbuild-application-builder/) - [My route changes crossfade now, and I wrote zero animation code](https://aelm.dev/notes/angular-view-transitions/) - [hostDirectives ended my BaseComponent inheritance](https://aelm.dev/notes/angular-host-directives/) - [My dashboard renders components it has never met](https://aelm.dev/notes/angular-dynamic-components/) - [My star-rating widget is a real form control now](https://aelm.dev/notes/angular-control-value-accessor/) - [disabled finally means disabled: input transforms](https://aelm.dev/notes/angular-input-transforms/) - [I deleted my CanActivate classes and my routing got readable](https://aelm.dev/notes/angular-functional-guards-resolvers/) - [My route params bind straight to inputs now](https://aelm.dev/notes/angular-router-input-binding/) - [SignalStore is the first NgRx I'd actually reach for](https://aelm.dev/notes/ngrx-signalstore-state/) - [Calibrating a tax simulator against URSSAF's own engine](https://aelm.dev/notes/calibrating-tax-simulator-against-urssaf/) - [@let ended my async-pipe pyramid](https://aelm.dev/notes/angular-let-template-variables/) - [Incremental hydration: ship the HTML, hydrate on hover](https://aelm.dev/notes/angular-incremental-hydration/) - [effect() is the most misused API in modern Angular](https://aelm.dev/notes/angular-effect-vs-computed/) - [@defer is the cheapest performance win Angular ever shipped](https://aelm.dev/notes/angular-defer-performance/) - [inject() and DestroyRef quietly killed my ngOnDestroy boilerplate](https://aelm.dev/notes/angular-inject-destroyref/) - [The dropdown that wouldn't reset — a linkedSignal story](https://aelm.dev/notes/angular-linkedsignal/) - [What exactly does track do in @for?](https://aelm.dev/notes/angular-for-track/) - [Where signals end and RxJS begins](https://aelm.dev/notes/angular-signals-rxjs-boundary/) - [My components have no decorators left](https://aelm.dev/notes/angular-signal-inputs-model-output/) - [I stopped guessing when viewChild is ready](https://aelm.dev/notes/angular-signal-queries/) - [Your FormGroup was returning any this whole time](https://aelm.dev/notes/angular-typed-forms/) - [Auth, retry, logging: three interceptors, zero classes](https://aelm.dev/notes/angular-functional-interceptors/) - [Two letters that fixed my LCP: ngSrc](https://aelm.dev/notes/angular-ngoptimizedimage/) - [document is not defined: a survival guide](https://aelm.dev/notes/angular-afternextrender-ssr/) - [Are we cooked ?](https://aelm.dev/notes/are-we-cooked/) - [Migration Angular 8 → 17 : retour d'expérience sans downtime](https://aelm.dev/notes/migration-angular-8-17-retour-experience/) - [Virtual threads quietly deleted my thread-pool anxiety](https://aelm.dev/notes/java-virtual-threads-spring-boot/) - [Terraform cured me of clicking around the GCP console](https://aelm.dev/notes/terraform-gcp-stop-clicking/) - [I reached for MongoDB out of habit. Postgres JSONB was the answer.](https://aelm.dev/notes/postgres-jsonb-over-mongo/) - [Angular went zoneless and I'm never going back](https://aelm.dev/notes/angular-zoneless-change-detection/) - [Signal Forms made me like Angular forms again](https://aelm.dev/notes/angular-signal-forms/) - [httpResource deleted half my Angular data-fetching code](https://aelm.dev/notes/angular-httpresource/) - [Selectorless Angular: import a component, use it as a tag](https://aelm.dev/notes/angular-selectorless-components/) - [full-stack fatigue in the LLM era — the part nobody's saying out loud](https://aelm.dev/notes/full-stack-fatigue-llm-era/) - [How I built aelm.dev: neo-brutalism, react-snap, and a GEO-first stack](https://aelm.dev/notes/building-aelm-dev/) - [Why I picked Ollama + LanceDB + FastAPI for the AI Book Recommender](https://aelm.dev/notes/ai-book-recommender-stack/) - [DuckDB for real-time dashboards: lessons from World Data Visualizer](https://aelm.dev/notes/duckdb-realtime-dashboards/) - [Building AirAlert: an honest air-quality monitor with an Arduino UNO and three sensors that disagree](https://aelm.dev/notes/airalert-arduino-air-quality/) - [Mood Tracker: one slider per day, Supabase RLS, and the discipline of not shipping features](https://aelm.dev/notes/mood-tracker-supabase-pwa/) - [Boîte à Livre: mapping free neighborhood libraries with Leaflet, OpenStreetMap, and Firebase](https://aelm.dev/notes/boite-a-livre-leaflet-firebase/) - [MobiPA: building an inclusive ride-sharing app for a French village, in Flutter](https://aelm.dev/notes/mobipa-flutter-inclusive-ridesharing/) - [LogGPX: an Android GPS tracker for ski touring, in Java, before I knew about Kotlin](https://aelm.dev/notes/loggpx-android-ski-touring/) ## Free tools - [Freelance ou CDI ?](https://freelance-ou-cdi.fr): Full 2026 simulator — six French statuses compared in net after contributions and income tax, break-even day-rate chart, validated against the URSSAF engine. Open source, fully client-side. - [Calculateur TJM ↔ Salaire](https://aelm.dev/outils/calculateur-tjm/): Quick French freelance day-rate to salary converter — billable days, fixed costs, contributions per status, both directions. No signup. ## Services (freelance) - [Développeur Angular Freelance à Paris](https://aelm.dev/freelance-angular-paris/): Développeur & tech lead Angular freelance à Paris. 4+ ans sur Angular v8 à v17+, RxJS, NgRx, migrations sans downtime, intégration IA. Disponible en remote ou sur site. - [Freelance Angular Developer in Paris](https://aelm.dev/en/angular-freelance-paris/): Freelance Angular developer & tech lead in Paris. 4+ yrs across Angular v8 to v17+, RxJS, NgRx, zero-downtime migrations, AI integration. Available remote or on-site. - [Consultant IA Freelance à Paris](https://aelm.dev/consultant-ia-paris/): Consultant IA freelance à Paris : intégration LLM, RAG, agents IA et recherche sémantique dans vos applications. Java/Python/TypeScript. TJM à partir de 600 € HT. Remote ou sur site. - [Freelance AI Consultant in Paris](https://aelm.dev/en/ai-consultant-paris/): Freelance AI consultant in Paris: LLM integration, RAG, AI agents and semantic search shipped into production apps. Java/Python/TypeScript. From €600/day. Remote or on-site. - [Développeur React Freelance à Paris](https://aelm.dev/freelance-react-paris/): Développeur & tech lead React/TypeScript freelance à Paris. Next.js, hooks, perf, design systems, intégration IA. TJM à partir de 600 € HT. Remote ou sur site. - [Freelance React Developer in Paris](https://aelm.dev/en/react-freelance-paris/): Freelance React/TypeScript developer & tech lead in Paris. Next.js, hooks, performance, design systems, AI integration. From €600/day. Available remote or on-site. - [Intégration LLM & RAG dans votre application](https://aelm.dev/integration-llm-rag/): Pourquoi la plupart des features LLM n'atteignent jamais la production — les 4 causes d'échec, les questions à poser à tout prestataire, et quand un LLM est inutile. - [LLM & RAG Integration for Your Application](https://aelm.dev/en/llm-rag-integration/): Why most LLM features never reach production — the 4 failure causes, the questions to ask any provider before signing, and when you don't need an LLM at all. - [TJM d'un Lead Développeur Fullstack Freelance à Paris](https://aelm.dev/tjm-developpeur-fullstack-paris/): La grille de lecture honnête d'un TJM en 2026 : le vrai calcul freelance vs embauche, pourquoi le freelance pas cher coûte cher, et quand ne PAS prendre de freelance. - [Freelance Lead Fullstack Developer Day Rate in Paris](https://aelm.dev/en/freelance-developer-day-rate-paris/): An honest guide to day rates in 2026: the real freelance vs. hiring math, why the cheapest contractor costs the most, and when NOT to hire a freelancer at all. - [Migration Angular Legacy, sans Downtime](https://aelm.dev/migration-angular-legacy/): Migrer, réécrire ou ne rien faire ? Les critères de décision pour un Angular legacy, le coût réel de l'immobilisme, et pourquoi le big-bang échoue presque toujours. - [Angular Legacy Migration, Zero Downtime](https://aelm.dev/en/angular-legacy-migration/): Migrate, rewrite, or do nothing? The decision criteria for legacy Angular, the real cost of standing still, and why big-bang migrations almost always fail. - [Développeur Fullstack Freelance, Full Remote](https://aelm.dev/freelance-fullstack-remote/): Comment évaluer un freelance remote avant de signer : les signaux qui prédisent l'échec, ceux qui prédisent la réussite, et les faux problèmes (fuseau, langue). - [Senior Fullstack Contractor, Remote Across Europe](https://aelm.dev/en/senior-fullstack-contractor-europe/): How to vet a remote contractor before signing: the signals that predict failure, the ones that predict success, and the fake problems (timezone, language). ## Hire / Book - [Malt profile](https://www.malt.fr/profile/alielmuftiangulartechlead): Angular Tech Lead freelance listing - [Collective profile](https://app.collective.work/collective/ali-el-mufti): Book a 30-min consultation - Email: alielmufti25@gmail.com - Phone: +33 6 41 26 67 15 ## Core expertise - Frontend: Angular (v8–v17+), React, TypeScript, RxJS, NgRx, signals, standalone components, Tailwind - Backend: Java Spring Boot, Python FastAPI, Node.js, REST, GraphQL, WebSocket, microservices - AI/ML: LLM integration (OpenAI, Gemini, Claude, Ollama), RAG pipelines, LangChain, LangGraph, vector DBs (LanceDB), prompt engineering, AI agents - DevOps: Docker, GCP, AWS, GitLab CI, GitHub Actions, CI/CD pipelines, SonarQube - Databases: PostgreSQL, MongoDB, Redis, MySQL, Firebase, Supabase - Leadership: Tech lead, code reviews, architecture decisions, mentoring junior engineers ## Notable achievements - **Upfund (2024+)**: Built AI-powered real-estate search bar — reduced response time from 60s to 10s (6x improvement) using LLM + RAG. - **Hardis Group / CRCESU (2023)**: Led team of 4. Set up GCP CI/CD pipeline. Cut bug-fix cycle time by 80% via architecture restructuring. - **Hardis Group / AgirADom (2022–2023)**: Migrated Angular 8 → Angular 12 with zero downtime on a production CRM/Extranet. - **Capgemini / Constellium (2021–2022)**: Built MES (Manufacturing Execution System) interfaces for aluminium production lines. ## Personal projects - Freelance ou CDI ? (freelance-ou-cdi.fr): Open-source 2026 simulator comparing French freelance statuses (micro, EI, EURL, SASU, portage) and CDI in net income after contributions AND income tax — validated against the URSSAF's modele-social engine - World Data Visualizer: Real-time market intelligence, Congress activity tracker, AIS ship map, NLP news aggregation (Angular, Deck.gl, Python, FastAPI) - AI Book Recommender: Semantic book search with Ollama + LanceDB (local LLM + vector DB) - AirAlert: Arduino-based air quality monitoring (BME680, MQ-135, MH-Z19) - Mood Tracker: PWA with Supabase backend and Chart.js visualizations - Boîte à Livre: Community map of free libraries (Leaflet + Firebase) - MobiPA: Flutter inclusive ride-sharing app for seniors (commissioned by La Mure city council) - LogGPX: Android GPS tracker for ski touring routes ## Availability Current availability status and a way to join the waitlist are surfaced at the top of [aelm.dev](https://aelm.dev). Typical response time: under 1 business day (excluding weekends, holidays, and 9–18h Paris time). ## Location & languages - Based in Paris, France (75003), Île-de-France - Open to remote across Europe and internationally - Works in: French, English, Arabic