{
  "$schema": "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.2.1/schema.json",
  "basics": {
    "name": "Imad El Malki Jaddi",
    "label": "Desenvolupador de programari · Angular & Java",
    "image": "https://imadelmalki.com/portrait.webp",
    "email": "imadelmalkij@gmail.com",
    "phone": "+34641829721",
    "summary": "Soc desenvolupador de programari especialitzat en Angular i Java. Des del 2023 treballo a VIEWNEXT, desenvolupant aplicacions web amb equips de Java i QA. Fora de la feina construeixo projectes propis de cap a fi, amb la seva base de dades, el seu desplegament i les seves decisions de producte; uns quants estan publicats i en ús.",
    "location": {
      "city": "La Gornal",
      "region": "Barcelona",
      "countryCode": "ES"
    },
    "profiles": [
      {
        "network": "LinkedIn",
        "username": "imadelmalki",
        "url": "https://www.linkedin.com/in/imadelmalki/"
      },
      {
        "network": "GitHub",
        "username": "ImadElMalki",
        "url": "https://github.com/ImadElMalki"
      }
    ],
    "url": "https://imadelmalki.com/ca/"
  },
  "work": [
    {
      "name": "VIEWNEXT",
      "position": "Angular Developer",
      "url": "https://www.viewnext.com/",
      "startDate": "2023-07-04",
      "summary": "Desenvolupo aplicacions Angular per al sector públic amb APIs i backends Java/Spring Boot.",
      "highlights": [
        "Contribueixo a CIRNM, un sistema municipal relacionat amb la gestió ambiental.",
        "Desenvolupo i milloro SIVCA, integrat amb MiNT per gestionar, validar i monitorar les dades de qualitat de l'aire de Madrid.",
        "Implemento components, pantalles i noves funcions, mantinc l'aplicació i integro APIs amb els equips Java i QA."
      ],
      "description": "Subsidiària d'IBM"
    },
    {
      "name": "INETUM",
      "position": "Desenvolupador web",
      "url": "https://www.inetum.com/es/es.html",
      "startDate": "2022-05-02",
      "summary": "Desenvolupament d'aplicacions internes i web a Inetum Catalunya, amb eines low-code i tecnologies web.",
      "highlights": [
        "Vaig desenvolupar aplicacions empresarials amb Microsoft Power Apps.",
        "Vaig crear quadres de comandament i informes amb Microsoft Power BI."
      ],
      "endDate": "2022-09-21"
    }
  ],
  "otherWork": [
    {
      "name": "Toende",
      "position": "Mosso especialista",
      "field": "Fabricació",
      "startDate": "2022-10-18",
      "endDate": "2023-06-30",
      "url": "https://resetbytoende.com"
    },
    {
      "name": "Laineblock",
      "position": "Operari de producció i magatzem",
      "field": "Indústria",
      "startDate": "2022-02-11",
      "endDate": "2022-03-12",
      "url": "https://www.laineblock.com"
    },
    {
      "name": "Kettal",
      "position": "Operari de fàbrica",
      "field": "Mobiliari",
      "startDate": "2021-05-23",
      "endDate": "2021-09-30",
      "url": "https://www.kettal.com"
    },
    {
      "name": "Pere Ventura",
      "position": "Operari de degollament (champagel)",
      "field": "Cava",
      "startDate": "2018-09-03",
      "endDate": "2020-03-13",
      "url": "https://www.pereventura.com"
    },
    {
      "name": "Pastisart",
      "position": "Operari d'envasament",
      "field": "Alimentació",
      "startDate": "2018-06-07",
      "endDate": "2018-08-29",
      "url": "https://www.pastisart.com"
    },
    {
      "name": "Vacu Vin",
      "position": "Operari d'envasament",
      "location": "Països Baixos",
      "field": "Fabricació",
      "startDate": "2017-07-01",
      "endDate": "2017-10-01",
      "url": "https://www.vacuvin.com"
    },
    {
      "name": "McDonald's",
      "position": "Empleat de cuina",
      "location": "Països Baixos",
      "field": "Hostaleria",
      "startDate": "2017-01-02",
      "endDate": "2017-06-03",
      "url": "https://www.mcdonalds.nl"
    },
    {
      "name": "Leen Menken",
      "position": "Mosso de magatzem",
      "location": "Països Baixos",
      "field": "Logística",
      "startDate": "2016-12-01",
      "endDate": "2017-06-01",
      "url": "https://www.leenmenken.nl"
    },
    {
      "name": "Reverté Productos Minerales",
      "position": "Operari de manteniment",
      "field": "Indústria",
      "startDate": "2016-02-18",
      "endDate": "2016-02-26",
      "url": "https://reverteminerals.com"
    },
    {
      "name": "VD Holland",
      "position": "Operari agrícola",
      "location": "Països Baixos",
      "field": "Agricultura",
      "startDate": "2016-01-01",
      "endDate": "2016-02-01",
      "url": "https://www.vdholland.nl"
    },
    {
      "name": "Viticultura Planas 1916",
      "position": "Operari agrícola",
      "field": "Agricultura",
      "startDate": "2015-12-09",
      "endDate": "2015-12-18",
      "url": "https://www.viversplanas.com"
    },
    {
      "name": "Iberdrola",
      "position": "Agent d'atenció al client",
      "field": "Energia",
      "startDate": "2015-06-01",
      "endDate": "2015-07-01",
      "url": "https://www.iberdrola.es"
    }
  ],
  "otherSkills": [
    "Programes ofimàtics",
    "Reparació d'equips",
    "Carretó elevador"
  ],
  "education": [
    {
      "institution": "Institut Camí de Mar",
      "area": "Desenvolupament d'Aplicacions Web (DAW)",
      "studyType": "Cicle Formatiu de Grau Superior",
      "startDate": "2021-09-01",
      "endDate": "2023-05-01"
    },
    {
      "institution": "Institut de l'Arboç · Institut Manuel de Cabanyes",
      "area": "Ciències i Tecnologia",
      "studyType": "Batxillerat",
      "startDate": "2017-09-01",
      "endDate": "2019-06-01"
    }
  ],
  "certificates": [
    {
      "name": "Angular: De cero a experto",
      "issuer": "DevTalles",
      "date": "2024-11-30",
      "hours": 34,
      "url": "https://cursos.devtalles.com/courses/angular"
    },
    {
      "name": "Astro: El framework para sitios web orientados al contenido",
      "issuer": "DevTalles",
      "date": "2025-06-30",
      "hours": 26,
      "url": "https://cursos.devtalles.com/courses/Astro"
    },
    {
      "name": "GIT+GitHub: Todo un sistema de control de versiones de cero",
      "issuer": "DevTalles",
      "date": "2026-08-24",
      "hours": 12,
      "url": "https://cursos.devtalles.com/courses/git-github-control-versiones"
    },
    {
      "name": "Claude Code: Guía completa para desarrolladores de software",
      "issuer": "DevTalles",
      "date": "2026-08-24",
      "hours": 18,
      "url": "https://cursos.devtalles.com/courses/claude-code-guia-completa"
    },
    {
      "name": "Model Context Protocol (MCP)",
      "issuer": "midu.dev",
      "date": "2026-08-24",
      "url": "https://midu.dev/curso/intensivo-mcp"
    },
    {
      "name": "GitHub Actions",
      "issuer": "midu.dev",
      "date": "2026-08-24",
      "url": "https://midu.dev/curso/curso-de-github-actions"
    },
    {
      "name": "Docker y DevOps",
      "issuer": "midu.dev",
      "date": "2026-08-24",
      "url": "https://midu.dev/curso/curso-docker-devops"
    },
    {
      "name": "Spring Boot Starters",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 12
    },
    {
      "name": "JPA (Java Persistence API)",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 12
    },
    {
      "name": "Java 8: novetats i bones pràctiques",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 8
    },
    {
      "name": "SQL avançat",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 8
    },
    {
      "name": "JavaScript",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 8
    },
    {
      "name": "Disseny responsive amb Bootstrap",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 12
    },
    {
      "name": "Bones pràctiques de rendiment",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 8
    },
    {
      "name": "Seguretat i privacitat per disseny (tècnic)",
      "issuer": "Viewnext",
      "date": "2025-02-08",
      "hours": 3
    },
    {
      "name": "Crypt0 · Ciberseguretat",
      "issuer": "IBM",
      "date": "2026-07-07",
      "hours": 3
    },
    {
      "name": "Test de nivell d'anglès · MECR B2",
      "issuer": "goFLUENT",
      "date": "2024-09-02"
    }
  ],
  "languages": [
    {
      "language": "Castellà",
      "fluency": "Natiu",
      "level": "native"
    },
    {
      "language": "Català",
      "fluency": "Natiu",
      "level": "native"
    },
    {
      "language": "Àrab",
      "fluency": "Natiu",
      "level": "native"
    },
    {
      "language": "Berber (amazic)",
      "fluency": "Natiu",
      "level": "native"
    },
    {
      "language": "Anglès",
      "fluency": "Intermedi alt",
      "level": "B2"
    }
  ],
  "projects": [
    {
      "id": "amazon-spending-tracker",
      "name": "Amazon Spending Tracker",
      "status": "published",
      "technologies": [
        "JavaScript",
        "Chrome Extensions",
        "Gmail API",
        "OAuth"
      ],
      "description": "Reconstrueix les teves compres a partir dels correus d'Amazon, evita comandes duplicades i calcula la despesa anual.",
      "overview": "Extensió Chrome MV3 que calcula i desglossa la despesa anual a Amazon a partir de les confirmacions de Gmail, amb OAuth de només lectura, deduplicació i emmagatzematge local.",
      "highlights": [
        "Deduplicació per número de comanda, per no comptar dues vegades els correus d'una mateixa compra.",
        "Sincronització incremental cada hora i escaneig complet setmanal.",
        "Exportació a .xlsx generada sense dependències.",
        "Interfície en castellà i anglès; les dades no surten del navegador."
      ],
      "links": [
        {
          "label": "Lloc web",
          "url": "https://amazonspendingtracker.com",
          "kind": "website"
        },
        {
          "label": "Chrome Web Store",
          "url": "https://chromewebstore.google.com/detail/amazon-spending-tracker/amejpfnehhohiffphbimdnilhjkpgfpb",
          "kind": "store"
        }
      ],
      "keywords": [
        "JavaScript",
        "Chrome Extensions",
        "Gmail API",
        "OAuth"
      ]
    },
    {
      "id": "100-cims",
      "name": "100 Cims",
      "status": "private",
      "technologies": [
        "Angular",
        "TypeScript",
        "Java",
        "Spring Boot",
        "PostgreSQL",
        "Python",
        "Docker"
      ],
      "description": "Reuneix els cims del repte 100 Cims en un catàleg amb fitxes, fotografies i dades preparades automàticament.",
      "overview": "Aplicació sobre el repte dels 100 Cims de la FEEC. Fa servir Angular per consultar els cims, una API REST amb Spring Boot i PostgreSQL, i scripts en Python per recopilar i preparar les dades i les imatges.",
      "highlights": [
        "API REST amb Maven i PostgreSQL 17 en contenidor.",
        "Procés en Python que recopila les dades dels cims i les carrega a la base de dades.",
        "Descàrrega i optimització de les imatges a WebP.",
        "Restauració del conjunt de dades des de CSV."
      ],
      "featured": true,
      "keywords": [
        "Angular",
        "TypeScript",
        "Java",
        "Spring Boot",
        "PostgreSQL",
        "Python",
        "Docker"
      ]
    },
    {
      "id": "race-hub",
      "name": "Race Hub",
      "status": "in-development",
      "technologies": [
        "Capacitor",
        "Svelte",
        "TypeScript",
        "Kotlin",
        "Room",
        "WorkManager",
        "Supabase"
      ],
      "description": "Organitza les teves curses, calcula ritmes, parcials i desnivell, i sincronitza recordatoris amb Google Calendar.",
      "overview": "App Android amb Capacitor i una interfície en Svelte 5. La part nativa en Kotlin s'encarrega de les dades, la sincronització i els càlculs de ritmes, splits i desnivell.",
      "highlights": [
        "Room com a única font de dades i WorkManager com a únic motor de sincronització amb Supabase.",
        "Ritmes, splits i desnivell calculats en Kotlin.",
        "Sessió nativa amb Credential Manager i calendari de Google.",
        "Widget d'inici, recordatoris i alarmes natives."
      ],
      "keywords": [
        "Capacitor",
        "Svelte",
        "TypeScript",
        "Kotlin",
        "Room",
        "WorkManager",
        "Supabase"
      ]
    },
    {
      "id": "strava-garmin-platform",
      "name": "Assistent Strava/Garmin",
      "status": "private",
      "technologies": [
        "Cloudflare Workers",
        "D1",
        "Queues",
        "R2",
        "React",
        "TypeScript",
        "Hono",
        "Vitest"
      ],
      "description": "Processa activitats de Strava i Garmin, les compara amb el pla d'entrenament i la meteorologia, i publica un títol i un resum generats amb IA.",
      "overview": "Worker de Cloudflare que rep els webhooks de Strava, compara l'activitat principal del dia amb el pla d'entrenament i hi afegeix el temps i les dades de cursa. Després genera amb IA el títol i el resum que publica a Strava.",
      "highlights": [
        "Cues amb reintents i cua de missatges fallits, més cron horari i purga diària.",
        "Tokens de Strava xifrats amb AES-GCM abans de desar-los a D1.",
        "Tauler d'administració en React servit pel mateix Worker.",
        "Importació d'arxius FIT de Garmin i streams d'activitat desats a R2."
      ],
      "featured": true,
      "keywords": [
        "Cloudflare Workers",
        "D1",
        "Queues",
        "R2",
        "React",
        "TypeScript",
        "Hono",
        "Vitest"
      ]
    },
    {
      "id": "race-spending-tracker",
      "name": "Race Spending Tracker",
      "status": "private",
      "technologies": [
        "JavaScript",
        "Chrome Extensions",
        "Gmail API",
        "OAuth",
        "Playwright"
      ],
      "description": "Detecta inscripcions de nou plataformes als correus i PDFs, en recupera els imports i controla el pressupost anual.",
      "overview": "Extensió Chrome MV3 que calcula la despesa anual en inscripcions a curses a partir de les confirmacions de Gmail, amb OAuth de només lectura i emmagatzematge local.",
      "highlights": [
        "Adaptadors per a nou plataformes d'inscripció.",
        "Extracció acotada de text de PDF per als imports que falten al correu.",
        "Sincronització amb reintents, checkpoints i represa.",
        "Pressupost anual amb avís en acostar-se al límit."
      ],
      "keywords": [
        "JavaScript",
        "Chrome Extensions",
        "Gmail API",
        "OAuth",
        "Playwright"
      ]
    },
    {
      "id": "caixabank-spending-tracker",
      "name": "CaixaBank Spending Tracker",
      "status": "private",
      "technologies": [
        "JavaScript",
        "Chrome Extensions",
        "Gmail API",
        "OAuth",
        "Playwright"
      ],
      "description": "Ordena i classifica els moviments a partir dels avisos del banc per mostrar la teva despesa mensual amb precisió.",
      "overview": "Extensió Chrome MV3 que calcula la despesa mensual llegint els avisos de CaixaBank a Gmail. Reconstrueix l'ordre real dels moviments encadenant saldos.",
      "highlights": [
        "Ordre real dels moviments a partir de la cadena de saldos.",
        "Deduplicació per identificador de missatge i per saldo.",
        "Regles de categoria amb aprenentatge local i promoció a codi.",
        "Sincronització incremental amb marge per als avisos tardans."
      ],
      "keywords": [
        "JavaScript",
        "Chrome Extensions",
        "Gmail API",
        "OAuth",
        "Playwright"
      ]
    },
    {
      "id": "riolan-solutions",
      "name": "Riolan Solutions",
      "status": "published",
      "technologies": [
        "WordPress",
        "Elementor",
        "PHP",
        "HTML",
        "CSS"
      ],
      "description": "Presenta els serveis, els treballs i les vies de contacte d'una empresa de lampisteria i reformes en un sol web.",
      "overview": "Lloc corporatiu d'una sola pàgina per a una empresa de lampisteria i reformes. Està fet amb WordPress i Elementor Pro i inclou els serveis, una galeria de treballs i un formulari de contacte.",
      "highlights": [
        "Identitat pròpia: paleta blava i morada, tipografies Poppins i Montserrat, i iconografia retallada a mida per als sis serveis.",
        "Pàgina única amb capçalera fixa, navegació per àncores i seccions de nosaltres, serveis, treballs i contacte.",
        "Galeria de 32 fotos d'obra optimitzades a WebP.",
        "Bloc de contacte amb telèfon, urgències 24 h i horari, més formulari amb validació de camps."
      ],
      "keywords": [
        "WordPress",
        "Elementor",
        "PHP",
        "HTML",
        "CSS"
      ]
    },
    {
      "id": "portfolio",
      "name": "Aquest portafolis",
      "status": "published",
      "technologies": [
        "Astro",
        "TypeScript",
        "Cloudflare Workers",
        "D1",
        "Playwright",
        "Vitest"
      ],
      "description": "El lloc que estàs llegint: un CV en JSON que genera el web, el PDF i els formats per a màquines, amb el build com a control de qualitat.",
      "overview": "Lloc estàtic en Astro sobre Cloudflare Pages, trilingüe i sense framework d'interfície. Un sol cv.json alimenta les pàgines, el PDF de cada idioma, el JSON-LD i els endpoints per a màquines; el dinàmic són Pages Functions.",
      "highlights": [
        "CSP per hashes i sense unsafe-inline, recalculada des de l'HTML a cada build.",
        "Pressupostos d'HTML, DOM, CSS i JS que fan fallar el build; Lighthouse bloqueja si l'LCP passa de 2,5 s.",
        "El PDF es genera i es comprova a cada build: un full A4 i text extraïble amb dos motors.",
        "Límits d'ús atòmics a D1, provats contra una base real."
      ],
      "links": [
        {
          "label": "Lloc web",
          "url": "https://imadelmalki.com",
          "kind": "website"
        }
      ],
      "featured": true,
      "keywords": [
        "Astro",
        "TypeScript",
        "Cloudflare Workers",
        "D1",
        "Playwright",
        "Vitest"
      ]
    }
  ],
  "skills": [
    {
      "name": "Angular",
      "level": "advanced",
      "featured": true
    },
    {
      "name": "TypeScript",
      "level": "advanced",
      "featured": true
    },
    {
      "name": "Java",
      "level": "advanced",
      "featured": true
    },
    {
      "name": "Spring Boot",
      "level": "advanced",
      "featured": true
    },
    {
      "name": "Astro",
      "level": "advanced",
      "featured": true
    },
    {
      "name": "Svelte",
      "level": "intermediate"
    },
    {
      "name": "Cloudflare Workers",
      "level": "intermediate"
    },
    {
      "name": "PostgreSQL",
      "level": "advanced"
    },
    {
      "name": "Supabase",
      "level": "advanced"
    },
    {
      "name": "Docker",
      "level": "intermediate"
    }
  ]
}