feat: implement CSS sprite system for image optimization
Reduces HTTP requests from 44+ individual images to 3 sprite sheets (~93% reduction). Includes Go sprite generator tool, CSS classes, template integration, and E2E tests. - Add cmd/sprites/main.go for sprite generation (60x60px + 120x120px @2x) - Add _sprites.css with responsive sizing and retina support - Update templates to use sprites with logoIndex fallback - Add Makefile targets: sprites, sprites-clean - Add 9-test E2E suite for sprite functionality - Add doc/22-SPRITES.md with usage documentation
This commit is contained in:
@@ -55,6 +55,7 @@
|
||||
"API Integration"
|
||||
],
|
||||
"companyLogo": "olympic-broadcasting.png",
|
||||
"logoIndex": 15,
|
||||
"shortDescription": "SAP CDC solutions for international broadcasting events. Custom implementations and technical guidance.",
|
||||
"companyID": "olympic-broadcasting"
|
||||
},
|
||||
@@ -83,6 +84,7 @@
|
||||
"Authentication Systems"
|
||||
],
|
||||
"companyLogo": "livgolf.png",
|
||||
"logoIndex": 13,
|
||||
"shortDescription": "Technical consulting for SAP CDC implementation. Created authorization screens, backend endpoints, and comprehensive documentation.",
|
||||
"companyID": "livgolf"
|
||||
},
|
||||
@@ -116,6 +118,7 @@
|
||||
"Managed identity flows for millions of users across web and mobile platforms"
|
||||
],
|
||||
"companyLogo": "aena.png",
|
||||
"logoIndex": 2,
|
||||
"shortDescription": "Lead Technical Consultant for AENA Airports Authentication System serving millions of passengers across all Spanish airports.",
|
||||
"companyID": "aena"
|
||||
},
|
||||
@@ -143,6 +146,7 @@
|
||||
"Technical Documentation"
|
||||
],
|
||||
"companyLogo": "sap.png",
|
||||
"logoIndex": 18,
|
||||
"shortDescription": "SAP Customer Data Cloud technical consulting, troubleshooting, and stakeholder education on GDPR compliance.",
|
||||
"companyID": "sap"
|
||||
},
|
||||
@@ -169,6 +173,7 @@
|
||||
"System Monitoring"
|
||||
],
|
||||
"companyLogo": "gigya.png",
|
||||
"logoIndex": 10,
|
||||
"shortDescription": "Technical support and problem-solving for Gigya platform. System monitoring and training program development.",
|
||||
"companyID": "gigya"
|
||||
},
|
||||
@@ -201,6 +206,7 @@
|
||||
"DevOps"
|
||||
],
|
||||
"companyLogo": "drosoloft-plain.png",
|
||||
"logoIndex": 6,
|
||||
"shortDescription": "Freelance work for multiple clients (Megabanner, <a href='https://ebantic.com/en/' target='_blank' rel='noopener noreferrer'>Ebantic</a>, <a href='https://www.everis.com/' target='_blank' rel='noopener noreferrer'>Everis</a>, <a href='https://www.indracompany.com/' target='_blank' rel='noopener noreferrer'>Indra</a>) developing React applications, designing APIs, integrating video systems and managing projects.",
|
||||
"companyID": "drosoloft"
|
||||
},
|
||||
@@ -230,6 +236,7 @@
|
||||
"Successfully managed technical team and product development"
|
||||
],
|
||||
"companyLogo": "emailing-network.png",
|
||||
"logoIndex": 8,
|
||||
"shortDescription": "Technical Director leading development of backend and 5 websites. Reduced production times by 75%.",
|
||||
"companyID": "emailing-network"
|
||||
},
|
||||
@@ -252,6 +259,7 @@
|
||||
"JavaScript"
|
||||
],
|
||||
"companyLogo": "twentic.png",
|
||||
"logoIndex": 19,
|
||||
"shortDescription": "WordPress and PHP website development as freelance programmer.",
|
||||
"companyID": "twentic"
|
||||
},
|
||||
@@ -260,6 +268,7 @@
|
||||
"company": "Penta MSI",
|
||||
"companyURL": "http://pentamsi.com/",
|
||||
"companyLogo": "pentamsi.png",
|
||||
"logoIndex": 17,
|
||||
"expired": true,
|
||||
"location": "Barcelona, Spain",
|
||||
"startDate": "2010-10",
|
||||
@@ -283,6 +292,7 @@
|
||||
"company": "Homeria + WebRatio S.R.L.",
|
||||
"companyURL": "http://webratio.com/",
|
||||
"companyLogo": "webratio.png",
|
||||
"logoIndex": 21,
|
||||
"location": "Cáceres (Spain) / Como (Italy)",
|
||||
"startDate": "2008-01",
|
||||
"endDate": "2008-12",
|
||||
@@ -305,6 +315,7 @@
|
||||
"company": "Insa",
|
||||
"companyURL": "http://insags.com/",
|
||||
"companyLogo": "insa.png",
|
||||
"logoIndex": 12,
|
||||
"expired": true,
|
||||
"location": "Cáceres, Spain",
|
||||
"startDate": "2006-09",
|
||||
@@ -549,6 +560,7 @@
|
||||
"projectDesc": "Beach Cleaning Initiative",
|
||||
"url": "https://somosunaola.org",
|
||||
"projectLogo": "somosunaola.png",
|
||||
"logoIndex": 10,
|
||||
"location": "La Palma, Canary Islands",
|
||||
"startDate": "2023-07",
|
||||
"current": true,
|
||||
@@ -571,6 +583,7 @@
|
||||
"projectDesc": "Artist Portfolio Website",
|
||||
"url": "https://herrumbrevivoarte.com",
|
||||
"projectLogo": "herrumbre-vivo.png",
|
||||
"logoIndex": 2,
|
||||
"location": "Fuencaliente, La Palma",
|
||||
"startDate": "2024",
|
||||
"current": true,
|
||||
@@ -592,6 +605,7 @@
|
||||
"projectDesc": "Football Prediction Platform",
|
||||
"url": "https://laporra.club",
|
||||
"projectLogo": "laporra.png",
|
||||
"logoIndex": 5,
|
||||
"gitRepoUrl": "",
|
||||
"location": "Online",
|
||||
"current": true,
|
||||
@@ -617,6 +631,7 @@
|
||||
"projectDesc": "SAP Customer Data Cloud Demo",
|
||||
"url": "https://gigyademo.com/cdc-starter-kit/",
|
||||
"projectLogo": "sap.png",
|
||||
"logoIndex": 8,
|
||||
"location": "Online",
|
||||
"startDate": "2018",
|
||||
"current": true,
|
||||
@@ -726,6 +741,7 @@
|
||||
"title": "Codecademy Certifications",
|
||||
"institution": "Codecademy",
|
||||
"courseLogo": "codecademy.png",
|
||||
"logoIndex": 1,
|
||||
"location": "Online",
|
||||
"date": "2022-2024",
|
||||
"duration": "Various",
|
||||
@@ -740,6 +756,7 @@
|
||||
"title": "Udemy Certifications",
|
||||
"institution": "Udemy",
|
||||
"courseLogo": "udemy.png",
|
||||
"logoIndex": 7,
|
||||
"location": "Online",
|
||||
"date": "2024-2025",
|
||||
"duration": "Various",
|
||||
@@ -757,6 +774,7 @@
|
||||
"title": "LinkedIn Learning Certifications",
|
||||
"institution": "LinkedIn Learning",
|
||||
"courseLogo": "linkedin.png",
|
||||
"logoIndex": 4,
|
||||
"location": "Online",
|
||||
"date": "2019-2020",
|
||||
"duration": "Various",
|
||||
@@ -774,6 +792,7 @@
|
||||
"title": "Servoy World 2011",
|
||||
"institution": "Servoy",
|
||||
"courseLogo": "servoy.png",
|
||||
"logoIndex": 6,
|
||||
"location": "Amsterdam",
|
||||
"date": "2011-02",
|
||||
"duration": "3 days",
|
||||
@@ -789,6 +808,7 @@
|
||||
"title": "Train the Trainers",
|
||||
"institution": "FOREM Extremadura",
|
||||
"courseLogo": "forem.png",
|
||||
"logoIndex": 2,
|
||||
"location": "Cáceres",
|
||||
"date": "2009-06",
|
||||
"duration": "150 hours",
|
||||
@@ -804,6 +824,7 @@
|
||||
"title": "Windows 2003 Server",
|
||||
"institution": "Cáceres Chamber of Commerce",
|
||||
"courseLogo": "camaracomercio.png",
|
||||
"logoIndex": 0,
|
||||
"location": "Cáceres",
|
||||
"date": "2006-01",
|
||||
"duration": "80 hours",
|
||||
@@ -819,6 +840,7 @@
|
||||
"title": "1st Extremadura Conference on Software Industry",
|
||||
"institution": "University of Extremadura",
|
||||
"courseLogo": "uex.png",
|
||||
"logoIndex": 8,
|
||||
"location": "Cáceres",
|
||||
"date": "2005-07",
|
||||
"duration": "3 days",
|
||||
@@ -834,6 +856,7 @@
|
||||
"title": "Web Application Development: Apache, PHP and MySQL",
|
||||
"institution": "University of Extremadura",
|
||||
"courseLogo": "uex.png",
|
||||
"logoIndex": 8,
|
||||
"location": "Cáceres",
|
||||
"date": "2002",
|
||||
"duration": "40 hours",
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
"Integración de APIs"
|
||||
],
|
||||
"companyLogo": "olympic-broadcasting.png",
|
||||
"logoIndex": 15,
|
||||
"shortDescription": "Soluciones SAP CDC para eventos de transmisión internacional. Implementaciones personalizadas y orientación técnica.",
|
||||
"companyID": "olympic-broadcasting"
|
||||
},
|
||||
@@ -83,6 +84,7 @@
|
||||
"Sistemas de Autenticación"
|
||||
],
|
||||
"companyLogo": "livgolf.png",
|
||||
"logoIndex": 13,
|
||||
"shortDescription": "Consultoría técnica para implementación SAP CDC. Creación de pantallas de autorización, endpoints backend y documentación completa.",
|
||||
"companyID": "livgolf"
|
||||
},
|
||||
@@ -116,6 +118,7 @@
|
||||
"Gestión de flujos de identidad para millones de usuarios en plataformas web y móviles"
|
||||
],
|
||||
"companyLogo": "aena.png",
|
||||
"logoIndex": 2,
|
||||
"shortDescription": "Consultor Técnico Principal del Sistema de Autenticación de Aeropuertos AENA sirviendo a millones de pasajeros en todos los aeropuertos españoles.",
|
||||
"companyID": "aena"
|
||||
},
|
||||
@@ -143,6 +146,7 @@
|
||||
"Documentación Técnica"
|
||||
],
|
||||
"companyLogo": "sap.png",
|
||||
"logoIndex": 18,
|
||||
"shortDescription": "Consultoría técnica SAP Customer Data Cloud, resolución de problemas y educación de stakeholders en cumplimiento GDPR.",
|
||||
"companyID": "sap"
|
||||
},
|
||||
@@ -169,6 +173,7 @@
|
||||
"Monitoreo de Sistemas"
|
||||
],
|
||||
"companyLogo": "gigya.png",
|
||||
"logoIndex": 10,
|
||||
"shortDescription": "Soporte técnico y resolución de problemas para plataforma Gigya. Monitoreo de sistemas y desarrollo de programas de formación.",
|
||||
"companyID": "gigya"
|
||||
},
|
||||
@@ -201,6 +206,7 @@
|
||||
"DevOps"
|
||||
],
|
||||
"companyLogo": "drosoloft-plain.png",
|
||||
"logoIndex": 6,
|
||||
"shortDescription": "Trabajo freelance para múltiples clientes (Megabanner, <a href='https://ebantic.com/en/' target='_blank' rel='noopener noreferrer'>Ebantic</a>, <a href='https://www.everis.com/' target='_blank' rel='noopener noreferrer'>Everis</a>, <a href='https://www.indracompany.com/' target='_blank' rel='noopener noreferrer'>Indra</a>) desarrollando aplicaciones React, diseñando APIs, integrando sistemas de video y gestionando proyectos.",
|
||||
"companyID": "drosoloft"
|
||||
},
|
||||
@@ -230,6 +236,7 @@
|
||||
"Gestión exitosa de equipo técnico y desarrollo de productos"
|
||||
],
|
||||
"companyLogo": "emailing-network.png",
|
||||
"logoIndex": 8,
|
||||
"shortDescription": "Director Técnico liderando desarrollo de backend y 5 sitios web. Reducción del 75% en tiempos de producción.",
|
||||
"companyID": "emailing-network"
|
||||
},
|
||||
@@ -252,6 +259,7 @@
|
||||
"JavaScript"
|
||||
],
|
||||
"companyLogo": "twentic.png",
|
||||
"logoIndex": 19,
|
||||
"shortDescription": "Desarrollo de sitios web WordPress y PHP como programador freelance.",
|
||||
"companyID": "twentic"
|
||||
},
|
||||
@@ -260,6 +268,7 @@
|
||||
"company": "Penta MSI",
|
||||
"companyURL": "http://pentamsi.com/",
|
||||
"companyLogo": "pentamsi.png",
|
||||
"logoIndex": 17,
|
||||
"expired": true,
|
||||
"location": "Barcelona, España",
|
||||
"startDate": "2010-10",
|
||||
@@ -283,6 +292,7 @@
|
||||
"company": "Homeria + WebRatio S.R.L.",
|
||||
"companyURL": "http://webratio.com/",
|
||||
"companyLogo": "webratio.png",
|
||||
"logoIndex": 21,
|
||||
"location": "Cáceres (España) / Como (Italia)",
|
||||
"startDate": "2008-01",
|
||||
"endDate": "2008-12",
|
||||
@@ -305,6 +315,7 @@
|
||||
"company": "Insa",
|
||||
"companyURL": "http://insags.com/",
|
||||
"companyLogo": "insa.png",
|
||||
"logoIndex": 12,
|
||||
"expired": true,
|
||||
"location": "Cáceres, España",
|
||||
"startDate": "2006-09",
|
||||
@@ -554,6 +565,7 @@
|
||||
"projectDesc": "Iniciativa de Limpieza de Playas",
|
||||
"url": "https://somosunaola.org",
|
||||
"projectLogo": "somosunaola.png",
|
||||
"logoIndex": 10,
|
||||
"location": "La Palma, Islas Canarias",
|
||||
"startDate": "2023-07",
|
||||
"current": true,
|
||||
@@ -576,6 +588,7 @@
|
||||
"projectDesc": "Sitio Web Portfolio de Artista",
|
||||
"url": "https://herrumbrevivoarte.com",
|
||||
"projectLogo": "herrumbre-vivo.png",
|
||||
"logoIndex": 2,
|
||||
"location": "Fuencaliente, La Palma",
|
||||
"startDate": "2024",
|
||||
"current": true,
|
||||
@@ -597,6 +610,7 @@
|
||||
"projectDesc": "Plataforma de Predicción de Fútbol",
|
||||
"url": "https://laporra.club",
|
||||
"projectLogo": "laporra.png",
|
||||
"logoIndex": 5,
|
||||
"gitRepoUrl": "",
|
||||
"location": "Online",
|
||||
"current": true,
|
||||
@@ -622,6 +636,7 @@
|
||||
"projectDesc": "Demo de SAP Customer Data Cloud",
|
||||
"url": "https://gigyademo.com/cdc-starter-kit/",
|
||||
"projectLogo": "sap.png",
|
||||
"logoIndex": 8,
|
||||
"location": "Online",
|
||||
"startDate": "2018",
|
||||
"current": true,
|
||||
@@ -731,6 +746,7 @@
|
||||
"title": "Certificaciones Codecademy",
|
||||
"institution": "Codecademy",
|
||||
"courseLogo": "codecademy.png",
|
||||
"logoIndex": 1,
|
||||
"location": "Online",
|
||||
"date": "2022-2024",
|
||||
"duration": "Varios",
|
||||
@@ -745,6 +761,7 @@
|
||||
"title": "Certificaciones Udemy",
|
||||
"institution": "Udemy",
|
||||
"courseLogo": "udemy.png",
|
||||
"logoIndex": 7,
|
||||
"location": "Online",
|
||||
"date": "2024-2025",
|
||||
"duration": "Varios",
|
||||
@@ -762,6 +779,7 @@
|
||||
"title": "Certificaciones LinkedIn Learning",
|
||||
"institution": "LinkedIn Learning",
|
||||
"courseLogo": "linkedin.png",
|
||||
"logoIndex": 4,
|
||||
"location": "Online",
|
||||
"date": "2019-2020",
|
||||
"duration": "Varios",
|
||||
@@ -779,6 +797,7 @@
|
||||
"title": "Servoy World 2011",
|
||||
"institution": "Servoy",
|
||||
"courseLogo": "servoy.png",
|
||||
"logoIndex": 6,
|
||||
"location": "Amsterdam",
|
||||
"date": "2011-02",
|
||||
"duration": "3 días",
|
||||
@@ -794,6 +813,7 @@
|
||||
"title": "Formador de Formadores",
|
||||
"institution": "FOREM Extremadura",
|
||||
"courseLogo": "forem.png",
|
||||
"logoIndex": 2,
|
||||
"location": "Cáceres",
|
||||
"date": "2009-06",
|
||||
"duration": "150 horas",
|
||||
@@ -809,6 +829,7 @@
|
||||
"title": "Windows 2003 Server",
|
||||
"institution": "Cámara de Comercio de Cáceres",
|
||||
"courseLogo": "camaracomercio.png",
|
||||
"logoIndex": 0,
|
||||
"location": "Cáceres",
|
||||
"date": "2006-01",
|
||||
"duration": "80 horas",
|
||||
@@ -824,6 +845,7 @@
|
||||
"title": "I Jornada Extremeña sobre la Industria del Software",
|
||||
"institution": "Universidad de Extremadura",
|
||||
"courseLogo": "uex.png",
|
||||
"logoIndex": 8,
|
||||
"location": "Cáceres",
|
||||
"date": "2005-07",
|
||||
"duration": "3 días",
|
||||
@@ -839,6 +861,7 @@
|
||||
"title": "Desarrollo de aplicaciones Web: Apache, PHP y MySQL",
|
||||
"institution": "Universidad de Extremadura",
|
||||
"courseLogo": "uex.png",
|
||||
"logoIndex": 8,
|
||||
"location": "Cáceres",
|
||||
"date": "2002",
|
||||
"duration": "40 horas",
|
||||
|
||||
Reference in New Issue
Block a user