Commit Graph
93 Commits
Author SHA1 Message Date
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 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 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 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
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
Enes Köksal 3cfea40fbd refactor: eslint and prettier conflict will be resolved and formatted 2026-04-23 17:05:43 +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 8a12bb484b feat(assets): add image upload state management and update button behavior during upload 2026-04-14 13:41:41 +03:00
Yusuf İpek 5bff32fef1 fix: update descriptions for real-time webhooks and storage exceedance FAQ 2026-04-10 23:04:07 +03:00
Yusuf İpek 20897ab418 feat(privacy, refund, terms): add Privacy Policy, Refund Policy, and Terms of Service pages with navigation links 2026-04-10 22:33:23 +03:00
Yusuf İpek 439e74d037 feat(validation): implement validateAnnotationStrokes function for safe annotation data handling
feat(rate-limit): add TRUSTED_PROXY_MODE for configurable proxy header trust
feat(comments): validate annotation data structure in comment routes and components
2026-04-10 20:38:22 +03:00
Yusuf İpek 03bfd565e8 feat(auth): enforce length limits for name and password during registration
feat(comments): add content length validation for comments and annotations

feat(guest-gate): restrict guest name length and update localStorage handling

feat(share-link-unlock): set maxLength for password input field
2026-04-10 20:28:55 +03:00
Yusuf İpek d1ffc4c4db feat(annotation-canvas): optimize canvas resizing by using refs for strokes and currentStroke 2026-04-09 17:23:27 +03:00
Yusuf İpek 173261149f feat(comments): implement pagination for comments retrieval with limit and offset 2026-04-09 16:35:02 +03:00
Yusuf İpek b1b1715578 Refactor registration and dashboard features to support invite codes and Bunny uploads
- Moved registration logic to a new client component for better separation of concerns.
- Integrated invite code requirement based on feature flags in the registration process.
- Enhanced dashboard functionality to conditionally enable Bunny uploads based on feature flags.
- Updated various components and API routes to check for Bunny uploads and Stripe billing feature flags.
- Added new feature flag utilities for managing feature toggles in the application.
2026-04-08 18:46:12 +03:00
Yusuf İpek 6f22b0bf8b feat(billing): integrate Stripe for subscription management and billing access
- Added billing-related fields to the User model in the database.
- Implemented functions for managing billing access, including trial periods and subscription statuses.
- Created new billing utility functions for Stripe integration.
- Updated onboarding page to include billing overview and workspace creation eligibility.
- Enhanced route access checks to require billing access for certain actions.
- Implemented cleanup scripts for expired billing workspaces and associated media.
- Updated header component to conditionally show app navigation based on billing access.
- Added new migrations for billing-related database changes.
2026-04-08 17:50:40 +03:00
Yusuf İpek 8db7a031e6 fix(footer): update copyright year and company name in footer 2026-03-20 22:33:35 +03:00
Yusuf İpek 14b2809aed feat(comments-pane): refactor comments display logic for improved asset and comment pane management 2026-03-08 18:50:09 +03:00
Yusuf İpek 4746085fc3 feat(audio-upload): implement audio file size validation and error handling 2026-03-08 18:46:53 +03:00
Yusuf İpek 185293a45d fix(search-modal): update project item href to use new URL structure 2026-03-01 19:28:07 +03:00
Yusuf İpek 490e800e69 feat(search): implement search API with rate limiting and results fetching 2026-03-01 19:18:32 +03:00
Yusuf İpek 75535e8cda feat(comments): add drag-and-drop support for image attachments and enhance image validation 2026-03-01 18:53:54 +03:00
Yusuf İpek 975ff603e1 feat: add audio asset support with recording and upload functionality
- Implemented audio asset handling in the API, including download and deletion routes.
- Added audio content type mappings and extraction functions for audio file names and keys.
- Enhanced the asset management UI to support audio uploads, including recording capabilities.
- Updated the database schema to accommodate audio assets with new enum values.
- Integrated audio playback features in the asset list and comment sections.
- Improved user experience with drag-and-drop support for audio files.
2026-02-28 11:01:10 +03:00
Yusuf İpek 3aedc46351 feat: Redesign the landing page's "How It Works" section with a new grid layout, updated icons, and improved styling, while removing a redundant GSAP reveal animation. 2026-02-26 17:33:15 +03:00
Yusuf İpek bbf44fd0aa feat: Introduce pauseAfterSeek option to the video player, refresh landing page content and animations, and update the dashboard image. 2026-02-26 15:19:11 +03:00
Yusuf İpek 8d59095e72 feat(video-assets): implement ETag handling and polling for asset updates 2026-02-26 12:51:58 +03:00
Yusuf İpek 60add2a1c4 feat(comments): implement asset handling for attached images in comment creation 2026-02-26 12:45:23 +03:00
Yusuf İpek 4ea6099508 feat(bunny-cdn): refactor CDN hostname resolution and update asset URLs for improved flexibility 2026-02-26 11:53:03 +03:00
Yusuf İpek 3522c3da30 feat(video-page): enhance Bunny asset handling and playback features
- Added support for tracking Bunny asset readiness and processing states.
- Implemented thumbnail loading error handling and retry logic for Bunny assets.
- Introduced a "Ready to play" indicator for Bunny assets.
- Enhanced Bunny preview player with playback speed and quality selection options.
- Improved state management for video playback, including resuming playback after source switches.
- Updated package.json to streamline database setup commands.
2026-02-26 11:48:21 +03:00
Yusuf İpek 6dd44953a3 feat(video-upload): add global drag-and-drop uploader with project selection and permission gating 2026-02-26 10:31:51 +03:00
Yusuf İpek 15fa9452a4 feat(video-player): add Bunny original-source fallback and quality option, plus approval/download UI tweaks 2026-02-26 10:02:11 +03:00
Yusuf İpek 7f87d717d2 Improve asset mention UX with empty-state dropdown and icon-only chips 2026-02-25 19:09:37 +03:00
Yusuf İpek 76d37d02e5 feat: make media cleanup best-effort with warning summaries and enforce video/workspace management access 2026-02-25 18:59:02 +03:00
Yusuf İpek 9ce033d306 feat(video-assets): add full video asset system (uploads, downloads, @mentions, and cleanup/billing integration) 2026-02-25 18:34:03 +03:00
Yusuf İpek 6eea327083 refactor(dashboard): centralize access guards and split interactive pages into client components 2026-02-25 16:42:47 +03:00
Yusuf İpek a2b07b3e19 feat: add approvals workflow and unified member invitation management across projects, workspaces, and videos 2026-02-25 16:24:45 +03:00
Yusuf İpek 0ae1becc1b refactor(video-page): split video page into modular components, hooks, and shared types 2026-02-25 15:01:37 +03:00
Yusuf İpek 86a995aed4 update landing page pricing section with revised cloud plan copy and new studio/agency tier 2026-02-24 20:16:20 +03:00
Yusuf İpek a096a5ea02 Remove pinned timestamp control from video page comment composer 2026-02-24 18:30:50 +03:00
Yusuf İpek 068bc6f788 fix(player): stop YouTube iframe re-init loop 2026-02-24 18:23:20 +03:00
Yusuf İpek 9f32aeafe6 optimize watch progress persistence with debounced client saves and tiny-delta server skip 2026-02-24 17:51:40 +03:00
Yusuf İpek 71233f8fe8 feat(video-card): show deleting overlay and disable interactions during delete 2026-02-24 17:46:05 +03:00
Yusuf İpek 6e14d4d19f feat(admin): add manual R2 stats refresh endpoint/button and share in-memory storage snapshot cache 2026-02-24 17:35:42 +03:00
Yusuf İpek ffa55d7dcc feat(video): lazy-load version comments and add ETag-based comment caching 2026-02-24 16:34:16 +03:00
Yusuf İpek afa1529873 feat(feedback): add user feedback/review system with admin management and hardened image upload validation 2026-02-24 16:05:11 +03:00
Yusuf İpek 4083651025 Restrict guest CSV comment export in UI and fix lint/typecheck cleanup in comment APIs 2026-02-24 15:03:42 +03:00
Yusuf İpek 1708c5c99c fix(video-player): preserve playback state when seeking to timestamps 2026-02-23 18:25:25 +03:00
Yusuf İpek dd884a325c Add admin-only comment resolution controls 2026-02-23 18:21:10 +03:00