Update ROADMAP: lawn reference learnings, A7.3 in progress, infrastructure status
- Fix lawn reference URL to https://github.com/pingdotgg/lawn - Document lawn architecture analysis and adopted/not-adopted patterns - Mark A7.3 (Timestamped Video Annotations) as in progress - Update infrastructure built section with video annotation layer details - Mark Annotation schema fields as complete in data model status Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4e654b6fed
commit
dd7db58c2f
1 changed files with 19 additions and 4 deletions
23
ROADMAP.md
23
ROADMAP.md
|
|
@ -3,7 +3,7 @@
|
|||
> Single source of truth for project status and remaining work.
|
||||
> Previous planning documents (IMPLEMENTATION_PLAN.md, UPGRADE_PLAN.md) are archived in `docs/archive/`.
|
||||
|
||||
*Last updated: 2026-03-16*
|
||||
*Last updated: 2026-03-18*
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -134,6 +134,12 @@ The review tool lives at its own dedicated page (`/projects/[projectId]/delivera
|
|||
- "Review" button on stage cards in deliverable detail page
|
||||
- Review sessions: session builder, presenter mode, summary grid, decision recording
|
||||
- `ReviewSession` + `ReviewSessionItem` models in schema
|
||||
- Video upload with HLS streaming (A7.1) + custom video player (A7.2)
|
||||
- Video annotation layer with auto-pause, timestamped annotations, timeline markers (A7.3 in progress)
|
||||
- `Annotation.timestampSeconds` + `Annotation.frameThumbnailUrl` fields in schema
|
||||
- Feedback item cards show timestamp badges for video annotations
|
||||
- Revisions auto-poll when video status is "processing"
|
||||
- `next.config.ts` configured with `proxyClientMaxBodySize: "500mb"` for video uploads
|
||||
|
||||
**New dependency for all stages:** `sharp` (server-side PNG alpha compositing + image processing)
|
||||
|
||||
|
|
@ -421,7 +427,16 @@ enum ReviewDecision { APPROVED CHANGES_REQUESTED REJECTED }
|
|||
|
||||
Extend the review tool to support video. Artists submit MP4 renders; reviewers scrub to a frame, pause, and draw spatial annotations (reusing the existing annotation tools) tied to that timestamp. Optional reference video for side-by-side comparison. Self-hosted transcoding via FFmpeg — no external services.
|
||||
|
||||
**Reference implementation:** [lawn-video-reviewer](https://github.com/) — React video player with HLS streaming, timestamped comments, and timeline markers. Key patterns to adapt: HLS-first streaming for instant playback and smooth seeking, custom video player with frame-accurate seeking, comment markers on the scrub timeline, and keyboard-driven playback controls.
|
||||
**Reference implementation:** [lawn (pingdotgg/lawn)](https://github.com/pingdotgg/lawn) — React + Convex + Mux video reviewer with HLS streaming, timestamped text comments, and timeline markers.
|
||||
|
||||
**Learnings from Lawn (reviewed 2026-03-18):**
|
||||
- Lawn is a **time-only** comment system — no spatial annotations or drawing on video frames. Our drawing-on-frame annotation feature (SVG overlay + annotation tools) goes beyond Lawn's scope.
|
||||
- **Timeline marker grouping**: Lawn deduplicates markers within 1% of the timeline to prevent visual clutter. Markers are green (resolved) / orange (unresolved) with an active ring when playback is within 1.5s.
|
||||
- **Player architecture**: Custom player on raw `<video>` + HLS.js (no third-party player SDK). Uses `forwardRef` + `useImperativeHandle` to expose `seekTo(time)` for sidebar→player communication. All playback state is local `useState`.
|
||||
- **Dual playback sources**: Shows raw original immediately while transcoded video processes, with a quality switcher. User is never blocked waiting for encoding.
|
||||
- **Controls auto-hide**: Controls fade after 2.5s during playback, re-shown on mouse move.
|
||||
- **Key patterns adopted**: HLS-first streaming, timeline markers with dedup + color coding, comment-to-player seek via timestamp badges, graceful fallback when transcoding unavailable.
|
||||
- **Key patterns NOT adopted**: Mux (we self-host with FFmpeg), Convex real-time DB (we use Prisma + TanStack Query), Clerk auth (we use Auth.js).
|
||||
|
||||
**New dependency:** `ffmpeg` (added to Docker image for HLS transcoding, frame extraction, and metadata parsing)
|
||||
|
||||
|
|
@ -553,7 +568,7 @@ A custom video player built for frame-accurate review, embedded in the existing
|
|||
|
||||
---
|
||||
|
||||
##### A7.3 — Timestamped Video Annotations `[ ]`
|
||||
##### A7.3 — Timestamped Video Annotations `[~]`
|
||||
|
||||
The core differentiator: pause a video at any frame, draw spatial annotations on that frame using the existing annotation tools, and have those annotations tied to both a timestamp and image coordinates.
|
||||
|
||||
|
|
@ -1226,7 +1241,7 @@ Note: `Dockerfile` and `docker-compose.yml` already exist in the repo root — r
|
|||
|
||||
| Model | Feature |
|
||||
|---|---|
|
||||
| Annotation (+ `timestampSeconds`, `frameThumbnailUrl` fields) | A3, A7.3 |
|
||||
| ~~Annotation (+ `timestampSeconds`, `frameThumbnailUrl` fields)~~ | ~~A3, A7.3~~ ✅ |
|
||||
| FeedbackItem | A5 |
|
||||
| ~~ReviewSession, ReviewSessionItem~~ | ~~A6~~ ✅ |
|
||||
| ApprovalChain, ApprovalStep, ApprovalRecord | D2 |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue