Resume Where You Left Off
Offer returning viewers the chance to continue a video from where they stopped.
What it adds
Per-viewer playback position tracking with a resume prompt and a start-over option on return.
What your agent is told to do
5
What your agent is told to do
5-
1
Record the playback position against the viewer and the video, using the app's existing per-user preference or profile storage rather than a new parallel store. Fall back to device-local storage for signed-out visitors.
-
2
Offer the resume rather than performing it. Show where they stopped and let them continue or start from the beginning, with a clear default and a few seconds to choose.
-
3
Write progress on a throttle and on the meaningful moments: pause, seek, tab hidden, and page unload. Continuous writes during playback will hammer the server for no benefit.
-
4
Clear the stored position when the video finishes, so a rewatch starts at the beginning instead of at the credits.
-
5
Do not treat a position as a completion record. If the app reports watch completion for courses or analytics, keep that separate; a viewer who scrubs to the end has not watched the video.
Edge cases it handles
8
Edge cases it handles
8- A position inside the first few seconds is not worth resuming, and a position inside the last few seconds should be treated as finished. Ignore both rather than prompting someone to resume at four seconds in.
- The same viewer on a phone and a laptop will produce two positions. Decide the reconciliation rule, prefer the most recently written one, and make sure a stale write from a device that was offline cannot overwrite a newer position.
- Once a video has been watched to the end, the saved position must be cleared, or every rewatch opens on a resume prompt for the final frame.
- Throttle progress writes so a playing video does not issue a request per second. Batch them, and coalesce anything queued while the connection is down.
- Never force the resume point. Some viewers deliberately restart, and a player that silently jumps them forward with no way back reads as a bug.
- If the video is replaced or re-encoded and its duration changes, discard positions recorded against the old version rather than seeking to a timestamp that no longer means anything.
- A signed-out visitor who later signs in should have their local position carried across once, not silently discarded and not allowed to overwrite a newer signed-in position.
- Saved positions are viewing history and need a retention rule and a way for the viewer to clear them.
Definition of done
9
Definition of done
9- Returning viewers are offered a resume with a visible start-over option.
- Positions near the very start or very end are not offered as resume points.
- Finishing a video clears its stored position.
- Progress writes are throttled and also fire on pause, seek, and unload.
- Positions from multiple devices reconcile to the most recent write without stale overwrites.
- A replaced or re-encoded video discards positions from the previous version.
- Viewers can clear their saved positions, and a retention rule exists.
- The feature matches the existing design system.
- No existing functionality is broken.
Related features
Hover Video Preview
Hover Video Preview
Hovering a video card plays a short silent clip so people see what it is before clicking.
What it does
A silent, short-loop preview that plays inside a video card on deliberate hover and returns to the poster on exit.
How it works
- 1 Generate a short, low-resolution, silent preview clip during video processing and store it alongside the poster frame. Do not play the full source file behind the card.
- 2 Require a deliberate hover before doing anything. Wait several hundred milliseconds after the pointer settles, then load, so a cursor crossing a grid does not fire a dozen requests.
- 3 Give touch devices an explicit preview control on the card, since hover does not exist there. A long-press or a small preview button is fine; silently doing nothing on mobile is not.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/hover-video-preview
Audio Waveform Scrubber
Audio Waveform Scrubber
Show the shape of a track so listeners can see the quiet and loud parts and click to them.
What it does
A waveform rendered from precomputed amplitude data, doubling as the seek control on the audio player.
How it works
- 1 Compute the amplitude data on the server when the file is first stored, and serve it as a small dataset the page can draw. Do not decode the audio in the browser to build the waveform.
- 2 Replace the plain scrub bar in the app's existing Audio Player with this surface rather than adding a second seek control beside it.
- 3 Draw played and unplayed regions distinctly, and keep the playhead position exact under click, drag, and keyboard seeking on the same surface.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/audio-waveform-scrubber
Video Upload and Encoding
Video Upload and Encoding
Accept a video file and turn it into versions that play in a browser.
What it does
An upload path for video files plus a background pipeline that produces web-playable renditions and a poster frame.
How it works
- 1 Extend the app's existing File Upload rather than adding a second uploader. Video differs in size and in the processing that follows, not in how a user picks a file, and two uploaders means two sets of limits to keep in sync.
- 2 Upload in resumable chunks straight to storage, and enforce size, duration, and type limits on the server. Client-side limits are a convenience, not a control.
- 3 Do the encoding in the app's existing background job system so the user is not holding a tab open, and surface its state through the app's existing Background Job Progress rather than a bespoke poller.
Copy the prompt
No account needed
Add this feature to my app:
https://addthisfeature.com/x/video-upload-and-encoding
How it works
-
1
Copy the link
Grab the Markdown instruction URL for this feature.
-
2
Give it to your AI
Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.
-
3
It inspects, then implements
Your agent reads your existing app first, then adds the feature to fit it.
Works with your stack
These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.
Need it tighter than that? Customize the feature and tell it exactly what you're running.