Repository navigation
feat: bring desktop Studio UI and local playback to web - #2312
richiemcilroy wants to merge 665 commits into
Conversation
|
hey @greptileai, please re-review the PR |
Comments Outside DiffThese findings could not be posted inline.
|
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
… keep scrub frames drawing while media loads
…hich scrubbing reuses
|
hey @greptileai, please re-review the PR |
…s camera catches up
|
hey @greptileai, please re-review the PR |
|
hey @greptileai, please re-review the PR |
…ton and keep the comments rail always open
|
hey @greptileai, please re-review the PR |
| image = await Effect.gen(function* () { | ||
| const maybeVideo = yield* Effect.flatMap(Videos, (videos) => | ||
| videos.getByIdForViewing(videoId), | ||
| ); | ||
| if (Option.isNone(maybeVideo)) return null; | ||
| const [video] = maybeVideo.value; | ||
| const stored = readLinkPreview( | ||
| Option.getOrNull(video.metadata), | ||
| video.id, | ||
| )?.image; | ||
| if (!stored) return null; | ||
| // Paused while the owner doesn't have Cap Pro. | ||
| if (!(yield* Effect.promise(() => ownerServesLinkPreview(video.ownerId)))) | ||
| return null; | ||
|
|
||
| const [bucket] = yield* S3Buckets.getBucketAccess(Option.none()); | ||
| const url = yield* bucket.getInternalSignedObjectUrl(stored.key, { | ||
| expiresIn: 60, | ||
| }); | ||
| return { url, key: stored.key, contentType: stored.contentType }; | ||
| }).pipe(provideOptionalAuth, runPromise); |
There was a problem hiding this comment.
Route bypasses required API pattern
This new API route defines an ad-hoc Next.js handler and calls runPromise inside it. The repository requires routes under apps/web/app/api/* to use the HttpApi class/group/endpoint pattern and export a handler through apiToHandler(ApiLive). That requirement must be satisfied before merging.
Context Used: CLAUDE.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/app/api/video/link-preview/route.ts
Line: 41-61
Comment:
**Route bypasses required API pattern**
This new API route defines an ad-hoc Next.js handler and calls `runPromise` inside it. The repository requires routes under `apps/web/app/api/*` to use the `HttpApi` class/group/endpoint pattern and export a handler through `apiToHandler(ApiLive)`. That requirement must be satisfied before merging.
**Context Used:** CLAUDE.md ([source](https://github.com/capsoftware/cap/blob/main/CLAUDE.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| /** | ||
| * Sets a Cap's link preview. Form fields: `videoId`, `title`, `description`, | ||
| * an optional `image` file to replace the image, and `removeImage=1` to drop | ||
| * it. Blank text fields fall back to the defaults. | ||
| */ |
There was a problem hiding this comment.
Comment repeats action behavior
This new JSDoc restates the save action's form fields and blank-field behavior. The repository requires comments to preserve non-obvious context rather than narrate adjacent code; the new image-card and preview-state descriptions follow the same pattern. This requirement must be satisfied before merging.
Context Used: AGENTS.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/actions/videos/link-preview.ts
Line: 94-98
Comment:
**Comment repeats action behavior**
This new JSDoc restates the save action's form fields and blank-field behavior. The repository requires comments to preserve non-obvious context rather than narrate adjacent code; the new image-card and preview-state descriptions follow the same pattern. This requirement must be satisfied before merging.
**Context Used:** AGENTS.md ([source](https://github.com/capsoftware/cap/blob/main/AGENTS.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
|
hey @greptileai, please re-review the PR |
…es when access changes
… the recovery test
Brings the desktop Studio editor to the web as a pilot, with a browser recorder built around it. Recordings keep screen, camera, microphone and system audio as separate tracks, open straight into the editor, and can be styled, extended with more clips, exported locally or saved back to the same share link.
Studio is gated by
CAP_WEB_EDITOR_STUDIO_ENABLED=enabledand the pilot account (isWebStudioEnabledForEmail). Other accounts keep the existing editor. No database migration.Recorder
Opening the editor
<video>(which downloads a whole fragmented MP4), the waveform streams the mic once and is cached, and decoded frames go straight to the renderer. Sources up to 4K decode with WebCodecs.Editing
Save, export and import
Rendering new recordings
Validation
Known gaps
The PR does not appear safe to merge while the previously reported private-image caching and concurrent image-deletion defects remain unresolved.
Findings
Fix with agent prompt
Summary
The latest changes connect the link-preview editor to the share page and adjust its mobile layout.
Reviews (268) · Last reviewed commit: "feat(web): open the link preview dialog ..."