From ad89b96dc02dc315b739dce7a9f9106d28e73879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Sat, 8 Nov 2025 10:40:30 +0100 Subject: [PATCH] feat: add Units converter tool to Kit stack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added Units converter to the Kit toolkit at units.kit.pivoine.art: - Unit conversion tool for length, weight, temperature, etc. - Image: ghcr.io/valknarness/units-ui:latest - Exposed on port 3000 via Traefik with SSL Configuration: - Added units service to kit/compose.yaml - Added KIT_UNITS_IMAGE and KIT_UNITS_TRAEFIK_HOST to arty.yml - Follows same pattern as other Kit tools (Vert, Paint, Pastel, Stirling) - Watchtower enabled for automatic updates 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- arty.yml | 2 ++ kit/compose.yaml | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/arty.yml b/arty.yml index 20921dd..1e3139e 100644 --- a/arty.yml +++ b/arty.yml @@ -123,6 +123,8 @@ envs: KIT_PASTEL_TRAEFIK_HOST: pastel.kit.pivoine.art KIT_STIRLING_IMAGE: frooodle/s-pdf:latest KIT_STIRLING_TRAEFIK_HOST: stirling.kit.pivoine.art + KIT_UNITS_IMAGE: ghcr.io/valknarness/units-ui:latest + KIT_UNITS_TRAEFIK_HOST: units.kit.pivoine.art # Jellyfin JELLY_TRAEFIK_ENABLED: true JELLY_COMPOSE_PROJECT_NAME: jelly diff --git a/kit/compose.yaml b/kit/compose.yaml index 50b0771..ead65c6 100644 --- a/kit/compose.yaml +++ b/kit/compose.yaml @@ -147,6 +147,31 @@ services: # Watchtower - 'com.centurylinklabs.watchtower.enable=${WATCHTOWER_LABEL_ENABLE}' + units: + image: ${KIT_UNITS_IMAGE:-ghcr.io/valknarness/units-ui:latest} + container_name: ${KIT_COMPOSE_PROJECT_NAME}_units + restart: unless-stopped + networks: + - compose_network + labels: + - 'traefik.enable=${KIT_TRAEFIK_ENABLED}' + # HTTP to HTTPS redirect + - 'traefik.http.middlewares.${KIT_COMPOSE_PROJECT_NAME}-units-redirect-web-secure.redirectscheme.scheme=https' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web.middlewares=${KIT_COMPOSE_PROJECT_NAME}-units-redirect-web-secure' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web.rule=Host(`${KIT_UNITS_TRAEFIK_HOST}`)' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web.entrypoints=web' + # HTTPS router + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web-secure.rule=Host(`${KIT_UNITS_TRAEFIK_HOST}`)' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web-secure.tls.certresolver=resolver' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web-secure.entrypoints=web-secure' + - 'traefik.http.middlewares.${KIT_COMPOSE_PROJECT_NAME}-units-compress.compress=true' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-units-web-secure.middlewares=${KIT_COMPOSE_PROJECT_NAME}-units-compress,security-headers@file' + # Service + - 'traefik.http.services.${KIT_COMPOSE_PROJECT_NAME}-units.loadbalancer.server.port=3000' + - 'traefik.docker.network=${NETWORK_NAME}' + # Watchtower + - 'com.centurylinklabs.watchtower.enable=${WATCHTOWER_LABEL_ENABLE}' + networks: compose_network: name: ${NETWORK_NAME}