jlightner
d4c595958f
Merge milestone/M008: Frontend polish & real-time features (M002)
2026-04-03 07:23:47 +00:00
jlightner
9f35d06e88
feat: Added useYtDlpStatus/useUpdateYtDlp hooks and yt-dlp card to Syst…
...
- "src/frontend/src/api/hooks/useSystem.ts"
- "src/frontend/src/pages/System.tsx"
GSD-Task: S06/T02
2026-04-03 07:23:39 +00:00
jlightner
c5820fe957
feat: Added YtDlpStatusResponse/YtDlpUpdateResponse types, YTDLP_LAST_U…
...
- "src/types/api.ts"
- "src/db/repositories/system-config-repository.ts"
- "src/server/routes/system.ts"
GSD-Task: S06/T01
2026-04-03 07:23:39 +00:00
jlightner
cc50ed25e9
perf: Expanded DownloadProgressContext with ScanStore to handle scan We…
...
- "src/frontend/src/contexts/DownloadProgressContext.tsx"
- "src/frontend/src/pages/ChannelDetail.tsx"
GSD-Task: S05/T02
2026-04-03 07:23:39 +00:00
jlightner
cdd1128632
feat: Added typed scan event pipeline — EventBus emits scan:started/ite…
...
- "src/services/event-bus.ts"
- "src/services/scheduler.ts"
- "src/index.ts"
- "src/server/routes/websocket.ts"
GSD-Task: S05/T01
2026-04-03 07:23:39 +00:00
jlightner
1711389d9c
feat: Added groupedContent useMemo and renderGroupedContent to unify pl…
...
- "src/frontend/src/pages/ChannelDetail.tsx"
GSD-Task: S04/T02
2026-04-03 07:23:39 +00:00
jlightner
79b2a3a566
feat: Add SortGroupBar with Date/Title/Duration/Size/Status sort button…
...
- "src/frontend/src/components/SortGroupBar.tsx"
- "src/frontend/src/pages/ChannelDetail.tsx"
GSD-Task: S04/T01
2026-04-03 07:23:39 +00:00
jlightner
9fc15a3ed0
feat: Wired ContentListItem into ChannelDetail with three-button segmen…
...
- "src/frontend/src/pages/ChannelDetail.tsx"
GSD-Task: S03/T02
2026-04-03 07:23:39 +00:00
jlightner
592c8b1317
feat: Created ContentListItem component with horizontal flexbox layout:…
...
- "src/frontend/src/components/ContentListItem.tsx"
GSD-Task: S03/T01
2026-04-03 07:23:39 +00:00
jlightner
ab7ab3634b
feat: Reordered Add Channel modal fields to URL → Monitoring Mode → For…
...
- "src/frontend/src/components/AddChannelModal.tsx"
- "src/frontend/src/api/hooks/useChannels.ts"
GSD-Task: S02/T01
2026-04-03 07:23:39 +00:00
jlightner
6a5402ce8d
feat: Added banner_url, description, subscriber_count columns with Driz…
...
- "src/db/schema/channels.ts"
- "drizzle/0010_special_ghost_rider.sql"
- "src/types/index.ts"
- "src/sources/youtube.ts"
- "src/sources/soundcloud.ts"
- "src/db/repositories/channel-repository.ts"
- "src/server/routes/channel.ts"
- "src/__tests__/sources.test.ts"
GSD-Task: S01/T01
2026-04-03 07:23:39 +00:00
jlightner
1dd1e992c6
ci: use host-accessible instance URL
CI / test (push) Successful in 17s
2026-04-03 06:23:24 +00:00
jlightner
b4c1efc4a6
ci: test Docker DNS resolution
CI / test (push) Failing after 35s
2026-04-03 06:21:55 +00:00
jlightner
d54924d2ef
ci: retry CI run
CI / test (push) Failing after 37s
2026-04-03 06:19:10 +00:00
jlightner
8a7e5bce8c
ci: add Forgejo Actions workflow for test automation
...
CI / test (push) Failing after 9m19s
Runs TypeScript type checking and vitest on push/PR to master.
2026-04-03 06:06:32 +00:00
jlightner
0bf63fed9c
ci: add Forgejo Actions workflow for test automation
...
Runs TypeScript type checking and vitest on push/PR to master.
2026-04-03 06:06:20 +00:00
jlightner
ecbfd5afa7
feat: Applied glassmorphism styling (backdrop-filter blur, semi-transpa…
...
- "src/frontend/src/pages/ChannelDetail.tsx"
GSD-Task: S03/T03
2026-04-03 04:42:22 +00:00
jlightner
cca396a7e8
feat: Refactored channel header into grouped control sections (Monitori…
...
- "src/frontend/src/pages/ChannelDetail.tsx"
GSD-Task: S03/T02
2026-04-03 04:40:36 +00:00
jlightner
49ac76c379
feat: Created Toast notification system and migrated Channels.tsx + Cha…
...
- "src/frontend/src/components/Toast.tsx"
- "src/frontend/src/App.tsx"
- "src/frontend/src/pages/Channels.tsx"
- "src/frontend/src/pages/ChannelDetail.tsx"
- "src/frontend/src/styles/global.css"
GSD-Task: S02/T04
2026-04-03 04:27:36 +00:00
jlightner
538f9ec69b
feat: Replaced all 28 JS hover handlers in Settings.tsx with CSS utilit…
...
- "src/frontend/src/pages/Settings.tsx"
- "src/frontend/src/styles/global.css"
- "src/frontend/src/components/Skeleton.tsx"
GSD-Task: S02/T03
2026-04-03 04:21:08 +00:00
jlightner
3355326526
feat: Added CSS button utilities (.btn, .btn-icon, .btn-ghost, .btn-dan…
...
- "src/frontend/src/styles/global.css"
- "src/frontend/src/components/Skeleton.tsx"
- "src/frontend/src/components/Modal.tsx"
- "src/frontend/src/components/Sidebar.tsx"
- "src/frontend/src/pages/Queue.tsx"
- "src/frontend/src/pages/Library.tsx"
- "src/frontend/src/pages/Activity.tsx"
- "src/frontend/src/pages/System.tsx"
GSD-Task: S02/T02
2026-04-03 04:15:46 +00:00
jlightner
a0906f3cdb
feat(S03/T01): content card view with grid layout and view toggle
...
- Created ContentCard component: 16:9 thumbnail with duration badge,
title, status badge, relative time, monitor/download/external actions,
overlay checkbox for selection (visible on hover + when selected)
- Added card/table view toggle button in Content header (Grid3X3/List icons)
- View preference persisted to localStorage (tubearr-content-view)
- Card grid uses CSS grid with auto-fill minmax(240px, 1fr)
- Card hover shows border-light highlight, selected shows accent border
- Download progress overlay on card thumbnail for active downloads
- Added .card-checkbox CSS rule for hover-reveal behavior
- Both views share pagination, search, filter, bulk selection
2026-04-03 03:08:56 +00:00
jlightner
91b0b74dcb
chore: add media/ to .gitignore and remove from tracking
2026-04-03 02:39:19 +00:00
jlightner
76e6b9727e
fix: update download test expectations for format fallback chains
...
Tests expected old single-format strings, updated to match the new
fallback chain format: preferred → next best → any.
2026-04-03 02:35:37 +00:00
jlightner
ac8905ca38
feat(S02): modern UI design system — theme overhaul, skeletons, animations
...
- Redesigned theme.css: deeper darks (#0f1117), glassmorphism tokens,
accent glow, softer borders (rgba), spring/slow transitions, new radii
- Added Inter + JetBrains Mono web fonts for premium typography
- Enhanced global.css: focus rings with box-shadow, skeleton shimmer animation,
glass-card class, fade-in page transitions, slide-up animations, badge-glow pulse
- Created Skeleton component library: Skeleton, SkeletonRow, SkeletonTable,
SkeletonChannelHeader, SkeletonChannelsList
- Replaced spinner-text loading states with skeleton placeholders
(Channels page, ChannelDetail header and content table)
- Updated all card border-radius from radius-lg to radius-xl across all pages
- Added responsive breakpoint stub for mobile (768px)
2026-04-03 02:33:49 +00:00
jlightner
c057b6a286
feat(S01+S04): server-side pagination, search/filter, download engine hardening
...
S01 — Server-Side Pagination:
- Added getChannelContentPaginated() to content repository with search, filter, sort
- Channel content API now supports ?page, ?pageSize, ?search, ?status, ?contentType, ?sortBy, ?sortDirection
- Backwards-compatible: no params returns all items (legacy mode)
- Frontend useChannelContentPaginated hook with keepPreviousData
- ChannelDetail page: search bar, status/type filter dropdowns, pagination controls
- Sorting delegated to server (removed client-side sortedContent)
- Item count shown in Content header (e.g. '121 items')
S04 — Download Engine Hardening:
- yt-dlp auto-update on production startup (native -U with pip fallback)
- Error classification: rate_limit, format_unavailable, geo_blocked, age_restricted, private, network
- Format fallback chains: preferred res → best under res → single best → any
- Improved parseFinalPath: explicit non-path prefix detection, extension validation
- Error category included in download:failed events
- classifyYtDlpError() exported from yt-dlp module for downstream use
2026-04-03 02:29:49 +00:00
John Lightner
cbdbed4664
MAESTRO: Check off remaining WEBSOCKET-PROGRESS-01 tasks (all previously completed)
...
Verified and checked off 4 tasks that were already implemented in prior commits:
- Channel Detail page download progress integration
- Sidebar WebSocket connection status indicator
- Backend progress event emission verification
- Query invalidation on WebSocket events
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 01:42:28 -05:00
John Lightner
e63209a47f
MAESTRO: Check off Queue page DownloadProgressBar integration task (already complete)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 01:41:42 -05:00
John Lightner
d2a51cf5c9
MAESTRO: Check off DownloadProgressProvider wiring task (already complete)
...
Verified DownloadProgressProvider is already wrapping the app inside
QueryClientProvider in main.tsx (lines 25-29) from commit 0541a5f .
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 01:40:43 -05:00
John Lightner
c8923f0142
MAESTRO: Add activity, channels, and library query invalidation on WebSocket download events
...
When a download completes or fails, the UI now immediately refreshes the
Activity page, channel content counts, and Library page in addition to
the existing content and queue invalidations.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 00:44:18 -05:00
John Lightner
57626f5f01
MAESTRO: Verify backend WebSocket download progress event wiring is complete
...
Confirmed all event bus wiring between DownloadService, WebSocket route,
and server builder is correctly connected. No changes needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 00:42:34 -05:00
John Lightner
f5dbf05870
MAESTRO: Add WebSocket connection status indicator to Sidebar
...
Show a colored dot (green=connected, grey=disconnected) at the bottom
of the sidebar with a text label that hides when the sidebar is collapsed.
Uses the existing useDownloadProgressConnection hook.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 00:39:57 -05:00
John Lightner
6bbd4818c6
MAESTRO: Mark ChannelDetail download progress integration as complete (already wired)
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 00:38:26 -05:00
John Lightner
84d8c3e635
MAESTRO: Integrate DownloadProgressBar into Queue page for active downloads
...
Added QueueItemProgress wrapper component that shows a live progress bar
(percent, speed, ETA) for items with status 'downloading' when WebSocket
progress data is available, falling back to the existing StatusBadge otherwise.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 00:36:48 -05:00
John Lightner
d2e3c903ca
MAESTRO: Mark DownloadProgressProvider wiring task as complete
...
Provider was already correctly wired in main.tsx from commit 0541a5f ,
wrapping the entire app inside QueryClientProvider.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-01 00:29:19 -05:00
John Lightner
0541a5f1d1
WIP: in-progress WebSocket download progress & event bus
...
Snapshot of active development by separate Claude instance.
Includes: event bus, progress parser, WebSocket route,
download progress bar component, SSE contexts/hooks.
Not tested or validated — commit for migration to dev01.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 11:34:26 -05:00
John Lightner
dbe163bdbb
chore(M007/S01): auto-commit after research-slice
2026-03-24 23:04:09 -05:00
John Lightner
436c19fca1
feat(S04/T01): Moved sidebar collapse toggle from nav bottom into brand…
...
- src/frontend/src/components/Sidebar.tsx
2026-03-24 21:02:35 -05:00
John Lightner
bd06792645
feat(S03/T02): Add useCollectMonitored/useCollectAllMonitored hooks and…
...
- src/frontend/src/api/hooks/useContent.ts
- src/frontend/src/pages/ChannelDetail.tsx
- src/frontend/src/pages/Channels.tsx
2026-03-24 20:52:17 -05:00
John Lightner
e6faa05d1c
test(S03/T01): Add getCollectibleItems repository query and collect/col…
...
- src/db/repositories/content-repository.ts
- src/server/routes/collect.ts
- src/server/index.ts
- src/__tests__/collect-api.test.ts
2026-03-24 20:48:20 -05:00
John Lightner
0ef34b1d21
feat(S02/T02): Wired monitoringMode through channel creation (route sch…
...
- src/server/routes/channel.ts
- src/frontend/src/api/hooks/useChannels.ts
- src/frontend/src/components/AddChannelModal.tsx
- src/__tests__/channel.test.ts
2026-03-24 20:32:13 -05:00
John Lightner
6715c9b6fe
test(S02/T01): Added default_monitoring_mode column to platform_setti…
...
- drizzle/0008_add_default_monitoring_mode.sql
- src/db/schema/platform-settings.ts
- src/db/repositories/platform-settings-repository.ts
- src/types/index.ts
- src/server/routes/platform-settings.ts
- src/frontend/src/components/PlatformSettingsForm.tsx
- src/frontend/src/api/hooks/usePlatformSettings.ts
- src/__tests__/platform-settings-api.test.ts
2026-03-24 20:27:41 -05:00
John Lightner
8ce85cb2cd
chore: gitignore config/ and remove tracked db files
2026-03-24 20:20:51 -05:00
John Lightner
4606dce553
feat: Tubearr — full project state through M006/S01
...
Migrated git root from W:/programming/Projects/ to W:/programming/Projects/Tubearr/.
Previous history preserved in Tubearr-full-backup.bundle at parent directory.
Completed milestones: M001 through M005
Active: M006/S02 (Add Channel UX)
2026-03-24 20:20:10 -05:00