feat: complete content overhaul - projects, infrastructure, personal brand (no empire talk)
CI/CD Pipeline / Build & Deploy (push) Failing after 42s

This commit is contained in:
wh-leader
2026-05-11 12:55:24 +02:00
parent 8a30951a64
commit 8cd0b2fa24
2 changed files with 266 additions and 57 deletions
+73
View File
@@ -0,0 +1,73 @@
---
title: "WarrantyHub"
description: "Plataforma digital para gestionar todas las garantías de tus productos del hogar desde un solo lugar"
url: "https://warrantyhub.impresion3d.pro"
github: ""
status: "development"
tags: ["React", "FastAPI", "PostgreSQL", "SaaS"]
startDate: 2026-04-15
featured: true
image: ""
---
# WarrantyHub
**Gestión digital de garantías para el hogar**
## El Problema
Todos tenemos el mismo problema: compramos electrodomésticos, gadgets, muebles... y guardamos los tickets y garantías en algún cajón. Cuando algo se rompe y necesitas reclamar:
- ❌ No encuentras el ticket
- ❌ No sabes si todavía está en garantía
- ❌ No tienes los datos del establecimiento
- ❌ El proceso de reclamación es un caos
**WarrantyHub resuelve esto.**
## La Solución
Una plataforma donde guardas todas tus garantías digitalmente:
**Digitalización rápida**: Foto del ticket y listo
**Recordatorios**: Te avisamos antes de que expire la garantía
**Organización**: Todos tus productos en un solo lugar
**Búsqueda fácil**: Encuentra cualquier garantía en segundos
**Proceso guiado**: Te ayudamos con el proceso de reclamación
## Stack Técnico
**Frontend:**
- React + TypeScript
- Tailwind CSS
- Vite
**Backend:**
- FastAPI (Python)
- PostgreSQL
- Docker + Portainer
**Features actuales:**
- Autenticación de usuarios
- Subida y digitalización de tickets (OCR)
- Gestión de productos y garantías
- Notificaciones de expiración
## Estado Actual
🚧 **En desarrollo activo**
Trabajando en:
- Sistema de recordatorios automáticos
- Mejora de OCR para extracción de datos
- Integración con tiendas para importar garantías automáticamente
## Por Qué Este Proyecto
Es un problema que yo mismo tenía. Y después de hablar con amigos y familia, descubrí que **todos** tienen el mismo problema.
No es sexy. No es AI generativa. Pero resuelve un problema real que la gente tiene cada día.
---
**Status:** Pronto en beta privada. [Suscríbete](/blog) para recibir invitación.
+191 -55
View File
@@ -6,7 +6,7 @@ import Footer from '../components/layout/Footer.astro';
<BaseLayout
title="Sobre mí"
description="Indie builder español construyendo productos SaaS. De desarrollador a emprendedor, compartiendo el viaje hacia €4M ARR."
description="Builder español. De orfebre a fotógrafo a developer. Construyendo productos y compartiendo el viaje."
>
<Header />
<main class="flex-1 max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 py-12">
@@ -24,57 +24,163 @@ import Footer from '../components/layout/Footer.astro';
<div class="flex-1">
<h2 class="text-2xl font-semibold mb-4 text-text-primary">Hola 👋</h2>
<p class="text-text-secondary text-lg leading-relaxed">
Soy David, desarrollador e indie builder español. Estoy construyendo
un portfolio de productos SaaS enfocados en el mercado español y europeo,
con el objetivo de alcanzar €4M ARR.
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.
</p>
</div>
</div>
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Mi Historia</h2>
<h2 class="text-3xl font-semibold mb-4">El Camino</h2>
<p class="text-text-secondary leading-relaxed mb-4">
Después de años trabajando como desarrollador, decidí dar el salto al emprendimiento
tecnológico. Vi una oportunidad en el mercado español: muchas soluciones B2B están
dominadas por empresas extranjeras que no entienden las particularidades del mercado
local, especialmente en temas de cumplimiento normativo.
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.
</p>
<p class="text-text-secondary leading-relaxed mb-4">
Mi enfoque es construir en público, compartiendo tanto los éxitos como los fracasos.
Creo en la transparencia y en la comunidad indie, y quiero contribuir al ecosistema
de emprendedores españoles compartiendo mi viaje.
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).
</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.
</p>
</section>
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Filosofía de Construcción</h2>
<h2 class="text-3xl font-semibold mb-4">Qué Hago Ahora</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.
</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.
</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.
</p>
</section>
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Proyectos Actuales</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.
Stack: React + FastAPI + PostgreSQL.
</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">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.
</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.
</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.
</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>
<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.
</p>
</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Infraestructura Self-Hosted</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.
</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>
<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</strong> (192.168.1.30) -
Docker host principal</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>
</li>
<li class="flex items-start">
<span class="text-primary mr-2">→</span>
<span><strong class="text-text-primary">Gitea</strong> (gitlab.impresion3d.pro) -
Git hosting + Docker registry + CI/CD</span>
</li>
<li class="flex items-start">
<span class="text-primary mr-2">→</span>
<span><strong class="text-text-primary">MinIO</strong> - Object storage (S3-compatible)</span>
</li>
<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>
</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>
</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.
</p>
</div>
</section>
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Por Qué 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">Spanish-first:</strong> Productos diseñados
para el mercado español y europeo
<strong class="text-text-primary">Responsabilidad:</strong> Es más difícil abandonar
cuando compartes progreso públicamente
</span>
</li>
<li class="flex items-start">
<span class="text-primary mr-2">→</span>
<span class="text-text-secondary">
<strong class="text-text-primary">Build-in-public:</strong> Transparencia
total en métricas, aprendizajes y decisiones
<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
</span>
</li>
<li class="flex items-start">
<span class="text-primary mr-2">→</span>
<span class="text-text-secondary">
<strong class="text-text-primary">AI-assisted:</strong> Aprovechando herramientas
de IA para acelerar desarrollo (79% AI-assisted en WarrantyHub)
</span>
</li>
<li class="flex items-start">
<span class="text-primary mr-2">→</span>
<span class="text-text-secondary">
<strong class="text-text-primary">Compliance-focused:</strong> Ventaja competitiva
en regulaciones españolas y europeas
<strong class="text-text-primary">Comunidad:</strong> Quiero conectar con otros
builders españoles que están en el mismo viaje
</span>
</li>
</ul>
@@ -83,47 +189,77 @@ import Footer from '../components/layout/Footer.astro';
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">Stack Técnico</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">React</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">TypeScript</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Node.js</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Astro</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Tailwind CSS</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Docker</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">PostgreSQL</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">React</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">TypeScript</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">PostgreSQL</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Docker</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Tailwind CSS</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">Astro</div>
<div class="bg-surface px-4 py-3 rounded-lg border border-text-tertiary/20">n8n</div>
</div>
</section>
<section class="mb-12">
<h2 class="text-3xl font-semibold mb-4">En Qué Estoy Trabajando</h2>
<div class="bg-surface p-6 rounded-lg border border-primary/20">
<h3 class="text-xl font-semibold mb-2 text-primary">Portfolio SaaS €4M ARR</h3>
<p class="text-text-secondary mb-4">
Construyendo un portfolio de productos SaaS en 3 fases:
<h2 class="text-3xl font-semibold mb-4">Experiencia</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>
</div>
<p class="text-text-secondary mb-2">KEO Connectivity (Alemania)</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.
</p>
<ul class="space-y-2">
<li class="text-text-secondary">
<strong class="text-text-primary">Fase 1 (0-8 meses):</strong> WarrantyHub,
Verifactu compliance, análisis de contratos → €825K ARR
</li>
<li class="text-text-secondary">
<strong class="text-text-primary">Fase 2 (8-18 meses):</strong> Plataforma
de auditoría, integraciones → €1.8M ARR
</li>
<li class="text-text-secondary">
<strong class="text-text-primary">Fase 3 (18+ meses):</strong> Expansión
europea, liderazgo → €4M+ ARR
</li>
</ul>
</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>
<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.
</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>
<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.
</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>
<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 text-sm">
13 años gestionando mi propia marca de fotografía. Creador del Podcast CulturaNAS
(2000+ suscriptores).
</p>
</div>
</div>
</section>
<section>
<h2 class="text-3xl font-semibold mb-4">Conecta Conmigo</h2>
<p class="text-text-secondary mb-6">
Siempre estoy abierto a conversar con otros builders, inversores, o simplemente
personas interesadas en emprendimiento tecnológico español.
Siempre abierto a conversar con otros builders, gente interesada en EEBUS/IoT,
o simplemente personas curiosas sobre construcción de productos.
</p>
<div class="flex flex-wrap gap-4 not-prose">
<a
@@ -136,7 +272,7 @@ import Footer from '../components/layout/Footer.astro';
X (Twitter)
</a>
<a
href="https://linkedin.com/in/davidaragon"
href="https://linkedin.com/in/david-aragon-galiana"
target="_blank"
rel="noopener noreferrer"
class="bg-primary/10 hover:bg-primary/20 text-primary px-6 py-3 rounded-lg