Commit Graph

53 Commits

Author SHA1 Message Date
clawd e488b5d86f fix(staging): fix Traefik service linking with explicit service labels 2026-03-01 00:23:52 +01:00
clawd ef51dd6197 feat(staging): add Traefik-based staging with automatic subdomains 2026-03-01 00:14:22 +01:00
clawd 80d07f0e63 feat(infra): add staging environment setup with docker-compose and scripts 2026-03-01 00:10:58 +01:00
clawd 5a679578dc checkpoint: mark phase 3 complete (03-01, 03-02, 03-03) 2026-03-01 00:03:48 +01:00
clawd 3d28d9985b 03-03: Workout Experience Polish - enhanced exercise cards, progress badges, rest timer, KLART button, warmup styling 2026-02-28 23:47:36 +01:00
clawd 718b210a14 feat(dashboard): polish header logo, stat cards, calendar and animations
- Replace gravl icon text with Logo component in dashboard header
- Stat cards: gradient depth + per-card colour accent (orange/green/amber)
- Calendar today: pulsing glow animation; workout days get subtle brand tint
- Arrow nudge animation on today-workout-card hover
- Section stagger fade-in on page load (calendar → coach → stats)
- Larger stat-value font (3xl) with tighter letter-spacing
- Consistent gap spacing in dashboard-main (space-6)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 23:22:34 +01:00
clawd ebb6a28c5a feat(auth): polish login/register with logo, gradients and animations 2026-02-28 22:59:08 +01:00
clawd bc71a439f2 checkpoint: mark 03-01-login-onboarding-polish as completed 2026-02-28 22:58:24 +01:00
clawd 0d93c2cac8 feat(onboarding): add conversational ChatOnboarding component 2026-02-28 22:06:15 +01:00
clawd 2b8a429e1f design: WorkoutPage Hevy-style redesign + AlternativeModal + backend API
- Add GET /api/exercises/:id/alternatives endpoint
- Add GET /api/exercises/:id/last-workout endpoint
- New AlternativeModal component for swapping exercises
- WorkoutPage: single-tap logging, +/- buttons, rest timer
- Updated Icons with new workout icons
- Polish: card shadows, borders, micro-interactions
- Tasks directory for project management
2026-02-28 21:25:23 +01:00
clawd e2c112781a docs: add TDD coding conventions
Red/Green/Refactor cycle is now mandatory for all development
2026-02-28 14:43:25 +01:00
clawd d98db37fff docs: add phase 3 design polish planning, update progress 2026-02-26 23:53:22 +01:00
clawd 30d79927ff docs(phase-02): complete phase execution 2026-02-21 18:49:36 +01:00
clawd ea41728445 docs: add Stop hook implementation plan
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 18:47:13 +01:00
clawd 396c438a70 docs(02-02): complete DELETE logs endpoint plan — summary and state update
- 02-02-SUMMARY.md: backend DELETE endpoint + frontend deleteLog wiring
- STATE.md: phase 2 marked complete, decisions added, position advanced to phase 3 ready
2026-02-21 18:46:26 +01:00
clawd c8696123ea docs: add Stop hook design doc
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 18:45:43 +01:00
clawd 4cb842e6fa feat(02-02): wire deleteLog through App.jsx and WorkoutPage to ExerciseCard
- Added deleteLog function in App.jsx: calls DELETE /api/logs and removes entry from local logs state
- Passed onDeleteSet={deleteLog} to WorkoutPage in workout view render
- Updated WorkoutPage function signature to accept onDeleteSet prop
- Passed onDeleteSet through to each ExerciseCard (ExerciseCard already calls it in handleDeleteSet)
- Non-logged sets (404 from backend) silently ignored via catch block
2026-02-21 18:44:58 +01:00
clawd f6501d7e9d feat(02-02): add DELETE /api/logs endpoint to backend
- DELETE /api/logs accepts user_id, program_exercise_id, date, set_number in request body
- Deletes matching workout_logs row by composite key
- Returns 200 + deleted id on success, 404 if row not found
- Consistent with existing POST /api/logs (no auth middleware, user_id from body)
2026-02-21 18:44:18 +01:00
clawd 616451af20 docs(02-01): complete flexible sets plan 01 — summary and state update
- 02-01-SUMMARY.md: dynamic setList refactor, add-set modal, delete-set with last-set guard
- STATE.md: advance to phase 2 plan 2, record decisions, update metrics and session

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 18:43:18 +01:00
clawd 0fd4c648d5 feat(02-01): add CSS for add-set button, delete-set button, and set-type modal
- .add-set-btn: full-width dashed border button, 44px touch target, accent hover
- .delete-set-btn: 36px wide inline button, subtle opacity, red on hover, disabled state
- .set-type-modal-overlay: fixed fullscreen overlay with semi-transparent dark background
- .set-type-modal: bottom-sheet card (border-radius top only), max-width 600px
- .set-type-option: full-width option card with label/description layout, 56px tall
- .set-type-option.dropset: accent-colored title for dropset option
- .set-type-cancel: borderless cancel button, 44px touch target
- Uses existing dark theme variables: --bg-card, --bg-secondary, --border, --accent, --text-primary, --text-secondary
2026-02-21 18:41:33 +01:00
clawd 6afcaa8d41 feat(02-01): refactor ExerciseCard to dynamic setList with add-set modal and delete-set
- Replace fixed setInputs object with setList array state
- Add showAddModal state and set-type chooser modal (Vanligt set / Dropset)
- handleAddNormal: append one set pre-filled from last row's weight and reps
- handleAddDropset: append 3 sets at 100%/80%/60% weight (rounded to 2.5kg), 10 reps
- handleDeleteSet: remove by index with last-set guard (no delete when only 1 remains)
- handleComplete and handleInputChange updated to use array index (idx+1 as set_number)
- Progress badge and all-done class use setList.length instead of exercise.sets
- onDeleteSet prop added (optional stub for backend wiring in plan 02)
- Add trash icon SVG to Icons.jsx (outline trash can, consistent with icon library)
2026-02-21 18:40:45 +01:00
clawd ce31ef8dae docs(phase-02): research flexible sets phase
Researched:
- Dropset conventions: 20-25% weight reduction per step (HIGH confidence, strength training literature)
- React array management: Use filter() for immutable removals (HIGH confidence, official React docs)
- Mobile delete UX: Combine inline icons + optional swipe, 48px touch targets (HIGH confidence, WCAG + NN/G)
- Lightweight modal: Plain CSS overlay pattern without component library (MEDIUM confidence, verified with community)
- Backend set numbering: Recommend frontend renumbering before save to handle gaps (MEDIUM confidence, needs verification)

Key deliverables:
- Standard Stack: React 18 + plain CSS (no new dependencies)
- Architecture Patterns: Dynamic array management, lightweight modal, inline delete with optional confirmation
- Don't Hand-Roll: Array mutations (use filter), modal dialog (CSS is simpler than library), set calculations
- Common Pitfalls: Set numbering gaps, missing reps defaults, arbitrary weight reductions, last-set deletion
- Code Examples: Add/remove sets, dropset calculations, delete patterns with renumbering

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 18:01:42 +01:00
clawd db8323fb21 docs(02): capture phase context 2026-02-21 17:55:32 +01:00
clawd ad0eed3e72 docs(phase-1): complete phase execution 2026-02-16 08:25:56 +01:00
clawd 363a5d6a6c docs(01-02): complete stepper integration plan — summary and state update
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 08:22:48 +01:00
clawd bd579546f7 feat(01-02): integrate WeightInput and RepsInput into ExerciseCard set rows
- Import WeightInput and RepsInput in WorkoutPage.jsx
- Replace bare <input type="number"> elements with stepper components
- Update .set-inputs alignment to flex-start for taller steppers
- Update .set-row alignment to flex-start
- Remove now-redundant .weight-input and .reps-input CSS rules (main + mobile)
2026-02-16 08:21:26 +01:00
clawd 7bd06973d4 docs(01-03): complete touch target audit plan
- 01-03-SUMMARY.md: audit confirmed all 44px targets already in place from 01-01
- STATE.md: advanced to plan 3/3, updated metrics and decisions

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-16 08:06:00 +01:00
clawd 89d48a5990 docs(01-input-ux-01): complete stepper input components plan
- SUMMARY.md: documents StepperInput, WeightInput, RepsInput creation
- STATE.md: advanced to plan 1/3, added component decisions
2026-02-16 08:05:11 +01:00
clawd da1b6b6e8b feat(01-input-ux-01): add WeightInput, RepsInput wrappers + stepper CSS
- WeightInput: wraps StepperInput with step=2.5, suffix=kg
- RepsInput: wraps StepperInput with step=1, no suffix
- App.css: appended stepper styles (.stepper-wrapper, .stepper-btn, etc.)
- Buttons min 44x44px touch targets, font-size 16px on input
- No existing CSS removed; block appended at end
2026-02-16 08:04:07 +01:00
clawd ff83340c92 feat(01-input-ux-01): create StepperInput controlled component
- Reusable stepper with +/- buttons flanking a number input
- Handles min clamping, max constraint, decimal steps
- Controlled component (no internal state): value/onChange props
- 44px touch targets, 16px font, aria-labels present
- Rejects non-numeric input silently
2026-02-16 08:03:04 +01:00
clawd c88729dfed docs(01-input-ux): create phase plan 2026-02-16 06:38:05 +01:00
clawd 1de3e08b8d docs(01-input-ux): research mobile input UX patterns
Comprehensive research on implementing Phase 1: Input UX for fitness app.
Documents standard stack (React 18 + CSS custom properties), architecture
patterns (stepper components with 44px touch targets, validation), common
pitfalls (iOS auto-zoom, negative values), and verified code examples.

Key findings:
- Mobile touch target minimum 44px (iOS HIG, Material Design, WCAG 2.1)
- iOS auto-zoom prevented with font-size >= 16px on inputs
- Negative value validation in onChange handlers (not just HTML min attr)
- Custom stepper buttons recommended over native browser spinners
- Plain React state sufficient for Phase 1 (no form libraries needed)
- Weight input: 2.5kg steps; Reps input: 1 rep steps
- Includes reusable StepperInput component, WeightInput, RepsInput

All patterns verified against official docs (MDN, Apple HIG, Material Design,
WCAG 2.1) and industry best practices (NN/G, Chakra UI, Material Design).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 06:34:21 +01:00
clawd 142971bc1f docs: create roadmap (3 phases) 2026-02-16 06:29:59 +01:00
clawd 7d29bc896e docs: define v1 requirements 2026-02-16 06:27:18 +01:00
clawd 887ab56edc docs: complete domain research 2026-02-15 22:48:57 +01:00
clawd 7d97b2c830 chore: add project config 2026-02-15 22:33:07 +01:00
clawd 84d7f41c4e docs: initialize project 2026-02-15 22:25:04 +01:00
clawd 403a16c137 Add exercise database research
Comprehensive analysis of exercise data sources:
- ExerciseDB API (1,300+ exercises with GIFs)
- wger (open source, self-hostable)
- free-exercise-db (public domain)
- MusclesWorked, API Ninjas

Includes:
- Data structure recommendations
- Exercise substitution patterns
- Import script examples
- License summary
2026-02-15 22:21:38 +01:00
clawd e7b792bd44 Add comprehensive UX/feature research for Gravl
Research compiled from Exa AI search covering:
- Market overview (2024-2032 projections)
- UX best practices and common mistakes
- User feedback from Reddit communities
- Competitor analysis (Strong, Hevy, FITBOD, etc.)
- Gamification strategies
- AI coaching trends
- Prioritized recommendations for Gravl
2026-02-15 22:02:29 +01:00
clawd 2324d456e9 docs: map existing codebase 2026-02-15 21:49:31 +01:00
clawd f54083b0ab Design overhaul: Dark fitness theme, no emojis
CSS:
- Dark background (#0a0a0f, #0d0d12, #15151b)
- Orange accent (#ff6b35)
- Muted text (#a1a1aa, #71717a)
- Inter font from Google Fonts
- Workout type colors (push/pull/legs/etc)

Dashboard:
- Calendar dots are CSS circles, not emoji
- Coach avatar uses SVG icon
- All emojis replaced with Icons.jsx SVGs
- Navigation uses proper icons

WorkoutPage:
- Warmup exercises without emojis
- Check icons instead of emoji checkmarks
- Arrow icons for navigation
- Fire icon for warmup section

Professional fitness app aesthetic inspired by Nike/FITBOD
2026-02-01 19:45:03 +01:00
clawd 96d5c812cf Add design overhaul plan + partial icon work
TODO: Comprehensive design plan for fitness app feel
- Dark theme color palette
- Professional typography guidelines
- SVG icons to replace ALL emojis
- UI component standards
- Inspiration from Nike/FITBOD/Strong

Partial work from Claude Code:
- Icons.jsx component (SVG icons)
- Dashboard.jsx updates (some emoji removal)
2026-02-01 19:13:14 +01:00
clawd 2a26be5b77 Redesign Dashboard + add WorkoutSelectPage
Dashboard (cleaner):
- Week calendar at TOP
- Coach greeting (workout today or rest tips)
- If workout: gradient card with arrow → WorkoutPage
- If rest: tips + '+ Lägg till pass' → WorkoutSelectPage
- Quick stats at bottom

WorkoutSelectPage:
- Visual workout cards with icons and colors
- Preview of exercises
- Select + Start flow
- Fixed bottom action button
2026-02-01 14:43:10 +01:00
clawd 67e7bd8eb4 Dashboard: show workout list when no scheduled workout
- 'Välj pass' section with all available workouts
- Compact workout cards with exercise tags
- Click any workout → WorkoutPage
- No more 'Vilodag' - user can always pick a workout
2026-02-01 14:30:12 +01:00
clawd cfa7e9e356 Add WorkoutPage with warmup exercises (Claude Code)
- Dedicated workout page with progress tracking
- Warmup section with general + muscle-specific exercises
- Preparatory sets (2x10 @ 50% of first exercise)
- Checkbox tracking for warmup completion
- Progress bar showing completed exercises
- Animated 'Finish workout' button when done
- Mobile-first CSS with responsive design

Built by Claude Code 2.1.29
2026-02-01 14:20:00 +01:00
clawd 0b6e1dc88e Add ProfilePage and ProgressPage
ProfilePage:
- View/edit user info (name, age, height, goal, level)
- Show current measurements (weight, body fat, waist, neck)
- Show strength records (bench/squat/deadlift 1RM)

ProgressPage:
- Tab navigation (weight, body fat, strength)
- SVG line charts for progress visualization
- Stats showing current, first, and change
- Trend indicators (up/down)

Dashboard:
- Navigation icons for profile (👤) and progress (📊)
- Connected navigation to App.jsx routing
2026-02-01 11:50:52 +01:00
clawd 5d211598fc Update TODO: pass-sida, alternativa övningar, profil, progression 2026-02-01 11:45:24 +01:00
clawd 467bc2a064 Add Dashboard with weekly calendar and today's workout
- Dashboard.jsx: main landing page after login
- Coach greeting based on time of day
- Weekly calendar showing workout days
- Today's workout card with exercises
- Quick stats (workouts/week, streak)
- Upcoming workouts list
- Full responsive CSS
- App.jsx updated to show Dashboard first
2026-02-01 11:09:16 +01:00
clawd 1d0b8169b7 Add dashboard and conversational onboarding to roadmap 2026-02-01 09:15:32 +01:00
clawd d37b058035 Add nutritionist agent
- SOUL.md: evidensbaserad kostcoach
- Kalori/makro-beräkningar
- Protein per mål-tabell
- foods.json: vanliga livsmedel med makros
- Måltidsmallar för bulk/cut
2026-02-01 00:23:49 +01:00