# Imad El Malki Jaddi

> Software developer · Angular & Java

## Contact

- **Location:** La Gornal, Barcelona
- **Email:** [imadelmalkij@gmail.com](mailto:imadelmalkij@gmail.com)
- **Profiles:** [LinkedIn](https://www.linkedin.com/in/imadelmalki/) · [GitHub](https://github.com/ImadElMalki)

## About me

I am a software developer specialising in Angular and Java. Since 2023 I have been at VIEWNEXT, building web applications alongside Java and QA teams. Outside work I build my own projects end to end, database, deployment and product decisions included; several of them are published and in use.

## Work experience

### [VIEWNEXT](https://www.viewnext.com/) · An IBM subsidiary

**Angular Developer** · July 2023 — Present

I build Angular applications for the public sector with APIs and Java/Spring Boot backends.

- I contribute to CIRNM, a municipal system related to environmental management.
- I build and improve SIVCA, integrated with MiNT to manage, validate and monitor Madrid's air-quality data.
- I implement components, screens and new features, maintain the application and integrate APIs with Java and QA teams.

### [INETUM](https://www.inetum.com/es/es.html)

**Web developer** · May 2022 — September 2022

Development of internal and web applications at Inetum Catalunya, with low-code tools and web technologies.

- I built enterprise applications with Microsoft Power Apps.
- I created dashboards and reports with Microsoft Power BI.

#### Before coding · 2015–2023

- **Warehouse and production operative** — [Toende](https://resetbytoende.com) · Manufacturing · 2022–2023
- **Production and warehouse operative** — [Laineblock](https://www.laineblock.com) · Industry · 2022
- **Factory operative** — [Kettal](https://www.kettal.com) · Furniture · 2021
- **Disgorging line operator** — [Pere Ventura](https://www.pereventura.com) · Sparkling wine · 2018–2020
- **Packaging operator** — [Pastisart](https://www.pastisart.com) · Food production · 2018
- **Packaging operator** — [Vacu Vin](https://www.vacuvin.com) · Netherlands · Manufacturing · 2017
- **Kitchen crew member** — [McDonald's](https://www.mcdonalds.nl) · Netherlands · Hospitality · 2017
- **Warehouse operative** — [Leen Menken](https://www.leenmenken.nl) · Netherlands · Logistics · 2016–2017
- **Maintenance operative** — [Reverté Productos Minerales](https://reverteminerals.com) · Industry · 2016
- **Farm operative** — [VD Holland](https://www.vdholland.nl) · Netherlands · Agriculture · 2016
- **Farm operative** — [Viticultura Planas 1916](https://www.viversplanas.com) · Agriculture · 2015
- **Customer service agent** — [Iberdrola](https://www.iberdrola.es) · Energy · 2015
- **Other skills** — Office software · Equipment repair · Forklift

## Education

### Institut Camí de Mar

**Advanced Vocational Training Diploma in Web Application Development (DAW)**

September 2021 — May 2023

### Institut de l'Arboç · Institut Manuel de Cabanyes

**Upper secondary education in Science and Technology**

September 2017 — June 2019

## Certifications

- **[Angular: De cero a experto](https://cursos.devtalles.com/courses/angular)** · DevTalles · 34 h · 2024
- **[Astro: El framework para sitios web orientados al contenido](https://cursos.devtalles.com/courses/Astro)** · DevTalles · 26 h · 2025
- **[GIT+GitHub: Todo un sistema de control de versiones de cero](https://cursos.devtalles.com/courses/git-github-control-versiones)** · DevTalles · 12 h · 2026
- **[Claude Code: Guía completa para desarrolladores de software](https://cursos.devtalles.com/courses/claude-code-guia-completa)** · DevTalles · 18 h · 2026
- **[Model Context Protocol (MCP)](https://midu.dev/curso/intensivo-mcp)** · midu.dev · 2026
- **[GitHub Actions](https://midu.dev/curso/curso-de-github-actions)** · midu.dev · 2026
- **[Docker y DevOps](https://midu.dev/curso/curso-docker-devops)** · midu.dev · 2026
- **Spring Boot Starters** · Viewnext · 12 h · 2025
- **JPA (Java Persistence API)** · Viewnext · 12 h · 2025
- **Java 8: new features and best practices** · Viewnext · 8 h · 2025
- **Advanced SQL** · Viewnext · 8 h · 2025
- **JavaScript** · Viewnext · 8 h · 2025
- **Responsive design with Bootstrap** · Viewnext · 12 h · 2025
- **Performance best practices** · Viewnext · 8 h · 2025
- **Security and privacy by design (technical)** · Viewnext · 3 h · 2025
- **Crypt0 · Cybersecurity** · IBM · 3 h · 2026
- **English proficiency test · CEFR B2** · goFLUENT · 2024

## Languages

- **Spanish:** Native
- **Catalan:** Native
- **Arabic:** Native
- **Berber (Amazigh):** Native
- **English:** Upper intermediate (B2)

## Projects

### Amazon Spending Tracker

**Status:** Live

Chrome MV3 extension that calculates and breaks down yearly Amazon spending from Gmail confirmations, with read-only OAuth, deduplication and local storage.

**Technologies:** JavaScript · Chrome Extensions · Gmail API · OAuth

**Highlights:**
- Deduplication by order number, so emails from the same purchase are not counted twice.
- Hourly incremental sync plus a weekly full scan.
- .xlsx export generated with no dependencies.
- Spanish and English interface; data never leaves the browser.

**Links:**
- [Website](https://amazonspendingtracker.com)
- [Chrome Web Store](https://chromewebstore.google.com/detail/amazon-spending-tracker/amejpfnehhohiffphbimdnilhjkpgfpb)

### 100 Cims

**Status:** Private code

An application for the FEEC 100 Cims challenge. It uses Angular to browse the peaks, a Spring Boot and PostgreSQL REST API, and Python scripts to collect and prepare the data and images.

**Technologies:** Angular · TypeScript · Java · Spring Boot · PostgreSQL · Python · Docker

**Highlights:**
- REST API with Maven and PostgreSQL 17 in a container.
- Python pipeline that collects the peak data and loads it into the database.
- Image download and optimisation to WebP.
- Dataset restore from CSV.

### Race Hub

**Status:** In development

An Android app built with Capacitor and a Svelte 5 interface. Its native Kotlin layer handles data, synchronisation and pace, split and elevation calculations.

**Technologies:** Capacitor · Svelte · TypeScript · Kotlin · Room · WorkManager · Supabase

**Highlights:**
- Room as the single source of data and WorkManager as the sole sync engine against Supabase.
- Paces, splits and elevation gain computed in Kotlin.
- Native sign-in with Credential Manager and Google Calendar access.
- Home-screen widget, reminders and native alarms.

### Strava/Garmin Training Assistant

**Status:** Private code

A Cloudflare Worker that receives Strava webhooks, compares the day's main activity with the training plan, and adds weather and race data. It then uses AI to generate the title and summary published to Strava.

**Technologies:** Cloudflare Workers · D1 · Queues · R2 · React · TypeScript · Hono · Vitest

**Highlights:**
- Queues with retries and a dead-letter queue, plus an hourly cron and a daily purge.
- Strava tokens encrypted with AES-GCM before being stored in D1.
- React admin dashboard served by the Worker itself.
- Garmin FIT file import and activity streams stored in R2.

### Race Spending Tracker

**Status:** Private code

Chrome MV3 extension that calculates yearly race-registration spending from Gmail confirmations, with read-only OAuth and local storage.

**Technologies:** JavaScript · Chrome Extensions · Gmail API · OAuth · Playwright

**Highlights:**
- Adapters for nine race-registration platforms.
- Bounded PDF text extraction for amounts missing from the email.
- Sync with retries, checkpoints and resume.
- Yearly budget with a warning as the limit approaches.

### CaixaBank Spending Tracker

**Status:** Private code

Chrome MV3 extension that calculates monthly spending by reading CaixaBank alerts in Gmail. It reconstructs the real transaction order by chaining balances.

**Technologies:** JavaScript · Chrome Extensions · Gmail API · OAuth · Playwright

**Highlights:**
- Real transaction order from the chain of balances.
- Deduplication by message id and by balance.
- Category rules with local learning and promotion into code.
- Incremental sync with a margin for late alerts.

### Riolan Solutions

**Status:** Live

A one-page company website for a plumbing and home-renovation business. Built with WordPress and Elementor Pro, it presents the services, a gallery of completed work and a contact form.

**Technologies:** WordPress · Elementor · PHP · HTML · CSS

**Highlights:**
- Custom identity: blue and purple palette, Poppins and Montserrat, and cut-out iconography made for the six services.
- Single page with a sticky header, anchor navigation and about, services, work and contact sections.
- Gallery of 32 job-site photos optimised to WebP.
- Contact block with phone, 24h emergencies and opening hours, plus a form with field validation.

### This portfolio

**Status:** Live

A static Astro site on Cloudflare Pages, trilingual and with no UI framework. A single cv.json feeds the pages, each language's PDF, the JSON-LD and the machine-readable endpoints; the dynamic parts are Pages Functions.

**Technologies:** Astro · TypeScript · Cloudflare Workers · D1 · Playwright · Vitest

**Highlights:**
- A hash-based CSP with no unsafe-inline, recomputed from the HTML on every build.
- HTML, DOM, CSS and JS budgets that fail the build; Lighthouse blocks when LCP goes over 2.5 s.
- The PDF is generated and checked on every build: one A4 sheet, text extractable by two engines.
- Atomic rate limits in D1, tested against a real database.

**Links:**
- [Website](https://imadelmalki.com)

## Skills

- Angular
- TypeScript
- Java
- Spring Boot
- Astro
- Svelte
- Cloudflare Workers
- PostgreSQL
- Supabase
- Docker
