WP-SOC-REELS-INGEST-01 — Reels mixed feed + YouTube ingest
Domain: D-SOCIAL · Surfaces: CON, API, ADM · Date: 2026-08-22
Audit (trước implement)
| Hạng mục | Hiện trạng |
|---|---|
| Screen | ReelsFeedScreen tab Reels · expo-av Video |
| Feed | GET /social/reels/feed · PostKind.REEL · take 40, không cursor |
| Storage | MinIO S3Service · ffmpeg-static (WP-MEDIA-STRIP-01) |
| Queue | Redis ioredis · BullMQ N/A |
| YouTube | không có |
Architecture
Invidious chỉ trên NestJS (INVIDIOUS_BASE_URL) cho search/related/trending. Worker tải qua /latest_version của instance → FFmpeg H.264/AAC/faststart MP4 (+ HLS optional) → MinIO reels/external/{id}/. Mobile chỉ nhận URL WELIFE (status=READY).
Commands
# api/.env
REELS_EXTERNAL_VIDEO_ENABLED=true
INVIDIOUS_ENABLED=true
INVIDIOUS_BASE_URL=https://your-selfhosted-invidious
INVIDIOUS_INGEST_ENABLED=true
cd api && npx prisma migrate deploy && npx prisma generate
npm run start:dev # worker ingest chạy in-process
Local verify (2026-08-22)
prisma generatePASSprisma migrate deployPASS (20260822140000_reels_external_ingest)nest buildPASSGET /health{ status: ok }GET /social/reels/feed?limit=5{ items: [], nextCursor: null }(chưa có reel READY)GET /social/reels/search?q=gym{ queued: 0 }vìINVIDIOUS_ENABLEDmặc định false
YouTube discovery vẫn cần OWNER set INVIDIOUS_BASE_URL (self-host).
Known limitations
- Bucket private: playback = MP4 presign (HLS nhiều segment khó ký từng file).
- Invidious down → feed WELIFE + READY local vẫn chạy.
- YouTube ingest vẫn phụ thuộc ToS/copyright — chỉ self-host instance, không hard-code public.
- Không recommendation cá nhân hóa (đúng AC).