diff --git a/CLAUDE.md b/CLAUDE.md index a2a8078..792de0e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -251,10 +251,17 @@ Joplin Server note-taking and synchronization platform: 5. Enter email and password created in step 1 ### Kit (kit/compose.yaml) -Unified toolkit combining file conversion and image editing using subdomain routing: +Unified toolkit with landing page, file conversion, and image editing using subdomain routing: +- **Landing**: `kit.pivoine.art` - Toolkit landing page - **Vert**: `vert.kit.pivoine.art` - Universal file format converter - **Paint**: `paint.kit.pivoine.art` - Web-based image editor +#### Landing Page (kit.pivoine.art) +Kit toolkit landing page: +- Main entry point for the toolkit +- Links to Vert and Paint services +- Clean, simple interface + #### Vert Service (vert.kit.pivoine.art) VERT universal file format converter: - WebAssembly-based file conversion (client-side processing) diff --git a/README.md b/README.md index 3b5a35d..929766c 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ The **Falcon** is a state-of-the-art containerized starship, powered by Docker's | **LINKS** | *Interstellar bookmark archive* | [links.pivoine.art](https://links.pivoine.art) | | **VAULT** | *Encrypted password vault* | [vault.pivoine.art](https://vault.pivoine.art) | | **JOPLIN** | *Note-taking server & sync hub* | [joplin.pivoine.art](https://joplin.pivoine.art) | -| **KIT** | *Toolkit: file converter & image editor* | [kit.pivoine.art](https://kit.pivoine.art) | +| **KIT** | *Toolkit hub with converter & editor* | [kit.pivoine.art](https://kit.pivoine.art) | | **JELLY** | *Media streaming server* | [jelly.pivoine.art](https://jelly.pivoine.art) | | **DROP** | *Peer-to-peer file sharing* | [drop.pivoine.art](https://drop.pivoine.art) | | **RESTIC** | *Automated backup vault system* | [restic.pivoine.art](https://restic.pivoine.art) | @@ -202,6 +202,10 @@ arty env/sync ```bash # Access unified toolkit (subdomain routing) +# Landing Page +# URL: https://kit.pivoine.art +# Main entry point with links to all toolkit services + # File Converter (Vert) # URL: https://vert.kit.pivoine.art # Features: diff --git a/arty.yml b/arty.yml index 67a0e22..130e289 100644 --- a/arty.yml +++ b/arty.yml @@ -110,9 +110,11 @@ envs: JOPLIN_TRAEFIK_HOST: joplin.pivoine.art JOPLIN_APP_PORT: 22300 JOPLIN_DB_NAME: joplin - # Kit (combines Vert and Paint) + # Kit (combines Vert and Paint with landing page) KIT_TRAEFIK_ENABLED: true KIT_COMPOSE_PROJECT_NAME: kit + KIT_TRAEFIK_HOST: kit.pivoine.art + KIT_LANDING_IMAGE: ghcr.io/valknarness/kit-ui:latest KIT_VERT_IMAGE: ghcr.io/vert-sh/vert:latest KIT_VERT_TRAEFIK_HOST: vert.kit.pivoine.art KIT_PAINT_TRAEFIK_HOST: paint.kit.pivoine.art diff --git a/kit/compose.yaml b/kit/compose.yaml index 950cda0..6adcfa8 100644 --- a/kit/compose.yaml +++ b/kit/compose.yaml @@ -1,4 +1,29 @@ services: + landing: + image: ${KIT_LANDING_IMAGE:-ghcr.io/valknarness/kit-ui:latest} + container_name: ${KIT_COMPOSE_PROJECT_NAME}_landing + restart: unless-stopped + networks: + - compose_network + labels: + - 'traefik.enable=${KIT_TRAEFIK_ENABLED}' + # HTTP to HTTPS redirect + - 'traefik.http.middlewares.${KIT_COMPOSE_PROJECT_NAME}-landing-redirect-web-secure.redirectscheme.scheme=https' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web.middlewares=${KIT_COMPOSE_PROJECT_NAME}-landing-redirect-web-secure' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web.rule=Host(`${KIT_TRAEFIK_HOST}`)' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web.entrypoints=web' + # HTTPS router + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web-secure.rule=Host(`${KIT_TRAEFIK_HOST}`)' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web-secure.tls.certresolver=resolver' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web-secure.entrypoints=web-secure' + - 'traefik.http.middlewares.${KIT_COMPOSE_PROJECT_NAME}-landing-compress.compress=true' + - 'traefik.http.routers.${KIT_COMPOSE_PROJECT_NAME}-landing-web-secure.middlewares=${KIT_COMPOSE_PROJECT_NAME}-landing-compress,security-headers@file' + # Service + - 'traefik.http.services.${KIT_COMPOSE_PROJECT_NAME}-landing.loadbalancer.server.port=80' + - 'traefik.docker.network=${NETWORK_NAME}' + # Watchtower + - 'com.centurylinklabs.watchtower.enable=${WATCHTOWER_LABEL_ENABLE}' + vert: image: ${KIT_VERT_IMAGE:-ghcr.io/vert-sh/vert:latest} container_name: ${KIT_COMPOSE_PROJECT_NAME}_vert