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:
juanatsap
2025-12-04 11:38:36 +00:00
parent 7727405c25
commit b5a50ca3ef
25 changed files with 2194 additions and 76 deletions
+23
View File
@@ -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",