diff --git a/data/cv-en.json b/data/cv-en.json index 10e0c29..15cff90 100644 --- a/data/cv-en.json +++ b/data/cv-en.json @@ -702,6 +702,36 @@ ] } ], + "projects": [ + { + "title": "Somos Una Ola - Beach Cleaning Initiative", + "url": "https://somosunaola.org", + "location": "La Palma, Canary Islands", + "startDate": "2023-07", + "current": true, + "technologies": ["Node.js", "Express.js", "HTMX"], + "shortDescription": "Volunteer project promoting beach cleaning on La Palma island. Created their website to publish completed cleanings and schedule future events.", + "responsibilities": [ + "Designed and developed full-stack website using Node.js Express and HTMX", + "Implemented event publishing system for completed and upcoming beach cleanings", + "Supported environmental initiative that has completed 18 cleanings across 12 beaches" + ] + }, + { + "title": "Herrumbre Vivo Arte - Artist Portfolio Website", + "url": "https://herrumbrevivoarte.com", + "location": "Fuencaliente, La Palma", + "startDate": "2024", + "current": true, + "technologies": ["Web Development", "Portfolio Design"], + "shortDescription": "Portfolio website for Gustavo Díaz, artisan who transforms recycled materials into sculptures. Promotes environmental art and sustainable creativity.", + "responsibilities": [ + "Created online presence for recycled art project focused on sustainability", + "Showcased sculptures made from metal, plastic, glass, and wood waste", + "Highlighted environmental workshops and educational mission aligned with Sustainable Development Goals" + ] + } + ], "references": [ { "title": "Recommendations Letter from TwenTIC", diff --git a/data/cv-es.json b/data/cv-es.json index 8e07aeb..97db8f3 100644 --- a/data/cv-es.json +++ b/data/cv-es.json @@ -734,6 +734,36 @@ ] } ], + "projects": [ + { + "title": "Somos Una Ola - Iniciativa de Limpieza de Playas", + "url": "https://somosunaola.org", + "location": "La Palma, Islas Canarias", + "startDate": "2023-07", + "current": true, + "technologies": ["Node.js", "Express.js", "HTMX"], + "shortDescription": "Proyecto de voluntariado que promueve la limpieza de playas en la isla de La Palma. Creación de su sitio web para publicar limpiezas realizadas y programar eventos futuros.", + "responsibilities": [ + "Diseñé y desarrollé sitio web full-stack usando Node.js Express y HTMX", + "Implementé sistema de publicación de eventos para limpiezas realizadas y futuras", + "Apoyé iniciativa ambiental que ha completado 18 limpiezas en 12 playas diferentes" + ] + }, + { + "title": "Herrumbre Vivo Arte - Sitio Web Portfolio de Artista", + "url": "https://herrumbrevivoarte.com", + "location": "Fuencaliente, La Palma", + "startDate": "2024", + "current": true, + "technologies": ["Desarrollo Web", "Diseño de Portfolio"], + "shortDescription": "Sitio web portfolio para Gustavo Díaz, artesano que transforma materiales reciclados en esculturas. Promueve arte ambiental y creatividad sostenible.", + "responsibilities": [ + "Creé presencia online para proyecto de arte reciclado enfocado en sostenibilidad", + "Mostré esculturas hechas de desechos metálicos, plásticos, vidrio y madera", + "Destaqué talleres ambientales y misión educativa alineada con Objetivos de Desarrollo Sostenible" + ] + } + ], "references": [ { "title": "Cartas de recomendación de TwenTiC", diff --git a/internal/models/cv.go b/internal/models/cv.go index ceacbe9..c4d52dc 100644 --- a/internal/models/cv.go +++ b/internal/models/cv.go @@ -99,13 +99,14 @@ type Language struct { } type Project struct { - Name string `json:"name"` - Role string `json:"role"` - URL string `json:"url"` - Period string `json:"period"` - Description string `json:"description"` - Technologies []string `json:"technologies"` - Highlights []string `json:"highlights"` + Title string `json:"title"` + URL string `json:"url"` + Location string `json:"location"` + StartDate string `json:"startDate"` + Current bool `json:"current"` + Technologies []string `json:"technologies"` + ShortDescription string `json:"shortDescription"` + Responsibilities []string `json:"responsibilities"` } type Award struct { diff --git a/static/css/main.css b/static/css/main.css index 569f5c0..b9cc0e4 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -935,6 +935,116 @@ iconify-icon { text-align: justify; } +/* Projects */ +.project-item { + display: flex; + gap: 1.2rem; + align-items: flex-start; + margin-bottom: 2.5rem; + padding-bottom: 2rem; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); +} + +.project-icon { + flex-shrink: 0; + width: 80px; + height: 80px; + display: flex; + align-items: center; + justify-content: center; +} + +.default-project-icon { + width: 80px; + height: 80px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + border: 1px solid #ddd; + background: #f5f5f5; + color: #999; + padding: 10px; +} + +.project-content { + flex: 1; +} + +.project-header { + margin-bottom: 0.5rem; +} + +.project-title { + font-size: 1em; + font-weight: 600; + margin: 0 0 0.3rem 0; + line-height: 1.4; + color: var(--text-dark); +} + +.project-title-text { + display: inline; +} + +.project-title-text a { + color: var(--accent-blue); + text-decoration: none; +} + +.project-title-text a:hover { + text-decoration: underline; +} + +.project-period, +.project-separator, +.project-location { + color: #555; + font-size: 0.9em; + font-weight: 600; +} + +.project-separator { + color: #999; +} + +.project-desc { + font-size: 0.9rem; + color: var(--text-dark); + margin-top: 0.5rem; + line-height: 1.6; + text-align: justify; +} + +.project-technologies { + font-size: 0.85em; + color: var(--text-gray); + margin-top: 0.5rem; + line-height: 1.4; +} + +.projects-footer { + margin-top: 1.5rem; + padding-top: 1rem; + border-top: 2px solid #ddd; + text-align: center; + font-size: 0.95em; + color: var(--text-gray); +} + +.projects-footer p { + margin: 0; +} + +.projects-footer a { + color: var(--accent-blue); + text-decoration: none; +} + +.projects-footer a:hover { + text-decoration: underline; +} + /* References */ .reference-item { margin-bottom: 0.6rem; diff --git a/templates/cv-content.html b/templates/cv-content.html index d1f6bb5..a4c2a02 100644 --- a/templates/cv-content.html +++ b/templates/cv-content.html @@ -157,41 +157,6 @@
- - {{if .CV.Awards}} -
-

- - {{if eq .Lang "es"}}Premios y Reconocimientos{{else}}Awards{{end}} -

- {{range .CV.Awards}} -
- {{if .AwardLogo}} - - {{end}} -
- {{.Title}}
- {{.Issuer}} - {{.Date}} - - {{if .ShortDescription}} -

{{.ShortDescription | safeHTML}}

- {{end}} - - {{if .Responsibilities}} -
    - {{range .Responsibilities}} -
  • {{. | safeHTML}}
  • - {{end}} -
- {{end}} -
-
- {{end}} -
- {{end}} - {{if .CV.Courses}}
@@ -236,6 +201,102 @@
{{end}} + + {{if .CV.Projects}} +
+

+ + {{if eq .Lang "es"}}Proyectos{{else}}Projects{{end}} +

+ {{range .CV.Projects}} +
+
+ +
+
+
+

+ + {{if .URL}} + {{.Title}} + {{else}} + {{.Title}} + {{end}} + + {{if .Current}} + {{if eq $.Lang "es"}}ACTUAL{{else}}CURRENT{{end}} + {{end}} +

+ {{.StartDate}} {{if .Current}}/ {{if eq $.Lang "es"}}presente{{else}}now{{end}}{{end}} +  -  + ({{.Location}}) +
+ + {{if .ShortDescription}} +

{{.ShortDescription | safeHTML}}

+ {{end}} + + {{if .Responsibilities}} +
    + {{range .Responsibilities}} +
  • {{. | safeHTML}}
  • + {{end}} +
+ {{end}} + + {{if .Technologies}} +
+ {{if eq $.Lang "es"}}Tecnologías:{{else}}Technologies:{{end}} + {{range $index, $tech := .Technologies}}{{if $index}}, {{end}}{{$tech}}{{end}} +
+ {{end}} +
+
+ {{end}} + + + +
+ {{end}} + + + {{if .CV.Awards}} +
+

+ + {{if eq .Lang "es"}}Premios y Reconocimientos{{else}}Awards{{end}} +

+ {{range .CV.Awards}} +
+ {{if .AwardLogo}} + + {{end}} +
+ {{.Title}}
+ {{.Issuer}} - {{.Date}} + + {{if .ShortDescription}} +

{{.ShortDescription | safeHTML}}

+ {{end}} + + {{if .Responsibilities}} +
    + {{range .Responsibilities}} +
  • {{. | safeHTML}}
  • + {{end}} +
+ {{end}} +
+
+ {{end}} +
+ {{end}} +