From 286d0d0e3e7003c67e077337084c45cbebb9bc93 Mon Sep 17 00:00:00 2001 From: juanatsap Date: Sat, 8 Nov 2025 15:05:54 +0000 Subject: [PATCH] feat: add explicit sidebar placement control and responsive design (1024-1280px) - Add sidebar field to SkillCategory model for explicit left/right control - Update splitSkills to respect sidebar field instead of automatic splitting - Add responsive CSS for 1024-1280px: collapse labels, icons-only buttons, EN/ES language selector - Remove language switcher animations - Ensure desktop view (>1280px) always shows full sidebar content - Move Databases and Infrastructure to right sidebar - Reduce font sizes in responsive range - Update project logos (Lidering, Jorpack, Delivery Bikes) --- data/cv-en.json | 38 ++++-- data/cv-es.json | 38 ++++-- internal/handlers/cv.go | 17 +-- internal/models/cv.go | 1 + static/css/main.css | 155 +++++++++++++++++++++++ static/images/projects/deliverybikes.png | Bin 0 -> 9781 bytes static/images/projects/jorpack.png | Bin 0 -> 4367 bytes static/images/projects/lidering.png | Bin 0 -> 6588 bytes templates/index.html | 4 +- 9 files changed, 215 insertions(+), 38 deletions(-) create mode 100644 static/images/projects/deliverybikes.png create mode 100644 static/images/projects/jorpack.png create mode 100644 static/images/projects/lidering.png diff --git a/data/cv-en.json b/data/cv-en.json index b2bc454..6a1ae20 100644 --- a/data/cv-en.json +++ b/data/cv-en.json @@ -350,6 +350,7 @@ { "category": "Go Ecosystem", "proficiency": 5, + "sidebar": "left", "items": [ "Hono - High-Performance Web Framework", "Gin - Web Framework", @@ -363,6 +364,7 @@ { "category": "JavaScript Ecosystem", "proficiency": 5, + "sidebar": "left", "items": [ "Node.js & Express", "React & React Ecosystem", @@ -375,6 +377,7 @@ { "category": "Frontend Technologies", "proficiency": 5, + "sidebar": "left", "items": [ "HTMX - Hypermedia-Driven Applications", "HTML5 & Semantic Web", @@ -386,20 +389,10 @@ "Template Engines (Handlebars, Panini, Mustache)" ] }, - { - "category": "Legacy Enterprise Technologies", - "proficiency": 3, - "items": [ - "Java & J2EE", - "Spring Framework, Struts, Hibernate", - "PHP & WordPress", - "Yii Framework, Zend Framework", - "Enterprise Application Servers (Tomcat, JBoss, WebLogic)" - ] - }, { "category": "Backend Technologies", "proficiency": 5, + "sidebar": "left", "items": [ "Go - Current Primary Stack", "Hono Framework - High-Performance Web Server", @@ -409,9 +402,22 @@ "Database Design & Optimization" ] }, + { + "category": "Legacy Enterprise Technologies", + "proficiency": 3, + "sidebar": "left", + "items": [ + "Java & J2EE", + "Spring Framework, Struts, Hibernate", + "PHP & WordPress", + "Yii Framework, Zend Framework", + "Enterprise Application Servers (Tomcat, JBoss, WebLogic)" + ] + }, { "category": "Databases", "proficiency": 4, + "sidebar": "right", "items": [ "PostgreSQL", "MySQL", @@ -425,6 +431,7 @@ { "category": "Infrastructure & Servers", "proficiency": 5, + "sidebar": "right", "items": [ "Linux Server Administration", "VPS Deployment & Configuration", @@ -436,6 +443,7 @@ { "category": "DevOps & CI/CD", "proficiency": 5, + "sidebar": "right", "items": [ "CI/CD Pipeline Design & Implementation", "Custom Deployment Solutions", @@ -447,6 +455,7 @@ { "category": "Team Management", "proficiency": 4, + "sidebar": "right", "items": [ "Preparation and projects startup", "Fluid communication with clients", @@ -458,6 +467,7 @@ { "category": "Design Tools", "proficiency": 3, + "sidebar": "right", "items": [ "Corel Draw", "Adobe PhotoShop", @@ -793,9 +803,9 @@ "technologies": ["JavaScript", "React", "Node.js", "PHP", "WordPress", "Web Development"], "shortDescription": "Collection of client projects and websites where I contributed to development, implementation, and technical solutions across various industries.", "responsibilities": [ - "Lidering
Lidering (via Twentic): Real estate and property management platform development
", - "Jorpack
Jorpack (via Twentic): Industrial packaging solutions and corporate website
", - "
Delivery Bikes BCN: Bicycle delivery service platform for Barcelona
", + "Lidering
Lidering (via Twentic): Real estate and property management platform development
", + "Jorpack
Jorpack (via Twentic): Industrial packaging solutions and corporate website
", + "Delivery Bikes BCN
Delivery Bikes BCN: Bicycle delivery service platform for Barcelona
", "
Mobbeel: Biometric authentication and identity verification solutions website
" ] } diff --git a/data/cv-es.json b/data/cv-es.json index d795ea3..579356c 100644 --- a/data/cv-es.json +++ b/data/cv-es.json @@ -350,6 +350,7 @@ { "category": "Ecosistema Go", "proficiency": 5, + "sidebar": "left", "items": [ "Hono - Framework Web de Alto Rendimiento", "Gin - Framework Web", @@ -363,6 +364,7 @@ { "category": "Ecosistema JavaScript", "proficiency": 5, + "sidebar": "left", "items": [ "Node.js y Express", "React y Ecosistema React", @@ -375,6 +377,7 @@ { "category": "Tecnologías Frontend", "proficiency": 5, + "sidebar": "left", "items": [ "HTMX - Aplicaciones Basadas en Hipermedia", "HTML5 y Web Semántica", @@ -386,20 +389,10 @@ "Motores de Plantillas (Handlebars, Panini, Mustache)" ] }, - { - "category": "Tecnologías Enterprise Anteriores", - "proficiency": 3, - "items": [ - "Java y J2EE", - "Spring Framework, Struts, Hibernate", - "PHP y WordPress", - "Yii Framework, Zend Framework", - "Servidores de Aplicaciones Enterprise (Tomcat, JBoss, WebLogic)" - ] - }, { "category": "Tecnologías Backend", "proficiency": 5, + "sidebar": "left", "items": [ "Go - Stack Principal Actual", "Hono Framework - Servidor Web de Alto Rendimiento", @@ -409,9 +402,22 @@ "Diseño y Optimización de Bases de Datos" ] }, + { + "category": "Tecnologías Enterprise Anteriores", + "proficiency": 3, + "sidebar": "left", + "items": [ + "Java y J2EE", + "Spring Framework, Struts, Hibernate", + "PHP y WordPress", + "Yii Framework, Zend Framework", + "Servidores de Aplicaciones Enterprise (Tomcat, JBoss, WebLogic)" + ] + }, { "category": "Bases de Datos", "proficiency": 4, + "sidebar": "right", "items": [ "PostgreSQL", "MySQL", @@ -425,6 +431,7 @@ { "category": "Infraestructura y Servidores", "proficiency": 5, + "sidebar": "right", "items": [ "Administración de Servidores Linux", "Despliegue y Configuración de VPS", @@ -436,6 +443,7 @@ { "category": "DevOps y CI/CD", "proficiency": 5, + "sidebar": "right", "items": [ "Diseño e Implementación de Pipelines CI/CD", "Soluciones de Despliegue Personalizadas", @@ -447,6 +455,7 @@ { "category": "Gestión de Equipos", "proficiency": 4, + "sidebar": "right", "items": [ "Preparación y puesta en marcha de proyectos", "Comunicación fluida con los clientes", @@ -458,6 +467,7 @@ { "category": "Herramientas de Diseño", "proficiency": 3, + "sidebar": "right", "items": [ "Corel Draw", "Adobe PhotoShop", @@ -798,9 +808,9 @@ "technologies": ["JavaScript", "React", "Node.js", "PHP", "WordPress", "Desarrollo Web"], "shortDescription": "Colección de proyectos de clientes y sitios web donde contribuí al desarrollo, implementación y soluciones técnicas en diversas industrias.", "responsibilities": [ - "Lidering
Lidering (a través de Twentic): Desarrollo de plataforma de gestión inmobiliaria y propiedades
", - "Jorpack
Jorpack (a través de Twentic): Soluciones de embalaje industrial y sitio web corporativo
", - "
Delivery Bikes BCN: Plataforma de servicio de entrega en bicicleta para Barcelona
", + "Lidering
Lidering (a través de Twentic): Desarrollo de plataforma de gestión inmobiliaria y propiedades
", + "Jorpack
Jorpack (a través de Twentic): Soluciones de embalaje industrial y sitio web corporativo
", + "Delivery Bikes BCN
Delivery Bikes BCN: Plataforma de servicio de entrega en bicicleta para Barcelona
", "
Mobbeel: Sitio web de soluciones de autenticación biométrica y verificación de identidad
" ] } diff --git a/internal/handlers/cv.go b/internal/handlers/cv.go index f7bc15f..1a3eae2 100644 --- a/internal/handlers/cv.go +++ b/internal/handlers/cv.go @@ -199,21 +199,22 @@ func (h *CVHandler) ExportPDF(w http.ResponseWriter, r *http.Request) { } // splitSkills splits skill categories between left (page 1) and right (page 2) sidebars -// Left sidebar shows first 7 categories, right sidebar shows remaining categories +// Each category explicitly specifies which sidebar it belongs to via the "sidebar" field func splitSkills(skills []models.SkillCategory) (left, right []models.SkillCategory) { if len(skills) == 0 { return nil, nil } - // Split at index 7 (first 7 items on left) - splitIndex := 7 - if len(skills) < splitIndex { - return skills, nil + // Filter by sidebar field + for _, skill := range skills { + if skill.Sidebar == "right" { + right = append(right, skill) + } else { + // Default to left if not specified or if set to "left" + left = append(left, skill) + } } - left = skills[:splitIndex] - right = skills[splitIndex:] - return left, right } diff --git a/internal/models/cv.go b/internal/models/cv.go index bb80af7..f465d0b 100644 --- a/internal/models/cv.go +++ b/internal/models/cv.go @@ -89,6 +89,7 @@ type SkillCategory struct { Category string `json:"category"` Proficiency int `json:"proficiency"` Items []string `json:"items"` + Sidebar string `json:"sidebar"` // "left" or "right" } type Language struct { diff --git a/static/css/main.css b/static/css/main.css index df4c70e..50fb097 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1899,3 +1899,158 @@ html { height: 45px; } } + +/* ======================================== + Desktop: Ensure Sidebar Content Visible (>1280px) + ======================================== */ + +@media (min-width: 1281px) { + /* Ensure sidebar content is always visible in desktop view */ + .sidebar-content { + max-height: none !important; + opacity: 1 !important; + overflow: visible !important; + display: block !important; + margin-top: 10px !important; + } + + .skill-category .sidebar-content, + .cv-sidebar-section .sidebar-content { + max-height: none !important; + opacity: 1 !important; + overflow: visible !important; + } + + .sidebar-title::after { + display: none !important; + } + + .sidebar-title { + cursor: default !important; + } +} + +/* ======================================== + Responsive: Medium Screens (1024px - 1280px) + ======================================== */ + +@media (min-width: 1024px) and (max-width: 1280px) { + + /* ========== Global Font Size Reduction ========== */ + html { + font-size: 14px; /* Reduced from default 16px */ + } + + .cv-name { + font-size: 1.8em; /* Reduced from 2.2em */ + } + + .sidebar-title { + font-size: 0.95rem; + } + + .sidebar-content { + font-size: 0.9rem; + } + + .experience-item h3, + .project-item h3 { + font-size: 1rem; + } + + .experience-item p, + .project-item p, + .experience-item li, + .project-item li { + font-size: 0.85rem; + } + + /* ========== Selector Labels - Hide, Show on Hover ========== */ + .selector-label { + max-width: 0; + overflow: hidden; + opacity: 0; + transition: all 0.3s ease; + white-space: nowrap; + } + + .selector-group:hover .selector-label { + max-width: 200px; + opacity: 1; + margin-right: 0.75rem; + } + + /* ========== Language Selector - Collapse to EN/ES ========== */ + .language-selector .selector-btn { + position: relative; + padding: 0.4rem 0.8rem; + min-width: 50px; + font-size: 0; /* Hide actual text */ + overflow: visible; + } + + /* Show only short version (EN/ES) */ + .language-selector .selector-btn::before { + content: attr(data-short); + font-size: 1rem; /* Restore font size for pseudo-element */ + opacity: 1; + } + + /* On hover, show full text */ + .language-selector:hover .selector-btn, + .language-selector .selector-btn:hover { + font-size: 1rem; /* Restore font size */ + padding: 0.4rem 1rem; + min-width: auto; + } + + .language-selector:hover .selector-btn::before, + .language-selector .selector-btn:hover::before { + content: ''; /* Hide short version */ + opacity: 0; + } + + /* ========== Action Buttons - Icon Only, Expand on Hover ========== */ + .action-btn { + position: relative; + width: 45px; + overflow: hidden; + transition: width 0.3s ease, padding 0.3s ease; + white-space: nowrap; + text-indent: 0; + } + + /* Hide button text, keep icon */ + .action-btn iconify-icon { + flex-shrink: 0; + } + + .action-btn { + font-size: 0; + padding: 0 0.65rem; + justify-content: center; + } + + /* On hover, show text */ + .action-btn:hover { + width: auto; + font-size: 0.95rem; + padding: 0.65rem 1.5rem; + gap: 0.5rem; + } + + /* ========== Sidebar Content - Hide Text, Show on Hover ========== */ + .sidebar-content { + max-height: 0; + overflow: hidden; + opacity: 0; + } + + /* Show sidebar content on hover */ + .skill-category:hover .sidebar-content, + .cv-sidebar-section:hover .sidebar-content { + max-height: 1000px; + opacity: 1; + margin-top: 10px; + } +} diff --git a/static/images/projects/deliverybikes.png b/static/images/projects/deliverybikes.png new file mode 100644 index 0000000000000000000000000000000000000000..61cd7932690377f6c58a1e5296eb878938b0106a GIT binary patch literal 9781 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 P00000NkvXXu0mjfS(euT literal 0 HcmV?d00001 diff --git a/static/images/projects/jorpack.png b/static/images/projects/jorpack.png new file mode 100644 index 0000000000000000000000000000000000000000..d56a4ef618d89c22dd8a2586d1093c59127f4706 GIT binary patch literal 4367 zcma)AXE+;d)DAI1(NeQg)QGnB-n*q%>`}xP8bnl$DvhYUV%1i)N$pX4Mn!A2Mp0_i ztWmRe<@5gezQ5m(`?=3^&V60y`Ex(#x=yqqREw7S4mAJ(pw)iz$oQI({{cjCefC>J zF0P5h$5=}pP&ESneSLZ4VyO++*9SbjjzIvD$Y%hu|0LJAa}59h_?`p+yk?UBa_>q1 zw~BlZ{J;1=p#?u%3jlEIrS>B=(*Tkk*bS8FB%88-%1`IZ2<6WA8GkuN$pI<&SUWx|MXw2o2vLdtZA*v2u@jTv;JkjH(A8D2xmf=A1IO z60wq;_;VZb>Vn8#RWEqa{OY7L4elzwKJPQ4w5~!-_vs{F66fo~a!T_``rjPmBX4?o zd3aRFaz;MM^?IZJUN5zVq~B~q=A(ZHshNqD)sJ84EK}+0v?zcjJ$Xn^NELN-6jwzp zZ<~8;tn1&%irf6;-Z$s=m+eYlMx<<$-aFBmkTdAn&bG2@RdWp1FpqU#%wlJ^0Hqq< z$ZCB20R{++;{)CEZz68EwHpZ>P9yOXe{l0D#N&?`1r<~$e3Ao=J&dDm&6qAR~ZVd z-Xmt}sSi(-OB_F&bZz*@$}GDgCc3-BwP^N@PN(*~8_hh3il=Y7837z2I6-=#WY60i z0e#;Su|ypm*J&qr&6!eKa&T*T2mxUqCG8Sf{=~gdu>cA?^ryQz{9X%E!Y2 zdcvs#=o+F1zC{|M4b8D(BUjjKMTki(*P*=6SPe|%YMfj)@8vEOCv^+^ zISjk8raTUo1vO5nmim1)ols0mPFAn;dEOEh);EFtsJnRf`h!ipzy)}6kqM;9`B7jN zx$#{Rh#b=Qg*NjwIKSqD*JnDz#XJz3Wc?!9ad837RU>qPZf*lA)}!vjy;?Y6u4E4OVKp1u#5soz_5l%zt8XJorux6*GzW83pY9q70 zmXMHeU}Mnq>HeiZ{NjDU=@X;H{s2AOX7cn;+c`Nt0oyiiMXNM7Z`OCChxTf8e*h6v z#j=kP#oQ9?eZr{9L@4C|sW{00cTCp3|v z5M4mBqSCTdSccKyNMT2+aSRT9`PJ<>!C0dTBi-$}s!oxnCX#@R+D3VSEFZETDmf*` zmPn9G1qj|^EkCh;*}FNT&mK;+r}$B-pPevr9L1^K{fPmoCSwLgUIF%|!=lDE3`x$g z%YkK`DIK5XUvO6FYA+Q=b>CI2AwF_+bX2S1=v}>s6`N@R14_5*SfQFk@s+NT1ix&f zIoFaxt@(={{TnQ&gBxhigDxt+;F{W&kadIFo-gXFwMrep8M!lFTUEUGdzWlG!zUZ( z9dGjci?y#dq9pd;vcT4|UiDTP(qrBbA3Z+`5E!3+5he>0)&{&jo>}LgQr>r7m_M)1 z$)YjGKy6-i^5z~^J5Ul&?Qx{TpApUjWxVGnRqaEaWPqOSm?Ron6e6wHM8G5 z6&pDyRrzWvBams%3*@JsS{N;*p`l6kfTWCmDZ&Tt>}Lw6x!BqeWyCugQajGpvNMj3 zUerGLIet~ju}o?E)QeeD^N7R)l_;YEZ_4a^mPnIP)=-AQQ+l7hc=2K;usNlOOC+*! z2BHZ*&F|MNDQ|hX5tBExKZn9A!jxDwX6HHO&%Oq8h%8iN!2?d&3*P+5AZ= zj<(H=XI?+;^7vSYZfQ^E&x$R&M z1ytE*$mA)tl(J|*#E|v;K5u*DXNp0`GDO`W6D72Y7trjxb-|fvpz^av#IAD);(sCf z%Z+F5r-0nal7=kaIZ5T}FuLDjX(fnG*5<(D)BZ)kcJVr^=}JzV zIk}m+ou+@GX|2Jk914wBPp>A<*KbvnF$x{u%_!LSU72-~yki$0PM-70gKoA8ORx<} zBRRDF<|1Y&+%5w~6(r{7!j66r^0+N*#3DQ3e{3LNBIeuDw)G(wU-Qp8c*eAA8Do4k zkn-ku!9F>CLVdaqmf-SwiH$^&69eq)h72^<0&Z& z+6zv8-}H;A+zJ?yh|mT($ctK~m0v0<>LCQv%vDEp{#Y{r%J@#@)A#^d*MFjAV;(u2 z##f6bGM*XeFXOwa?WgDqfjt~!3SQIB^4U&D%ugb(mKkL49yvD)6EG5B-Z8Q}l+dhq zG#2h)S-cvz{(JAmqTioUjs5@sqAt_o{S@!zpa>1s5>*_)!qhS&-9z781S#TElf=PZ zYjswFV~UWI27 z-aMucf2-kT?q(skwLrUUMS2;DI+hOCcM)qcz>SiW2Lr45MzWt67X6#7@yf!X=uX7BSeME7bxF{6a0 z_BhriJ}`;N=;=`#`~Js%$&&*HC=z70ILBkD%VR$T|63327%3@%`{S?vMc9r!R*ETq z*dIL|P$MZNHAz6H@UzJ3LsCjg33}~Y9Lio(oz8$A1#Tc)MRD=CN0T6K<;KC`a<8ab z2SR$8R4qsH0bahNp{TO3(C62c7ai_=;a$*gY)f3D!Fcpb@_QE;rXFe6kyWy^=YA)D zl=SS-==TE=ty4k$XIPF-`%R%P=QPjXzjTsQhEZ28IyTuJ&w{=$Eb#6{zSl;K!Ry5i z*I)+l^z>yGdp@N?Ej}3LHf7x4dc2H{7M>G>pQ7jsYI)!yrZD~oJ@D2J-Az%iZ!WRN z6wq4tJpcAbsVw1j<8Uc5R6&jC*1*o-hxRF$fhw$l@skrM1xUR7(;lskk+ai&6s}lY7 zjdiX#vDF&Q~U~` zqr6IYbwBO9e&A1v;0 z(b?*o2Wcn3Y3LWG=8s0FmOMoNsx+SoiFEb72`YH)br8s^92B+H@ro~A!~plNhlf5k zLH42g-@>i9Ll#_Rhf=u9Q&QKHLq0x}Vf$~-S})HA83J~~VRB8I>Cyp}x>HZrMAECk z>mnfA!g`kA2HaC!2%boSYb3J6cb z`&7{3<_crpjkN1orG#*85Z!(Ams9s$zMSw}cOp^RYhFA*Kfj0klI1N65c+JfHC^O* z-%>F&A~3p*jRgc>UMg8B)WRm!)rr$-h+$T*PEd3)H%2t*N5K7Sc8va0-U`c?Qt_8f zO`Y$qPF`7SqtWQEA%cGh;PiAppj(9G?mq(0s{9|<93oc|QF;3KUT$8x7JO8A{af&w z@~OT`(`J>VC4*V5=D&-n19@>2>CBV+_)AC=@6QGWa8YnQUb=Dl5&yrS%GO8+o#gwQ zI*Nkf?7d1%-sKflwymL{`43BxZvJ8J15qwOeyc+H*Wb9DrZ@g(#6mc|JwW^hj~4fq zHa9nS0QThcWeOmAE4-AfEyMuGO1sA({$Vf5>9M!2ZeMkVHYt>`xHa%Ig@v&(+fb)e z;t9;qM3B?K#Vv%pa*xL(Ry52csIS%laU*pi2J=_i^M~o9GO|+=P6r43Ort+Oe!Ct* z^Q|pk?;ns2^xTfY33(u!C|7h_;}QL5O`t(nUEj%M9Zn+s*rJ{E>$^rk_718-m*;Bu z@7K?cSzGSH71soD6XQkl3T#7*l{s#geF#?cYyQAzdAIzf7?9sjvLBtsjR9@-weKIr zQ6v&TEqH>{!bdL)b&(j7$lkeHHzQ)DnVD2g5Hn%%hO zhSr71GD~U6z}`OKG`#Z`fr$t-XOg9VVyWy7(@x{IRF;W(x$f|V2iucuXCOiXpf{8cv&x>X-y>G0{3@ZQeAM8AL)pmQOA~q;I**B&vPE|!GmuSp6GVvlFGYCc zstkR!X^M4+uPp;;5{9)Fx8kVNN2Lsz?Jgt10s&cW4YQMG^0bu$c`O4CI4 zrSg05wHqI*F6||a>K8jVKTb8-k^B>)5q_URxfc~1=4Db&8!~rHJL>6 literal 0 HcmV?d00001 diff --git a/static/images/projects/lidering.png b/static/images/projects/lidering.png new file mode 100644 index 0000000000000000000000000000000000000000..4ca958006848a0b9e3c6e49b95c682ba8bd4a6d0 GIT binary patch literal 6588 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
- -