feat: add Kit landing page at kit.pivoine.art

Added kit-ui landing page as the main entry point for the toolkit:
- Image: ghcr.io/valknarness/kit-ui:latest
- URL: https://kit.pivoine.art
- Provides links to Vert (file converter) and Paint (image editor)

Changes:
- Added landing service to kit/compose.yaml
- Updated arty.yml with KIT_TRAEFIK_HOST and KIT_LANDING_IMAGE
- Updated CLAUDE.md with landing page documentation
- Updated README.md with landing page reference

Toolkit structure:
- Landing: kit.pivoine.art (main hub)
- Vert: vert.kit.pivoine.art (file converter)
- Paint: paint.kit.pivoine.art (image editor)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-07 11:36:20 +01:00
parent 401029b0e7
commit fc1c149ac6
4 changed files with 41 additions and 3 deletions

View File

@@ -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)

View File

@@ -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:

View File

@@ -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

View File

@@ -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