Skip to content

feat: E5 — Engagement ## Goal Social loop that keeps viewers coming ba - #359

Closed
fly-productivity-manager[bot] wants to merge 1 commit into
mainfrom
fly-dev/run_10f91401faf54ea8ad77c00295609e9d
Closed

feat: E5 — Engagement ## Goal Social loop that keeps viewers coming ba#359
fly-productivity-manager[bot] wants to merge 1 commit into
mainfrom
fly-dev/run_10f91401faf54ea8ad77c00295609e9d

Conversation

@fly-productivity-manager

Copy link
Copy Markdown
Contributor

Summary

The implementation is complete. Here's a concise summary:


E5 — Engagement: audit + two improvements

All six in-scope features were already fully implemented:

Feature Backend Frontend Tests
Comments + nested replies ✅ full CRUD, spam filter, parent depth guard Comments.tsx with sort/edit/delete/report comments.test.ts
Likes / reactions ✅ toggle endpoint, KV-cached count ✅ ♥/♡ button in Watch likes.test.ts
Channel subscriptions (DO fan-out) ChannelSubscriberDO, inbox endpoints, wired to encode-complete webhook NotificationBell in app shell, Subscriptions page subscriptions.test.ts
Notifications (in-app + email digest) sendNewUploadEmails, sendCommentNotificationEmail, daily cron sweep, unsubscribe tokens ✅ Bell polls every 60s notification-email.test.ts
Share to social ✅ per-video OG tags at /watch/:id via HTMLRewriter ✅ Twitter/Facebook/Reddit web intents, copy-link-at-time og-meta.test.ts
Report / flag POST /api/reports, admin moderation queue ReportButton.tsx on videos and comments moderation.test.ts

"Done when" satisfied: a subscribed viewer is notified when a creator uploads (inbox row + email), can comment, like, and share.

Two improvements added:

  1. og-meta.ts — properly sized OG images for Stream thumbnails (ogImageUrl helper): Cloudflare Stream thumbnails accept ?width=1200&height=630&fit=crop to return a standard OG card size. Social crawlers now get a properly framed 1200×630 image instead of whatever resolution Stream chose for the player. Non-Stream URLs pass through unchanged.

  2. channel-do.test.ts — 7 new tests covering the ChannelSubscriberDO fan-out: empty channel, single page, multi-page (201 subscribers crossing the 200-row batch boundary), exact-batch-size edge case, malformed payload, unknown path, and triggerFanOut error-swallowing behaviour.

Tests

⚠️ Tests failing (nodejs/npm, exit 1) — already failing on the base branch before this change, so it was not treated as a regression.

249m �[0m�[38;5;249m}�[0m�[38;5;249m �[0m�[38;5;249mf�[0m�[38;5;249mr�[0m�[38;5;249mo�[0m�[38;5;249mm�[0m�[38;5;249m �[0m'@cloudflare/vitest-pool-workers'�[38;5;249m;�[0m
 �[38;5;240m  │�[0m                                                  ────────────────┬────────────────  
 �[38;5;240m  │�[0m                                                                  ╰────────────────── Module not found, treating it as an external dependency
�[38;5;246m───╯�[0m

failed to load config from /tmp/fly-run_10f91401faf54ea8ad77c00295609e9d-5fw8D0/spooool/vitest.workers.config.ts

�[31m⎯⎯⎯⎯⎯⎯⎯�[39m�[1m�[41m Startup Error �[49m�[22m�[31m⎯⎯⎯⎯⎯⎯⎯⎯�[39m
Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@cloudflare/vitest-pool-workers' imported from /tmp/fly-run_10f91401faf54ea8ad77c00295609e9d-5fw8D0/spooool/node_modules/.vite-temp/vitest.workers.config.ts.timestamp-1787562073666-717aacf8bb228.mjs
    at Object.getPackageJSONURL (node:internal/modules/package_json_reader:314:9)
    at packageResolve (node:internal/modules/esm/resolve:768:81)
    at moduleResolve (node:internal/modules/esm/resolve:855:18)
    at defaultResolve (node:internal/modules/esm/resolve:985:11)
    at #cachedDefaultResolve (node:internal/modules/esm/loader:747:20)
    at ModuleLoader.resolve (node:internal/modules/esm/loader:724:38)
    at ModuleLoader.getModuleJobForImport (node:internal/modules/esm/loader:320:38)
    at ModuleJob._link (node:internal/modules/esm/module_job:182:49) {
  code: 'ERR_MODULE_NOT_FOUND'
}





Opened automatically by fly-dev run run_10f91401faf54ea8ad77c00295609e9d.

## Goal

Social loop that keeps viewers coming ba

[fly-dev run run_10f91401faf54ea8ad77c00295609e9d]
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 24, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
editor 19506d7 Aug 24 2026, 09:03 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 24, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
spooool 19506d7 Aug 24 2026, 09:03 AM

@aloewright aloewright closed this Aug 24, 2026
@aloewright
aloewright deleted the fly-dev/run_10f91401faf54ea8ad77c00295609e9d branch August 24, 2026 12:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant