senke
a789019b8e
feat(social): connect SocialViewTrending to API
2026-02-20 18:34:21 +01:00
senke
b5fe6e8fd1
feat(release): v0.202 — Lots G, H, F, C, D
...
- Lot G: Recherche avancée (musical_key, tri pertinence, autocomplete, facettes, historique)
- Lot H: Analytics créateur (stats, charts, completion rate, export CSV/JSON)
- Lot F: Seller dashboard (GET /sell/stats, liste produits)
- Lot C: Player (crossfade, gapless preload, PiP)
- Lot D2: Autoplay (GET /tracks/recommendations, section À écouter ensuite)
Backend: GetRecommendations handler, route /tracks/recommendations
Frontend: PlayerQueue recommendations, fix TS errors (GlobalPlayer, AnalyticsViewKpiGrid, etc.)
Docs: FEATURE_STATUS, PROJECT_STATE, CHANGELOG, SCOPE_CONTROL
2026-02-20 18:16:17 +01:00
senke
32b4a48c81
feat(player): add PiP button when supported (C3)
2026-02-20 17:52:46 +01:00
senke
8071fd2b16
feat(player): add gapless playback via preload (C2)
2026-02-20 17:05:41 +01:00
senke
4fcc1d4049
feat(player): implement crossfade from settings (C1)
2026-02-20 17:04:54 +01:00
senke
ea29927d2a
feat(seller): add GET /sell/stats and connect dashboard (F1)
2026-02-20 17:02:13 +01:00
senke
b887110214
feat(analytics): add creator export CSV/JSON (H4)
2026-02-20 17:00:36 +01:00
senke
d9fee2684b
feat(analytics): add creator charts endpoint and UI (H2)
2026-02-20 16:59:25 +01:00
senke
9ca90e6096
feat(analytics): add creator stats endpoint and UI (H1)
2026-02-20 16:57:58 +01:00
senke
ccec85103a
feat(search): add search history in localStorage (G5)
2026-02-20 16:56:30 +01:00
senke
d16b6ca43f
feat(search): wire type facettes in SearchPage (G4)
2026-02-20 16:55:32 +01:00
senke
ef320888f6
feat(search): add autocomplete suggestions endpoint and UI (G3)
2026-02-20 16:54:17 +01:00
senke
7eb1e0d945
feat(search): add relevance sort option (G2)
2026-02-20 16:50:49 +01:00
senke
458e88472b
feat(search): add musical_key filter and wire tags filter (G1)
2026-02-20 16:50:30 +01:00
senke
002b8f2ec2
feat(tracks): add suggested tags endpoint and UI (E4)
...
- Migration 085: tracks.tags TEXT[]
- Track model: Tags pq.StringArray
- GET /tracks/suggested-tags?genre=X&bpm=Y (static suggestions by genre)
- UpdateTrack: support tags
- TrackMetadataEditModal: tags chips + suggestions dropdown
- TrackDetailPageInfo: display tags
- getSuggestedTags, UpdateTrackParams.tags
- MSW: suggested-tags handler, tags in mock track
2026-02-20 15:38:51 +01:00
senke
79f552212f
feat(tracks): add lyrics model and endpoints (E3)
...
- Migration 084: track_lyrics table
- TrackLyrics model, GetLyrics, CreateOrUpdateLyrics in TrackService
- GET /tracks/:id/lyrics, PUT /tracks/:id/lyrics (owner only)
- Frontend: TrackLyricsSection with show/hide toggle, Lyrics tab
- trackService: getLyrics, updateLyrics
- MSW: handlers for lyrics
2026-02-20 15:36:28 +01:00
senke
265f9fa86c
feat(tracks): add BPM field to model and CRUD (E1)
...
- Backend: BPM and MusicalKey in Track model, UpdateTrack handler
- track_search_service: enable BPM filter (min_bpm, max_bpm)
- Frontend: Track type, UpdateTrackParams, display in TrackDetailPageInfo
- TrackMetadataEditModal: BPM input, edit flow for track creator
- MSW: bpm, musical_key in mock track, correct response envelope
2026-02-20 15:34:00 +01:00
senke
efd09e0c11
feat(profile): add profile privacy toggle (B3)
...
- Backend: is_public in Profile, UpdateProfile; strip SocialLinks for private
- Settings: ProfileVisibilityCard toggle in Privacy tab
- UserProfilePage: show 'Profil privé' when viewing private profile
2026-02-20 15:10:02 +01:00
senke
f0aa74b3a5
feat(profile): add social links section on public profile (B2)
2026-02-20 15:06:20 +01:00
senke
ef00e165e9
feat(profile): add profile banner (B1)
2026-02-20 14:56:25 +01:00
senke
99f60ebbaa
feat(auth): enrich sessions page with history and revoke (A4)
2026-02-20 14:52:20 +01:00
senke
6a1686aad8
feat(auth): add OAuth Spotify provider (A1)
2026-02-20 14:48:08 +01:00
senke
134b8979c0
chore(v0.102): consolidate remaining changes — docs, frontend, backend
...
- docs: SCOPE_CONTROL, CONTRIBUTING, README, .github templates
- frontend: DeveloperDashboardView, Player components, MSW handlers, auth, reactQuerySync
- backend: playback_analytics, playlist_service, testutils, integration README
Excluded (artifacts): .auth, playwright-report, test-results, storybook_audit_detailed.json
2026-02-20 13:02:12 +01:00
senke
c20990d7df
feat(queue): migrate QueueView drag & drop to @dnd-kit (B3)
2026-02-20 13:00:57 +01:00
senke
4af1008200
docs: add CHANGELOG v0.102 release notes; test(e2e): add queue flow tests
2026-02-20 12:57:26 +01:00
senke
1b5f17f1c6
docs: update FEATURE_STATUS.md for v0.102 — gear, live, queue, developer operational
2026-02-20 12:56:55 +01:00
senke
ef016a07ed
docs(live): document Go Live limitation (A6)
2026-02-20 12:56:29 +01:00
senke
0cf68964a0
feat(player): Lot F - PlaybackSpeedControl, useMediaSession, waveform
...
- Add playbackSpeed to playerStore with setPlaybackSpeed action
- Add setPlaybackRate to AudioPlayerService
- Create PlaybackSpeedControl (0.5x–2x) and integrate in GlobalPlayer
- Create useMediaSession hook for OS controls (title, artwork, play/pause/next/prev)
- Add waveform preview in PlayerBarProgress (placeholder bars client-side)
- Update types, tests, and mocks
2026-02-20 00:40:53 +01:00
senke
118925da71
feat(social): Lot E - Like/Comment API + RoleBadge on profile
...
- Connect SocialViewFeedItem like to socialService.toggleLike(track.id, 'track')
- Connect SocialViewFeedItem comment to socialService.postComment (expandable form)
- Update socialService.postComment to use POST /social/comments (target_id, target_type, content)
- Add RoleBadge component and display on UserProfilePageHeader
- Fetch user roles via getUserRoles in useUserProfilePage
- Add MSW handlers for POST /social/like and POST /social/comments
2026-02-20 00:25:08 +01:00
senke
33e88c3e91
feat(playlists): Lot D - DuplicatePlaylistButton, Export, Share, Recommendations
...
- Add duplicatePlaylist() to playlistService (POST /playlists/:id/duplicate)
- Implement DuplicatePlaylistButton with navigation to new playlist on success
- Add DuplicatePlaylistButton and ExportPlaylistButton to PlaylistDetailPageActionsBar
- Add MSW handlers for duplicate and export endpoints
- SharePlaylistModal and PlaylistRecommendations already wired (flags enabled)
2026-02-20 00:22:42 +01:00
senke
870c899925
feat(developer): connect API keys to real backend (Lot C frontend)
...
- developerApi: listKeys, createKey, deleteKey
- developerService: use real API instead of localStorage
- DeveloperDashboardView: list keys, Create API Key button, revoke with confirmation
- CreateAPIKeyModal: scopes read/write/admin
- MSW handlers for GET/POST/DELETE developer/api-keys
2026-02-20 00:19:58 +01:00
senke
753322b8ed
feat(queue): sync playerStore with backend API, migrate QueueView to usePlayerStore
...
- Add useQueueSync hook: restore queue on login, sync add/remove/reorder/clear
- Extend queueApi.getQueue to return queueItemIds for backend sync
- Migrate QueueView from useAudio to usePlayerStore + usePlayer
- Add ConfirmationDialog for Clear Queue button
- Add MSW handlers for GET/PUT/POST/DELETE queue endpoints
- Wire useQueueSync in DashboardLayout
2026-02-20 00:13:33 +01:00
senke
d0690b2f76
feat(live): replace mock fallback with real API
2026-02-19 23:42:20 +01:00
senke
b934fd9e93
feat(gear): connect CRUD operations and add category filter
2026-02-19 23:41:46 +01:00
senke
2b7a01bf7d
fix(e2e): align local E2E setup with CI or document CI-only validation
2026-02-19 19:23:17 +01:00
senke
7aaaf9fef7
fix(e2e): align local E2E setup with CI or document CI-only validation
2026-02-19 19:10:15 +01:00
senke
58461a278a
chore(web): remove console.log in prod, address TODO/FIXME for v0.101
2026-02-19 19:01:42 +01:00
senke
aa4ff008d2
fix(storybook): resolve console/network errors for v0.101 audit
2026-02-19 17:26:16 +01:00
senke
df0eb9b0ad
fix(e2e): align CI Go version to 1.24 for v0.101
...
fix(web): resolve lint errors for v0.101
- eslint: add ignores (e2e, scripts, playwright-report, generated types)
- eslint: add browser globals, disable react-hooks in stories
- fix empty catch blocks (Cart, MarketplacePage, RolesPage, SettingsPage)
- fix PlayerExpanded: move useEffect before early return
- fix TrackHistory.test: rename type import to avoid no-redeclare
2026-02-19 16:27:10 +01:00
senke
c73effcf88
chore(docs): add v0.101 diagnostic baseline
...
- Add V0_101_DIAGNOSTIC_BASELINE.md with initial diagnostic results
- Fix eslint: remove storybook plugin dep, add dist_verification to ignores
- Fix .storybook/preview.tsx: remove unused React, use object shorthand
2026-02-19 16:08:05 +01:00
senke
9b8a4f83be
fix(frontend): resolve failing tests for v0.101
...
- setup: mock HTMLCanvasElement.getContext and HTMLMediaElement.pause for JSDOM
- bitrateService: accept multiple network error message patterns
- TrackDetailPage: use Object.defineProperty for navigator.clipboard
2026-02-19 12:07:02 +01:00
senke
a992d394bb
fix(chat): ensure WebSocket auth token from query or cookie
...
- Chat server: accept token from ?token= or access_token cookie (httpOnly)
- Frontend: append token to WS URL when available (TokenStorage)
2026-02-18 12:42:48 +01:00
senke
aa7980ab71
fix(streaming): ensure HLS audio chain works end-to-end
...
- HAProxy: route /hls to stream server
- Vite proxy: /ws, /stream, /hls for dev
- HLS_BASE_URL: empty when STREAM_URL relative (proxy)
- FEATURE_STATUS: HLS_STREAMING operational
2026-02-18 12:42:42 +01:00
senke
93c9f19b86
fix(storybook): resolve audit errors - usePlaylistSearch loop, MSW handlers, ignore patterns
...
- usePlaylistSearch: use useRef for toastError to avoid infinite loop in useEffect
- handlers-playlists: fix search response format (playlists/total/page/limit)
- handlers-playlists: fix list response (items -> playlists)
- handlers-playlists: add GET playlists/:id/analytics handler
- PlaylistSearch.stories: fix Empty story response format
- audit-storybook: add MSW, swagger, .mdx ignore patterns
- audit-storybook: cap errors per story (MAX_ERRORS_PER_STORY=100)
2026-02-17 22:22:39 +01:00
senke
1692a92d9b
fix(storybook): extend audit ignore patterns for auth, chat, logger
...
- Add IGNORED_CONSOLE_ERRORS: [ERROR]/[WARN], auth errors, WebSocket,
React Query, hooks, form validation, ResizeObserver
- Ignore errors from node_modules, chunk-, vendor (third-party libs)
- Ignore /api/v1/logs/ network failures in isAppRelevantFailure
2026-02-17 17:31:07 +01:00
senke
cecea02377
fix(storybook): reduce audit failures with ignored patterns and config
...
- Extend IGNORED_CONSOLE_ERRORS: Failed to fetch, Storybook index, Radix,
ResizeObserver, emoji-picker, date-fns
- Ignore errors from iframe.html and assets/*.js (Storybook internals)
- Add configurable STORYBOOK_PORT (default 6007)
- Increase POST_LOAD_WAIT_MS 600→1000 for MSW init
- Increase NAVIGATION_TIMEOUT_MS 30s→45s (configurable via STORYBOOK_NAV_TIMEOUT)
- Add MSW handler for images.unsplash.com
2026-02-17 17:29:28 +01:00
senke
bf2f09b4cb
docs: update Welcome.mdx and deprecate Kodo references in docs
...
- Welcome.mdx: Kodo → Sumi design tokens
- EMPTY_ERROR_PATTERNS: KodoEmptyState → EmptyState
- all_components/covered_components: remove KodoEmptyState (renamed to EmptyState)
- COLOR_USAGE.md: add deprecation notice, point to DESIGN_TOKENS
- COMPONENT_USAGE.md: add note to prefer Sumi tokens
2026-02-17 17:05:33 +01:00
senke
ceeab72459
refactor(ui): migrate arbitrary values to layout tokens
...
- AstralBackground: w-[60%] h-[60%] → w-3/5 h-3/5
- ChatInput/ChatMessage: h-[28rem]/h-[25rem] → h-96 max-h-layout-list
- ChatMessage: max-w-[80%] → max-w-4/5
2026-02-17 17:05:08 +01:00
senke
2116909be6
refactor(ui): replace gray colors with Sumi tokens
...
- placeholder-gray-500 → placeholder:text-muted-foreground (textarea, SharePostModal, SearchBar)
- text-gray-400 → text-muted-foreground (Card.stories, DashboardLayout.stories)
- TrackInfo: add data-testid for separator, update test selector
- bg-gray-900/bg-gray-100 → bg-background in player stories
2026-02-17 17:03:57 +01:00
senke
5ddef0ac70
refactor(ui): replace glass-hud with sumi-glass in PWAInstallBanner and CreateAPIKeyModal
2026-02-17 17:03:17 +01:00