From bc29ca4a05538a87a91649f22ed14da113e5cdbd Mon Sep 17 00:00:00 2001 From: juanatsap Date: Sun, 26 Apr 2026 23:46:40 +0100 Subject: [PATCH] feat: add Gotify Commander project + fix chat avatar + bold footer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - New project: Gotify Commander — bidirectional Gotify plugin (Go) - Fix chat avatar: properly cropped square thumbnail (was squished) - Footer text: bold + white + text-shadow for readability over bg photos --- data/cv-en.json | 28 +++++++++++++++++++++++ data/cv-es.json | 28 +++++++++++++++++++++++ static/css/03-components/_experience.css | 1 + static/css/03-components/_projects.css | 1 + static/images/profile/dni-thumb.jpeg | Bin 2677 -> 2714 bytes 5 files changed, 58 insertions(+) diff --git a/data/cv-en.json b/data/cv-en.json index 17243a9..2a1d443 100644 --- a/data/cv-en.json +++ b/data/cv-en.json @@ -594,6 +594,34 @@ ], "projectID": "cmux-resurrect" }, + { + "title": "Gotify Commander - Bidirectional Server Control Plugin", + "projectName": "Gotify Commander", + "projectDesc": "Bidirectional Server Control Plugin", + "url": "https://github.com/drolosoft/gotify-commander", + "gitRepoUrl": "https://github.com/drolosoft/gotify-commander", + "projectLogo": "gotify-commander.png", + "location": "Online", + "startDate": "2026", + "current": true, + "technologies": [ + "Go", + "Gotify Plugin System", + "CGO", + "SSH", + "Pico CSS", + "Self-hosted" + ], + "shortDescription": "The first bidirectional Gotify plugin. Transforms your phone into a server control center with 23 commands for service management, system diagnostics, Nginx analytics, SSL monitoring, and GPS location — all from the Gotify mobile app.", + "responsibilities": [ + "Designed and built bidirectional Gotify plugin in Go enabling remote server management via mobile notifications", + "Implemented 23 curated commands for service control (systemd/launchctl), diagnostics, and monitoring", + "Built multi-machine support through SSH for managing VPS and Mac servers from a single interface", + "Created web-based control panel with Pico CSS and optional password authentication", + "Integrated Nginx traffic analysis (rhit), SSL certificate monitoring, and GPS reverse geocoding via OpenStreetMap" + ], + "projectID": "gotify-commander" + }, { "title": "SoundInbox - Native macOS Email Sound Alerts", "projectName": "SoundInbox", diff --git a/data/cv-es.json b/data/cv-es.json index 7a7f57b..415bde2 100644 --- a/data/cv-es.json +++ b/data/cv-es.json @@ -594,6 +594,34 @@ ], "projectID": "cmux-resurrect" }, + { + "title": "Gotify Commander - Plugin Bidireccional de Control de Servidores", + "projectName": "Gotify Commander", + "projectDesc": "Plugin Bidireccional de Control de Servidores", + "url": "https://github.com/drolosoft/gotify-commander", + "gitRepoUrl": "https://github.com/drolosoft/gotify-commander", + "projectLogo": "gotify-commander.png", + "location": "Online", + "startDate": "2026", + "current": true, + "technologies": [ + "Go", + "Sistema de Plugins Gotify", + "CGO", + "SSH", + "Pico CSS", + "Autoalojado" + ], + "shortDescription": "El primer plugin bidireccional para Gotify. Transforma tu teléfono en un centro de control de servidores con 23 comandos para gestión de servicios, diagnósticos de sistema, analíticas Nginx, monitorización SSL y localización GPS — todo desde la app móvil de Gotify.", + "responsibilities": [ + "Diseñé y desarrollé plugin bidireccional para Gotify en Go que permite gestión remota de servidores vía notificaciones móviles", + "Implementé 23 comandos curados para control de servicios (systemd/launchctl), diagnósticos y monitorización", + "Desarrollé soporte multi-máquina mediante SSH para gestionar servidores VPS y Mac desde una única interfaz", + "Creé panel de control web con Pico CSS y autenticación opcional por contraseña", + "Integré análisis de tráfico Nginx (rhit), monitorización de certificados SSL y geocodificación inversa GPS vía OpenStreetMap" + ], + "projectID": "gotify-commander" + }, { "title": "SoundInbox - Alertas Sonoras de Email para macOS", "projectName": "SoundInbox", diff --git a/static/css/03-components/_experience.css b/static/css/03-components/_experience.css index 723d94b..9e8aff4 100644 --- a/static/css/03-components/_experience.css +++ b/static/css/03-components/_experience.css @@ -453,6 +453,7 @@ footer { padding: 2rem; color: rgba(255,255,255,0.95); font-size: 0.85rem; + font-weight: 700; text-shadow: 0 1px 4px rgba(0,0,0,0.6); } diff --git a/static/css/03-components/_projects.css b/static/css/03-components/_projects.css index 85a1dc5..4894fa0 100644 --- a/static/css/03-components/_projects.css +++ b/static/css/03-components/_projects.css @@ -150,6 +150,7 @@ footer { padding: 2rem; color: rgba(255,255,255,0.95); font-size: 0.85rem; + font-weight: 700; text-shadow: 0 1px 4px rgba(0,0,0,0.6); } diff --git a/static/images/profile/dni-thumb.jpeg b/static/images/profile/dni-thumb.jpeg index 5d7ceaa35e41756c8f81231dbdf46c72b05fb116..caef5ad3f8a376867ca82d95a5302e552d36defa 100644 GIT binary patch delta 2188 zcma*ec{tRI8VB$nV;huYD~?8ON?!|)T`b*@( z-$fLlFV=<8E$WnX z$jxrz*qsu(;zVBehdv5PKC-?yP2nCT`|ZVCP`W{`ApPZJ*}QUhXvVuD3_UW#Rk$Pa zRYgQPGQrA$zSk8Fy`FU~SB8b&GHH9|T8u@MKA#`nd(qpdztaUq z$wdtl55LfGe&cIdhrgvYh{&;yCT07p8|crf;S6vdXJ@=Ud|1%o`AB)MXSs~NHmc)` zV1tacVS8i)N-MSRlHm12NO$fQyR0{gFSIapk?s&3;aNS){X7^%E2wGBrhoK*x&h7@ ztc362TsvJ0h`5LIDBd7v|Yu57sRMX7zc1SF$XcjcCPKjc95ntw}k<&9$`@?*`ku zUJa#YoyzlNk{MbAgYy8XRi~b0 zgc@!oU|Gj|WOsMOAw*157C%^%v*4M6&#n=4Q{HwELJ{<$L0zN|QWO?PR1P)2MlJ8J z^=Xo&io-btTH9w7V`>)1KMd4l%Dz<9j%leS;+L0_Uz61mD`EpG%PT924i0Kr>YSXD z#5ztMh>*gr%2Cl%UzQr|M*~ey{&qBU<_0zW800*o(Cu6gVh;0g-}hTT7n)S$%ouox9@bfO>Rn-b zy#J_lHE)MgW7N0)2|SNs+{VQ;KkI-c5rsKr1gQHVf?=YKqfeS~tdnKSqpuZb0r8Jg zeiLEvFpA7KX5yuWr}>e?=u&p_+m4wx$Gan?PzNlE8#8s9qfRqT=oC*7X|j*}vH`wR z$;-XDhm3U{M1(UyYbFZ2#8qlet^YScdHpxD?VP|N_@7^(b=8R{*lw)ic9E&{4JZz)39iS z`Bpzy^wxtdxvTLTK`>$CgV+J`i{9shb!S?y7)|Ni@mOfOz&v9T(iFX1?I`-p-Mo}p`Tv25MTtz+7UvYRrGie`_~vqY|v1aFjX>vV;dbV!QR{=PRcyzse3g%HFY2g6_6>xH45d}1;XZ^bD#HU*6K0SH>%}}^`C9Po z=ZLzA%;gi4`XyGTYn1u2U0;U4R%rOmVMJ8A6Rqpw^KWfkpufALv|A?_)R$|sJVPxukUF3a>>Z9qkgfh|U$SG{}SrO z{q>U?w;jfg4XZ6|D!#J2PQy}{hH?7s=TN^+1%u8?PEn&#P<%bpGv7N38kTzvZ!7LF zoH#MTDF;sy*V0_=yBBCA`))Ih9Trz4g#JNk`bzRFOk_pwoN2jFs&|&zMAa>&dyU#h zq_UumUdMZE6Gs=o_0v2+1w}&d@Blv^@YWn%2r{lC_YJ=9RcP*zPq{{rm)T!>Ax-`9 gQD1e-P{F=Rt>js_HzuB460<3vN&IsQ#p4_M4@>S-6#xJL delta 2150 zcma*oX*iS%8wc=*At9B7?259EV@Z}KQ$!>j+1HVw5*ia(#_~862g6vh99dp8l`KP< zAw-xgV_(Oby|PT1Vyt71<9)C5`Tbq@hyQim%hx+waN~3`Qild;|9&48fbzeO@{`t3 zQ3bU1P0TnrfJ2A*{9!yfB!L~n0dF~$BDu3xxAY?_-P_qf_CpYMb_fRq0^#7~IKaup z`46t6T!)VS56>aqfAIZ_H31l~9o#rrK5|fe++5uM_Wq9m{&$8o1#kcyta0ENgbiTl zhwuY%fcahyM$HN{-fEhWdWs34=0S(%ViwP87`VlT56vvd+qW7YYZ05^xtymopmHy1 zWZe6G^_iK(#qc61kq!CB$+B8Vv`+N{#A!1P z^Wf+D2cxeoql>LPFu`HxZ*B-GdfVO)Gi5eLTv*oX^_?kkvfvwUzB+5mm@`Q0G*MiI z$Q1r(hnnNX0!Tk--1w;w0>L06m4*~t%&mLvuESf&AIa$9#31%GxMJ!p9;B7NbG%su z{E<9~lzSytW)32!R2;_AEYS<{nq<#E=?pF%U?R6-udR$XDDcavkhvkx!h zxru6~ZP#>*a)|8lrWk96=C%VNq8&Xdq9SacLIqm$EDh(AOnQLw-@!#6`x50B%Muf|;){dyai&X{~w+bX`iLSLpM)AT=5rLX1>C$rg=u z%NmZGn}5Al3#KWrhL(GKvpUs0N?*^}~}-7qDmPIro;t4+m1O$|{r_7;swr^k0B z)p^wBcUwOgSk%|lu9=mmzRr4R1c$*f~9 zDGAt^jyHFME@R8tU>hz>dW0s$`21X#t*XinO&SOme+chsfYE#Kc$X>XCF(69g))5V z1;8^~9V3O@j`AKt%&No|FKdnCOPoHPCRKdmOCQD;)d$_Qd6Aqi+i{M<#uNQe%Z~-f z%YFS3H!kWWdA9Fj$2KChq$>0VNL>#1_Th#$T?3w{O>fFIOb- zHU9#}H2|%)Hlnn*%q6X!q&&N%D6dIV3A90Dsc3(OznG^-nW)5z(tDM++@u+;o#o=F2TGo6LskvT%kdp$adWLF`|%ua#`ADt2WA z!dd;y6i_j>#87@RiKk-2b_Pdj6b(bpcHfwJ)#j8d=KRC}SyE_@Ds&{<~v{<)BiizJ7~M?c2dOp;Aok9=`B z(J3N}`;Z(Wp^Nzto50yN4)qNa3*5_FW%n@%xWKk z$IVc05CeJ?om?M%8y6c6#!cw-KKJ^Kn0Vg&a3$I6wKW>18qQ*NGF(aG%7pM(#Tj?H|wxp;rWi5#}2?4UU zY2p%}PRg&I&Zc$zq^M<*5(Z50VA~oD`|DDf=Bf)pIFLHKm0u*ux3&{(*PM-tO?i^& z1vtpMLMY@a?3DxooR6Jh#m-QygaUCRB_3;S+rBN*-D7@xDxWpLyhfM%1j5<39E08s z5$*H#HII$hk}dq+n20>K`m^=gA|**_;RlulRJo?lP3f-8vVfS?yZo@gO)Wb+X(bQS zTJ1SQS^ve#yU0P{_#+q#n7g-^fjb3`>Pj)ipuy+A?j;FNZ!95MK!LMe>pYz(kSk9^ z{nYE_jD9&UiVJ-{ZZinl_o_?tp+NCi_s9a5e zmKwJbr4=bBoFgAO$^H!WpU$m=Z=-h_e+o`+dGG5}!HxDIH#Mtt9e-~RPh5+UCb9$H zO>=C93pkBBS?rc5L28YAc%7e(3wNy>j+=;dxLZglE_{a4abOfNQI7?DtR?oOtJPNj zl8KB)1)WybYC{XK6V4>&Bt125mmbOh=__(f|Fmr)(i=hFeaQl-CXMS>c7MS<9qh0K zZ^?R9YvhxROt{g$SeRoYJ>uzceCbkz^V`eC-sfCYvDT-sLF~qGvf;s7IxhtNS_x$V r5jR+XAmXfc7#j;n(UaQ5vw(hr>n6e>mTVm`H=$=9aJFj|#~S+^t$YR-