From 542419de45661419cf3f824ef8731db503f74bf1 Mon Sep 17 00:00:00 2001 From: juanatsap Date: Mon, 4 May 2026 14:28:37 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20category=20icon=20badges=20on=20project?= =?UTF-8?q?s=20=E2=80=94=20CLI,=20App,=20Web,=20Plugin,=20SDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each project now shows a colored icon badge indicating its type: - CLI (purple terminal), App (blue apple), Web (cyan globe) - WebApp (teal app), Plugin (amber puzzle), SDK (violet package) - Contrib (gray pull request) --- data/cv-en.json | 9 +++++++++ data/cv-es.json | 9 +++++++++ internal/models/cv.go | 1 + internal/models/cv/cv.go | 1 + static/css/03-components/_cv-section.css | 21 +++++++++++++++++++++ static/css/print.css | 3 ++- templates/partials/sections/projects.html | 8 ++++++++ 7 files changed, 51 insertions(+), 1 deletion(-) diff --git a/data/cv-en.json b/data/cv-en.json index abcf007..7663231 100644 --- a/data/cv-en.json +++ b/data/cv-en.json @@ -542,6 +542,7 @@ "projects": [ { "title": "Immich Photo Manager - AI-Powered Photo Library MCP Server", + "category": "cli", "projectName": "Immich Photo Manager", "projectDesc": "AI-Powered Photo Library MCP Server", "url": "https://drolosoft.com/immich-photo-manager.html?lang=en", @@ -570,6 +571,7 @@ }, { "title": "Cmux Resurrect - Terminal Session Persistence Tool", + "category": "cli", "projectName": "Cmux Resurrect", "projectDesc": "Terminal Session Persistence Tool", "url": "https://drolosoft.com/cmux-resurrect.html?lang=en", @@ -598,6 +600,7 @@ }, { "title": "Gotify Commander - Bidirectional Server Control Plugin", + "category": "plugin", "projectName": "Gotify Commander", "projectDesc": "Bidirectional Server Control Plugin", "url": "https://github.com/drolosoft/gotify-commander", @@ -627,6 +630,7 @@ }, { "title": "SoundInbox - Native macOS Email Sound Alerts", + "category": "app", "projectName": "SoundInbox", "projectDesc": "Native macOS Email Sound Alerts", "url": "https://drolosoft.com/soundinbox.html?lang=en", @@ -654,6 +658,7 @@ }, { "title": "Somos Una Ola - Beach Cleaning Initiative", + "category": "web", "projectName": "Somos Una Ola", "projectDesc": "Beach Cleaning Initiative", "url": "https://somosunaola.org", @@ -677,6 +682,7 @@ }, { "title": "Herrumbre Vivo Arte - Artist Portfolio Website", + "category": "web", "projectName": "Herrumbre Vivo Arte", "projectDesc": "Artist Portfolio Website", "url": "https://herrumbrevivoarte.com", @@ -699,6 +705,7 @@ }, { "title": "La Porra.club - Football Prediction Platform", + "category": "webapp", "projectName": "La Porra.club", "projectDesc": "Football Prediction Platform", "url": "https://laporra.club", @@ -725,6 +732,7 @@ }, { "title": "CDC Starter Kit - SAP Customer Data Cloud Demo", + "category": "sdk", "projectName": "CDC Starter Kit", "projectDesc": "SAP Customer Data Cloud Demo", "url": "https://gigyademo.com/cdc-starter-kit/", @@ -754,6 +762,7 @@ }, { "title": "Third Party Contributions", + "category": "contrib", "url": "", "projectLogo": "", "location": "Various", diff --git a/data/cv-es.json b/data/cv-es.json index 656ddc2..b2f0049 100644 --- a/data/cv-es.json +++ b/data/cv-es.json @@ -542,6 +542,7 @@ "projects": [ { "title": "Immich Photo Manager - Servidor MCP para Gestión de Fotos con IA", + "category": "cli", "projectName": "Immich Photo Manager", "projectDesc": "Servidor MCP para Gestión de Fotos con IA", "url": "https://drolosoft.com/immich-photo-manager.html?lang=es", @@ -570,6 +571,7 @@ }, { "title": "Cmux Resurrect - Herramienta de Persistencia de Sesiones de Terminal", + "category": "cli", "projectName": "Cmux Resurrect", "projectDesc": "Herramienta de Persistencia de Sesiones de Terminal", "url": "https://drolosoft.com/cmux-resurrect.html?lang=es", @@ -598,6 +600,7 @@ }, { "title": "Gotify Commander - Plugin Bidireccional de Control de Servidores", + "category": "plugin", "projectName": "Gotify Commander", "projectDesc": "Plugin Bidireccional de Control de Servidores", "url": "https://github.com/drolosoft/gotify-commander", @@ -627,6 +630,7 @@ }, { "title": "SoundInbox - Alertas Sonoras de Email para macOS", + "category": "app", "projectName": "SoundInbox", "projectDesc": "Alertas Sonoras de Email para macOS", "url": "https://drolosoft.com/soundinbox.html?lang=es", @@ -654,6 +658,7 @@ }, { "title": "Somos Una Ola - Iniciativa de Limpieza de Playas", + "category": "web", "projectName": "Somos Una Ola", "projectDesc": "Iniciativa de Limpieza de Playas", "url": "https://somosunaola.org", @@ -677,6 +682,7 @@ }, { "title": "Herrumbre Vivo Arte - Sitio Web Portfolio de Artista", + "category": "web", "projectName": "Herrumbre Vivo Arte", "projectDesc": "Sitio Web Portfolio de Artista", "url": "https://herrumbrevivoarte.com", @@ -699,6 +705,7 @@ }, { "title": "La Porra.club - Plataforma de Predicción de Fútbol", + "category": "webapp", "projectName": "La Porra.club", "projectDesc": "Plataforma de Predicción de Fútbol", "url": "https://laporra.club", @@ -725,6 +732,7 @@ }, { "title": "CDC Starter Kit - Demo de SAP Customer Data Cloud", + "category": "sdk", "projectName": "CDC Starter Kit", "projectDesc": "Demo de SAP Customer Data Cloud", "url": "https://gigyademo.com/cdc-starter-kit/", @@ -754,6 +762,7 @@ }, { "title": "Contribuciones a Proyectos de Terceros", + "category": "contrib", "url": "", "projectLogo": "", "location": "Varios", diff --git a/internal/models/cv.go b/internal/models/cv.go index 94b9cc8..8b0f498 100644 --- a/internal/models/cv.go +++ b/internal/models/cv.go @@ -93,6 +93,7 @@ type Language struct { type Project struct { Title string `json:"title"` + Category string `json:"category,omitempty"` // Project type: cli, app, web, webapp, plugin, sdk, contrib ProjectName string `json:"projectName,omitempty"` // Optional: linkable part of title ProjectDesc string `json:"projectDesc,omitempty"` // Optional: non-linkable description part ProjectID string `json:"projectID,omitempty"` // Unique ID for scrolling/navigation diff --git a/internal/models/cv/cv.go b/internal/models/cv/cv.go index 69fd25a..87edfba 100644 --- a/internal/models/cv/cv.go +++ b/internal/models/cv/cv.go @@ -98,6 +98,7 @@ type Language struct { type Project struct { Title string `json:"title"` + Category string `json:"category,omitempty"` // Project type: cli, app, web, webapp, plugin, sdk, contrib ProjectName string `json:"projectName,omitempty"` // Optional: linkable part of title ProjectDesc string `json:"projectDesc,omitempty"` // Optional: non-linkable description part ProjectID string `json:"projectID,omitempty"` // Unique ID for scrolling/navigation diff --git a/static/css/03-components/_cv-section.css b/static/css/03-components/_cv-section.css index d458d5a..8d27d08 100644 --- a/static/css/03-components/_cv-section.css +++ b/static/css/03-components/_cv-section.css @@ -194,6 +194,27 @@ font-size: 1.2em; } +/* Category icon badges */ +.category-badge { + display: inline-flex; + align-items: center; + justify-content: center; + color: white; + font-size: 0.7em; + padding: 0.2em 0.4em; + border-radius: 3px; + margin-left: 0.5em; + vertical-align: middle; +} + +.category-cli { background: #5b21b6; } /* Purple — terminal */ +.category-app { background: #1d4ed8; } /* Blue — native app */ +.category-web { background: #0891b2; } /* Cyan — website */ +.category-webapp { background: #059669; } /* Teal — web app */ +.category-plugin { background: #d97706; } /* Amber — plugin */ +.category-sdk { background: #7c3aed; } /* Violet — SDK */ +.category-contrib { background: #6b7280; } /* Gray — contributions */ + .stars-badge { display: inline-flex; align-items: center; diff --git a/static/css/print.css b/static/css/print.css index d4a5a45..614640e 100644 --- a/static/css/print.css +++ b/static/css/print.css @@ -105,7 +105,8 @@ text-decoration: none !important; } - .stars-badge { + .stars-badge, + .category-badge { display: none !important; } diff --git a/templates/partials/sections/projects.html b/templates/partials/sections/projects.html index d7b8022..a2390f7 100644 --- a/templates/partials/sections/projects.html +++ b/templates/partials/sections/projects.html @@ -30,6 +30,14 @@ {{if .URL}}{{.Title}}{{else}}{{.Title}}{{end}} {{end}} + {{if eq .Category "cli"}} + {{else if eq .Category "app"}} + {{else if eq .Category "web"}} + {{else if eq .Category "webapp"}} + {{else if eq .Category "plugin"}} + {{else if eq .Category "sdk"}} + {{else if eq .Category "contrib"}} + {{end}} {{if .Current}}LIVE{{end}} {{if .GitRepoUrl}}GitHub{{end}} {{if .GitRepoUrl}}{{if .Stars}}{{.Stars}} {{end}}stars{{end}}