feat: integrate WebAssembly for zero-latency, offline-first color operations
Some checks failed
Docker Build & Push / build-and-push (push) Failing after 24s
Some checks failed
Docker Build & Push / build-and-push (push) Failing after 24s
Replaced REST API dependency with @valknarthing/pastel-wasm (130KB) for complete browser-based color operations. The application is now fully static (2.2MB total) with zero network latency and offline support. **Key Changes:** 1. **WASM Integration:** - Added @valknarthing/pastel-wasm dependency (0.1.0) - Created lib/api/wasm-client.ts wrapper matching API interface - Updated lib/api/client.ts to use WASM client by default - All 18 color operations now run locally in browser 2. **Static Export Configuration:** - Changed next.config.ts output from 'standalone' to 'export' - Disabled image optimization for static export - Removed API proxy route (app/api/pastel/[...path]/route.ts) - Updated package.json scripts (removed dev:api, added serve) 3. **Docker Optimization:** - Migrated from Node.js standalone to nginx-alpine - Created nginx.conf with SPA routing and WASM mime types - Updated Dockerfile for static file serving - Reduced image size from ~150MB to ~25MB - Changed port from 3000 to 80 (standard HTTP) - Simplified docker-compose.yml (removed pastel-api service) 4. **Documentation Updates:** - Updated README.md with WASM benefits and deployment options - Added Key Benefits section highlighting zero-latency features - Rewrote deployment section for static hosting platforms - Updated CLAUDE.md tech stack and architecture - Removed obsolete docs: DEV_SETUP.md, DOCKER.md, IMPLEMENTATION_PLAN.md **Benefits:** - 🚀 Zero Latency - All operations run locally via WebAssembly - 📱 Offline First - Works completely offline after initial load - 🌐 No Backend - Fully static, deploy anywhere - ⚡ Fast - Native-speed color operations in browser - 📦 Small - 2.2MB total (130KB WASM, 2.07MB HTML/CSS/JS) **Deployment:** Can now be deployed to any static hosting platform: - Vercel, Netlify, Cloudflare Pages (zero config) - GitHub Pages, S3, CDN - Self-hosted nginx/Apache - Docker (optional, nginx-based) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -8,35 +8,14 @@ services:
|
||||
image: ghcr.io/valknarness/pastel-ui:latest
|
||||
container_name: pastel-ui
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
# Runtime configuration - can be changed without rebuilding
|
||||
- PASTEL_API_URL=${PASTEL_API_URL:-http://pastel-api:3001}
|
||||
- "80:80"
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/"]
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost/"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
|
||||
pastel-api:
|
||||
image: ghcr.io/valknarness/pastel-api:latest
|
||||
container_name: pastel-api
|
||||
ports:
|
||||
- "3001:3001"
|
||||
environment:
|
||||
- RUST_LOG=info
|
||||
- PORT=3001
|
||||
- HOST=0.0.0.0
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3001/api/v1/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
start_period: 5s
|
||||
|
||||
networks:
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user