# Imad El Malki Jaddi

> Desarrollador de software · Angular & Java

## Contacto

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

## Sobre mí

Soy desarrollador de software especializado en Angular y Java. Desde 2023 trabajo en VIEWNEXT, desarrollando aplicaciones web junto a equipos de Java y QA. Fuera del trabajo construyo proyectos propios de principio a fin, con su base de datos, su despliegue y sus decisiones de producto; varios están publicados y en uso.

## Experiencia laboral

### [VIEWNEXT](https://www.viewnext.com/) · Subsidiaria de IBM

**Angular Developer** · julio de 2023 — Actualidad

Desarrollo aplicaciones Angular para el sector público con APIs y backends Java/Spring Boot.

- Contribuyo a CIRNM, un sistema municipal relacionado con la gestión ambiental.
- Desarrollo y mejoro SIVCA, integrado con MiNT para gestionar, validar y monitorizar los datos de calidad del aire de Madrid.
- Implemento componentes, pantallas y nuevas funciones, mantengo la aplicación e integro APIs con los equipos Java y QA.

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

**Desarrollador web** · mayo de 2022 — septiembre de 2022

Desarrollo de aplicaciones internas y web en Inetum Catalunya, con herramientas low-code y tecnologías web.

- Desarrollé aplicaciones empresariales con Microsoft Power Apps.
- Creé cuadros de mando e informes con Microsoft Power BI.

#### Antes de programar · 2015–2023

- **Mozo especialista** — [Toende](https://resetbytoende.com) · Fabricación · 2022–2023
- **Operario de producción y almacén** — [Laineblock](https://www.laineblock.com) · Industria · 2022
- **Operario de fábrica** — [Kettal](https://www.kettal.com) · Mobiliario · 2021
- **Operario de degüelle (champagel)** — [Pere Ventura](https://www.pereventura.com) · Cava · 2018–2020
- **Operario de envasado** — [Pastisart](https://www.pastisart.com) · Alimentación · 2018
- **Operario de envasado** — [Vacu Vin](https://www.vacuvin.com) · Países Bajos · Fabricación · 2017
- **Empleado de cocina** — [McDonald's](https://www.mcdonalds.nl) · Países Bajos · Hostelería · 2017
- **Mozo de almacén** — [Leen Menken](https://www.leenmenken.nl) · Países Bajos · Logística · 2016–2017
- **Operario de mantenimiento** — [Reverté Productos Minerales](https://reverteminerals.com) · Industria · 2016
- **Operario agrícola** — [VD Holland](https://www.vdholland.nl) · Países Bajos · Agricultura · 2016
- **Operario agrícola** — [Viticultura Planas 1916](https://www.viversplanas.com) · Agricultura · 2015
- **Agente de atención al cliente** — [Iberdrola](https://www.iberdrola.es) · Energía · 2015
- **Otras habilidades** — Programas ofimáticos · Reparación de equipos · Carretilla elevadora

## Educación

### Institut Camí de Mar

**Ciclo Formativo de Grado Superior en Desarrollo de Aplicaciones Web (DAW)**

septiembre de 2021 — mayo de 2023

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

**Bachillerato en Ciencias y Tecnología**

septiembre de 2017 — junio de 2019

## Certificaciones

- **[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: novedades y buenas prácticas** · Viewnext · 8 h · 2025
- **SQL avanzado** · Viewnext · 8 h · 2025
- **JavaScript** · Viewnext · 8 h · 2025
- **Diseño responsive con Bootstrap** · Viewnext · 12 h · 2025
- **Buenas prácticas de rendimiento** · Viewnext · 8 h · 2025
- **Seguridad y privacidad por diseño (técnico)** · Viewnext · 3 h · 2025
- **Crypt0 · Ciberseguridad** · IBM · 3 h · 2026
- **Test de nivel de inglés · MCER B2** · goFLUENT · 2024

## Idiomas

- **Español:** Nativo
- **Catalán:** Nativo
- **Árabe:** Nativo
- **Bereber (amazig):** Nativo
- **Inglés:** Intermedio alto (B2)

## Proyectos

### Amazon Spending Tracker

**Estado:** En línea

Extensión Chrome MV3 que calcula y desglosa el gasto anual en Amazon desde las confirmaciones de Gmail, con OAuth de solo lectura, deduplicación y almacenamiento local.

**Tecnologías:** JavaScript · Chrome Extensions · Gmail API · OAuth

**Destacado:**
- Deduplicación por número de pedido, para no contar dos veces los correos de una misma compra.
- Sincronización incremental cada hora y escaneo completo semanal.
- Exportación a .xlsx generada sin dependencias.
- Interfaz en español e inglés; los datos no salen del navegador.

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

### 100 Cims

**Estado:** Código privado

Aplicación sobre el reto de los 100 Cims de la FEEC. Usa Angular para consultar las cimas, una API REST con Spring Boot y PostgreSQL, y scripts en Python para recopilar y preparar los datos y las imágenes.

**Tecnologías:** Angular · TypeScript · Java · Spring Boot · PostgreSQL · Python · Docker

**Destacado:**
- API REST con Maven y PostgreSQL 17 en contenedor.
- Proceso en Python que recopila los datos de las cimas y los carga en la base de datos.
- Descarga y optimización de las imágenes a WebP.
- Restauración del conjunto de datos desde CSV.

### Race Hub

**Estado:** En desarrollo

App Android con Capacitor y una interfaz en Svelte 5. La parte nativa en Kotlin se encarga de los datos, la sincronización y los cálculos de ritmos, splits y desnivel.

**Tecnologías:** Capacitor · Svelte · TypeScript · Kotlin · Room · WorkManager · Supabase

**Destacado:**
- Room como única fuente de datos y WorkManager como único motor de sincronización con Supabase.
- Ritmos, splits y desnivel calculados en Kotlin.
- Sesión nativa con Credential Manager y calendario de Google.
- Widget de inicio, recordatorios y alarmas nativas.

### Asistente Strava/Garmin

**Estado:** Código privado

Worker de Cloudflare que recibe los webhooks de Strava, compara la actividad principal del día con el plan de entrenamiento y añade el clima y los datos de carrera. Después genera con IA el título y el resumen que publica en Strava.

**Tecnologías:** Cloudflare Workers · D1 · Queues · R2 · React · TypeScript · Hono · Vitest

**Destacado:**
- Colas con reintentos y cola de mensajes fallidos, más cron horario y purga diaria.
- Tokens de Strava cifrados con AES-GCM antes de guardarse en D1.
- Panel de administración en React servido por el propio Worker.
- Importación de archivos FIT de Garmin y streams de actividad guardados en R2.

### Race Spending Tracker

**Estado:** Código privado

Extensión Chrome MV3 que calcula el gasto anual en inscripciones a carreras desde las confirmaciones de Gmail, con OAuth de solo lectura y almacenamiento local.

**Tecnologías:** JavaScript · Chrome Extensions · Gmail API · OAuth · Playwright

**Destacado:**
- Adaptadores para nueve plataformas de inscripción.
- Extracción acotada de texto de PDF para los importes que faltan en el correo.
- Sincronización con reintentos, checkpoints y reanudación.
- Presupuesto anual con aviso al acercarse al límite.

### CaixaBank Spending Tracker

**Estado:** Código privado

Extensión Chrome MV3 que calcula el gasto mensual leyendo los avisos de CaixaBank en Gmail. Reconstruye el orden real de los movimientos encadenando saldos.

**Tecnologías:** JavaScript · Chrome Extensions · Gmail API · OAuth · Playwright

**Destacado:**
- Orden real de los movimientos a partir de la cadena de saldos.
- Deduplicación por identificador de mensaje y por saldo.
- Reglas de categoría con aprendizaje local y promoción a código.
- Sincronización incremental con margen para los avisos tardíos.

### Riolan Solutions

**Estado:** En línea

Sitio corporativo de una sola página para una empresa de lampistería y reformas. Está hecho con WordPress y Elementor Pro e incluye sus servicios, una galería de trabajos y un formulario de contacto.

**Tecnologías:** WordPress · Elementor · PHP · HTML · CSS

**Destacado:**
- Identidad propia: paleta azul y morada, tipografías Poppins y Montserrat, e iconografía recortada a medida para los seis servicios.
- Página única con cabecera fija, navegación por anclas y secciones de nosotros, servicios, trabajos y contacto.
- Galería de 32 fotos de obra optimizadas a WebP.
- Bloque de contacto con teléfono, urgencias 24 h y horario, más formulario con validación de campos.

### Este portfolio

**Estado:** En línea

Sitio estático en Astro sobre Cloudflare Pages, trilingüe y sin framework de interfaz. Un solo cv.json alimenta las páginas, el PDF de cada idioma, el JSON-LD y los endpoints para máquinas; lo dinámico son Pages Functions.

**Tecnologías:** Astro · TypeScript · Cloudflare Workers · D1 · Playwright · Vitest

**Destacado:**
- CSP por hashes y sin unsafe-inline, recalculada desde el HTML en cada build.
- Presupuestos de HTML, DOM, CSS y JS que fallan el build; Lighthouse bloquea si el LCP pasa de 2,5 s.
- El PDF se genera y se comprueba en cada build: una hoja A4 y texto extraíble con dos motores.
- Límites de uso atómicos en D1, probados contra una base real.

**Enlaces:**
- [Sitio web](https://imadelmalki.com)

## Habilidades

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