Commit Graph
220 Commits
Author SHA1 Message Date
yusufipk 34e72f6cbb fix: bulk video download (original quality, latest version by default)
- Accept source=auto in the version download route (was 400 Bad Request),
  so bulk/project downloads of Bunny videos no longer fail.
- Bulk/project downloads now request the original (uncompressed) Bunny file
  so quality never drops (was source=auto which could fall back to compressed).
- Project/selected downloads default to the latest version of each video and
  add a separate "All versions" option in the download dropdowns.
2026-07-10 20:04:18 +07:00
Yusuf İpek cbaecb92cc Merge pull request #24 from yusufipk/fix/comment-newline-rendering
fix: preserve newlines/paragraph breaks in rendered comments
2026-07-10 15:41:29 +03:00
yusufipk d500dcb042 fix: preserve newlines/paragraph breaks in rendered comments
Comment content was stored with newlines intact but rendered inside <p>
elements with default white-space, collapsing line breaks into single
spaces. Add whitespace-pre-wrap (and break-words) to the comment/reply
render wrappers in the comments pane and the compare-versions view.
2026-07-10 19:33:03 +07:00
yusufipk 880d0ac0fa feat: chunked (S3 multipart) uploads for R2/S3 video backend
Self-hosted instances on the R2/S3 backend could only upload a video as a
single PUT, which fails behind a Cloudflare proxy/tunnel (100MB request-body
cap) and is capped at 5GiB with no resilience. Bunny already avoids this via
tus; this brings the R2/S3 path to parity.

Files larger than a threshold (default 90MiB) are now split into parts
(default 32MiB, min 5MiB) and uploaded directly browser->R2 via presigned
UploadPart URLs, then reassembled server-side with CompleteMultipartUpload.
Each request stays under the 100MB cap, lifts the size ceiling well past
5GiB, and adds per-chunk retry. Files at/under the threshold keep the
existing single-PUT path unchanged. Bunny path is untouched.

Thresholds are env-overridable via OPENFRAME_R2_MULTIPART_THRESHOLD_BYTES
and OPENFRAME_R2_MULTIPART_PART_SIZE_BYTES.

Verified end-to-end against real Cloudflare R2 and a local MinIO behind an
nginx 90MB cap (single 141MB PUT 413s on master; 32MB parts pass here).

Closes #22
2026-07-10 19:19:07 +07:00
yusufipk 82932c6b22 fix: scope select-all to current page
"Select all" previously selected every video across every page, which is
too easy to trigger by accident when the user only meant the videos
visible on the current page. Scope select/deselect to the current page's
videos and relabel the button to "Select page"/"Deselect page" when the
project spans multiple pages.
2026-06-27 13:46:05 +02:00
yusufipk cebdf23b38 fix(security): bump nodemailer to 9.0.1
Resolves the high-severity advisory (dependabot #20) where the
message-level raw option bypassed disableFileAccess/disableUrlAccess,
enabling arbitrary file read and SSRF. We only use the standard
createTransport/sendMail API, so the major bump is non-breaking.
2026-06-27 13:38:07 +02:00
yusufipk 95dcf92d8b fix: clamp page after bulk video delete
When every video on the current page was bulk-deleted, router.refresh()
re-queried the same out-of-range page and rendered "No videos yet" even
though earlier pages still had videos. Clamp to the last valid page based
on the remaining video count, falling back to refresh in place.
2026-06-27 13:35:08 +02:00
yusufipk 52e4169db2 feat: add project bulk download and bulk video delete
Add a "Download project" / "Download selected" flow that builds a
server-side manifest of downloadable media, plus a selection mode with
bulk delete for project videos.

Gate viewer downloads behind a new project allowDownloads setting
(default off, opt-in). Admins can always download; enabling on a public
project allows anonymous visitors to download. Enforce the setting on
every download surface (manifest, version, asset, watch, video routes)
via canDownloadProjectMedia.

Add rate limits for the manifest endpoint, host allowlisting for direct
download URLs, and configurable file/byte caps.

Closes #16
Closes #19
2026-06-27 13:24:05 +02:00
yusufipk 9613c4f2c6 fix: harden email validation and CI permissions 2026-06-14 16:59:09 +02:00
yusufipk 56fb7403cf fix: resolve CI lint and formatting failures.
Replace internal anchor tags with Next.js Link components and format the marketing comparison route page.
2026-06-14 16:42:27 +02:00
yusufipk 51257e004f Add SEO comparison landing pages and footer compare links.
Introduces dynamic marketing comparison routes, competitor data, and Compare sections on the homepage and marketing footer.
2026-06-14 16:36:26 +02:00
yusufipk d301f3d808 docs(security): prefer GitHub private vulnerability reporting 2026-06-13 23:28:22 +02:00
Yusuf İpek 0a89e52a98 Merge pull request #21 from yusufipk/cursor/be172284
feat: bulk video uploads and S3 asset video support (fixes #18)
2026-06-14 00:27:09 +03:00
yusufipk 00124bc7c2 feat: bulk video uploads and S3 asset video support (#18)
Add multi-file drag-and-drop queues for project videos and the assets pane, and route asset video uploads through S3/R2 when direct Bunny uploads are disabled.
2026-06-13 23:24:21 +02:00
yusufipk 52ace1a1a8 fix: generate CSP from runtime storage env for self-hosted MinIO
Move Content-Security-Policy generation to proxy.ts so R2_PRESIGN_ENDPOINT
is included at request time instead of being frozen at image build time.
Document reverse-proxy layouts for Docker self-hosting and copy proxy.ts
into the Docker image.

Closes #17
2026-06-12 21:21:31 +02:00
yusufipk 4bf6e821af feat: enable S3 video uploads and update related configurations
- Added support for self-hosted S3 video uploads with new environment variables: OPENFRAME_ENABLE_S3_VIDEO_UPLOADS and OPENFRAME_MAX_VIDEO_UPLOAD_BYTES.
- Updated .env.example and .env.docker.example to reflect new configuration options.
- Enhanced Content Security Policy to include origins for S3-compatible storage.
- Updated dependencies for AWS SDK to support new features.
- Refactored upload logic to accommodate both Bunny and S3 upload providers.
- Updated documentation to clarify the usage of direct uploads and S3 configurations.
- Closes #11
2026-05-27 17:04:39 +02:00
Yusuf İpek b6de3a29aa Merge pull request #15 from yusufipk/dependabot/npm_and_yarn/npm_and_yarn-152f59e559
chore(deps): bump next from 16.2.3 to 16.2.6 in the npm_and_yarn group across 1 directory
2026-05-23 21:46:32 +03:00
yusufipk 6692db992d feat: add YouTube to connect-src in Content Security Policy 2026-05-23 20:44:52 +02:00
dependabot[bot] 1dcbb78b22 chore(deps): bump next in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [next](https://github.com/vercel/next.js).


Updates `next` from 16.2.3 to 16.2.6
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](https://github.com/vercel/next.js/compare/v16.2.3...v16.2.6)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 16.2.6
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <[email protected]>
2026-05-12 23:06:01 +00:00
yusufipk 378ca1977b feat: enhance comment functionality with timestamp range support
- Added timestampEnd to Comment and CommentReply interfaces.
- Implemented logic for handling comment timestamp ranges in the comment composer and comments pane.
- Updated video player and player core to support frame stepping and improved seeking functionality.
- Introduced frame mode toggle for precise navigation during video playback.
- Closes #12
2026-04-25 22:58:16 +03:00
yusufipek 63f331d220 docs: add instructions for using the published Docker image Closes #10 2026-04-25 21:29:31 +03:00
yusufipek 0c54498d34 chore: update Dockerfile to use full image path and add Docker publish workflow v0.1.0 2026-04-25 21:04:37 +03:00
Yusuf İpek 8329fc73e0 Merge pull request #9 from koksalenes/chore/setup-dx-tools
chore: add husky, commitlint, lint-staged, editorconfig and prettier
2026-04-25 20:31:14 +03:00
yusufipek 7058ea9f87 style: fix prettier issues after syncing with master 2026-04-25 20:24:17 +03:00
yusufipek ef7402bc23 Merge origin/master into pr-9-review 2026-04-25 20:21:40 +03:00
Enes Köksal 3cfea40fbd refactor: eslint and prettier conflict will be resolved and formatted 2026-04-23 17:05:43 +03:00
Yusuf İpek 066c4247db feat: add sorting functionality to project videos and update search parameters 2026-04-22 15:31:09 +03:00
Yusuf İpek 1014fd503a Merge pull request #7 from poyrazavsever/master
Dökümantasyon: Katkı Süreçlerini Standartlaştırma
2026-04-22 14:31:17 +03:00
Poyraz Avsever 91033b1cfb refactor: streamline bug report template and enhance contributing guidelines 2026-04-20 22:52:07 +03:00
Poyraz b8d8ccdab8 Merge branch 'yusufipk:master' into master 2026-04-20 22:31:09 +03:00
Yusuf İpek c73bc9a19a fix(README): correct description of OpenFrame to emphasize fair source 2026-04-20 16:49:18 +03:00
Poyraz Avsever d3d57b098b refactor: update issue and pull request templates for clarity and consistency 2026-04-18 21:51:19 +03:00
poyrazavsever d9f62f861b chore: update Code of Conduct enforcement section and version reference 2026-04-18 18:36:35 +03:00
poyrazavsever 702364ac96 refactor: update issue templates for clarity and conciseness 2026-04-18 18:26:34 +03:00
poyrazavsever ac70f657cb fix: update branch references from 'main' to 'master' in configuration and documentation files 2026-04-18 17:15:59 +03:00
Enes Köksal 385b61f29b chore: add husky, commitlint, lint-staged, editorconfig and prettier 2026-04-17 22:54:05 +03:00
Poyraz Avsever ce2b3e5976 Merge branch 'master' of https://github.com/poyrazavsever/OpenFrame 2026-04-16 22:14:11 +03:00
Poyraz Avsever e2272ed73d revert: remove dependency and lockfile updates 2026-04-16 22:14:08 +03:00
Poyraz 2999962afe Merge branch 'yusufipk:master' into master 2026-04-16 22:07:32 +03:00
Poyraz Avsever 97fbdc51a1 docs: add security policy 2026-04-16 21:53:23 +03:00
Poyraz Avsever b58951249e chore: add contribution governance docs and dotenv dependency 2026-04-16 21:53:06 +03:00
Yusuf İpek a6bbc50acd Merge pull request #4 from cinarozkan/add-ci-pipeline
ci: add GitHub Actions CI pipeline
2026-04-16 18:36:14 +03:00
Yusuf İpek c9522eff82 feat(VideoPageHeader): move DownloadControls to a new position in the layout 2026-04-16 15:27:25 +03:00
Yusuf İpek 6c42fd23d3 feat(LandingPage): add option to download original uploaded video 2026-04-15 19:55:10 +03:00
Yusuf İpek 873945464d feat: implement storage quota management for uploads
- Added storage quota enforcement for audio and image uploads in the respective routes.
- Introduced reservation system to manage concurrent uploads and prevent quota overages.
- Enhanced comment creation to account for audio and image attachment sizes against user quotas.
- Created new UploadReservation model to track in-flight upload reservations.
- Backfilled existing video assets with size information from R2.
- Added progress component for UI feedback during uploads.
- Updated API responses to include reservation IDs for better quota management.
- Adjusted error handling to return appropriate storage limit exceeded messages.
2026-04-15 19:53:43 +03:00
Yusuf İpek acf31b3d6b refactor(docker): remove unnecessary next-env.d.ts copy from Dockerfile 2026-04-15 17:00:41 +03:00
Yusuf İpek 50d31ef894 feat(download): add estimation of egress bytes by fetching Content-Length via HEAD request 2026-04-14 13:56:27 +03:00
Yusuf İpek f3cdebaa81 refactor(download): remove unused content type handling and filename sanitization logic 2026-04-14 13:46:43 +03:00
Yusuf İpek 8a12bb484b feat(assets): add image upload state management and update button behavior during upload 2026-04-14 13:41:41 +03:00
Çınar Özkan e2ea5c46b7 ci: update setup-bun to v2 2026-04-11 17:51:25 +03:00