Commit Graph

7 Commits

Author SHA1 Message Date
901d9047e2 feat: implement Phase 2 - Core conversion engine and UI
Complete Phase 2 implementation with working unit converter:

Core Conversion Engine (lib/units.ts):
- Type-safe wrapper for convert-units library
- Support for all 23 measures with TypeScript types
- getAllMeasures() - Get all available categories
- getUnitsForMeasure() - Get units for specific measure
- getUnitInfo() - Get detailed unit information
- convertUnit() - Convert between two units
- convertToAll() - Convert to all compatible units
- getCategoryColor() - Get Tailwind color class for measure
- formatMeasureName() - Format measure names for display
- searchUnits() - Fuzzy search across all units

Utility Functions (lib/utils.ts):
- cn() - Merge Tailwind classes with clsx and tailwind-merge
- formatNumber() - Smart number formatting with scientific notation
- debounce() - Debounce helper for inputs
- parseNumberInput() - Parse user input to number
- getRelativeTime() - Format timestamps

UI Components:
- Input - Styled input with focus states
- Button - 6 variants (default, destructive, outline, secondary, ghost, link)
- Card - Card container with header, title, description, content, footer

Main Converter Component (components/converter/MainConverter.tsx):
- Real-time conversion as user types
- Category selection with 23 color-coded buttons
- Input field with unit selector
- Grid display of all conversions in selected measure
- Color-coded result cards with category colors
- Responsive layout (1/2/3 column grid)

Homepage Updates:
- Integrated MainConverter component
- Clean header with gradient text
- Uses design system colors

Dependencies Added:
- clsx - Class name utilities
- tailwind-merge - Merge Tailwind classes intelligently

Features Working:
✓ Select from 23 measurement categories
✓ Real-time conversion to all compatible units
✓ Color-coded categories
✓ Formatted number display
✓ Responsive design

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:34:57 +01:00
365b8ed328 ci: add Docker build and GitHub Container Registry workflow
Add complete Docker containerization and CI/CD setup:

Docker Configuration:
- Multi-stage Dockerfile with 3 stages (deps, builder, runner)
- Stage 1: Install dependencies with pnpm in Alpine
- Stage 2: Build Next.js static export
- Stage 3: Serve static files with nginx:alpine
- Health check endpoint on /health
- Optimized for production with layer caching

Nginx Configuration:
- Custom nginx.conf for static file serving
- Gzip compression enabled
- Security headers (X-Frame-Options, X-Content-Type-Options, etc.)
- Static asset caching with 1-year expiry
- Client-side routing support (try_files)
- Health check endpoint for container orchestration
- Error page handling

GitHub Workflow (docker-build-push.yml):
- Triggers on push to main, tags, and pull requests
- Multi-platform builds (linux/amd64, linux/arm64)
- Pushes to GitHub Container Registry (ghcr.io)
- Automatic tagging: latest, semver, sha, branch
- Uses GitHub Actions cache for faster builds
- Requires only GITHUB_TOKEN (no secrets needed)

.dockerignore:
- Excludes node_modules, .next, build artifacts
- Excludes dev files, logs, and IDE configs
- Keeps Docker image size minimal

Image will be available at:
ghcr.io/valknarness/units-ui:latest

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:32:42 +01:00
bd3a9a49d1 style: streamline globals.css with comprehensive design system
Enhanced globals.css based on pastel-ui best practices:

Features added:
- @source directives for automatic component discovery
- @custom-variant for dark mode support
- Complete design system with :root and .dark themes
- OKLCH color space for better color precision
- shadcn/ui compatible color tokens (background, foreground, card, etc.)
- @theme inline block with Tailwind v4 color definitions
- 23 category colors converted to OKLCH format
- Custom animations system with 8 predefined animations
- @layer base with global styles
- Smooth transitions and custom scrollbar styling
- Screen reader utility class (.sr-only)
- Animation keyframes for all custom animations

Design system includes:
- Light/dark mode support with OKLCH colors
- Semantic color tokens (primary, secondary, muted, accent, destructive)
- Border radius variable (--radius)
- Smooth 200ms transitions
- Category-specific colors for all 23 unit types in OKLCH
- Custom animations: fadeIn, slideUp/Down, slideInRight/Left, scaleIn, bounceGentle, shimmer

Accessibility features:
- Proper outline ring on focus
- Theme transition prevention during theme switch
- Custom scrollbar with hover states
- Screen reader only utility

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:28:20 +01:00
ea06e2e9d3 refactor: migrate to Tailwind CSS 4 native configuration
Convert from Tailwind CSS 3 style to Tailwind CSS 4 native approach:
- Install @tailwindcss/postcss plugin
- Create postcss.config.mjs with Tailwind PostCSS plugin
- Migrate all custom theme colors to globals.css using @theme directive
- Remove tailwind.config.ts (no longer needed in Tailwind CSS 4)
- Update globals.css from @import style to native CSS with custom properties

Custom theme includes:
- 23 category-specific colors as CSS custom properties
- --color-category-* naming convention for all unit types
- Follows Tailwind CSS 4 best practices with @theme block

Benefits:
- Native CSS features, no JS config needed
- Better performance with PostCSS plugin
- Cleaner separation of concerns
- Follows Tailwind CSS 4 migration guide

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:26:11 +01:00
48b75b9755 feat: initialize Next.js 16 project with TypeScript and Tailwind CSS 4
Set up complete Next.js 16 development environment:
- Next.js 16.0.1 with App Router and Turbopack
- React 19.2.0 with TypeScript 5.9
- Tailwind CSS 4.1.17 with custom category colors
- ESLint 9 with Next.js config
- Static site generation enabled (output: 'export')

Project structure:
- app/ directory with layout, page, and globals.css
- Tailwind config with 23 category-specific colors
- TypeScript config with strict mode and path aliases
- Complete .gitignore for Next.js projects

Dependencies installed:
- convert-units 2.3.4 for unit conversions
- All React 19 and Next.js 16 dependencies
- Development tooling (TypeScript, ESLint, Tailwind)

Ready for Phase 2: Core conversion engine implementation

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:21:56 +01:00
5c0b8d668e docs: update implementation plan with all 23 unit categories
Update IMPLEMENTATION_PLAN.md to reflect accurate count from convert-units:
- Correct from estimated 13-27 categories to actual 23 categories
- Add complete list of all 23 measures with individual unit counts
- Total of 187 individual units across all categories
- Expand color palette from 8 to 23 distinct category colors
- Update visual comparison section with all 23 color assignments

New categories include:
- Angle, Apparent Power, Current, Illuminance, Pace
- Parts Per, Reactive Energy, Reactive Power, Voltage
- Volume Flow Rate (37 units - largest category)

Discovered through direct library inspection of convert-units package.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:16:13 +01:00
9e79e3da4e docs: add comprehensive implementation plan for unit conversion app
Add detailed implementation plan covering:
- Innovative UX features (real-time conversion, visual comparison, power user features)
- Technical architecture with Next.js 16, TypeScript, and Tailwind CSS 4
- Component structure and state management design
- 8-phase implementation roadmap
- Design system with category-based color palette
- Support for 13+ unit categories from convert-units library
- Performance targets and accessibility requirements
- Mobile-first responsive design strategy

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-08 09:09:16 +01:00