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
bb43a07234
refactor(db): move rate-limit extras into Prisma migration and remove db-extras script
2026-02-26 10:40:36 +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
191b352520
remove unused admin users and stats API routes
2026-02-24 18:13:14 +03:00
Yusuf İpek
59b766d071
chore(infra): gate DB pool debug logs and de-duplicate rate-limit cleanup timer
2026-02-24 18:10:36 +03:00
Yusuf İpek
644b239ab3
feat: add pagination and strict query validation for workspace/project listings
2026-02-24 18:07:04 +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
7f07a271a4
Improve media cleanup performance with bounded concurrency and aggregated failure reporting
2026-02-24 17:44:23 +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
6a6b48f6a9
optimize admin users table sorting and pagination by pushing supported sorts to Prisma
2026-02-24 17:23:44 +03:00
Yusuf İpek
68c63ce020
fix(watch-progress): validate versionId and enforce video access/version ownership before saving progress
2026-02-24 17:20:45 +03:00
Yusuf İpek
354bc38d42
refactor(auth): centralize project/workspace authorization with checkProjectAccess across API routes
2026-02-24 17:18:04 +03:00
Yusuf İpek
fa51847aa4
feat(storage): add shared R2 media proxy and orphan cleanup tooling for R2/Bunny
2026-02-24 17:02:54 +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
a9041ebca5
docs(agents): rewrite AGENTS.md into a minimal high-signal workflow checklist
2026-02-24 16:09:23 +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
449433a08a
fix: centralize trusted same-origin validation for watch session and upload token routes
2026-02-23 18:31:09 +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
Yusuf İpek
fe7235052e
Add guest upload tokens and share-session aware permissions
2026-02-23 18:17:22 +03:00
Yusuf İpek
9058317247
feat(share): add video-level secure share links with password unlock and session-based watch/comment access
2026-02-23 17:11:32 +03:00
Yusuf İpek
d15e5192ac
chore: clean up lint/type issues and tighten comment media URL validation
2026-02-23 16:06:43 +03:00
Yusuf İpek
609b33bbcb
feat(admin): track and display per-user download egress for Bunny version downloads
2026-02-22 20:19:55 +03:00
Yusuf İpek
bbae612a70
feat(admin): add sortable paginated users table with invited-members metric and async searchParams fix
2026-02-22 20:04:41 +03:00
Yusuf İpek
55a2c16a7f
fix(landing): replace pricing CTA with user-appropriate action text
...
- change hosted plan CTA from 'Deploy on Cloud' to contextual copy
- show 'Start Now' for new users and 'Go to Dashboard' for logged-in users
2026-02-22 17:20:08 +03:00
Yusuf İpek
ab0dc82e2a
Create LICENCE file with FSL-1.1-ALv2 terms
...
Added Functional Source License, Version 1.1.
2026-02-22 17:15:03 +03:00
Yusuf İpek
323093029e
feat(seo): upgrade site metadata, schema, and crawl files for OpenFrame rebrand
...
- update title/description to Open Source Video Review Platform
- add centralized SEO config with canonical URL + meta image (/meta.webp)
- add Open Graph and Twitter card metadata
- add JSON-LD Organization/WebSite structured data
- add robots.txt, sitemap.xml, and web app manifest routes
- version icon metadata to help search engines refresh branding
2026-02-22 16:53:01 +03:00
Yusuf İpek
b0e6f9514a
change the deep-dive-dashboard image.
2026-02-22 16:37:43 +03:00
Yusuf İpek
0288fe08d3
feat(video-download): add Bunny original/compressed download options with secure file handling and tighter rate limits
2026-02-22 16:33:52 +03:00
Yusuf İpek
f224b0a8a1
feat(landing): redesign homepage with GSAP-driven landing page and new showcase assets
2026-02-22 15:53:53 +03:00
Yusuf İpek
2115d986af
feat(video): add secure download flow with Bunny API proxy, quality validation, rate limiting, and direct URL host allowlist
2026-02-22 14:19:09 +03:00
Yusuf İpek
72d14f4a5d
feat(comments): add secure CSV/PDF export for version comments with auth, rate limits, and CSV injection hardening
2026-02-22 13:56:02 +03:00
Yusuf İpek
47f12b38fa
chore: remove unused dependencies and delete unused combobox demo components
2026-02-22 13:42:52 +03:00
Yusuf İpek
e30b4a5b19
feat: harden Bunny upload flow, migrate Bunny playback to hls.js, and add Bunny storage admin stats
2026-02-22 13:03:45 +03:00
Yusuf İpek
10164069dd
feat: Add URL safety check to prevent rendering iframes with non-HTTP/HTTPS protocols.
2026-02-22 09:56:18 +03:00
Yusuf İpek
0f24bcfe6c
feat: Implement direct video file uploads via Bunny.net and TUS protocol, adding a new API route and UI for file selection.
2026-02-22 09:55:08 +03:00
Yusuf İpek
5547346082
feat: Implement multi-panel video comparison with shared playback controls, timeline comments, and YouTube API integration.
2026-02-22 07:56:27 +03:00
Yusuf İpek
87d6c0ab0a
feat: Add a close button to the annotation toolbar and ensure annotation mode is correctly reset upon removal.
2026-02-22 06:30:10 +03:00
Yusuf İpek
fc047841cf
feat: Enhance annotation canvas toolbar responsiveness, group controls
2026-02-21 20:27:19 +03:00
Yusuf İpek
d731c9434a
feat: Add drawing annotation functionality to comments, including a new canvas component and API integration for creation, retrieval, and updates.
2026-02-21 20:23:15 +03:00
Yusuf İpek
4cb4089caa
feat: enhance responsive layout of video page by adjusting visibility of the sidebar, video title, and new version button on various screen sizes.
2026-02-21 19:29:43 +03:00
Yusuf İpek
e32196c430
fix: address security vulnerabilities and add image attachments
...
- Fix type confusion vulnerability in comment content updates
- Validate pagination offsets to prevent negative values
- Validate timestamp is a valid number before parsing
- Exclude guestEmail from comment API responses for privacy
- Fix TypeScript error in audio upload route
- Add image attachment support for comments with upload API
- Update admin dashboard to track image attachments
- Rename cleanup functions to handle both voice and image media
2026-02-21 16:40:58 +03:00
Yusuf İpek
cd9b89c971
feat: Introduce Linkify component to automatically convert URLs in comment and reply content into clickable links.
2026-02-21 10:50:45 +03:00
Yusuf İpek
5065fca38d
feat: replace hero video placeholder with an autoplaying demo video and refine hover effects.
2026-02-20 16:29:24 +03:00
Yusuf İpek
7fd2f7e289
feat: Redesign the landing page with an enhanced sticky header, a new hero section featuring gradient text and a badge, and integrate additional Lucide icons for future features.
2026-02-20 16:25:45 +03:00
Yusuf İpek
fcdb300b73
feat: replace favicon.ico with a scalable icon.svg
2026-02-20 15:51:44 +03:00
Yusuf İpek
2a20b449a8
refactor: Migrate dashboard project listing to client components, adding URL-driven filtering, sorting, and pagination.
2026-02-20 15:50:50 +03:00
Yusuf İpek
83eeffe5c0
feat: Implement admin dashboard with user management, statistics, and role-based access control.
2026-02-20 15:17:32 +03:00
Yusuf İpek
1bb1c8e574
feat: Enhance dashboard responsiveness across various pages and update project visibility icons for improved clarity.
2026-02-20 14:28:43 +03:00
Yusuf İpek
fe496b7fa5
feat: Implement notification settings and logic for new video versions.
2026-02-20 13:51:00 +03:00
Yusuf İpek
cdd46cf05e
fix: Retrieve all video versions by removing the isActive filter and take limit from API queries.
2026-02-20 13:32:29 +03:00
Yusuf İpek
7e55c578df
remove experimental vimeo video provider support
2026-02-15 12:55:36 +03:00
Yusuf İpek
c572ddb522
feat(video): add fullscreen mode with keyboard shortcut and error handling
...
- Add fullscreen toggle (F key and button) for video player
- Add comments panel visibility toggle in fullscreen mode
- Rename isFullscreen to isFullscreenMode for clarity
- Add toast error handling for fullscreen API failures
- Fix indentation issues in JSX
2026-02-15 12:50:37 +03:00
Yusuf İpek
d3187f7fe4
docs: add AGENTS.md with coding guidelines for agents
2026-02-15 11:22:03 +03:00
Yusuf İpek
da8c62e60d
fix(ui): use filteredComments instead of comments in video page
2026-02-15 10:56:41 +03:00
Yusuf İpek
643697dc00
fix(ui): add defensive checks for undefined replies in video page comments
2026-02-15 09:36:02 +03:00
Yusuf İpek
bf6a8aa4e8
fix(ui): add defensive replies array handling in video page comments
2026-02-15 09:29:50 +03:00
Yusuf İpek
81c0d41a26
feat(watch): add pause and visibility change progress saving with rate limiting
...
- Save watch progress immediately when video is paused using player instance directly
- Save progress when tab becomes hidden (user switches tabs or minimizes)
- Add rate limiting (30/min) to watch progress API endpoint to prevent abuse
- Use player instance directly instead of React state for current time/duration to avoid stale values
2026-02-15 09:22:25 +03:00
Yusuf İpek
a8711db0ad
build(deps): add radix-ui dependency
2026-02-14 17:26:18 +03:00
Yusuf İpek
ea21d173b2
perf(config): improve performance with image optimization, caching headers, and build optimizations
...
- Add AVIF and WebP image formats for optimized delivery
- Configure cache headers for static assets (images, icons, SVGs)
- Enable server minification and optimize package imports
- Disable poweredByHeader and enable compression
- Remove unused radix-ui dependency
2026-02-14 17:15:35 +03:00
Yusuf İpek
e4b29f5829
perf: improve audio streaming, font loading, and video provider timeouts
...
- Fix audio route content-type handling by using HeadObject metadata first
- Add JetBrains Mono font optimization with display:swap and preload
- Add blur placeholder to video card thumbnails for improved loading
- Fix YouTube API loading with proper state tracking to prevent race conditions
- Simplify timeout handling in YouTube and Vimeo providers using AbortSignal.timeout
2026-02-14 17:10:59 +03:00
Yusuf İpek
d302875e25
fix(api): add type validation to prevent type confusion attacks in video PATCH
...
Validates that title and description are strings before calling .trim() method to prevent type confusion attacks in the video update endpoint.
2026-02-14 16:22:07 +03:00
Yusuf İpek
1c7ee70815
feat(optimizations): adds memoization for performance optimization
...
Add currentUserName to video API responses and session for display in comments. Also adds memoization for performance optimization and implements Page Visibility API to pause comment polling when tab is hidden.
2026-02-14 16:21:52 +03:00
Yusuf İpek
20005f1a15
fix(api): add rate limiting, file size validation, and timeout handling
...
- Add Content-Length header check for early file size validation on audio upload
- Add rate limiting (60 req/min) to public watch endpoint
- Add 10-second timeout with AbortController for YouTube and Vimeo oEmbed requests
- Add automatic rate limit cleanup interval for self-hosted servers
- Fix null check for comment.replies in video page content
- Add checkWorkspaceAccess helper for workspace authorization
2026-02-14 15:59:30 +03:00
Yusuf İpek
413fc9cec6
fix(api): add project access validation to video progress route
2026-02-14 15:28:50 +03:00
Yusuf İpek
88c74d646e
feat: add video watch progress tracking with resume functionality
...
Implements a complete watch progress system that allows users to:
- Save playback position automatically every 5 seconds while watching
- Resume from last position when returning to a video
- Save progress on page leave using sendBeacon for reliability
Also includes:
- Optimized slug generation in projects and workspaces APIs (single query vs loop)
- Added isActive filter to version queries across all video endpoints
- Added pagination support for video and comment queries
- Enhanced database pool management with connection limits and graceful shutdown
- New WatchProgress Prisma model with user-version relations
2026-02-14 15:25:32 +03:00
Yusuf İpek
2888f7de98
feat: add date sorting to projects and videos
...
Add toggle controls to sort projects and videos by update date in both
the dashboard project list and individual project video grids. Extract
ProjectContent to a dedicated client component to enable client-side
sorting state management.
2026-02-13 10:40:55 +03:00
Yusuf İpek
a414953714
feat: remove new project button from header
2026-02-10 15:02:31 +03:00
Yusuf İpek
298b4ed3cc
feat: Hide the global header on video player pages and ensure video content always uses full screen height.
2026-02-10 14:59:23 +03:00
Yusuf İpek
ca65cf8f58
feat: Implement video version management API, enable comment tag editing, and enhance video duration display to include hours.
2026-02-10 14:48:15 +03:00
Yusuf İpek
d42db4484b
feat: add radix-ui dependency
2026-02-10 14:11:40 +03:00
Yusuf İpek
b22fd1476f
feat: optimize bundle size and improve image loading
...
- Unify video page components into single VideoPageContent component
- Reduces ~2300 lines of duplicated code between dashboard and watch pages
- Uses mode prop ('dashboard' | 'watch') to handle differences
- Move shadcn to devDependencies (CLI tool, not needed at runtime)
- Remove radix-ui meta-package (components already imported individually)
- Replace <img> tags with next/image for automatic optimization
- Add remotePatterns config for YouTube, Vimeo, Unsplash domains
- Update video-card.tsx, videos/new/page.tsx, component-example.tsx
- Add next/dynamic for KeyboardShortcutsModal (lazy load on demand)
2026-02-10 14:08:52 +03:00
Yusuf İpek
062a0aec83
refactor(auth): Centralize project access checks
...
- Move `checkProjectAccess` function to `lib/auth.ts`
- Consolidate project access logic into a single utility
- Simplify access checks in video API routes
- Remove redundant project member inclusions from queries
2026-02-08 14:17:12 +03:00
Yusuf İpek
05150d5a20
feat(comments): Grant workspace members access to comments
...
- Allow workspace members to view comments
- Enable workspace members to resolve/unresolve comments
- Permit workspace members to delete comments
- Verify workspace membership or ownership for access
2026-02-08 13:54:04 +03:00
Yusuf İpek
f8afec0291
refactor: Update fetch requests to disable caching for video data retrieval
2026-02-07 18:41:07 +03:00
Yusuf İpek
46d4e0c7d7
refactor: Implement optimistic UI updates for comment handling with mutation tracking
2026-02-07 18:34:00 +03:00
Yusuf İpek
7141763bc6
refactor: Optimize comment deletion handling with optimistic UI updates
2026-02-07 18:23:46 +03:00
Yusuf İpek
42839d4d69
refactor: Update response handling for comments and uploads to access nested data structure
2026-02-07 18:17:46 +03:00
Yusuf İpek
f6044f3c24
refactor: Update API response handling to access nested data structure
2026-02-07 17:59:37 +03:00
Yusuf İpek
49c3ac61ea
refactor: Add explicit types for workspace and project member checks
2026-02-07 17:28:46 +03:00
Yusuf İpek
d01c2247b5
refactor: Simplify project type mapping in WorkspacePage
2026-02-07 17:21:44 +03:00
Yusuf İpek
eef03a970c
refactor: Refine workspace project types
...
- Explicitly type `project` in `WorkspacePage`
- Add `typecheck` script to `package.json`
- Improve type safety and development experience
2026-02-07 17:13:32 +03:00
Yusuf İpek
98df611bf7
refactor: Add explicit type for video map
...
- Improves type safety
- Enhances code readability
2026-02-07 17:05:16 +03:00
Yusuf İpek
aa34004b7b
refactor: Refine type definitions
...
- Enhance type safety for dashboard projects
- Generalize `withCacheControl` to accept any `Response`
2026-02-07 17:02:08 +03:00