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