feat: translate About page to English
CI/CD Pipeline / Build & Deploy (push) Successful in 21s

This commit is contained in:
wh-leader
2026-05-11 13:57:05 +02:00
parent 21a63b6947
commit 0b7021f827
+77 -77
View File
@@ -5,13 +5,13 @@ import Footer from '../components/layout/Footer.astro';
--- ---
<BaseLayout <BaseLayout
title="Sobre mí" title="About"
description="Builder español. De orfebre a fotógrafo a developer. Construyendo productos y compartiendo el viaje." description="Spanish builder. From goldsmith to photographer to developer. Building products and sharing the journey."
> >
<Header /> <Header />
<main class="flex-1 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12"> <main class="flex-1 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
<article class="prose prose-invert prose-lg max-w-none"> <article class="prose prose-invert prose-lg max-w-none">
<h1 class="text-4xl font-bold mb-8">Sobre mí</h1> <h1 class="text-4xl font-bold mb-8">About Me</h1>
<div class="flex flex-col md:flex-row gap-8 mb-8 not-prose"> <div class="flex flex-col md:flex-row gap-8 mb-8 not-prose">
<div class="flex-shrink-0"> <div class="flex-shrink-0">
@@ -22,59 +22,59 @@ import Footer from '../components/layout/Footer.astro';
/> />
</div> </div>
<div class="flex-1"> <div class="flex-1">
<h2 class="text-2xl font-semibold mb-4 text-text-primary">Hola 👋</h2> <h2 class="text-2xl font-semibold mb-4 text-text-primary">Hi 👋</h2>
<p class="text-text-secondary text-lg leading-relaxed"> <p class="text-text-secondary text-lg leading-relaxed">
Soy David, builder español. No empecé en tech - fui orfebre, luego fotógrafo profesional I'm David, a Spanish builder. I didn't start in tech — I was a goldsmith, then a professional
durante 13 años, formador para LinkedIn Learning, y developer. Ahora construyo productos photographer for 13 years, instructor for LinkedIn Learning, and developer. Now I build products
que resuelven problemas reales. that solve real problems.
</p> </p>
</div> </div>
</div> </div>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">El Camino</h2> <h2 class="text-3xl font-semibold mb-4">The Path</h2>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
Empecé trabajando metal con mis manos como orfebre. Un día me interesé por la fotografía, I started working with metal as a goldsmith. One day I got interested in photography,
y esa obsesión me llevó a construir mi propia marca durante 13 años. Cuando no podía and that obsession led me to build my own brand for 13 years. When I couldn't
permitirme el equipo que necesitaba, lo improvisaba. Construía soportes, modificaba afford the equipment I needed, I improvised. I built supports, modified
accesorios, hacía funcionar lo que tenía. accessories, made what I had work.
</p> </p>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
Ese mismo impulso me llevó a aprender Python, a montar mi propia impresora 3D desde cero, That same drive led me to learn Python, build my own 3D printer from scratch,
a trabajar en Qloudea desarrollando herramientas internas mientras gestionaba redes sociales work at Qloudea developing internal tools while managing social media
y daba soporte técnico. Luego developer Python en NTT Data, y ahora trabajo en KEO and providing technical support. Then Python developer at NTT Data, and now I work at KEO
Connectivity con protocolos IoT para sistemas de energía (EEBUS). Connectivity with IoT protocols for energy systems (EEBUS).
</p> </p>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
<strong class="text-text-primary">El patrón siempre es el mismo:</strong> identificar un <strong class="text-text-primary">The pattern is always the same:</strong> identify a
problema, obsesionarse con resolverlo, aprender lo que haga falta para solucionarlo. problem, obsess over solving it, learn whatever it takes to fix it.
</p> </p>
</section> </section>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Qué Hago Ahora</h2> <h2 class="text-3xl font-semibold mb-4">What I'm Doing Now</h2>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
Trabajo full-time en KEO como Field Application Engineer, donde me encargo de documentación I work full-time at KEO as Field Application Engineer, where I handle technical
técnica, automatización de flujos de trabajo, herramientas internas y soporte de cara al cliente. documentation, workflow automation, internal tools, and customer-facing support.
</p> </p>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
En paralelo, construyo <strong class="text-primary">WarrantyHub</strong> - una plataforma In parallel, I'm building <strong class="text-primary">WarrantyHub</strong> a platform
para que usuarios finales gestionen las garantías de sus productos del hogar desde un solo lugar. for end users to manage warranties for their home products from one place.
Es un problema que yo mismo tenía, y descubrí que todos mis amigos y familia tienen el mismo problema. It's a problem I had myself, and I discovered all my friends and family have the same problem.
</p> </p>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
También trabajo en otros proyectos experimentales: CLIs de productividad, herramientas de I also work on other experimental projects: productivity CLIs, automation tools,
automatización, bots de Discord, y templates para acelerar desarrollo Python. Discord bots, and templates to accelerate Python development.
</p> </p>
</section> </section>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Proyectos Actuales</h2> <h2 class="text-3xl font-semibold mb-4">Current Projects</h2>
<div class="space-y-4"> <div class="space-y-4">
<div class="bg-surface p-5 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-5 rounded-lg border border-text-tertiary/20">
<h3 class="text-lg font-semibold text-primary mb-2">WarrantyHub</h3> <h3 class="text-lg font-semibold text-primary mb-2">WarrantyHub</h3>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Gestor digital de garantías del hogar. PWA self-hosted con modelo freemium. Digital home warranty manager. Self-hosted PWA with freemium model.
Stack: React + FastAPI + PostgreSQL. Stack: React + FastAPI + PostgreSQL.
</p> </p>
</div> </div>
@@ -82,55 +82,55 @@ import Footer from '../components/layout/Footer.astro';
<div class="bg-surface p-5 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-5 rounded-lg border border-text-tertiary/20">
<h3 class="text-lg font-semibold text-primary mb-2">TimeNet CLI</h3> <h3 class="text-lg font-semibold text-primary mb-2">TimeNet CLI</h3>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
CLI para gestionar fichajes de TimeNet desde terminal. Automatización de entrada/salida CLI to manage TimeNet time tracking from terminal. Automation for clock in/out
y reportes de horas trabajadas. and worked hours reports.
</p> </p>
</div> </div>
<div class="bg-surface p-5 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-5 rounded-lg border border-text-tertiary/20">
<h3 class="text-lg font-semibold text-primary mb-2">Python Project Template</h3> <h3 class="text-lg font-semibold text-primary mb-2">Python Project Template</h3>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Template opinionado para proyectos Python: uv, ruff, mypy, pytest, Docker, Portainer. Opinionated template for Python projects: uv, ruff, mypy, pytest, Docker, Portainer.
CI/CD con Gitea Actions. CI/CD with Gitea Actions.
</p> </p>
</div> </div>
<div class="bg-surface p-5 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-5 rounded-lg border border-text-tertiary/20">
<h3 class="text-lg font-semibold text-primary mb-2">Hermes Stack</h3> <h3 class="text-lg font-semibold text-primary mb-2">Hermes Stack</h3>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Stack de Hermes Agent gateway para QNAP/Portainer. Automatización con agentes AI Hermes Agent gateway stack for QNAP/Portainer. Automation with AI agents
para gestión de infraestructura. for infrastructure management.
</p> </p>
</div> </div>
<div class="bg-surface p-5 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-5 rounded-lg border border-text-tertiary/20">
<h3 class="text-lg font-semibold text-primary mb-2">Otros Experimentos</h3> <h3 class="text-lg font-semibold text-primary mb-2">Other Experiments</h3>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Bots de Discord (iRacing), herramientas de automatización (Portainer backups), Discord bots (iRacing), automation tools (Portainer backups),
scripts de utilidad (FLAC tagging, cookie extraction), y más. utility scripts (FLAC tagging, cookie extraction), and more.
</p> </p>
</div> </div>
</div> </div>
</section> </section>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Infraestructura Self-Hosted</h2> <h2 class="text-3xl font-semibold mb-4">Self-Hosted Infrastructure</h2>
<p class="text-text-secondary leading-relaxed mb-4"> <p class="text-text-secondary leading-relaxed mb-4">
Todos mis proyectos corren en infraestructura local self-hosted. Prefiero controlar All my projects run on local self-hosted infrastructure. I prefer to have complete
completamente el stack y mantener costes bajos mientras experimento. control over the stack and keep costs low while experimenting.
</p> </p>
<div class="bg-surface p-6 rounded-lg border border-primary/20"> <div class="bg-surface p-6 rounded-lg border border-primary/20">
<h3 class="text-xl font-semibold mb-4 text-primary">Stack Actual</h3> <h3 class="text-xl font-semibold mb-4 text-primary">Current Stack</h3>
<ul class="space-y-2 text-text-secondary"> <ul class="space-y-2 text-text-secondary">
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span><strong class="text-text-primary">Servidor físico local</strong> - <span><strong class="text-text-primary">Local physical server</strong> -
Docker host principal</span> Main Docker host</span>
</li> </li>
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span><strong class="text-text-primary">Portainer</strong> - Orquestación de <span><strong class="text-text-primary">Portainer</strong> - Stack and container
stacks y containers</span> orchestration</span>
</li> </li>
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
@@ -144,50 +144,50 @@ import Footer from '../components/layout/Footer.astro';
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span><strong class="text-text-primary">Nginx Proxy Manager</strong> - Reverse proxy <span><strong class="text-text-primary">Nginx Proxy Manager</strong> - Reverse proxy
con SSL automático (Let's Encrypt)</span> with automatic SSL (Let's Encrypt)</span>
</li> </li>
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span><strong class="text-text-primary">PostgreSQL</strong> - Base de datos principal <span><strong class="text-text-primary">PostgreSQL</strong> - Main database
para aplicaciones</span> for applications</span>
</li> </li>
</ul> </ul>
<p class="text-text-secondary text-sm mt-4"> <p class="text-text-secondary text-sm mt-4">
CI/CD completamente automatizado: push a main → build image → push a registry → Fully automated CI/CD: push to main → build image → push to registry →
deploy a Portainer. Todo en infraestructura local. deploy to Portainer. Everything on local infrastructure.
</p> </p>
</div> </div>
</section> </section>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Por Qué Build-in-Public</h2> <h2 class="text-3xl font-semibold mb-4">Why Build in Public</h2>
<ul class="space-y-3"> <ul class="space-y-3">
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span class="text-text-secondary"> <span class="text-text-secondary">
<strong class="text-text-primary">Responsabilidad:</strong> Es más difícil abandonar <strong class="text-text-primary">Accountability:</strong> It's harder to quit
cuando compartes progreso públicamente when you share progress publicly
</span> </span>
</li> </li>
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span class="text-text-secondary"> <span class="text-text-secondary">
<strong class="text-text-primary">Enseñar:</strong> Siempre he sido formador <strong class="text-text-primary">Teaching:</strong> I've always been an instructor
(LinkedIn Learning, Podcast CulturaNAS 2000+ subs). Compartir lo que aprendo es parte de quién soy (LinkedIn Learning, Podcast CulturaNAS 2000+ subs). Sharing what I learn is part of who I am
</span> </span>
</li> </li>
<li class="flex items-start"> <li class="flex items-start">
<span class="text-primary mr-2">→</span> <span class="text-primary mr-2">→</span>
<span class="text-text-secondary"> <span class="text-text-secondary">
<strong class="text-text-primary">Comunidad:</strong> Quiero conectar con otros <strong class="text-text-primary">Community:</strong> I want to connect with other
builders españoles que están en el mismo viaje Spanish builders on the same journey
</span> </span>
</li> </li>
</ul> </ul>
</section> </section>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Stack Técnico</h2> <h2 class="text-3xl font-semibold mb-4">Tech Stack</h2>
<div class="grid grid-cols-2 md:grid-cols-3 gap-4 not-prose"> <div class="grid grid-cols-2 md:grid-cols-3 gap-4 not-prose">
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Python</div> <div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Python</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">FastAPI</div> <div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">FastAPI</div>
@@ -202,64 +202,64 @@ import Footer from '../components/layout/Footer.astro';
</section> </section>
<section class="mb-12"> <section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Experiencia</h2> <h2 class="text-3xl font-semibold mb-4">Experience</h2>
<div class="space-y-6"> <div class="space-y-6">
<div class="bg-surface p-6 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-6 rounded-lg border border-text-tertiary/20">
<div class="flex items-start justify-between mb-2"> <div class="flex items-start justify-between mb-2">
<h3 class="text-xl font-semibold text-primary">Field Application Engineer</h3> <h3 class="text-xl font-semibold text-primary">Field Application Engineer</h3>
<span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2023 - Actualidad</span> <span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2023 - Present</span>
</div> </div>
<p class="text-text-secondary mb-2">KEO Connectivity (Alemania)</p> <p class="text-text-secondary mb-2">KEO Connectivity (Germany)</p>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Protocolo EEBUS para sistemas IoT de energía (e-movilidad, hogares inteligentes, EEBUS protocol for IoT energy systems (e-mobility, smart homes,
bombas de calor). Documentación técnica, automatización con n8n, herramientas internas, heat pumps). Technical documentation, automation with n8n, internal tools,
soporte técnico. technical support.
</p> </p>
</div> </div>
<div class="bg-surface p-6 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-6 rounded-lg border border-text-tertiary/20">
<div class="flex items-start justify-between mb-2"> <div class="flex items-start justify-between mb-2">
<h3 class="text-xl font-semibold text-primary">Developer Python</h3> <h3 class="text-xl font-semibold text-primary">Python Developer</h3>
<span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2022 - 2023</span> <span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2022 - 2023</span>
</div> </div>
<p class="text-text-secondary mb-2">NTT Data</p> <p class="text-text-secondary mb-2">NTT Data</p>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Desarrollo en Python, Google Cloud, Kubernetes, BigQuery. Análisis de datos y BigData. Python development, Google Cloud, Kubernetes, BigQuery. Data analysis and BigData.
</p> </p>
</div> </div>
<div class="bg-surface p-6 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-6 rounded-lg border border-text-tertiary/20">
<div class="flex items-start justify-between mb-2"> <div class="flex items-start justify-between mb-2">
<h3 class="text-xl font-semibold text-primary">Formador TIC + Developer</h3> <h3 class="text-xl font-semibold text-primary">ICT Instructor + Developer</h3>
<span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2013 - 2022</span> <span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2013 - 2022</span>
</div> </div>
<p class="text-text-secondary mb-2">Qloudea + LinkedIn Learning</p> <p class="text-text-secondary mb-2">Qloudea + LinkedIn Learning</p>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
Desarrollo de herramientas internas (HTML5, CSS, JavaScript, Python, Django, Flutter). Development of internal tools (HTML5, CSS, JavaScript, Python, Django, Flutter).
Formador oficial sobre servidores NAS para profesionales. Gestión de RRSS, YouTube, Official instructor on NAS servers for professionals. Social media management, YouTube,
fotografía de productos. product photography.
</p> </p>
</div> </div>
<div class="bg-surface p-6 rounded-lg border border-text-tertiary/20"> <div class="bg-surface p-6 rounded-lg border border-text-tertiary/20">
<div class="flex items-start justify-between mb-2"> <div class="flex items-start justify-between mb-2">
<h3 class="text-xl font-semibold text-primary">Fotógrafo Profesional</h3> <h3 class="text-xl font-semibold text-primary">Professional Photographer</h3>
<span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2003 - 2016</span> <span class="text-sm text-text-tertiary whitespace-nowrap ml-4">2003 - 2016</span>
</div> </div>
<p class="text-text-secondary mb-2">Marca propia</p> <p class="text-text-secondary mb-2">Own Brand</p>
<p class="text-text-secondary text-sm"> <p class="text-text-secondary text-sm">
13 años gestionando mi propia marca de fotografía. Creador del Podcast CulturaNAS 13 years managing my own photography brand. Creator of CulturaNAS Podcast
(2000+ suscriptores). (2000+ subscribers).
</p> </p>
</div> </div>
</div> </div>
</section> </section>
<section> <section>
<h2 class="text-3xl font-semibold mb-4">Conecta Conmigo</h2> <h2 class="text-3xl font-semibold mb-4">Connect With Me</h2>
<p class="text-text-secondary mb-6"> <p class="text-text-secondary mb-6">
Siempre abierto a conversar con otros builders, gente interesada en EEBUS/IoT, Always open to talking with other builders, people interested in EEBUS/IoT,
o simplemente personas curiosas sobre construcción de productos. or just curious people about building products.
</p> </p>
<div class="flex flex-wrap gap-4 not-prose"> <div class="flex flex-wrap gap-4 not-prose">
<a <a