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>
63 lines
1.9 KiB
JSON
63 lines
1.9 KiB
JSON
{
|
|
"name": "pastel-ui",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "Modern web UI for color manipulation, palette generation, and accessibility analysis",
|
|
"author": "valknarness",
|
|
"license": "MIT",
|
|
"packageManager": "pnpm@10.20.0",
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"dev:turbo": "next dev --turbopack",
|
|
"build": "next build",
|
|
"export": "next build",
|
|
"serve": "pnpm build && npx serve out",
|
|
"lint": "next lint",
|
|
"lint:fix": "next lint --fix",
|
|
"format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
|
|
"type-check": "tsc --noEmit",
|
|
"test": "vitest",
|
|
"test:ui": "vitest --ui",
|
|
"test:e2e": "playwright test",
|
|
"test:e2e:ui": "playwright test --ui",
|
|
"analyze": "ANALYZE=true next build"
|
|
},
|
|
"dependencies": {
|
|
"@tanstack/react-query": "^5.62.11",
|
|
"@valknarthing/pastel-wasm": "^0.1.0",
|
|
"clsx": "^2.1.1",
|
|
"cmdk": "^1.0.4",
|
|
"framer-motion": "^11.15.0",
|
|
"lucide-react": "^0.468.0",
|
|
"next": "^16.0.1",
|
|
"react": "^19.2.0",
|
|
"react-colorful": "^5.6.1",
|
|
"react-dom": "^19.2.0",
|
|
"sonner": "^1.7.1",
|
|
"tailwind-merge": "^2.5.5",
|
|
"zustand": "^5.0.2"
|
|
},
|
|
"devDependencies": {
|
|
"@playwright/test": "^1.49.1",
|
|
"@tailwindcss/forms": "^0.5.9",
|
|
"@tailwindcss/postcss": "^4.1.17",
|
|
"@tailwindcss/typography": "^0.5.15",
|
|
"@testing-library/react": "^16.1.0",
|
|
"@testing-library/user-event": "^14.5.2",
|
|
"@types/node": "^22.10.2",
|
|
"@types/react": "^19.0.1",
|
|
"@types/react-dom": "^19.0.2",
|
|
"@typescript-eslint/eslint-plugin": "^8.46.3",
|
|
"@typescript-eslint/parser": "^8.46.3",
|
|
"@vitest/ui": "^2.1.8",
|
|
"eslint": "^9.17.0",
|
|
"eslint-config-next": "^15.1.3",
|
|
"postcss": "^8.4.49",
|
|
"prettier": "^3.4.2",
|
|
"tailwindcss": "^4.0.0",
|
|
"typescript": "^5.7.2",
|
|
"vitest": "^2.1.8",
|
|
"webpack-bundle-analyzer": "^4.10.2"
|
|
}
|
|
}
|