chore: initialize backlog with completed tasks and testing follow-ups
TASK-1 through TASK-6: completed work (project setup, deployment, domain, R2 bucket, rSpace footer, UFW port). TASK-7 through TASK-10: testing tasks (OBS streaming, archive pipeline, FFmpeg streaming, video library). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e9efc991eb
commit
f8ab3916eb
|
|
@ -0,0 +1,16 @@
|
||||||
|
project_name: "rTube Online"
|
||||||
|
default_status: "To Do"
|
||||||
|
statuses: ["To Do", "In Progress", "Done"]
|
||||||
|
labels: []
|
||||||
|
milestones: []
|
||||||
|
date_format: yyyy-mm-dd
|
||||||
|
max_column_width: 20
|
||||||
|
default_editor: "nvim"
|
||||||
|
auto_open_browser: true
|
||||||
|
default_port: 6420
|
||||||
|
remote_operations: true
|
||||||
|
auto_commit: false
|
||||||
|
bypass_git_hooks: false
|
||||||
|
check_active_branches: true
|
||||||
|
active_branch_days: 30
|
||||||
|
task_prefix: "task"
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
id: TASK-1
|
||||||
|
title: Set up rtube-online Next.js project
|
||||||
|
status: Done
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:11'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: high
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Create Next.js 14 landing page with r*stack pattern: hero, how-it-works, features, ecosystem footer. Video library demo page ported from video-player Flask app. Live streaming viewer with HLS.js. API routes for R2 video listing and proxying with range requests.
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
id: TASK-10
|
||||||
|
title: Test video library with uploaded content
|
||||||
|
status: To Do
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:12'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: medium
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Test the video library page with manually uploaded content:
|
||||||
|
1. Upload a test video directly to R2: rclone copy test.mp4 r2:rtube-videos/
|
||||||
|
2. Visit rtube.online/demo
|
||||||
|
3. Verify the video appears in the sidebar list
|
||||||
|
4. Click to play — verify video playback with seeking (range requests)
|
||||||
|
5. Test search/filter functionality
|
||||||
|
6. Test download and copy link buttons
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
<!-- AC:BEGIN -->
|
||||||
|
- [ ] #1 Uploaded video appears in /api/videos response
|
||||||
|
- [ ] #2 Video plays in the demo page player with seeking support
|
||||||
|
- [ ] #3 Download button works
|
||||||
|
- [ ] #4 Copy link button copies correct URL
|
||||||
|
<!-- AC:END -->
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
id: TASK-2
|
||||||
|
title: Deploy rtube-online to Netcup
|
||||||
|
status: Done
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:11'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: high
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Docker Compose with 3 services: rtube (Next.js), nginx-rtmp (RTMP ingest + HLS), archive-worker (stream→R2). Security hardened (cap_drop ALL, no-new-privileges, read_only). Traefik labels for rtube.online. Deployed at /opt/apps/rtube-online/ on Netcup.
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
id: TASK-3
|
||||||
|
title: Onboard rtube.online domain
|
||||||
|
status: Done
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:11'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: high
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Purchased on Porkbun, nameservers pointed to Cloudflare (stan/tessa). Zone ID: ce8c3c5abe7aa7791841b87457a259bf. CNAME records for @ and www pointing to Cloudflare tunnel. Tunnel config updated via API to route rtube.online and www.rtube.online to Traefik.
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
id: TASK-4
|
||||||
|
title: Create rtube-videos R2 bucket and configure credentials
|
||||||
|
status: Done
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:11'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: high
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Created rtube-videos R2 bucket in Cloudflare (EU region). Generated scoped R2 API token (Object Read & Write). Configured .env at /opt/apps/rtube-online/.env with R2_ENDPOINT, R2_BUCKET, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY. Configured rclone r2 remote on Netcup for archive worker. Endpoint: https://0e7b3338d5278ed1b148e6456b940913.eu.r2.cloudflarestorage.com
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
id: TASK-5
|
||||||
|
title: Update rSpace.online ecosystem footer
|
||||||
|
status: Done
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:11'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: medium
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Added rCal (rcal.jeffemmett.com) and rTube (rtube.online) links to the r* ecosystem footer in /home/jeffe/Github/rSpace-website/components/footer.tsx. Also stripped Vercel remnants from README and package.json. Committed and pushed to GitHub (auto-mirrors to Gitea).
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
id: TASK-6
|
||||||
|
title: Open UFW port 1936 for RTMP ingest
|
||||||
|
status: Done
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:12'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: medium
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Opened TCP port 1936 on Netcup UFW firewall for RTMP ingest. nginx-rtmp maps host 1936 to container 1935. OBS streams to rtmp://rtube.online:1936/live.
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
---
|
||||||
|
id: TASK-7
|
||||||
|
title: Test OBS → rTube live streaming
|
||||||
|
status: To Do
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:12'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: high
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
End-to-end test of RTMP streaming workflow:
|
||||||
|
1. Open OBS Studio, set Service to Custom
|
||||||
|
2. Server: rtmp://rtube.online:1936/live
|
||||||
|
3. Stream Key: test-stream
|
||||||
|
4. Start streaming from OBS
|
||||||
|
5. Open rtube.online/live in browser, enter key "test-stream"
|
||||||
|
6. Verify HLS playback works with low latency
|
||||||
|
7. Verify LIVE indicator shows on the page
|
||||||
|
8. Stop stream and verify clean disconnect
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
<!-- AC:BEGIN -->
|
||||||
|
- [ ] #1 OBS connects to rtmp://rtube.online:1936/live without error
|
||||||
|
- [ ] #2 HLS player at /live loads and plays the stream
|
||||||
|
- [ ] #3 Stream playback has acceptable latency (<10s)
|
||||||
|
- [ ] #4 Stopping stream shows appropriate error/ended message in viewer
|
||||||
|
<!-- AC:END -->
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
---
|
||||||
|
id: TASK-8
|
||||||
|
title: Test stream auto-archive to R2
|
||||||
|
status: To Do
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:12'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: high
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Verify the archive worker pipeline works end-to-end:
|
||||||
|
1. Stream via OBS or FFmpeg to rtmp://rtube.online:1936/live/test-archive
|
||||||
|
2. Stream for at least 30 seconds, then stop
|
||||||
|
3. Check archive-worker logs: docker logs rtube-archive
|
||||||
|
4. Verify FLV→MP4 conversion completed
|
||||||
|
5. Verify MP4 uploaded to r2:rtube-videos/streams/
|
||||||
|
6. Verify local FLV and MP4 cleaned up from /recordings volume
|
||||||
|
7. Check rtube.online/demo — archived video should appear in the library
|
||||||
|
8. Play the archived video from the demo page
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
<!-- AC:BEGIN -->
|
||||||
|
- [ ] #1 Archive worker receives on_publish_done callback from nginx-rtmp
|
||||||
|
- [ ] #2 FLV recording is converted to MP4 via ffmpeg
|
||||||
|
- [ ] #3 MP4 is uploaded to rtube-videos R2 bucket under streams/ prefix
|
||||||
|
- [ ] #4 Archived video appears in /api/videos listing
|
||||||
|
- [ ] #5 Video plays back correctly from /demo page
|
||||||
|
<!-- AC:END -->
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
---
|
||||||
|
id: TASK-9
|
||||||
|
title: Test FFmpeg → rTube streaming
|
||||||
|
status: To Do
|
||||||
|
assignee: []
|
||||||
|
created_date: '2026-02-15 21:12'
|
||||||
|
labels: []
|
||||||
|
dependencies: []
|
||||||
|
priority: medium
|
||||||
|
---
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!-- SECTION:DESCRIPTION:BEGIN -->
|
||||||
|
Test RTMP ingest using FFmpeg (alternative to OBS):
|
||||||
|
1. From any machine with ffmpeg:
|
||||||
|
ffmpeg -i input.mp4 -c:v libx264 -preset veryfast -c:a aac -f flv rtmp://rtube.online:1936/live/ffmpeg-test
|
||||||
|
2. Verify stream appears in nginx-rtmp stats: curl http://rtube-rtmp:8080/stat
|
||||||
|
3. Watch from rtube.online/live with key "ffmpeg-test"
|
||||||
|
4. Verify playback works
|
||||||
|
<!-- SECTION:DESCRIPTION:END -->
|
||||||
|
|
||||||
|
## Acceptance Criteria
|
||||||
|
<!-- AC:BEGIN -->
|
||||||
|
- [ ] #1 FFmpeg successfully connects and streams to RTMP endpoint
|
||||||
|
- [ ] #2 Stream is viewable via HLS at /live page
|
||||||
|
<!-- AC:END -->
|
||||||
Loading…
Reference in New Issue