-
Repositorio de infraestructura
La lista de servicios y el aspecto del panel, versionados.
-
Mi portátil
Lo abro al empezar a trabajar.
-
Puerta interna
Solo desde casa o la VPN, con doble factor.
-
Traefik
Usa la misma lista para crear sus rutas públicas.
-
Lista de servicios
Cada servicio con su dominio, su categoría y su icono. La misma lista para Traefik y para el panel.
-
Servicios solo locales
Los que nunca pasan por internet (monitorización, seguridad, DNS…) en una lista aparte, para que el panel los tenga sin publicarlos.
-
Aspecto
Título, orden, nombres, descripciones y servicios ocultos, en las variables del rol.
-
Imagen de fondo
Una imagen propia de montañas al anochecer, con tarjetas translúcidas encima.
-
Cinco plantillas
Ajustes, servicios, widgets, marcadores y estilos. La de servicios agrupa sola por categoría: una categoría nueva aparece sin tocar nada.
-
Etiqueta de configuración
Cambiar el aspecto no reinstala paquetes ni recompila: solo despliega las plantillas.
-
Copias fechadas
Cada fichero que se sustituye deja su copia al lado, para volver atrás en segundos.
-
Regenerar la página
Reiniciar no bastaba: la página estática seguía con el título viejo. El rol llama a la regeneración con reintentos.
-
Compilación
Homepage no publica un binario: se compila con Node y Next.js, en una carpeta por versión con un enlace a la activa.
- JavaScript / TypeScript
- Next.js
-
Servicio systemd
Node.js con su unidad de systemd, sin Docker.
- Linux (Debian, Alpine, Arch)
-
Hosts permitidos
Homepage rechaza cualquier petición cuyo nombre no esté en su lista. Protección propia que hay que configurar.
-
Las tres pestañas
Control, biblioteca y comunidad, con accesos rápidos en todas.
-
Comprobar la sintaxis
Antes de nada, el playbook tiene que ser válido.
-
Ensayo con diferencias
Ver qué cambiaría sin cambiarlo.
-
Comprobar en el navegador
En escritorio y en móvil: tarjetas, fondo, título, sin desbordes ni errores de JavaScript.
-
Segunda pasada sin cambios
Volver a aplicar no debe cambiar nada. Si cambia, algo no es idempotente.