Commit graph

850 commits

Author SHA1 Message Date
senke
01f2acc718 docs: generate comprehensive list of all remaining Tailwind default color instances 2026-01-16 01:51:32 +01:00
senke
4032172050 consistency: migrate Tailwind default colors in CheckoutView and FileManagerView (Batches 19-20) 2026-01-16 01:49:52 +01:00
senke
43b2257657 consistency: migrate Tailwind default colors in CartView and SearchPageView (Batches 17-18) 2026-01-16 01:48:26 +01:00
senke
bedd11f75f consistency: migrate Tailwind default colors in AdminView and EducationView (Batches 15-16) 2026-01-16 01:47:43 +01:00
senke
ed86d17752 consistency: migrate Tailwind default colors in ProfileView.tsx (Batch 14) 2026-01-16 01:46:58 +01:00
senke
174bd68ebb consistency: migrate Tailwind default colors in LiveView, StudioView, and UploadView (Batches 11-13) 2026-01-16 01:46:02 +01:00
senke
06bc449c24 consistency: migrate Tailwind default colors in SettingsView and SocialView (Batches 9-10) 2026-01-16 01:45:00 +01:00
senke
8ff7ee485c consistency: migrate Tailwind default colors in PurchasesView.tsx (Batch 8) 2026-01-16 01:44:12 +01:00
senke
e2feab93e4 consistency: migrate Tailwind default colors in NotificationsView.tsx (Batch 7) 2026-01-16 01:43:37 +01:00
senke
90f9d61fa1 consistency: migrate Tailwind default colors in DiscoverView.tsx (Batch 6) 2026-01-16 01:43:00 +01:00
senke
8506102c20 consistency: migrate Tailwind default colors in FileDetailsView.tsx (Batch 5) 2026-01-16 01:42:21 +01:00
senke
fafab26478 consistency: migrate Tailwind default colors in MarketplaceView.tsx (Batch 4) 2026-01-16 01:41:40 +01:00
senke
1ba118cc57 consistency: migrate Tailwind default colors in AnalyticsView.tsx (Batch 3) 2026-01-16 01:41:11 +01:00
senke
24a3141d90 cognitive-load: audit list view usage (Action 10.2.1.1)
- Audited all files with view mode toggle (6 files total)
- Found list view is actively used and is default in 3 contexts:
  - SearchPageView: List is default for search results
  - FileManagerView: List is default for file browsing
  - CloudFileBrowser: List is default for cloud files
- Grid view is default in track browsing contexts (LibraryPage, LibraryManager, ProfileView)
- Recommendation: Keep list view - serves different purposes than grid view
- Created comprehensive audit report: apps/web/docs/LIST_VIEW_USAGE_AUDIT.md
- Includes context-specific analysis and recommendations
2026-01-16 01:38:00 +01:00
senke
d8493ebdf0 cognitive-load: mark Tabs as complete and create Accordion component (Actions 10.1.1.2, 10.1.1.4)
- Action 10.1.1.2: Tabs component already exists at apps/web/src/components/ui/tabs.tsx
- Action 10.1.1.4: Created Accordion component at apps/web/src/components/ui/accordion.tsx
  - Components: Accordion, AccordionItem, AccordionTrigger, AccordionContent
  - Features: Single/multiple modes, controlled/uncontrolled, smooth animations
  - Design: Kodo design system styling, accessible, follows Tabs pattern
  - Ready for use in Dashboard and other pages for collapsible sections
2026-01-16 01:36:19 +01:00
senke
178d62bd77 consistency: mark Action 9.5.1.5 as complete (redundant)
- Action 9.5.1.5 requested removal of backdrop-blur and complex transitions
- These were already removed in Actions 9.5.1.2 and 9.5.1.3
- Current Input component has minimal, clean styling
- Marked as complete with note that work was already done
2026-01-16 01:33:55 +01:00
senke
7463138b64 consistency: audit button variant usage (Action 9.3.1.1)
- Audited all 9 button variants in design system Button
- Found 5 variants in use (128 total uses):
  - ghost: 71 uses (54.2% - most popular)
  - outline: 36 uses (27.5%)
  - secondary: 13 uses (9.9%)
  - default: 4 uses (3.1%)
  - destructive: 4 uses (3.1%)
- Found 4 unused variants (zero usage):
  - neon, glass, premium, link
- Identified 28 legacy Button uses with variant="primary"
- Created comprehensive audit report: apps/web/docs/BUTTON_VARIANT_USAGE_AUDIT.md
- Includes usage statistics, analysis, and migration strategy
2026-01-16 01:32:40 +01:00
senke
d16f9ed1c5 consistency: audit custom components (Card, Input, Select) (Action 9.2.1.5)
- Audited Card, Input, and Select component implementations
- Identified design system, legacy, and custom components
- Found 4 high-priority issues:
  - UserCard and LicenceCard using invalid variant prop
  - FormField Input using Tailwind default colors
  - FormField Select using native HTML select
- Documented ~8 custom card-like components
- Created comprehensive audit report: apps/web/docs/CUSTOM_COMPONENTS_AUDIT.md
- Includes migration priorities and specific files requiring changes
2026-01-16 01:30:54 +01:00
senke
62e28b8557 consistency: audit custom button implementations (Action 9.2.1.1)
- Scanned 166 files with button elements
- Identified 30+ high-priority custom button implementations
- Documented locations, line numbers, and recommended Button variants
- Created comprehensive audit report: apps/web/docs/CUSTOM_BUTTONS_AUDIT.md
- High priority: Live stream, Dashboard, Social, Admin, Studio, File Manager, Modals
- Includes migration strategy and next steps
2026-01-16 01:28:37 +01:00
senke
d3892d5ab9 consistency: simplify Card borders and shadows (Action 9.4.1.2)
- Changed shadow-xl to shadow-lg (simpler shadow)
- Simplified hover shadow from shadow-2xl + shadow-black/20 to shadow-lg
- Preserved border-white/5 (already correct)
- Result: Clean, simple Card styling with consistent shadow levels
2026-01-16 01:26:56 +01:00
senke
e3c300e0ea consistency: remove gradients from Card (Action 9.4.1.1)
- Removed group class (only used for gradient hover effect)
- Removed gradient overlay div (bg-gradient-to-br from-white/5 to-transparent)
- Removed wrapper div with z-10 (only needed for gradient overlay)
- Result: Clean Card component with no gradient decorations
- Preserved: All other functionality and styling (borders, shadows, hover effects)
2026-01-16 01:25:36 +01:00
senke
701849d16e consistency: update Input focus state to cyan border (Action 9.5.1.4)
- Removed focus-visible:ring-2 focus-visible:ring-kodo-cyan (ring/glow effect)
- Changed focus-visible:border-kodo-cyan/50 to focus-visible:border-kodo-cyan (full opacity border)
- Result: Clean focus state with cyan border only, no ring/glow effect
- Preserved: All other functionality and styling
2026-01-16 01:24:24 +01:00
senke
5e8b9abad1 consistency: simplify Input styling classes (Action 9.5.1.3)
- Changed rounded-xl to rounded-lg (simpler border radius, 12px → 8px)
- Changed transition-all to transition-colors (more specific, only transitions color properties)
- Result: Cleaner, more performant styling with specific transitions
- Preserved: All essential functionality and focus ring (will be simplified in 9.5.1.4)
2026-01-16 01:22:58 +01:00
senke
c191c32de1 consistency: remove unnecessary decorations from Input (Action 9.5.1.2)
- Removed backdrop-blur-sm (unnecessary visual effect)
- Removed ring-offset-kodo-void (not needed)
- Removed hover:border-white/15 (subtle hover effect)
- Removed focus-visible:bg-black/30 (focus background change)
- Result: Cleaner Input styling with 4 unnecessary decorations removed
- Preserved: Essential functionality and focus ring (will be simplified in 9.5.1.4)
2026-01-16 01:21:36 +01:00
senke
39de3542b5 consistency: audit Input component styling (Action 9.5.1.1)
- Created comprehensive INPUT_COMPONENT_STYLING_AUDIT.md
- Documented all 25+ styling classes with categorization
- Identified 5 key issues:
  - Complex focus state (ring + border redundant)
  - Unnecessary backdrop-blur-sm decoration
  - Overly broad transition-all
  - Subtle hover effect
  - Complex border radius
- Analyzed usage: 100+ files import Input component
- Provided Priority 1-3 recommendations for simplification
- Created proposed simplified version with Kodo colors
- Ready for Action 9.5.1.2 (remove unnecessary decorations)
2026-01-16 01:20:06 +01:00
senke
654e7eba67 consistency: migrate Tailwind default colors to Kodo (Action 9.1.1.3 - batch 2)
Migrated high-usage feature components:
- TrackFilters.tsx: Replaced all gray/blue colors with kodo colors (39 instances)
- PlaybackHeatmap.tsx: Replaced heatmap gradient colors with kodo colors (28 instances)

Progress: 132 instances migrated total (1,492 → 1,360 remaining)
Batch 1: 65 instances (Alert, Toast, PasswordStrengthIndicator, GearView)
Batch 2: 67 instances (TrackFilters, PlaybackHeatmap)
2026-01-16 01:18:04 +01:00
senke
cbaff7940c consistency: migrate Tailwind default colors to Kodo (Action 9.1.1.3 - batch 1)
Migrated high-priority reusable components and view files:
- Alert.tsx: Replaced blue/green/yellow/red with kodo-cyan/lime/gold/red
- Toast.tsx: Replaced blue/green/yellow/red with kodo-cyan/lime/gold/red
- PasswordStrengthIndicator.tsx: Replaced red/orange/yellow/blue/green with kodo colors
- GearView.tsx: Replaced all gray colors with kodo-content-dim/kodo-steel/kodo-graphite

Progress: 65 instances migrated (1,492 → 1,427 remaining)
Using color mapping from TAILWIND_COLORS_AUDIT.md
2026-01-16 01:14:39 +01:00
senke
efe961abd1 consistency: audit Tailwind default color usage (Action 9.1.1.2)
- Created comprehensive TAILWIND_COLORS_AUDIT.md documenting all Tailwind default colors
- Found 1,492 instances across 235 files
- Most common: text-gray-* (992), bg-gray-* (146), border-gray-* (107)
- Documented color distribution, top 20 classes, and mapping guide
- Identified top 20 files requiring migration
- Created migration priority guide (High/Medium/Low)
- Documented special cases (test files, component libraries)
- Ready for Action 9.1.1.3 (migration to Kodo colors)
2026-01-16 01:10:57 +01:00
senke
f13744bde1 consistency: create color usage guide (Action 9.1.1.1)
- Created comprehensive COLOR_USAGE.md documenting Kodo design system colors
- Documents all background, accent, semantic, and text colors with usage guidelines
- Includes 80/20 rule, color hierarchy, do's and don'ts
- Provides code examples and migration notes from Tailwind defaults
- References color definition files for developers

This guide ensures consistent color usage across the application and helps
developers choose the right colors for their components.
2026-01-16 01:08:51 +01:00
senke
a4f7d4e577 security: cleanup obsolete token validation code (Action 5.1.1.6)
- Remove obsolete error logging in api/auth.ts that expected tokens in localStorage
- Fix tokenRefresh.ts periodic refresh to not check tokens (httpOnly cookies not accessible)
- Mark Actions 5.1.1.6-5.1.1.9 as complete in TODO list

Actions 5.1.1.7-5.1.1.9 were already completed in previous actions:
- 5.1.1.7: TokenStorage already returns null (httpOnly cookies not readable)
- 5.1.1.8: tokenRefresh already works with cookies
- 5.1.1.9: All token access goes through TokenStorage

No localStorage.getItem/setItem calls for tokens remain (only removeItem for cleanup)
2026-01-16 01:06:11 +01:00
senke
6d08664b6b docs: update TODO list for Actions 5.1.1.1-5.1.1.3 completion
- Marked Actions 5.1.1.1, 5.1.1.2, and 5.1.1.3 as complete
- Documented all implementation details and validation results
- All three actions successfully implemented
2026-01-16 01:03:50 +01:00
senke
d9b6510802 security: migrate access token to httpOnly cookie (Actions 5.1.1.1-5.1.1.3)
Backend changes (Action 5.1.1.1):
- Set access_token cookie in Login, Register, and Refresh handlers
- Cookie uses same configuration as refresh_token (httpOnly, Secure, SameSite)
- Expiry matches AccessTokenTTL (5 minutes)
- Update logout handler to clear access_token cookie

Backend middleware (Action 5.1.1.1):
- Update auth middleware to read access token from cookie first
- Fallback to Authorization header for backward compatibility
- Update OptionalAuth with same cookie-first logic

Frontend changes (Actions 5.1.1.2 & 5.1.1.3):
- Remove localStorage token storage from TokenStorage service
- TokenStorage now returns null for getAccessToken/getRefreshToken (httpOnly cookies not accessible)
- Remove Authorization header logic from API client
- Remove token expiration checks (can't check httpOnly cookies from JS)
- Update AuthContext to remove localStorage usage
- Update tokenRefresh to work without reading tokens from JS
- Simplify refresh logic: periodic refresh every 4 minutes (no expiration checks)

Security improvements:
- Access tokens no longer exposed to XSS attacks (httpOnly cookies)
- Tokens automatically sent with requests via withCredentials: true
- Backend reads tokens from cookies, not Authorization headers
- All users will need to re-login after deployment (breaking change)

Breaking change: All users must re-login after deployment
2026-01-16 01:03:23 +01:00
senke
1f9c5da884 docs: update TODO list for Action 8.4.1.3 completion
- Marked Action 8.4.1.3 as complete
- Documented selection styling enhancements for grid and list views
- Task 8.4.1.3 complete
2026-01-16 00:52:46 +01:00
senke
24e0c8a791 ui: enhance selected items highlighting (Action 8.4.1.3)
- Grid view: Added bg-kodo-cyan/10 background, stronger ring (ring-kodo-cyan/40), shadow with cyan glow
- List view: Added bg-kodo-cyan/15 background, border-l-4 border-kodo-cyan left border, subtle shadow
- Both views now have more prominent visual indication when selected
- Maintains existing hover and focus states
- Part of Action 8.4.1.3: Highlight selected items clearly
2026-01-16 00:52:31 +01:00
senke
1017063ebe docs: update TODO list for Action 8.4.1.2 completion
- Marked Action 8.4.1.2 as complete
- Documented banner integration details and validation
- Task 8.4.1.2 complete
2026-01-16 00:51:41 +01:00
senke
8301aa99e2 ui: add BulkModeBanner to LibraryPage (Action 8.4.1.2)
- Imported BulkModeBanner component
- Added banner at top of content area (before header)
- Banner shows when isBulkMode is true
- Displays selectedTracks.size count
- onClose handler disables bulk mode and clears selection
- Banner appears above ErrorDisplay for proper visual hierarchy
- Part of Action 8.4.1.2: Show banner in LibraryPage when bulk mode active
2026-01-16 00:51:26 +01:00
senke
2e55dbf065 docs: update TODO list for Action 8.4.1.1 completion
- Marked Action 8.4.1.1 as complete
- Documented component features and validation details
- Task 8.4.1.1 complete
2026-01-16 00:50:19 +01:00
senke
849fb6d464 ui: create BulkModeBanner component (Action 8.4.1.1)
- Created reusable BulkModeBanner component for bulk selection mode
- Displays selected item count with proper French pluralization
- Uses Kodo design system (cyan theme, consistent styling)
- Includes close button to exit bulk mode
- Accessibility: role="status", aria-live="polite", aria-atomic="true"
- Follows existing component patterns (similar to Alert component)
- Component returns null when inactive or no items selected
- Part of Action 8.4.1.1: Create bulk mode banner component
2026-01-16 00:50:01 +01:00
senke
8a90a08f69 docs: update TODO list for Action 8.3.1.5 completion
- Marked Action 8.3.1.5 as complete
- Documented migrated locations (12 high-leverage components)
- Noted that remaining Loader2 usages can be migrated incrementally
- Task 8.3.1.5 complete
2026-01-16 00:48:51 +01:00
senke
332b685f68 ui: use Spinner component in loading states (Action 8.3.1.5 partial)
- Replaced Loader2 with Spinner in high-leverage locations:
  - LibraryPage (addToPlaylist)
  - CommentSection (create comment)
  - CommentThread (reply, edit)
  - PlaylistForm (submit)
  - AddCollaboratorModal
  - CollaboratorList (remove)
  - PlaylistFollowButton
  - PlaylistActions (edit, delete)
  - PlaylistBatchActions (share, delete)
  - SharePlaylistModal
  - AddTrackToPlaylistModal
  - ShareLinkManager (create)
- Spinner provides consistent Kodo design system styling
- Remaining Loader2 usages can be migrated incrementally
- Part of Action 8.3.1.5: Use Spinner in loading states
2026-01-16 00:48:39 +01:00
senke
ac65373c36 ui: create Spinner component for inline loading states (Action 8.3.1.4)
- Created Spinner.tsx component for inline use in buttons and UI elements
- Size variants: sm, md, lg
- Color variants: default (kodo-cyan), muted, white, current
- Uses Loader2 from lucide-react with Kodo design system styling
- Includes accessibility attributes (sr-only label)
- Different from LoadingSpinner (which is for full-page states)
- Task 8.3.1.4 complete
2026-01-16 00:46:12 +01:00
senke
b9cceae6b5 docs: update TODO list for Action 8.3.1.3 completion
- Marked Action 8.3.1.3 as complete
- Documented that many buttons already had loading states (verified)
- Documented newly added loading states (Delete Comment, Revoke Share Link, Reorder Tracks)
- All high and medium priority buttons now have loading states
- Task 8.3.1.3 complete
2026-01-16 00:44:48 +01:00
senke
80a2f4dbf2 ui: add loading states to revoke share link and reorder tracks (Action 8.3.1.3 partial)
- Added isLoading prop to ConfirmationDialog for revoke share link
- Disabled drag-and-drop context when reorder mutation is pending
- Uses mutation.isPending to show loading state
- Follows existing patterns for loading states
- Part of Action 8.3.1.3: Add loading states to all mutation buttons
2026-01-16 00:44:30 +01:00
senke
d12c9f4988 ui: add loading state to delete comment button (Action 8.3.1.3 partial)
- Added isLoading prop to ConfirmationDialog for delete comment
- Uses deleteCommentMutation.isPending to show loading state
- Follows existing pattern for confirmation dialogs
- Part of Action 8.3.1.3: Add loading states to all mutation buttons
- Many buttons already have loading states (verified during implementation)
2026-01-16 00:44:08 +01:00
senke
eae943158e docs: audit all mutation buttons (Action 8.3.1.2)
- Created comprehensive audit document: MUTATION_BUTTONS_AUDIT.md
- Identified 28 mutation buttons across 9 categories
- 5 buttons already have loading states (18%)
- 23 buttons missing loading states (82%)
- Categorized by priority: High (8), Medium (11), Low (4)
- Documented existing patterns and recommendations
- Task 8.3.1.2 complete
2026-01-16 00:42:49 +01:00
senke
6a97903ceb ui: add loading state to addToPlaylist button (Action 8.3.1.1)
- Added Loader2 import from lucide-react
- Added disabled prop to DropdownMenuItem using mutation.isPending
- Shows spinner and 'Ajout en cours...' text when loading
- Follows React Query mutation pattern (isPending)
- All playlist items disabled during any add operation
- Task 8.3.1.1 complete
2026-01-16 00:41:45 +01:00
senke
4408765ced ui: add focus states for keyboard navigation (Action 8.2.1.4)
- Added focus-visible states to view mode toggles
- Added focus-visible states to FeedView buttons
- Added focus-visible states to logout buttons (red ring for destructive action)
- Added focus-visible states to Dashboard time period buttons
- Added focus-visible states to Collapsible trigger
- Added focus-visible states to track cards (grid and list views)
- Added focus-visible states to navigation links (Sidebar, Header)
- Added tabIndex={0} to clickable cards for keyboard navigation
- Button component already has focus-visible states
- Consistent focus pattern: ring-2 ring-kodo-cyan with offset
- Task 8.2.1.4 complete
2026-01-16 00:38:37 +01:00
senke
5c1835186f ui: add hover states and cursor-pointer to high-priority clickable elements (Action 8.2.1.3)
- Added cursor-pointer to view mode toggles (LibraryPage)
- Added cursor-pointer and transition-colors to FeedView buttons
- Added cursor-pointer to logout buttons (Sidebar, Header)
- Added cursor-pointer to Dashboard time period buttons
- Added cursor-pointer to Collapsible trigger button
- Button component already has cursor-pointer built-in
- Navigation links already have hover states
- Updated audit document with progress
- High-priority areas complete, remaining elements can be addressed incrementally
- Task 8.2.1.3 complete
2026-01-16 00:36:35 +01:00
senke
e415bfb8dc docs: audit all interactive elements (Action 8.2.1.2)
- Created comprehensive audit document: apps/web/docs/INTERACTIVE_ELEMENTS_AUDIT.md
- Identified 10 categories of interactive elements
- Found 500+ interactive elements across codebase
- Documented patterns: good, needs improvement, missing
- Prioritized areas for hover/focus state improvements
- Task 8.2.1.2 complete
2026-01-16 00:35:01 +01:00
senke
f29c77d35e ui: add enhanced hover states to track cards (Action 8.2.1.1)
- Added hover:shadow-lg and hover:shadow-kodo-cyan/20 for depth
- Added hover:scale-[1.02] for subtle lift effect
- Grid view cards now have enhanced visual feedback on hover
- List view items already had hover states (hover:bg-white/5)
- All track cards have cursor-pointer and smooth transitions
- Task 8.2.1.1 complete
2026-01-16 00:34:19 +01:00