feat: add the OpenMedia downloader with API, web UI and docs - #2
Merged
Merged
Conversation
…over sheet drag Capsule no longer joins an undefined class for the default gray variant. AlertDialog now closes on Escape like Sheet and ShortcutsHud. Sheet gains phone-path drag-to-dismiss test coverage.
…e shake and i18n Reviewer findings on Task 13: the form-level Enter handler swallowed Enter presses on the Paste button; the global "/" and "?" shortcuts fired while a sheet, alert or HUD was open; the prototype's field-shake CSS was dead; the "Web" platform chip label bypassed i18n; and the share-link initializer mutated browser history during render.
…rts and content length
…eep removed jobs gone
…counts as untrimmed
…heir buttons get clicks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
This is the first complete OpenMedia release: a self-hosted media downloader with a clean web UI, built on the scaffold toolbox.
API (
apps/api, Flask + yt-dlp + FFmpeg)--. Formats, containers, languages and trim values are checked against allow lists.changemeplaceholder refused at startuptoo_large,storage_full,conversion_failed,private_networkandbot_check.Web (
apps/web, Next.js 16)/api/*proxy with a request size limit, abort propagation and streamed downloads.Project
docs/superpowers/specs/2026-09-14-openmedia-design.md. Plan:docs/superpowers/plans/2026-09-14-openmedia.md.How it was verified
mise run checklistpasses: API 155 tests with ruff and mypy --strict clean; web 112 tests with eslint, tsc andnext build; docs VitePress build, path check and ADR check.docker compose up -d: both services healthy,/api/health/liveand/api/sessionreturn 200.settings.json.Checklist
mise run checklistpasses