# Keyboard Vagabond Web Static website landing page for the Keyboard Vagabond fediverse community. This project creates an optimized, containerized website for deployment on Kubernetes. ## 🌟 Features - **Ultra-optimized CSS**: 94.4% reduction (154KB → 8.6KB) using PurgeCSS and cssnano - **Minified HTML**: 16.3% size reduction with html-minifier-terser - **Containerized**: Docker + nginx for Kubernetes deployment - **Modern CSS Framework**: Built with Pico CSS - **ARM64 Compatible**: Optimized for ARM-based Kubernetes clusters ## 🏗️ Project Structure ``` Keyboard-Vagabond-Web/ ├── dist/ # 🚀 Production build (optimized) │ ├── index.html # Minified landing page │ ├── about.html # Minified about page │ ├── css/styles.css # Optimized CSS (8.6KB) │ └── assets/ # Static assets ├── public/ # 📝 Development files ├── build.sh # 🐳 Container build script ├── minify-build.js # 🗜️ CSS/HTML optimization ├── Dockerfile # 🐳 Container definition ├── nginx.conf # 🌐 Web server config └── package.json # 📦 Dependencies & scripts ``` ## 🚀 Quick Start ### Prerequisites - **Node.js** (v16+ recommended) - **Docker** - **npm** ### Development ```bash # Clone and setup git clone cd Keyboard-Vagabond-Web npm install # View development version open public/index.html ``` ### Build & Deploy ```bash # Full production build (recommended) npm run build # to run locally docker build -t keyboard-vagabond-local . docker run -d -p 8080:80 --name test-container keyboard-vagabond-local ``` ## 📋 Available Scripts | Command | Description | |---------|-------------| | `npm run build` | **Full production build** - Optimize + containerize + push | | `npm run dist-minified` | Create optimized `dist/` folder (CSS + HTML minified) | | `npm run dist` | Create `dist/` folder with CSS optimization (auto-runs PurgeCSS) | | `npm run build-basic` | Basic build using `dist` command | | `npm run optimize-css` | CSS optimization only (PurgeCSS) | | `npm run clean` | Clean all build artifacts | | `./build.sh` | Build and push Docker container | ## 🚢 Deployment Guide ### Step 1: Prepare Environment ```bash # Ensure you have access to the registry docker login registry.keyboardvagabond.com # Install dependencies npm install ``` ### Step 2: Build Production Assets ```bash # Create optimized build (recommended - includes minification) npm run dist-minified # OR create basic optimized build npm run dist ``` This creates a `dist/` folder with: - ✅ CSS optimized from 154KB to 8.6KB (94.4% reduction) - ✅ HTML minified (16.3% reduction) - ✅ Production-ready static files ### Step 3: Container Build & Push ```bash # Build and push container ./build.sh ``` Or use the complete pipeline: ```bash # Full build pipeline npm run build ``` ### Step 4: Kubernetes Deployment The container is pushed to `registry.keyboardvagabond.com/library/keyboard-vagabond-web:latest` Example Kubernetes deployment: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: keyboard-vagabond-web spec: replicas: 2 selector: matchLabels: app: keyboard-vagabond-web template: metadata: labels: app: keyboard-vagabond-web spec: containers: - name: web image: registry.keyboardvagabond.com/library/keyboard-vagabond-web:latest ports: - containerPort: 80 resources: requests: memory: "64Mi" cpu: "50m" limits: memory: "128Mi" cpu: "100m" --- apiVersion: v1 kind: Service metadata: name: keyboard-vagabond-web spec: selector: app: keyboard-vagabond-web ports: - port: 80 targetPort: 80 type: ClusterIP ``` ## 🎯 Optimization Results | Metric | Before | After | Improvement | |--------|--------|-------|-------------| | **CSS Size** | 154.6KB | 8.6KB | **94.4% reduction** | | **HTML Size** | 14.7KB | 12.3KB | **16.3% reduction** | | **Total Saved** | - | 148.4KB | **Massive performance gain** | ## 🔧 Development Workflow ### Making Changes 1. **Edit source files** in `public/` 2. **Test locally** by opening `public/index.html` 3. **Build optimized version**: `npm run dist-minified` 4. **Test production build**: `open dist/index.html` 5. **Deploy**: `npm run build` ### CSS Customization - **Custom styles**: Edit `public/site-styles/style.css` - **Pico CSS**: Uses green theme with custom variables - **Optimization**: Automatically removes unused CSS on build ### Content Updates - **Main page**: `public/index.html` - **About page**: `public/about.html` - **Assets**: Add to `public/assets/` ## 🐳 Container Details - **Base Image**: `nginx:1.25-alpine` - **Platform**: `linux/arm64` (ARM Kubernetes optimized) - **Port**: 80 - **Health Check**: Built-in HTTP health endpoint - **Security**: Runs as non-root nginx user ## 🏷️ Tech Stack - **HTML/CSS**: Semantic HTML with Pico CSS framework - **Build Tools**: PurgeCSS, cssnano, html-minifier-terser - **Container**: Docker + nginx - **Deployment**: Kubernetes on ARM64 cluster - **Registry**: Harbor (registry.keyboardvagabond.com) ## 📦 Dependencies ```json { "devDependencies": { "purgecss": "^6.0.0", "cssnano": "^7.0.6", "cssnano-cli": "^1.0.5", "html-minifier-terser": "^7.2.0" } } ``` ## 🚨 Troubleshooting ### Build Issues ```bash # Clean rebuild rm -rf dist/ node_modules/ npm install npm run build ``` ### Registry Access ```bash # Login to registry docker login registry.keyboardvagabond.com # Verify access docker pull registry.keyboardvagabond.com/library/keyboard-vagabond-web:latest ``` ### Missing dist/ folder The build script automatically creates `dist/` if missing. If you get errors: ```bash # Manual dist creation npm run dist-minified ``` ## 📄 License MIT License - See LICENSE file for details ## 🤝 Contributing 1. Fork the repository 2. Create feature branch 3. Make changes in `public/` directory 4. Test with `npm run dist-minified` 5. Submit pull request --- **Ready to deploy the Keyboard Vagabond fediverse community! 🚀**