Commit graph

519 commits

Author SHA1 Message Date
senke
ad4e2b5a8a scalability: replace direct playlist API calls with playlistsApi service
- Replaced imports in UserProfilePage.tsx (listPlaylists → playlistsApi.list)
- Replaced imports in PlaylistDetailPage.tsx (getCollaborators → playlistsApi.getCollaborators)
- Replaced imports in CreatePlaylistDialog.tsx (createPlaylist → playlistsApi.create)
- Replaced imports in PlaylistList.tsx (searchPlaylists → playlistsApi.search)
- Replaced imports in CollaboratorManagement.tsx (getCollaborators → playlistsApi.getCollaborators)
- Replaced imports in PlaylistSearch.tsx (searchPlaylists → playlistsApi.search)
- Replaced imports in unifiedSearchService.ts (searchPlaylists → playlistsApi.search)
- Replaced imports in GlobalSearchBar.tsx (searchPlaylists → playlistsApi.search)
- Fixed type imports in services/api/playlists.ts (types from types.ts, not playlistService.ts)
- All function calls updated to use playlistsApi methods
- Test files and hooks still use direct imports (acceptable - tests can use implementation details, hooks will be updated in Action 6.1.1.10)
- No TypeScript errors related to playlistsApi
- Action 6.1.1.7 complete
2026-01-15 20:38:09 +01:00
senke
79886eacd4 scalability: replace direct user API calls with usersApi service
- Replaced imports in UserProfilePage.tsx (getProfileByUsername → usersApi.getProfileByUsername)
- Replaced imports in SettingsPage.tsx (getSettings, updateSettings → usersApi.getSettings, usersApi.updateSettings)
- Replaced imports in ProfileForm.tsx (calculateProfileCompletion → usersApi.calculateProfileCompletion)
- Replaced dynamic imports in avatar-upload.tsx (uploadAvatar, deleteAvatar → usersApi.uploadAvatar, usersApi.deleteAvatar)
- All function calls updated to use usersApi methods
- Test files still use direct imports (acceptable - tests can use implementation details)
- No TypeScript errors related to usersApi
- Action 6.1.1.6 complete
2026-01-15 20:34:58 +01:00
senke
21d5346c45 security: integrate useFormValidation into all RegisterForm and LoginForm components
- Integrated useFormValidation into features/auth/components/RegisterForm.tsx
- Integrated useFormValidation into features/auth/components/LoginForm.tsx
- Integrated useFormValidation into components/forms/RegisterForm.tsx
- Integrated useFormValidation into components/forms/LoginForm.tsx
- All forms now use backend pre-validation with debouncing (300ms)
- Backend validation errors displayed alongside client-side errors
- Note: Other forms require backend validation types to be added first
- Action 5.2.1.4 complete
2026-01-15 20:13:34 +01:00
senke
a13c4f8b27 security: add rate limit indicator to header
- Added RateLimitIndicator component to Header
- Placed after NotificationMenu for visibility
- Component automatically shows/hides based on rate limit state
- No TypeScript errors
- Action 5.4.1.3 complete
2026-01-15 19:58:02 +01:00
senke
1df6c04f02 security: create rate limit indicator component
- Created RateLimitIndicator component to display rate limit status
- Shows when user is rate limited or when remaining < 20% of limit
- Displays remaining requests (e.g., "50/100 requests")
- Shows countdown timer until reset (formatted as "5m 30s" or "1h 15m")
- Uses AlertTriangle and Clock icons from lucide-react
- Color-coded: red for critical (rate limited), gold for warning (< 20% remaining)
- Updates timer every second using useEffect
- Returns null when no rate limit data or not limited
- Follows existing component patterns (similar to OfflineIndicator)
- Action 5.4.1.2 complete
2026-01-15 19:56:32 +01:00
senke
60dea49cf2 security: add copy request ID button to ErrorDisplay
- Added "Copy Request ID" button that copies request ID to clipboard
- Button appears for server errors when request_id is available
- Uses modern Clipboard API with fallback to execCommand
- Shows success toast when copied
- Added alongside existing "Report Issue" button
- Fixed TypeScript error in isServerError calculation
- Action 5.3.1.2 complete
2026-01-15 19:52:48 +01:00
senke
96389a7640 state-ownership: add optimistic updates to remaining mutations
- Added optimistic updates to notification mutations:
  - markAsReadMutation: Optimistically marks notification as read
  - markAllAsReadMutation: Optimistically marks all notifications as read
  - Updated in both NotificationsPage and NotificationMenu
- Added optimistic updates to share link mutations:
  - createShareMutation: Optimistically adds share link to local state
  - revokeShareMutation: Optimistically removes share link from local state
- Added optimistic updates to chat mutations:
  - leaveRoomMutation: Optimistically removes conversation from list
  - deleteRoomMutation: Optimistically removes conversation from list
- Added optimistic update to reorder mutation:
  - useReorderPlaylistTracks: Optimistically reorders tracks in playlist
- All mutations include:
  - onMutate: Cancel queries, snapshot previous state, apply optimistic update
  - onError: Rollback to previous state
  - onSuccess: Invalidate queries for consistency
- Action 4.4.1.5 complete (18 mutations with optimistic updates)
2026-01-15 19:48:47 +01:00
senke
1ed6e7f07b state-ownership: delete unused optimisticStoreUpdates.ts file
- Deleted apps/web/src/utils/optimisticStoreUpdates.ts (unused file)
- File was unused - no imports found in codebase
- Mutations already use React Query's onMutate pattern
- No TypeScript errors after deletion
- Actions 4.4.1.2 and 4.4.1.3 complete
2026-01-15 19:26:53 +01:00
senke
a52cafe520 data-flow: integrate offline queue UI with OfflineIndicator
- Added state to manage queue manager dialog visibility
- Added 'View Queue' button in offline mode banner (when queueSize > 0)
- Added 'View Queue' button in processing mode banner (when queueSize > 0)
- Button opens OfflineQueueManager dialog when clicked
- Button styled appropriately for each banner variant
- Users can now view and manage queued requests directly from the indicator
- Action 2.5.1.5 complete
2026-01-15 18:02:40 +01:00
senke
a140b2f067 data-flow: add UI for offline queue management
- Created OfflineQueueManager component to display queued requests
- Shows request details: method, URL, timestamp, priority, retry count
- Allows removing individual requests
- Allows clearing entire queue
- Auto-updates queue every second while dialog is open
- Priority badges with color coding
- Empty state when no requests queued
- Uses Dialog component for modal display
- Action 2.5.1.4 complete
2026-01-15 18:01:22 +01:00
senke
4cc73b0d12 api-contracts: replace ApiError interface with Zod-inferred type
- Replace manual ApiError interface with Zod-inferred type from apiSchemas
- Update all imports (15+ files) to use ApiError from @/schemas/apiSchemas
- Remove ApiError interface from types/api.ts
- Update ApiResponse to import ApiError from schemas
- All TypeScript checks pass for ApiError-related code
2026-01-15 17:03:35 +01:00
senke
e4711d684b state-ownership: replace all useAuthStore().user with useUser() hook
- Migrated all hooks: useAuth, useChat, useLogin
- Migrated all components: Header, ProfileForm, FollowButton, LikeButton, PlaylistFollowButton, ChatMessage, ChatMessages, CommentThread, CommentSection, PlaylistList, ChatSidebar, SettingsPage, DashboardPage
- Updated storeSelectors.ts useAuthUser() to use React Query
- All production code now uses useUser() hook instead of Zustand store
- Action 4.1.1.3 and 4.1.1.4 complete
2026-01-14 01:45:42 +01:00
senke
39f7967e1e incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
senke
9088a2659e error-propagation: enhance error boundary logging for monitoring 2026-01-11 17:33:03 +01:00
senke
e585869f61 error-propagation: update ErrorBoundary to use ErrorDisplay component 2026-01-11 17:32:25 +01:00
senke
a54f57f648 error-propagation: integrate issue reporting with ErrorDisplay 2026-01-11 17:29:11 +01:00
senke
8a77a5c65d error-propagation: show offline indicator on network errors 2026-01-11 17:16:49 +01:00
senke
3e1de23027 error-propagation: create error display strategy document 2026-01-11 17:01:27 +01:00
senke
b28a96efaf error-propagation: implement ErrorDisplay component with all variants and features 2026-01-11 16:58:54 +01:00
senke
59c994349d error-handling: design ErrorDisplay component API
- Completed Action 3.1.1.1: Designed ErrorDisplay component API
- Created ERROR_DISPLAY_COMPONENT_API.md with comprehensive API specification
- Defined props: error, onRetry, onDismiss, showDetails, context, variant, severity, size, actions
- Specified error type normalization (Error, ApiError, string, Axios error)
- Documented variants: inline, banner, modal, card
- Provided usage examples and integration points
- Defined accessibility requirements (ARIA labels, keyboard navigation)
- Ready for implementation (Action 3.1.1.2)
2026-01-11 16:53:42 +01:00
senke
2fce619940 api-contracts: install openapi-generator-cli and create type generation script
- Completed Action 1.1.2.1: Installed @openapitools/openapi-generator-cli
- Completed Action 1.1.2.2: Created generate-types.sh script
- Added swagger annotations to cmd/modern-server/main.go
- Regenerated swagger.yaml with proper info section
- Successfully generated TypeScript types to src/types/generated/

The script generates types from veza-backend-api/openapi.yaml using
typescript-axios generator and creates barrel exports.
2026-01-11 16:30:43 +01:00
senke
b5c597c48e feat(ui): implement premium design system foundation
- Added core UI components (Button, Input, Card) inspired by Shadcn/UI
- Implemented AstralBackground with canvas particles
- Refactored Sidebar and Header with Glassmorphism styles
- Added CSS variables for 'Kodo' design theme in index.css
2026-01-11 03:19:02 +01:00
senke
9fdee67dab fix: Settings page - corrected import path
Changed LazySettings from:
  @/features/settings/pages/SettingsPage (broken - needs backend)
To:
  @/pages/SettingsPage (working - standalone)

Settings page now loads without errors!
2026-01-11 03:08:20 +01:00
senke
18d8ea1fbe fix: Corrected ThemeSwitcher and improved visual design
- Fixed corrupted ThemeSwitcher.tsx (was all on one line)
- Enhanced theme cards with gradient backgrounds
- Added hover animations and transitions
- Improved visual hierarchy
- Added active theme indicator with glow effect
- Better spacing and typography
2026-01-11 02:37:48 +01:00
senke
0eca0729b5 feat: Visual masterpiece - true light mode & premium UI
🎨 **True Light/Dark Mode**
- Implemented proper light mode with inverted color scheme
- Smooth theme transitions (0.3s ease)
- Light mode colors: white backgrounds, dark text, vibrant accents
- System theme detection with proper class application

🌈 **Enhanced Theme System**
- 4 color themes work in both light and dark modes
- Cyber (cyan/magenta), Ocean (blue/teal), Forest (green/lime), Sunset (orange/purple)
- Theme-specific glassmorphism effects
- Proper contrast in light mode

 **Premium Animations**
- Float, glow-pulse, slide-in, scale-in, rotate-in animations
- Smooth page transitions
- Hover effects with depth (lift, glow, scale)
- Micro-interactions on all interactive elements

🎯 **Visual Polish**
- Enhanced glassmorphism for light/dark modes
- Custom scrollbar with theme colors
- Beautiful text selection
- Focus indicators for accessibility
- Premium utility classes

🔧 **Technical Improvements**
- Updated UIStore to properly apply light/dark classes
- Added data-theme attribute for CSS targeting
- Smooth scroll behavior
- Optimized transitions

The app is now a visual masterpiece with perfect light/dark mode support!
2026-01-11 02:32:21 +01:00
senke
7452bd637a stabilisation commit A 2026-01-07 19:39:21 +01:00
senke
0eacac84b1 chore: resolve property mismatches and type conflicts for snake_case alignment 2026-01-07 11:15:48 +01:00
senke
59d9f6b9c9 chore: remove production logs in components 2026-01-07 10:31:02 +01:00
senke
50bc8444de feat: add layout, navigation, and utility components
Phase 3: Layout & Navigation
- Created header.css with animated hexagonal logo
- Gradient navigation links with hover effects
- Responsive mobile menu with toggle animation
- Full mobile/tablet support

Global Effects:
- Created global-effects.css with texture overlay (graffiti wall)
- Scanline effect (gaming CRT)
- Custom scrollbar with gradient
- Focus styles and selection colors
- Page layout, container, section utilities
- Grid system (2, 3, 4 columns + auto-fit)
- Flex utilities and spacing helpers

Additional Components:
- Created Badge component (8 variants: default, cyber, neon, nature, gaming, success, warning, error)
- Created Tag component with closable option
- Created Avatar component (4 variants, 6 sizes, status indicators)
- Created AvatarGroup for stacked avatars
- All components fully typed with TypeScript

Imported all new CSS files in main.tsx
2026-01-04 01:44:23 +01:00
senke
fced92c1d3 feat: add Card component with fusion design system
- Created card.css with 6 variants:
  * Default (Dark cyber with hover glow)
  * Manga (Speed lines with clip-path)
  * Neon (Glowing borders and gradients)
  * Nature (Organic botanical style)
  * Elevated (Floating with shadows)
  * Glass (Glassmorphism with backdrop blur)
- Added Card subcomponents: CardHeader, CardTitle, CardBody, CardFooter
- Implemented spacing modifiers (compact, normal, spacious)
- Added interactive, borderless, and flat modifiers
- Full dark mode support
- Smooth hover animations and transitions
2026-01-04 01:44:23 +01:00
senke
2c10110c3f feat: enhance Button component with fusion design system
- Created button.css with 9 variants:
  * Primary (Neon cyber with clip-path)
  * Secondary (Outline with gradient fill)
  * Gaming (XP/Achievement style)
  * Terminal (Matrix/Hacker green)
  * Nature (Organic botanical)
  * Graffiti (Spray paint effect)
  * Ghost (Minimal)
  * Outline (Clean)
  * Destructive (Error/Delete)
- Added 4 size variants (sm, md, lg, xl)
- Added icon button support
- Updated Button.tsx to use new design system classes
- All variants include hover effects, animations, and accessibility
2026-01-04 01:44:23 +01:00
senke
9f83b3f9e1 [T0-006] test(backend): Amélioration couverture tests Go - Scripts et tests RBAC
- Scripts créés pour exécuter tests par groupes/packages (évite crashes RAM)
- Tests complets pour handlers RBAC (16 tests, tous passent)
- Interface RBACServiceInterface créée pour permettre mock dans tests
- Couverture actuelle: 29.8% (objectif: 80%)

Files:
- veza-backend-api/scripts/test_coverage_by_groups.sh (créé)
- veza-backend-api/scripts/test_coverage_one_by_one.sh (créé)
- veza-backend-api/internal/api/handlers/rbac_handlers.go (modifié)
- veza-backend-api/internal/api/handlers/rbac_handlers_test.go (créé)
- VEZA_ROADMAP.json (mis à jour)

Hours: 16 estimated, 4 actual (travail en cours)
2026-01-04 01:44:21 +01:00
senke
f576deff56 [T0-003] fix(frontend): Corriger erreurs TypeScript/React
- Variables non utilisées préfixées avec _
- Badge variants corrigés (outline -> default/secondary)
- Types ApiError corrigés (rate_limit supprimé)
- Logger errors corrigés (LogContext au lieu de Error)
- Types PaginatedResponse corrigés (items au lieu de data)
- Types génériques complexes corrigés (stateCleanup, undoRedo)
- Fichiers .example.ts exclus du typecheck
- Status undefined vérifié dans client.ts

Résultats:
- npm run build  (réussit)
- npm run typecheck  (0 erreurs)
- npm run lint ⚠️ (1521 erreurs restantes - style/variables non utilisées)

Files: 35 fichiers modifiés
Hours: 6 estimated, 6 actual
2026-01-04 01:44:20 +01:00
senke
1a0d2bb7c9 [T0-002] fix(rust): Corriger erreurs compilation Rust
- Conflit SQLx résolu (alignement sur version 0.7)
- build.rs configurés pour protoc dans chat/stream servers
- API Prometheus migrée vers HistogramOpts
- Traits Display/Debug corrigés (String au lieu de &dyn Display)
- API TOTP corrigée (totp-rs 5.4 avec Secret::Encoded)
- Layers tracing-subscriber corrigés (types conditionnels)
- VezaError/VezaResult exportés dans lib.rs
- TransactionProvider simplifié (retour void au lieu de Box<dyn>)
- VezaConfig contraint Serialize pour to_json()

Files: veza-common/Cargo.toml, veza-common/src/*.rs, veza-chat-server/Cargo.toml, veza-chat-server/build.rs, veza-stream-server/Cargo.toml, veza-stream-server/build.rs, VEZA_ROADMAP.json
Hours: 8 estimated, 3 actual
2026-01-04 01:44:20 +01:00
senke
0bd5079eb2 [FIX] PROD-010: Corriger ENUM PostgreSQL dans modèle User - Tests E2E passent
- Ajout de type:user_role dans le tag GORM du champ Role
- Amélioration de la détection d'erreurs ENUM dans le service Register
- L'endpoint /auth/register retourne maintenant 201 OK avec tokens
- Score production: 52/70 → 58/70
- PROD-010 marqué comme fixed (P0 blocker résolu)
2026-01-04 01:44:19 +01:00
senke
bc42755e58 [FIX] PROD-007: Corriger erreurs TypeScript - ajouter override modifiers 2026-01-04 01:44:18 +01:00
senke
7b85cb2e57 [LOGGING] Fix #20: Intégration Sentry pour error tracking frontend - Capture automatique, enrichissement contexte, intégration logger 2026-01-04 01:44:16 +01:00
senke
9d0bd8a343 [FIX] Frontend: Ajouter composants Dialog manquants pour WebhooksPage
- Ajout DialogContent, DialogDescription, DialogTitle, DialogTrigger
- Support onOpenChange pour compatibilité Radix UI
- Import React ajouté
- Corrige erreurs de compilation dans WebhooksPage
2026-01-04 01:44:15 +01:00
senke
24319874a2 [INT-V2-003] Update documentation with id: string
- Replace id: number with id: string in player/README.md
- Replace id: number with id: string in Table.test.tsx
- Update test data to use string IDs
- Aligns with UUID standard (id: string everywhere)
2025-12-26 09:54:51 +01:00
senke
563eb264b6 [INT-AUTH-002] Remove duplicate auth store - migrate to features/auth/store/authStore.ts 2025-12-26 09:11:46 +01:00
senke
5edc0f39f8 [FE-TYPE-013] fe-type: Add type safety for components 2025-12-25 15:00:35 +01:00
senke
8b83ae67e8 [FE-COMP-024] fe-comp: Add tooltips and help text 2025-12-25 12:25:39 +01:00
senke
1a11bea3c7 [FE-COMP-022] fe-comp: Add keyboard shortcuts 2025-12-25 12:21:17 +01:00
senke
66258d3bd7 [FE-COMP-019] fe-comp: Add accessibility (a11y) improvements 2025-12-25 12:11:08 +01:00
senke
59b7abb457 [FE-COMP-018] fe-comp: Add responsive design for mobile 2025-12-25 12:09:20 +01:00
senke
5b50054a19 [FE-COMP-014] fix: Remove unused X import 2025-12-25 11:57:19 +01:00
senke
1b52d2f81c [FE-COMP-014] fe-comp: Add notification center component 2025-12-25 11:57:01 +01:00
senke
8707d6def2 [FE-COMP-013] fix: Remove unused useQuery import 2025-12-25 11:54:39 +01:00
senke
d0dc19dac7 [FE-COMP-013] fe-comp: Add share link generation UI 2025-12-25 11:54:09 +01:00
senke
fc8bf8daa4 [FE-COMP-009] fe-comp: Add avatar upload component 2025-12-25 11:44:36 +01:00
senke
f21df0f528 [FE-COMP-008] fe-comp: Add search bar component 2025-12-25 11:41:20 +01:00
senke
f4d923bcda [FE-COMP-007] fix: Remove unused import in FilterBar 2025-12-25 11:39:09 +01:00
senke
9fc22bef5f [FE-COMP-007] fe-comp: Add filter and sort UI components 2025-12-25 11:38:41 +01:00
senke
972e50818f [FE-COMP-006] fe-comp: Add pagination component to all list views 2025-12-25 11:36:48 +01:00
senke
71d8f28751 [FE-PAGE-017] fe-page: Add Admin dashboard page 2025-12-25 11:29:27 +01:00
senke
b4ca1330f2 [FE-PAGE-016] fe-page: Add Webhooks management page 2025-12-25 11:27:17 +01:00
senke
fd01047305 [FE-PAGE-015] fe-page: Add Analytics page 2025-12-25 11:25:06 +01:00
senke
0d125d97e3 [FE-COMP-004] fe-comp: Add confirmation dialogs for destructive actions
- Created reusable ConfirmationDialog component for destructive actions
- Replaced native confirm() dialogs with ConfirmationDialog in ChatSidebar (leave room, delete room)
- Replaced native confirm() dialogs with ConfirmationDialog in RolesPage (delete role)
- Replaced Dialog with ConfirmationDialog in PlaylistActions (delete playlist)
- Replaced window.confirm() with ConfirmationDialog in SessionsPage (revoke session, revoke all sessions)
- All destructive actions now use consistent confirmation dialogs
- Confirmation dialogs include proper messaging, loading states, and variant support
- Improved UX with better visual feedback and clearer action descriptions
2025-12-24 14:38:55 +01:00
senke
a893e51911 [FE-COMP-003] fe-comp: Add empty states to all list views
- Created reusable EmptyState component with icon, title, description, and action support
- Improved empty state in PlaylistList with better messaging and icons
- Improved empty states in UserProfilePage for tracks and playlists tabs
- Added contextual messages based on whether viewing own profile or others
- Added helpful descriptions and icons to all empty states
- Empty states now provide clear guidance on what users can do next
- All list views now have consistent and helpful empty state messaging
2025-12-24 14:33:20 +01:00
senke
883e2cf4e2 [FE-COMP-001] fe-comp: Add loading states to all async operations
- Created ButtonLoading component for consistent loading button pattern
- Created comprehensive loading states pattern guide
- Documented best practices for loading states in async operations
- Identified and documented existing loading state implementations
- Provided patterns for form submissions, data fetching, mutations, and skeleton loaders
- Created checklist for implementing loading states
- Documented examples from existing codebase

Most components already have loading states implemented. Pattern guide ensures consistency for future implementations.
2025-12-24 13:25:10 +01:00
senke
8e83007cf7 [FE-PAGE-014] fe-page: Add Notifications page
- Created dedicated Notifications page with full notification management
- Added notification service with API integration (get, mark as read, mark all as read)
- Added filtering by status (all/unread/read) and type (message/track/mention/system/etc)
- Added mark as read functionality for individual notifications
- Added mark all as read functionality
- Added notification type icons and labels
- Added notification timestamps with relative time formatting
- Added notification links support for navigation
- Added empty states for no notifications
- Added loading and error states
- Integrated with backend notification APIs
- Added route /notifications to router
- Added lazy loading for NotificationsPage component
- Added visual distinction for unread notifications (badge, background)
- Added notification type badges
2025-12-24 13:22:31 +01:00
senke
6e03122578 [FE-PAGE-013] fe-page: Add Search page
- Created dedicated Search page with unified search interface
- Added search functionality for tracks, playlists, and users
- Implemented tabs for filtering results by type (All/Tracks/Playlists/Users)
- Added search query debouncing for performance
- Added URL query parameter synchronization (q, type)
- Added pagination for each result type
- Added empty states for no query and no results
- Added loading states for all search operations
- Added error handling for search failures
- Integrated with existing search APIs (tracks, playlists, users)
- Added search service for user search API
- Added route /search to router
- Added lazy loading for SearchPage component
- Added result previews in All tab (6 items per type)
- Added View All buttons to navigate to specific tabs
2025-12-24 13:19:54 +01:00
senke
a3d7f3a3cc fix(MVP-015): Standardize remember_me field name to snake_case 2025-12-22 23:27:51 +01:00
senke
4d8c019abf fix(MVP-006): Standardize environment variable names (VITE_API_BASE_URL → VITE_API_URL) 2025-12-22 22:56:37 +01:00
senke
6d036133ca batch 1 2025-12-22 22:00:50 +01:00
senke
a2b8d1dc47 fix(frontend): stabilize architecture (router, lazy loading, build, auth) 2025-12-17 09:15:45 -05:00
senke
ae1c9c2795 stabilizing apps/web: FIRST BATCH 2025-12-17 08:07:35 -05:00
senke
d33c351ac6 refonte: backend-api go first; phase 1 2025-12-12 21:34:34 -05:00
okinrev
f88d4740f3 BASE: completing the initial repo state 2025-12-03 22:56:50 +01:00