# Imad El Malki Jaddi

> Desarrollador de software | Angular, Java y productos full-stack

## Contacto

- **Ubicación:** La Gornal, Cataluña
- **Email:** [imadelmalkij@gmail.com](mailto:imadelmalkij@gmail.com)
- **LinkedIn:** [imad-el-malki-jaddi-a0585a284](https://www.linkedin.com/in/imad-el-malki-jaddi-a0585a284/)
- **GitHub:** [ImadElMalki](https://github.com/ImadElMalki)

## Sobre mí

Desarrollador de software con experiencia profesional en Angular y colaboración con backends Java/Spring Boot. En proyectos propios construyo productos de extremo a extremo con TypeScript, Kotlin, React, Svelte y servicios cloud. Me interesa transformar problemas reales —incluidos el running y la productividad personal— en aplicaciones útiles, mantenibles y bien probadas.

## Experiencia laboral

### [VIEWNEXT](https://www.viewnext.com/)

**Angular Developer** · febrero de 2024 — Actualidad

Desarrollo y evolución de aplicaciones web para el sector público con Angular, integradas con APIs y backends Java/Spring Boot.

- Participación en CIRNM, sistema municipal relacionado con la gestión ambiental.
- Desarrollo y evolución de SIVCA, sistema municipal integrado con MiNT para gestionar, validar y monitorizar datos de calidad del aire de Madrid.
- Implementación de componentes, pantallas y nuevas funcionalidades, mantenimiento evolutivo e integración con APIs en colaboración con equipos backend Java y QA.

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

**Desarrollador web en prácticas** · mayo de 2022 — mayo de 2023

Desarrollo web y de soluciones empresariales low-code durante el periodo de prácticas.

- Desarrollo de aplicaciones empresariales con Microsoft Power Apps.
- Creación de cuadros de mando e informes con Microsoft Power BI.
- Desarrollo web con JavaScript, Laravel, HTML, CSS, jQuery y Bootstrap.

## Educación

### Institut Camí de Mar

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

septiembre de 2021 — mayo de 2023

## Idiomas

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

## Proyectos

### Amazon Spending Tracker

**Estado:** Publicado

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 que los varios correos de una misma compra no se sumen dos veces.
- 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:** Proyecto personal

Aplicación full-stack sobre el reto de los 100 cims de la FEEC: Angular para consultar las cimas, API REST en Spring Boot con PostgreSQL sobre Docker, y scripts en Python que recopilan, insertan y optimizan 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 construida con Capacitor: la interfaz es Svelte 5 en un WebView y un motor nativo en Kotlin posee los datos, la sincronización, la red y el cálculo. Planifica carreras, calcula ritmos y splits, consulta clima y rutas y sincroniza el calendario entre dispositivos.

**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.
- Predicciones de ritmo, splits y desnivel calculados en Kotlin.
- Inicio de sesión nativo con Credential Manager y calendario mediante la API de autorización de Google.
- Widget de pantalla de inicio, recordatorios y alarmas nativas.

### Plataforma Strava/Garmin

**Estado:** Proyecto personal

Worker de Cloudflare que escucha los webhooks de Strava, clasifica la actividad principal del día contra un plan de entrenamiento, la enriquece con clima y datos de carrera, y genera con IA el título y la entradilla que republica 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:** Proyecto personal

Extensión Chrome MV3 que calcula el gasto anual en inscripciones a carreras desde las confirmaciones de Gmail, con OAuth de solo lectura, clasificación conservadora por plataforma 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 recuperar los importes que faltan en el correo.
- Sincronización con reintentos, checkpoints y reanudación tras una parada.
- Presupuesto por año con aviso al acercarse al límite.

### CaixaBank Spending Tracker

**Estado:** Proyecto personal

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, en vez de fiarse de la hora de llegada del correo.

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

**Destacado:**
- Orden real de los movimientos reconstruido a partir de la cadena de saldos.
- Deduplicación por identificador de mensaje y por saldo, para no perder dos compras iguales el mismo día.
- Reglas de categoría con aprendizaje local y promoción a código.
- Sincronización incremental con margen para los avisos que llegan con retraso.

## Habilidades

- Angular
- TypeScript
- JavaScript
- Java
- Spring Boot
- Power Apps
- Power BI
- HTML
- CSS
- React
- Svelte
- Kotlin
- Cloudflare Workers
- Astro
- PostgreSQL
- MySQL
- Supabase
- Docker
- Git
- GitHub
