video-clipping

byAhmad Yani

# PROMPT MASTER — BANGUN APLIKASI AI VIDEO CLIPPING MIRIP OPUS CLIP (FUNCTIONAL 99%) ## 0. PERAN Bertindaklah sebagai: - Senior Full-Stack Engineer - AI/ML Engineer - UI/UX Designer - DevOps Engineer - Product Manager Tugas Anda: membangun aplikasi web SaaS end-to-end bernama **ClipForge AI** yang secara fungsional mirip 99% dengan Opus Clip. Fokus pada feature parity, UX, dan pipeline AI. Jangan menyalin merek, logo, aset, copywriting, atau desain persis dari Opus Clip. Gunakan branding, ikon, warna, dan kode orisinal. ## 1. TUJUAN PRODUK ClipForge AI adalah platform AI untuk: - Mengubah video panjang menjadi banyak klip pendek viral. - Otomatis memilih momen terbaik. - Auto reframe ke 9:16, 1:1, 16:9. - Menambahkan caption, emoji, B-roll, musik, sound effect, hook, title, CTA. - Memberi virality score. - Export dan publish ke TikTok, Reels, Shorts, LinkedIn, X. - Kolaborasi tim, approval, analytics, billing. ## 2. TARGET PENGGUNA - Content creator - Podcaster - Agency - Social media manager - Coach/educator - Tim marketing - Editor video ## 3. FITUR UTAMA (WAJIB SEMUA) ### 3.1 Autentikasi & Workspace - Sign up/login: email, Google, magic link. - Workspace multi-tenant. - Role: Owner, Admin, Editor, Viewer. - Undang anggota via email. - Manajemen profil dan preferensi. ### 3.2 Import Video - Upload file: MP4, MOV, MKV, WebM, MP3, WAV. - Import dari URL YouTube, Vimeo, Zoom, Google Drive, Dropbox. - Maksimal durasi awal: 3 jam. - Progress upload, resume, validasi format. - Antrian processing. ### 3.3 Pipeline AI Otomatis Saat video diupload, jalankan pipeline: 1. Transcode ke format standar dengan FFmpeg. 2. Ekstrak audio. 3. Transkripsi dengan WhisperX/Whisper large-v3. 4. Diarisasi speaker. 5. Deteksi scene dan silence. 6. Analisis transcript dengan LLM untuk mencari: - Hook kuat - Emosi tinggi - Kontroversi - Insight berharga - Cerita menarik - Punchline - Kutipan viral 7. Hitung virality score 0–100. 8. Tentukan boundary klip optimal. 9. Generate 5–30 klip per video. 10. Auto reframe 9:16 dengan face tracking. 11. Generate caption animasi. 12. Tambahkan emoji, B-roll, SFX, musik. 13. Generate judul, deskripsi, hashtag, thumbnail. 14. Simpan semua versi ke storage. ### 3.4 Clip Library - Grid/list klip. - Filter: skor, durasi, topik, status, tanggal. - Sorting: virality, terbaru, terpopuler. - Preview hover. - Bulk action: export, delete, schedule, pindah folder. - Search transkrip. ### 3.5 Editor Klip - Timeline multi-track. - Trim, split, delete, duplicate, reorder. - Crop & reframe manual/otomatis. - Caption editor: font, warna, posisi, animasi, karaoke style. - Emoji otomatis/manual. - Sticker, shape, progress bar. - B-roll dari library atau AI generate. - Musik & SFX library. - Voice enhancement, noise removal. - Text-to-speech. - AI assistant: “Buat hook lebih viral”, “Pendekkan jadi 30 detik”, “Tambah caption”. - Preview real-time. - Version history. ### 3.6 Brand Kit - Logo, warna, font, intro, outro. - Template caption. - Template hook. - Watermark. - Default aspect ratio. - Simpan sebagai preset. ### 3.7 Export & Publish - Export MP4, MOV, GIF, SRT, VTT, ASS. - Resolusi 720p, 1080p, 4K. - Aspect ratio: 9:16, 1:1, 16:9, 4:5. - Schedule ke TikTok, Instagram Reels, YouTube Shorts, LinkedIn, X. - Integrasi OAuth sosial media. - Caption otomatis saat publish. - Bulk export. - Download ZIP. ### 3.8 Kolaborasi - Komentar timestamp. - Mention anggota. - Approval workflow. - Activity log. - Shared folder. - Permission per project. ### 3.9 Analytics - Views, watch time, engagement, CTR. - Per platform. - Virality score vs performa nyata. - Top klip. - Export CSV. ### 3.10 Billing & Subscription - Free trial. - Plan: Free, Pro, Team, Enterprise. - Limit berdasarkan menit video/bulan. - Stripe integration. - Usage meter. - Invoice. - Upgrade/downgrade. - Cancel. ### 3.11 Admin Panel - Manajemen user, workspace, subscription. - Monitoring queue. - Log error. - Feature flag. - Statistik penggunaan. - Moderasi konten. ## 4. ALUR PENGGUNA UTAMA 1. User daftar/login. 2. Buat workspace. 3. Upload/import video. 4. Pilih preset: Podcast, Webinar, Vlog, Gaming, Edukasi. 5. AI processing. 6. Lihat daftar klip + virality score. 7. Pilih klip, edit di editor. 8. Tambah caption, B-roll, brand kit. 9. Preview. 10. Export atau schedule. 11. Lihat analytics. 12. Kelola tim dan billing. ## 5. ARSITEKTUR SISTEM Gunakan arsitektur modular: - Frontend: Next.js 14 App Router, TypeScript, Tailwind CSS, shadcn/ui, Zustand, React Query, Remotion untuk preview video, WaveSurfer untuk audio. - Backend: NestJS atau FastAPI, REST + GraphQL opsional, WebSocket untuk progress. - Database: PostgreSQL + Prisma. - Cache & Queue: Redis + BullMQ/Celery. - Storage: AWS S3 / Cloudflare R2. - Video Processing: FFmpeg, MediaPipe, YOLO, Rembg. - AI: OpenAI GPT-4o, Whisper, Claude, Gemini, Replicate, HuggingFace. - Infra: Docker, Kubernetes, AWS/GCP, CloudFront, GitHub Actions. - Monitoring: Sentry, PostHog, Grafana. ## 6. SKEMA DATABASE (MINIMAL) Tabel: - users - workspaces - workspace_members - projects - videos - transcripts - transcript_segments - clips - clip_versions - clip_assets - templates - brand_kits - social_accounts - schedules - subscriptions - usage_records - comments - activities - analytics_events - notifications - api_keys - feature_flags Sertakan relasi, index, foreign key, enum status, dan migration. ## 7. API ENDPOINTS (MINIMAL) Auth: - POST /auth/register - POST /auth/login - POST /auth/logout - GET /auth/me Workspace: - GET/POST /workspaces - GET/PATCH/DELETE /workspaces/:id - POST /workspaces/:id/invite Video: - POST /videos/upload - POST /videos/import-url - GET /videos - GET /videos/:id - DELETE /videos/:id - GET /videos/:id/status Clip: - GET /clips - GET /clips/:id - PATCH /clips/:id - POST /clips/:id/export - POST /clips/:id/schedule - DELETE /clips/:id AI: - POST /ai/analyze - POST /ai/reframe - POST /ai/caption - POST /ai/broll - POST /ai/hook Billing: - POST /billing/checkout - POST /billing/webhook - GET /billing/usage Admin: - GET /admin/users - GET /admin/workspaces - GET /admin/queues - GET /admin/logs ## 8. UI/UX Buat halaman: - Landing page - Pricing - Login/Register - Dashboard - Upload/Import - Processing status - Clip library - Editor - Brand kit - Schedule - Analytics - Team - Billing - Settings - Admin Gaya: - Modern, clean, gelap/terang. - Responsif. - Aksesibel WCAG AA. - Loading skeleton. - Toast notification. - Empty state. - Error state. - Keyboard shortcut. - Drag and drop. ## 9. NON-FUNCTIONAL - Scalable horizontal. - Video processing async. - Retry otomatis. - Rate limiting. - Enkripsi data. - GDPR & privasi. - Backup harian. - Audit log. - SSO untuk Enterprise. - API publik. - Webhook. - Multi-bahasa: Indonesia, Inggris, dll. ## 10. OUTPUT YANG HARUS DIHASILKAN Hasilkan: 1. Struktur folder monorepo. 2. Kode frontend lengkap. 3. Kode backend lengkap. 4. Skema database + migration + seed. 5. Dockerfile & docker-compose. 6. File .env.example. 7. Integrasi AI pipeline. 8. Integrasi Stripe. 9. Integrasi sosial media. 10. Unit test, integration test, e2e test. 11. Dokumentasi API. 12. README setup lokal & deploy. 13. CI/CD GitHub Actions. 14. Mock data dan placeholder jika API key belum ada. 15. Komentar kode jelas. ## 11. ROADMAP Fase 1 MVP: - Auth, upload, transkripsi, clip generation, editor dasar, export. Fase 2: - Auto reframe, caption animasi, brand kit, schedule. Fase 3: - B-roll AI, analytics, kolaborasi, billing. Fase 4: - API publik, SSO, enterprise, mobile app. ## 12. ACCEPTANCE CRITERIA - Video 1 jam diproses < 15 menit. - Akurasi transkripsi > 90%. - Virality score berkorelasi dengan engagement. - Export 1080p berhasil. - UI responsif. - Tidak ada error kritis. - Billing berjalan. - Multi-tenant aman. ## 13. LARANGAN - Jangan gunakan nama, logo, atau aset Opus Clip. - Jangan copy kode berlisensi proprietary. - Jangan hardcode API key. - Jangan buat fitur ilegal. - Jangan abaikan keamanan. ## 14. INSTRUKSI AKHIR Mulai dengan: 1. Rencana arsitektur. 2. Struktur folder. 3. Skema database. 4. Kode backend. 5. Kode frontend. 6. Pipeline AI. 7. Testing. 8. Deployment. Jika ada bagian yang ambigu, buat asumsi terbaik dan tulis di dokumentasi. Bangun semaksimal mungkin hingga aplikasi bisa dijalankan secara lokal dengan `docker-compose up`.

No preview

Comments (0)

No comments yet. Be the first!

System Requirements

System Requirements Document for video-clipping

1. Introduction

ClipForge AI is an end-to-end web SaaS platform that turns long-form video into many short, viral-ready clips. A user brings in a long recording — a podcast, webinar, vlog, gaming session, or educational session — and the platform automatically transcribes it, finds the strongest moments, cuts them into clips, reframes them for vertical feeds, decorates them with animated captions, emoji, B-roll, music and sound effects, scores each clip for virality, and prepares it for export or scheduled publication to TikTok, Instagram Reels, YouTube Shorts, LinkedIn and X.

The product is functionally comparable to Opus Clip at roughly 99% feature parity, but it is built with entirely original branding, icons, colors, copywriting and code. No Opus Clip name, logo, asset, or design is used.

Audience. ClipForge AI serves content creators and podcasters who want high-scoring clips without deep manual editing; video editors who need a real multi-track editing bay; social media managers who schedule and publish across platforms; agencies and marketing teams who work across client projects with shared folders, brand kits and approval workflows; workspace owners and admins who manage membership, roles and billing; reviewers who give timestamped feedback and grant approvals; and platform administrators who keep the service healthy.

The product is delivered as a multi-tenant web application that runs locally with docker-compose up and is designed for horizontal scale in production.

Page 1 of 65

2. System Overview

ClipForge AI is a multi-tenant SaaS with an application-owned identity layer, a durable workspace-scoped data model, an asynchronous AI/video processing pipeline, and a set of first-party pages that cover the full lifecycle from anonymous landing through clip creation, editing, export, publishing, analytics, collaboration, billing and platform administration.

Actors. The active human actors are the Workspace Owner, Workspace Admin, Video Editor, Social Media Manager, Content Creator / Podcaster, Agency / Marketing Team Member, Viewer / Reviewer, and Platform Administrator. External systems that participate but are not personas include the social platforms (TikTok, Instagram Reels, YouTube Shorts, LinkedIn, X), Stripe, the AI providers (OpenAI GPT-4o, Whisper, Claude, Gemini, Replicate, HuggingFace), the storage provider (AWS S3 / Cloudflare R2), and the video-processing toolchain (FFmpeg, MediaPipe, YOLO, Rembg).

Page 2 of 65

Accepted behavior. Authentication and multi-tenant workspaces with Owner/Admin/Editor/Viewer roles and email invitations; video import by file upload or URL from YouTube, Vimeo, Zoom, Google Drive and Dropbox with a 3-hour maximum source duration, resumable upload, format validation and a processing queue; an automatic AI pipeline that transcodes, extracts audio, transcribes with WhisperX/Whisper large-v3, diarizes speakers, detects scene and silence, analyzes the transcript with an LLM for hooks, high emotion, controversy, valuable insight, interesting stories, punchlines and viral quotes, computes a 0–100 virality score, determines optimal clip boundaries, generates 5–30 clips per video, auto-reframes to 9:16 with face tracking, generates animated captions, adds emoji, B-roll, SFX and music, generates title/description/hashtags/thumbnail, and stores all versions; a clip library with grid/list, filters, sorting, hover preview, bulk actions and transcript search; a multi-track clip editor with trim/split/delete/duplicate/reorder, manual and automatic crop/reframe, caption editing with font/color/position/animation/karaoke style, automatic and manual emoji, stickers, shapes, progress bar, B-roll from library or AI generation, music and SFX library, voice enhancement, noise removal, text-to-speech, an AI assistant, real-time preview and version history; brand kits with logo, colors, fonts, intro, outro, caption templates, hook templates, watermark, default aspect ratio and presets; export and publish in MP4, MOV, GIF, SRT, VTT and ASS at 720p, 1080p and 4K in 9:16, 1:1, 16:9 and 4:5 with scheduling to TikTok, Instagram Reels, YouTube Shorts, LinkedIn and X via OAuth, automatic captions on publish, bulk export and ZIP download; collaboration with timestamped comments, mentions, approval workflow, activity log, shared folders and per-project permissions; analytics with views, watch time, engagement, CTR, per-platform breakdown, virality score versus actual performance, top clips and CSV export; billing with free trial, Free/Pro/Team/Enterprise plans, monthly video-minute limits, Stripe integration, usage meter, invoice, upgrade/downgrade and cancel; and an admin panel for user, workspace and subscription management, queue monitoring, error logs, feature flags, usage statistics and content moderation.

Page 3 of 65

Narrow exclusions. The product does not use the Opus Clip name, logo, or assets; does not copy proprietary licensed code; does not hardcode API keys; does not build illegal features; and does not ignore security. Public API, SSO for Enterprise, enterprise-grade deployment and a mobile app are Phase 4 roadmap items and are not part of the current page contract.

Page 4 of 65

2a. Product Interpretation and Delivery Boundary

ClipForge AI is delivered as a first-party web application. The application owns its own identity: a person establishes access through the Login/Register page using email, Google, or a magic link, and returning users verify through the same page before reaching protected workspace state. The Landing page and Pricing page are anonymously reachable so that a prospective user can understand the product and its plans before enrolling. Every other page in the contract is protected and requires an established identity; the Dashboard, Upload/Import, Videos, Processing status, Clip library, Editor, Exports, Brand kit, Schedule, Collaboration, Analytics, Team, Billing and Settings pages are workspace-scoped, and the Admin page is restricted to the Platform Administrator.

Workspace membership is provisioned by the Workspace Owner or Workspace Admin through the Team page, and an invited member accepts the invitation to join the workspace. Social publishing is performed through OAuth authorization to the connected social accounts, which the Social Media Manager or Content Creator / Podcaster completes from the Schedule page before scheduling or publishing. Subscription provisioning is performed through Stripe checkout initiated from the Billing page before plan-restricted usage is available. AI processing and generated media are executed asynchronously by a queue worker and persisted to durable storage; the human-facing progress and results are surfaced on the Processing status, Videos, Clip library and Editor pages.

Current delivery covers the full accepted feature set through Phase 3 of the roadmap. Phase 4 items — public API, SSO for Enterprise, enterprise deployment, and mobile app — are future work and are not part of the current page contract or acceptance.

Page 5 of 65

2c. Page Content and Component Coverage

Landing page

  • Information/state. Anonymous product entry explaining ClipForge AI, its audience, and the long-form video clipping workflow. Presents the product promise, the AI pipeline story, the virality score concept, the supported platforms, and the primary call to action.
  • Primary actions. Navigate to Login/Register to start; navigate to Pricing to compare plans.
  • Supporting actions. Scroll through colour-blocked sections; read the hook-line ticker; view the tilted 9:16 clip mockups with virality badges.
  • Domain entities. Product value proposition, supported platforms, virality score concept, plan teaser.
  • Component responsibilities. Hero with oversized uppercase headline and tilted clip mockups; ink ticker strip of rotating hook lines; colour-blocked feature bands; platform tag row; footer with links to Pricing and Login/Register.
  • States. Loading skeleton for hero media; empty state not applicable; success state is the rendered page; error state shows a retry affordance if hero media fails; recovery is a static fallback layout.
Page 6 of 65

Login/Register

  • Information/state. Identity access surface supporting email, Google, and magic-link enrollment and returning access. Anonymous entry; protected state remains unavailable until identity is established.
  • Primary actions. Sign up with email; sign in with email; continue with Google; request and consume a magic link.
  • Supporting actions. Switch between sign-up and sign-in modes; recover from an invalid or expired magic link.
  • Domain entities. User identity, session, magic-link token, OAuth provider.
  • Component responsibilities. Email/password form; Google OAuth button; magic-link request form; mode toggle; inline validation and error messaging; toast notifications.
  • States. Loading skeleton while providers initialize; empty state not applicable; success state redirects to Dashboard; error state for invalid credentials, expired magic link, or provider failure with a retry affordance; recovery re-issues the magic link or returns to the form.
Page 7 of 65

Pricing

  • Information/state. Public presentation of subscription plans and limits: Free, Pro, Team, Enterprise, with limits based on video minutes per month.
  • Primary actions. Choose a plan and proceed to Login/Register (or Billing if already authenticated).
  • Supporting actions. Compare plan features; read the free-trial note.
  • Domain entities. Plan, monthly video-minute limit, feature comparison.
  • Component responsibilities. Plan cards with 2px ink outlines and offset shadows; feature comparison table; CTA per plan; footer.
  • States. Loading skeleton for plan data; empty state if plans fail to load with a retry; success state is the rendered comparison; error state shows a retry affordance; recovery reloads plan data.
Page 8 of 65

Dashboard

  • Information/state. Authenticated workspace overview and routing hub for active video, clip, team, and billing work. Shows recent videos, recent clips, processing activity, usage meter summary, and quick links.
  • Primary actions. Start a new upload/import; open a recent video or clip; navigate to Clip library, Editor, Schedule, Analytics, Team, Billing, Settings.
  • Supporting actions. Filter recent activity; dismiss notifications.
  • Domain entities. Workspace, video, clip, usage record, notification.
  • Component responsibilities. Workspace switcher; recent videos rail; recent clips grid with virality sticker badges; processing activity strip; usage meter; navigation sidebar with lime active pill.
  • States. Loading skeleton for each panel; empty state with a sad-disco-ball sticker illustration and a CTA to Upload/Import; success state renders panels; error state per panel with retry; recovery reloads the failed panel.
Page 9 of 65

Upload/Import

  • Information/state. Source media upload and external URL import workflow. Accepts MP4, MOV, MKV, WebM, MP3, WAV files and URLs from YouTube, Vimeo, Zoom, Google Drive, Dropbox. Enforces a 3-hour maximum source duration and validates format.
  • Primary actions. Drag and drop or select a file; paste an import URL; start the upload/import; resume an interrupted upload.
  • Supporting actions. Validate format before upload; view upload progress; cancel an in-progress upload.
  • Domain entities. Video, upload session, import source, format validation result.
  • Component responsibilities. Drop zone with drag-and-drop; file picker; URL import field with provider detection; progress bar with resume; format validation messaging; queue submission control.
  • States. Loading skeleton while the drop zone initializes; empty state prompts the first upload; success state enqueues the video and routes to Processing status; error state for unsupported format, duration over 3 hours, or failed URL fetch with a retry; recovery allows re-selection or resume.
Page 10 of 65

Videos

  • Information/state. Revisitable source-video browse and status context for durable imported media. Lists videos with status, duration, source, and processing outcome.
  • Primary actions. Open a video's Processing status; open its Clip library; delete a video.
  • Supporting actions. Filter by status; sort by newest; search by title.
  • Domain entities. Video, processing status, transcript, clip count.
  • Component responsibilities. Video list/grid; status badges; duration and source labels; per-row actions; empty-state illustration.
  • States. Loading skeleton for the list; empty state with a CTA to Upload/Import; success state renders the list; error state with retry; recovery reloads the list.
Page 11 of 65

Processing status

  • Information/state. Preset selection and asynchronous AI processing progress. Shows the pipeline stage (transcode, audio extraction, transcription, diarization, scene/silence detection, LLM analysis, virality scoring, boundary determination, clip generation, auto-reframe, caption generation, asset addition, metadata generation, storage) and the resulting clip count.
  • Primary actions. Choose a preset (Podcast, Webinar, Vlog, Gaming, Edukasi); start processing; open the Clip library when complete.
  • Supporting actions. Watch live progress over WebSocket; retry a failed stage; cancel processing.
  • Domain entities. Video, pipeline stage, preset, clip, virality score.
  • Component responsibilities. Preset selector; stage timeline with progress; live progress stream; clip-count summary; retry and cancel controls.
  • States. Loading skeleton while status loads; empty state before a preset is chosen; success state shows completed pipeline and a CTA to Clip library; error state for a failed stage with retry; recovery re-runs the failed stage.
Page 12 of 65

Clip library

  • Information/state. Searchable, filterable, sortable collection of generated clips and bulk actions. Shows clip thumbnails, virality scores, duration, topic, status and date.
  • Primary actions. Open a clip in the Editor; bulk export; bulk delete; bulk schedule; bulk move to folder; search transcript.
  • Supporting actions. Filter by score, duration, topic, status, date; sort by virality, newest, most popular; hover preview; switch grid/list view.
  • Domain entities. Clip, virality score, folder, transcript segment, schedule.
  • Component responsibilities. Masonry-ish 3-up grid of white cards with sticker score badges; list view; filter bar; sort control; hover preview player; bulk action bar; transcript search; marquee ticker of hook lines.
  • States. Loading skeleton for cards; empty state with a sad-disco-ball sticker and a CTA to Upload/Import; success state renders cards; error state with retry; recovery reloads the collection.
Page 13 of 65

Editor

  • Information/state. Focused multi-track clip editing, preview, and versioning workspace. Shows the media rail, preview stage, timeline, caption editor, asset panels and version history.
  • Primary actions. Trim, split, delete, duplicate, reorder; crop and reframe manually or automatically; edit captions (font, color, position, animation, karaoke style); add automatic or manual emoji; add stickers, shapes, progress bar; add B-roll from library or AI generation; add music and SFX; apply voice enhancement and noise removal; generate text-to-speech; issue AI assistant commands ("Buat hook lebih viral", "Pendekkan jadi 30 detik", "Tambah caption"); preview in real time; save a version.
  • Supporting actions. Undo/redo; keyboard shortcuts; drag and drop assets onto the timeline; restore a previous version.
  • Domain entities. Clip, clip version, clip asset, caption, B-roll, music, SFX, brand kit.
  • Component responsibilities. Media rail; preview stage on an ink stage; full-width dark timeline strip with coloured track blocks and a playhead; caption editor; asset panels; AI assistant input; version history list.
  • States. Loading skeleton for the timeline and preview; empty state when a clip has no assets yet; success state renders the edited clip; error state for a failed render or AI command with retry; recovery restores the last saved version.
Page 14 of 65

Exports

  • Information/state. Focused render configuration and retrieval destination for supported export formats. Shows export jobs, their format, resolution, aspect ratio and status.
  • Primary actions. Configure export (MP4, MOV, GIF, SRT, VTT, ASS; 720p, 1080p, 4K; 9:16, 1:1, 16:9, 4:5); start export; bulk export; download a single file; download a ZIP.
  • Supporting actions. Filter export jobs by status; retry a failed export.
  • Domain entities. Export job, clip, format, resolution, aspect ratio, ZIP archive.
  • Component responsibilities. Export configuration form; job list with status badges; download controls; ZIP download control.
  • States. Loading skeleton for the job list; empty state with a CTA to Clip library; success state shows completed jobs with download links; error state for a failed render with retry; recovery re-runs the export.
Page 15 of 65

Brand kit

  • Information/state. Workspace and client brand preset configuration. Holds logo, colors, fonts, intro, outro, caption templates, hook templates, watermark, default aspect ratio and saved presets.
  • Primary actions. Create or edit a brand kit; upload a logo; set colors and fonts; upload intro and outro; define caption and hook templates; set watermark and default aspect ratio; save as preset.
  • Supporting actions. Duplicate a brand kit; preview a template; delete a brand kit.
  • Domain entities. Brand kit, template, preset, watermark, aspect ratio.
  • Component responsibilities. Brand kit form; logo and media uploaders; color and font pickers; template editors; preset list; preview panel.
  • States. Loading skeleton for the kit; empty state with a CTA to create the first kit; success state renders the saved kit; error state for a failed upload or save with retry; recovery restores the last saved kit.
Page 16 of 65

Schedule

  • Information/state. Connected social accounts, publication scheduling, and publishing management. Shows the calendar, scheduled posts, connected accounts and publish status.
  • Primary actions. Connect a social account via OAuth; schedule a clip to TikTok, Instagram Reels, YouTube Shorts, LinkedIn or X; edit or cancel a scheduled post; publish now.
  • Supporting actions. Filter the calendar by platform or status; toggle automatic captions on publish.
  • Domain entities. Social account, schedule, clip, publish status, caption.
  • Component responsibilities. OAuth connect buttons per platform; calendar view; scheduled-post list; publish controls; automatic-caption toggle.
  • States. Loading skeleton for the calendar; empty state with a CTA to connect an account or schedule a clip; success state shows scheduled posts; error state for a failed OAuth or publish with retry; recovery re-authorizes or reschedules.
Page 17 of 65

Collaboration

  • Information/state. Shared comments, mentions, approvals, folders, permissions, and activity review. Shows comment threads, approval status, shared folders and the activity log.
  • Primary actions. Add a timestamped comment; mention a member; request or grant approval; create or open a shared folder; set per-project permissions; review the activity log.
  • Supporting actions. Filter comments by clip or author; resolve a comment.
  • Domain entities. Comment, mention, approval, folder, permission, activity.
  • Component responsibilities. Comment thread with timestamps; mention autocomplete; approval controls; folder tree; permission matrix; activity log list.
  • States. Loading skeleton for threads; empty state with a CTA to add the first comment; success state renders threads and approvals; error state for a failed comment or approval with retry; recovery restores the last state.
Page 18 of 65

Analytics

  • Information/state. Per-platform performance, virality comparison, top clips, and CSV export. Shows views, watch time, engagement, CTR, virality score versus actual performance, and top clips.
  • Primary actions. Filter by platform and date range; compare virality score to actual performance; view top clips; export CSV.
  • Supporting actions. Switch chart series; drill into a clip.
  • Domain entities. Analytics event, platform, clip, virality score, CSV export.
  • Component responsibilities. Metric cards; per-platform chart with cobalt and tangerine series; virality-versus-performance comparison; top-clips list with sticker score badges; CSV export control.
  • States. Loading skeleton for charts; empty state with a CTA to publish a clip; success state renders charts; error state for a failed data load with retry; recovery reloads the analytics.
Page 19 of 65

Team

  • Information/state. Workspace membership, invitations, roles, and permissions management. Shows members, their roles (Owner, Admin, Editor, Viewer), pending invitations and per-project permissions.
  • Primary actions. Invite a member by email; change a member's role; remove a member; manage per-project permissions.
  • Supporting actions. Resend an invitation; cancel an invitation.
  • Domain entities. Workspace member, invitation, role, permission.
  • Component responsibilities. Member list with role selectors; invite form; pending-invitation list; permission matrix.
  • States. Loading skeleton for the member list; empty state with a CTA to invite the first member; success state renders members; error state for a failed invite or role change with retry; recovery re-sends the invitation.
Page 20 of 65

Billing

  • Information/state. Subscription, usage, invoices, plan changes, and cancellation. Shows the current plan, usage meter, invoices and the free-trial status.
  • Primary actions. Start a free trial; upgrade or downgrade; cancel; view and download invoices; open Stripe checkout.
  • Supporting actions. View the usage meter; update payment method via Stripe.
  • Domain entities. Subscription, plan, usage record, invoice, Stripe checkout session.
  • Component responsibilities. Plan summary; usage meter; invoice list; upgrade/downgrade controls; cancel control; Stripe checkout launcher.
  • States. Loading skeleton for billing data; empty state when no subscription exists with a CTA to start a trial; success state renders the subscription; error state for a failed checkout or webhook with retry; recovery re-opens checkout.
Page 21 of 65

Settings

  • Information/state. Authenticated profile and preference management. Shows profile fields, language preference (Indonesian, English, and others), theme preference (light/dark), and notification preferences.
  • Primary actions. Update profile; change language; change theme; update notification preferences; save.
  • Supporting actions. Reset to defaults.
  • Domain entities. User profile, preference, language, theme.
  • Component responsibilities. Profile form; language selector; theme toggle; notification preferences; save control.
  • States. Loading skeleton for the profile; empty state not applicable; success state shows a saved confirmation toast; error state for a failed save with retry; recovery restores the last saved values.
Page 22 of 65

Admin

  • Information/state. Internal administration for platform operations, queues, logs, flags, usage, and moderation. Shows users, workspaces, subscriptions, queue status, error logs, feature flags, usage statistics and moderation queue.
  • Primary actions. Manage users, workspaces and subscriptions; monitor queues; review error logs; toggle feature flags; view usage statistics; moderate content.
  • Supporting actions. Filter logs by severity; search users and workspaces.
  • Domain entities. User, workspace, subscription, queue, error log, feature flag, usage statistic, moderation item.
  • Component responsibilities. User table; workspace table; subscription table; queue monitor; error log viewer; feature-flag toggles; usage charts; moderation queue.
  • States. Loading skeleton for each panel; empty state for a clean moderation queue; success state renders panels; error state per panel with retry; recovery reloads the failed panel.

3. Functional Requirements

Page 23 of 65

Authentication and Workspace

  • As a prospective user I should sign up with email, Google, or a magic link so that I can establish access to ClipForge AI. (explicit; lifecycle: initiator = prospective user; trigger = visit to Login/Register; observable result = authenticated session; access = anonymous entry; failure/recovery = invalid credentials or expired magic link with re-issue; continuation = redirect to Dashboard.)
  • As a returning user I should sign in with email, Google, or a magic link so that I can resume my workspace work. (explicit; lifecycle: initiator = returning user; trigger = visit to Login/Register; observable result = authenticated session; access = anonymous entry; failure/recovery = invalid credentials with retry; continuation = redirect to Dashboard.)
  • As a Workspace Owner I should create a multi-tenant workspace so that my team's videos, clips and brand assets are isolated from other tenants. (explicit; lifecycle: initiator = Workspace Owner; trigger = first sign-in; observable result = workspace created and owned; access = authenticated; failure/recovery = retry on failure; continuation = invite members and upload video.)
  • As a Workspace Owner or Workspace Admin I should invite members by email so that they can join the workspace with the correct role. (explicit; lifecycle: initiator = Owner/Admin; trigger = invite action on Team; observable result = pending invitation; participant = invited member accepts; access = authenticated with role; failure/recovery = resend invitation; continuation = member appears in the member list.)
  • As an invited member I should accept a workspace invitation so that I can access the workspace with my assigned role. (required_inference; lifecycle: initiator = invited member; trigger = invitation email; observable result = membership established; access = authenticated; failure/recovery = request a new invitation; continuation = access workspace pages.)
Page 24 of 65
  • As a workspace member I should have a role of Owner, Admin, Editor, or Viewer so that my access matches my responsibilities. (explicit; lifecycle: initiator = Owner/Admin; trigger = role assignment; observable result = role-bound access; access = authenticated; failure/recovery = role change by Owner/Admin; continuation = role-appropriate pages.)
  • As a workspace member I should manage my profile and preferences so that the product matches my language, theme and notification needs. (explicit; lifecycle: initiator = member; trigger = edit on Settings; observable result = saved preferences; access = authenticated; failure/recovery = retry save; continuation = preferences applied across the app.)
Page 25 of 65

Video Import

  • As a Video Editor or Content Creator / Podcaster I should upload MP4, MOV, MKV, WebM, MP3, or WAV files so that my source media enters the pipeline. (explicit; lifecycle: initiator = Editor/Creator; trigger = file selection or drop on Upload/Import; observable result = video record created and queued; access = role-restricted; failure/recovery = format validation error with re-selection; continuation = Processing status.)
  • As a Video Editor or Content Creator / Podcaster I should import from YouTube, Vimeo, Zoom, Google Drive, or Dropbox URLs so that I can clip media I did not download. (explicit; lifecycle: initiator = Editor/Creator; trigger = URL submission on Upload/Import; observable result = video record created and queued; access = role-restricted; failure/recovery = failed fetch with retry; continuation = Processing status.)
  • As a Video Editor or Content Creator / Podcaster I should be limited to a maximum source duration of 3 hours so that processing stays within platform limits. (explicit; lifecycle: initiator = Editor/Creator; trigger = upload/import; observable result = validation rejects over-length sources; access = role-restricted; failure/recovery = trim or choose another source; continuation = valid source proceeds.)
  • As a Video Editor or Content Creator / Podcaster I should see upload progress, resume an interrupted upload, and receive format validation so that large uploads are reliable. (explicit; lifecycle: initiator = Editor/Creator; trigger = upload start; observable result = progress and resume state; access = role-restricted; failure/recovery = resume from last chunk; continuation = upload completes and queues.)
  • As a Video Editor or Content Creator / Podcaster I should have my video enter a processing queue so that heavy work runs asynchronously. (explicit; lifecycle: initiator = Editor/Creator; trigger = successful upload/import; observable result = queued job; access = role-restricted; failure/recovery = automatic retry; continuation = pipeline execution.)
Page 26 of 65

AI Pipeline

  • As a Video Editor or Content Creator / Podcaster I should have my video transcoded to a standard format with FFmpeg so that downstream stages operate on a consistent input. (explicit; lifecycle: initiator = system on behalf of Editor/Creator; trigger = queued video; observable result = transcoded asset; access = role-restricted; failure/recovery = automatic retry; continuation = audio extraction.)
  • As a Video Editor or Content Creator / Podcaster I should have audio extracted from my video so that transcription can run. (explicit; lifecycle: initiator = system; trigger = transcode complete; observable result = audio asset; access = role-restricted; failure/recovery = automatic retry; continuation = transcription.)
  • As a Video Editor or Content Creator / Podcaster I should have my video transcribed with WhisperX/Whisper large-v3 so that I get an accurate transcript. (explicit; lifecycle: initiator = system; trigger = audio extracted; observable result = transcript with segments; access = role-restricted; failure/recovery = automatic retry; continuation = diarization.)
  • As a Video Editor or Content Creator / Podcaster I should have speakers diarized so that clips can attribute speech correctly. (explicit; lifecycle: initiator = system; trigger = transcript ready; observable result = speaker labels on segments; access = role-restricted; failure/recovery = automatic retry; continuation = scene/silence detection.)
  • As a Video Editor or Content Creator / Podcaster I should have scene and silence detected so that clip boundaries respect natural breaks. (explicit; lifecycle: initiator = system; trigger = diarization complete; observable result = scene and silence markers; access = role-restricted; failure/recovery = automatic retry; continuation = LLM analysis.)
Page 27 of 65
  • As a Video Editor or Content Creator / Podcaster I should have the transcript analyzed by an LLM for strong hooks, high emotion, controversy, valuable insight, interesting stories, punchlines, and viral quotes so that the best moments are identified. (explicit; lifecycle: initiator = system; trigger = transcript and markers ready; observable result = scored candidate moments; access = role-restricted; failure/recovery = automatic retry; continuation = virality scoring.)
  • As a Video Editor or Content Creator / Podcaster I should receive a virality score from 0 to 100 per clip so that I can prioritize the strongest clips. (explicit; lifecycle: initiator = system; trigger = LLM analysis complete; observable result = 0–100 score per clip; access = role-restricted; failure/recovery = automatic retry; continuation = boundary determination.)
  • As a Video Editor or Content Creator / Podcaster I should have optimal clip boundaries determined so that clips start and end at strong points. (explicit; lifecycle: initiator = system; trigger = scoring complete; observable result = clip boundaries; access = role-restricted; failure/recovery = automatic retry; continuation = clip generation.)
  • As a Video Editor or Content Creator / Podcaster I should receive 5 to 30 clips per video so that I have a usable set of candidates. (explicit; lifecycle: initiator = system; trigger = boundaries determined; observable result = 5–30 clips; access = role-restricted; failure/recovery = automatic retry; continuation = auto-reframe.)
  • As a Video Editor or Content Creator / Podcaster I should have clips auto-reframed to 9:16 with face tracking so that they fit vertical feeds. (explicit; lifecycle: initiator = system; trigger = clips generated; observable result = 9:16 reframed clips; access = role-restricted; failure/recovery = automatic retry; continuation = caption generation.)
Page 28 of 65
  • As a Video Editor or Content Creator / Podcaster I should have animated captions generated so that clips are readable without manual captioning. (explicit; lifecycle: initiator = system; trigger = reframe complete; observable result = animated caption track; access = role-restricted; failure/recovery = automatic retry; continuation = asset addition.)
  • As a Video Editor or Content Creator / Podcaster I should have emoji, B-roll, SFX, and music added so that clips are engaging by default. (explicit; lifecycle: initiator = system; trigger = captions generated; observable result = decorated clips; access = role-restricted; failure/recovery = automatic retry; continuation = metadata generation.)
  • As a Video Editor or Content Creator / Podcaster I should have a title, description, hashtags, and thumbnail generated so that clips are publish-ready. (explicit; lifecycle: initiator = system; trigger = assets added; observable result = metadata and thumbnail; access = role-restricted; failure/recovery = automatic retry; continuation = storage.)
  • As a Video Editor or Content Creator / Podcaster I should have all versions saved to storage so that I can revisit and restore them. (explicit; lifecycle: initiator = system; trigger = metadata generated; observable result = persisted versions; access = role-restricted; failure/recovery = automatic retry; continuation = Clip library.)

Clip Library

Page 29 of 65
  • As a Video Editor, Content Creator / Podcaster, Agency / Marketing Team Member, or Viewer / Reviewer I should browse clips in grid or list view so that I can find the clip I need. (explicit; lifecycle: initiator = member; trigger = open Clip library; observable result = rendered collection; access = role-restricted; failure/recovery = retry load; continuation = open a clip.)
  • As a member I should filter clips by score, duration, topic, status, and date so that I can narrow the collection. (explicit; lifecycle: initiator = member; trigger = filter change; observable result = filtered collection; access = role-restricted; failure/recovery = reset filters; continuation = open a clip.)
  • As a member I should sort clips by virality, newest, or most popular so that I can prioritize. (explicit; lifecycle: initiator = member; trigger = sort change; observable result = reordered collection; access = role-restricted; failure/recovery = reset sort; continuation = open a clip.)
  • As a member I should preview a clip on hover so that I can judge it without opening the Editor. (explicit; lifecycle: initiator = member; trigger = hover; observable result = silent preview; access = role-restricted; failure/recovery = fall back to thumbnail; continuation = open or dismiss.)
  • As a member I should perform bulk actions — export, delete, schedule, move to folder so that I can manage many clips at once. (explicit; lifecycle: initiator = member; trigger = multi-select and action; observable result = bulk operation applied; access = role-restricted; failure/recovery = retry the bulk action; continuation = updated collection.)
  • As a member I should search the transcript so that I can find clips by spoken content. (explicit; lifecycle: initiator = member; trigger = search query; observable result = matching clips; access = role-restricted; failure/recovery = clear query; continuation = open a clip.)
Page 30 of 65

Clip Editor

  • As a Video Editor or Agency / Marketing Team Member I should edit on a multi-track timeline so that I can compose video, audio, captions and overlays. (explicit; lifecycle: initiator = Editor/Agency member; trigger = open Editor; observable result = editable timeline; access = role-restricted; failure/recovery = restore last saved version; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should trim, split, delete, duplicate, and reorder so that I can shape the clip. (explicit; lifecycle: initiator = Editor/Agency member; trigger = timeline action; observable result = updated timeline; access = role-restricted; failure/recovery = undo; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should crop and reframe manually or automatically so that the subject is well framed. (explicit; lifecycle: initiator = Editor/Agency member; trigger = crop/reframe action; observable result = reframed clip; access = role-restricted; failure/recovery = revert to automatic; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should edit captions with font, color, position, animation, and karaoke style so that captions match my brand and style. (explicit; lifecycle: initiator = Editor/Agency member; trigger = caption edit; observable result = styled captions; access = role-restricted; failure/recovery = revert to template; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should add automatic or manual emoji so that clips feel expressive. (explicit; lifecycle: initiator = Editor/Agency member; trigger = emoji action; observable result = emoji on timeline; access = role-restricted; failure/recovery = remove emoji; continuation = preview and save.)
Page 31 of 65
  • As a Video Editor or Agency / Marketing Team Member I should add stickers, shapes, and a progress bar so that clips carry visual structure. (explicit; lifecycle: initiator = Editor/Agency member; trigger = asset action; observable result = overlay on timeline; access = role-restricted; failure/recovery = remove overlay; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should add B-roll from the library or AI generation so that clips have supporting visuals. (explicit; lifecycle: initiator = Editor/Agency member; trigger = B-roll action; observable result = B-roll on timeline; access = role-restricted; failure/recovery = retry generation; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should add music and SFX from the library so that clips have audio polish. (explicit; lifecycle: initiator = Editor/Agency member; trigger = audio action; observable result = audio track on timeline; access = role-restricted; failure/recovery = remove track; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should apply voice enhancement and noise removal so that speech is clear. (explicit; lifecycle: initiator = Editor/Agency member; trigger = audio enhancement action; observable result = enhanced audio; access = role-restricted; failure/recovery = revert; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should generate text-to-speech so that I can add narration. (explicit; lifecycle: initiator = Editor/Agency member; trigger = TTS action; observable result = generated audio track; access = role-restricted; failure/recovery = retry generation; continuation = preview and save.)
  • As a Video Editor or Agency / Marketing Team Member I should issue AI assistant commands such as "Buat hook lebih viral", "Pendekkan jadi 30 detik", and "Tambah caption" so that I can iterate quickly. (explicit; lifecycle: initiator = Editor/Agency member; trigger = assistant command; observable result = applied edit; access = role-restricted; failure/recovery = retry command; continuation = preview and save.)
Page 32 of 65
  • As a Video Editor or Agency / Marketing Team Member I should preview in real time so that I can judge edits as I make them. (explicit; lifecycle: initiator = Editor/Agency member; trigger = timeline change; observable result = updated preview; access = role-restricted; failure/recovery = reload preview; continuation = save.)
  • As a Video Editor or Agency / Marketing Team Member I should keep version history so that I can restore a previous state. (explicit; lifecycle: initiator = Editor/Agency member; trigger = save; observable result = version entry; access = role-restricted; failure/recovery = restore previous version; continuation = continue editing.)
Page 33 of 65

Brand Kit

  • As a Workspace Owner, Workspace Admin, Video Editor, or Agency / Marketing Team Member I should configure logo, colors, fonts, intro, and outro so that clips carry the brand. (explicit; lifecycle: initiator = member; trigger = edit on Brand kit; observable result = saved brand kit; access = role-restricted; failure/recovery = retry save; continuation = apply to clips.)
  • As a member I should define caption templates and hook templates so that clips are consistent. (explicit; lifecycle: initiator = member; trigger = template edit; observable result = saved templates; access = role-restricted; failure/recovery = retry save; continuation = apply to clips.)
  • As a member I should set a watermark and a default aspect ratio so that exports match my standard. (explicit; lifecycle: initiator = member; trigger = setting change; observable result = saved defaults; access = role-restricted; failure/recovery = retry save; continuation = applied on export.)
  • As a member I should save brand kits as presets so that I can reuse them across projects. (explicit; lifecycle: initiator = member; trigger = save preset; observable result = reusable preset; access = role-restricted; failure/recovery = retry save; continuation = apply preset.)
Page 34 of 65

Export and Publish

  • As a Video Editor, Content Creator / Podcaster, or Agency / Marketing Team Member I should export MP4, MOV, GIF, SRT, VTT, or ASS so that I get the format I need. (explicit; lifecycle: initiator = member; trigger = export action; observable result = export job and file; access = role-restricted; failure/recovery = retry export; continuation = download.)
  • As a member I should choose 720p, 1080p, or 4K resolution so that output matches the destination. (explicit; lifecycle: initiator = member; trigger = resolution selection; observable result = configured export; access = role-restricted; failure/recovery = change resolution; continuation = start export.)
  • As a member I should choose 9:16, 1:1, 16:9, or 4:5 aspect ratio so that output fits the platform. (explicit; lifecycle: initiator = member; trigger = aspect selection; observable result = configured export; access = role-restricted; failure/recovery = change aspect; continuation = start export.)
  • As a Social Media Manager or Content Creator / Podcaster I should schedule clips to TikTok, Instagram Reels, YouTube Shorts, LinkedIn, and X so that they publish at the right time. (explicit; lifecycle: initiator = SMM/Creator; trigger = schedule action; observable result = scheduled post; participant = platform publishes; access = role-restricted; failure/recovery = reschedule; continuation = publish status.)
  • As a Social Media Manager or Content Creator / Podcaster I should connect social accounts via OAuth so that scheduling and publishing are authorized. (required_inference; lifecycle: initiator = SMM/Creator; trigger = connect action on Schedule; observable result = connected account; access = role-restricted; failure/recovery = re-authorize; continuation = schedule a clip.)
Page 35 of 65
  • As a Social Media Manager or Content Creator / Podcaster I should have captions applied automatically on publish so that posts are accessible. (explicit; lifecycle: initiator = SMM/Creator; trigger = publish; observable result = captioned post; access = role-restricted; failure/recovery = publish without captions or retry; continuation = analytics.)
  • As a member I should perform bulk export and download a ZIP so that I can deliver many clips at once. (explicit; lifecycle: initiator = member; trigger = bulk export; observable result = ZIP archive; access = role-restricted; failure/recovery = retry export; continuation = download.)
Page 36 of 65

Collaboration

  • As a Workspace Admin, Agency / Marketing Team Member, Viewer / Reviewer, or Video Editor I should add timestamped comments so that feedback is precise. (explicit; lifecycle: initiator = member; trigger = comment action; observable result = timestamped comment; access = role-restricted; failure/recovery = retry comment; continuation = thread.)
  • As a member I should mention other members so that they are notified. (explicit; lifecycle: initiator = member; trigger = mention; observable result = notification to mentioned member; access = role-restricted; failure/recovery = retry mention; continuation = response.)
  • As a member I should participate in an approval workflow so that clips are approved before publishing. (explicit; lifecycle: initiator = member; trigger = approval request; observable result = approval status; participant = approver grants or rejects; access = role-restricted; failure/recovery = re-request approval; continuation = publish or revise.)
  • As a member I should review the activity log so that workspace actions are auditable. (explicit; lifecycle: initiator = member; trigger = open Collaboration; observable result = activity list; access = role-restricted; failure/recovery = retry load; continuation = act on an entry.)
  • As a member I should use shared folders so that clips are organized across the team. (explicit; lifecycle: initiator = member; trigger = folder action; observable result = folder structure; access = role-restricted; failure/recovery = retry move; continuation = open a folder.)
  • As a Workspace Admin I should set per-project permissions so that access matches responsibility. (explicit; lifecycle: initiator = Admin; trigger = permission change; observable result = updated permissions; access = role-restricted; failure/recovery = revert; continuation = members see updated access.)
Page 37 of 65

Analytics

  • As a Social Media Manager, Workspace Owner, or Agency / Marketing Team Member I should see views, watch time, engagement, and CTR so that I can judge performance. (explicit; lifecycle: initiator = member; trigger = open Analytics; observable result = metrics; access = role-restricted; failure/recovery = retry load; continuation = drill into a clip.)
  • As a member I should see metrics per platform so that I can compare channels. (explicit; lifecycle: initiator = member; trigger = platform filter; observable result = per-platform metrics; access = role-restricted; failure/recovery = reset filter; continuation = drill into a clip.)
  • As a member I should compare virality score to actual performance so that I can trust the score. (explicit; lifecycle: initiator = member; trigger = open comparison; observable result = comparison chart; access = role-restricted; failure/recovery = retry load; continuation = adjust strategy.)
  • As a member I should see top clips so that I can identify winners. (explicit; lifecycle: initiator = member; trigger = open top clips; observable result = ranked list; access = role-restricted; failure/recovery = retry load; continuation = open a clip.)
  • As a member I should export CSV so that I can analyze offline. (explicit; lifecycle: initiator = member; trigger = export action; observable result = CSV file; access = role-restricted; failure/recovery = retry export; continuation = download.)
Page 38 of 65

Billing and Subscription

  • As a Workspace Owner I should start a free trial so that I can evaluate the product. (explicit; lifecycle: initiator = Owner; trigger = start trial on Billing; observable result = trial subscription; access = role-restricted; failure/recovery = retry checkout; continuation = use plan features.)
  • As a Workspace Owner I should choose Free, Pro, Team, or Enterprise so that my plan matches my needs. (explicit; lifecycle: initiator = Owner; trigger = plan selection; observable result = active plan; access = role-restricted; failure/recovery = retry checkout; continuation = plan features.)
  • As a Workspace Owner I should be limited by video minutes per month so that usage matches my plan. (explicit; lifecycle: initiator = Owner; trigger = usage; observable result = enforced limit; access = role-restricted; failure/recovery = upgrade; continuation = continued use.)
  • As a Workspace Owner I should complete Stripe checkout so that my subscription is provisioned. (required_inference; lifecycle: initiator = Owner; trigger = checkout action; observable result = provisioned subscription; access = role-restricted; failure/recovery = retry checkout; continuation = plan features.)
  • As a Workspace Owner I should see a usage meter so that I know how much of my plan I have used. (explicit; lifecycle: initiator = Owner; trigger = open Billing; observable result = usage meter; access = role-restricted; failure/recovery = retry load; continuation = upgrade or continue.)
  • As a Workspace Owner I should view invoices so that I can reconcile billing. (explicit; lifecycle: initiator = Owner; trigger = open invoices; observable result = invoice list; access = role-restricted; failure/recovery = retry load; continuation = download invoice.)
Page 39 of 65
  • As a Workspace Owner I should upgrade, downgrade, or cancel so that my plan stays current. (explicit; lifecycle: initiator = Owner; trigger = plan change; observable result = updated subscription; access = role-restricted; failure/recovery = retry change; continuation = updated plan.)

Admin Panel

Page 40 of 65
  • As a Platform Administrator I should manage users, workspaces, and subscriptions so that the platform stays healthy. (explicit; lifecycle: initiator = Platform Administrator; trigger = open Admin; observable result = managed entities; access = role-restricted; failure/recovery = retry action; continuation = monitor.)
  • As a Platform Administrator I should monitor queues so that processing stays on track. (explicit; lifecycle: initiator = Platform Administrator; trigger = open queue monitor; observable result = queue status; access = role-restricted; failure/recovery = retry load; continuation = intervene.)
  • As a Platform Administrator I should review error logs so that I can diagnose failures. (explicit; lifecycle: initiator = Platform Administrator; trigger = open logs; observable result = log list; access = role-restricted; failure/recovery = retry load; continuation = act on an entry.)
  • As a Platform Administrator I should toggle feature flags so that I can control rollout. (explicit; lifecycle: initiator = Platform Administrator; trigger = flag toggle; observable result = updated flag; access = role-restricted; failure/recovery = revert; continuation = observe effect.)
  • As a Platform Administrator I should view usage statistics so that I can plan capacity. (explicit; lifecycle: initiator = Platform Administrator; trigger = open statistics; observable result = usage charts; access = role-restricted; failure/recovery = retry load; continuation = plan.)
  • As a Platform Administrator I should moderate content so that abuse is handled. (explicit; lifecycle: initiator = Platform Administrator; trigger = open moderation queue; observable result = moderation action; access = role-restricted; failure/recovery = retry action; continuation = resolved item.)
Page 41 of 65

4. User Personas

Workspace Owner

The Workspace Owner is the accountable principal of a multi-tenant workspace. They create the workspace, decide who belongs to it, and carry the commercial relationship with ClipForge AI. Their work is different from other members because it is the only role that owns the subscription lifecycle: starting the free trial, choosing Free, Pro, Team or Enterprise, watching the usage meter against monthly video-minute limits, viewing invoices, and performing upgrade, downgrade or cancel. They also set the workspace's brand kit defaults and can manage membership alongside the Workspace Admin. Their primary goal is a workspace that runs within plan limits, with members holding correct roles and billing active. They succeed when the usage meter stays within plan, invoices are current, and the team can work without access friction. They interact with the Workspace Admin on membership and permissions, with the Video Editor and Content Creator / Podcaster on processing volume that drives usage, and with the Social Media Manager on publishing cadence.

Page 42 of 65

Workspace Admin

The Workspace Admin administers the workspace on behalf of the Owner. Their distinct work is membership and access: inviting members by email, assigning Owner/Admin/Editor/Viewer roles, managing per-project permissions, overseeing shared folders, and reviewing the activity log for auditability. They also participate in content moderation within the workspace. Their primary goal is that every member has the correct access and that workspace activity is auditable. They succeed when invitations are accepted, roles match responsibilities, and the activity log shows a coherent record. They interact with the Workspace Owner on plan-driven membership limits, with the Video Editor and Agency / Marketing Team Member on project permissions, and with the Viewer / Reviewer on approval participation.

Video Editor

The Video Editor is the craftsperson of the workspace. Their work is the deepest in the product: importing long-form video by upload or URL, choosing a preset, watching the AI pipeline run, reviewing generated clips with virality scores, and then editing in the multi-track editor — trim, split, delete, duplicate, reorder, manual and automatic crop/reframe, caption editing with font, color, position, animation and karaoke style, automatic and manual emoji, stickers, shapes, progress bar, B-roll from library or AI generation, music and SFX, voice enhancement, noise removal, text-to-speech, AI assistant commands, real-time preview and version history. Their primary goal is clips that preview correctly, are versioned, and export or schedule in the required formats and aspect ratios. They succeed when a clip passes preview and reaches export or schedule without rework. They interact with the Content Creator / Podcaster on source material, with the Agency / Marketing Team Member on client brand kits, and with the Viewer / Reviewer on feedback.

Page 43 of 65

Social Media Manager

The Social Media Manager owns distribution. Their distinct work is connecting social accounts via OAuth, scheduling clips to TikTok, Instagram Reels, YouTube Shorts, LinkedIn and X, managing the schedule calendar, ensuring captions are applied automatically on publish, and tracking per-platform performance in Analytics. Their primary goal is that posts publish on time with captions and that analytics show engagement. They succeed when scheduled posts publish as planned and the analytics view shows views, watch time, engagement and CTR per platform. They interact with the Video Editor on clip readiness, with the Workspace Owner on plan limits that affect publishing volume, and with the Agency / Marketing Team Member on client publishing calendars.

Content Creator / Podcaster

The Content Creator / Podcaster is the originator of the long-form material. Their work is to upload podcast or creator content, choose a preset (Podcast, Webinar, Vlog, Gaming, Edukasi), review AI-selected viral moments and virality scores, and export clips for personal channels. They are less likely to perform deep editing than the Video Editor, and their primary goal is high-scoring clips produced and exported without deep manual editing. They succeed when the pipeline returns a strong set of clips and they can export or schedule them directly. They interact with the Video Editor when a clip needs refinement, with the Social Media Manager on publishing, and with the Workspace Owner on plan usage.

Page 44 of 65

Agency / Marketing Team Member

The Agency / Marketing Team Member works across client projects. Their distinct work is operating in shared folders, collaborating via timestamped comments and mentions, participating in approval workflows, and applying brand kits per client. Their primary goal is that client clips are approved and delivered on schedule. They succeed when approvals are granted and delivery happens on time. They interact with the Workspace Admin on per-project permissions, with the Video Editor on edits, with the Viewer / Reviewer on approvals, and with the Social Media Manager on client publishing.

Viewer / Reviewer

The Viewer / Reviewer has read-oriented workspace access. Their distinct work is reviewing clips, leaving timestamped comments and mentions, and participating in approval workflows by granting or rejecting approvals. Their primary goal is that feedback is recorded and approvals are granted or rejected. They succeed when their feedback is visible to the team and their approval decision is recorded. They interact with the Video Editor and Agency / Marketing Team Member on revisions, and with the Workspace Admin on their access level.

Page 45 of 65

Platform Administrator

The Platform Administrator operates the internal admin panel. Their distinct work is managing users, workspaces and subscriptions; monitoring processing queues; reviewing error logs; toggling feature flags; viewing usage statistics; and moderating content. Their primary goal is that the platform stays healthy and abuse is handled. They succeed when queues are healthy, error logs are triaged, flags reflect intended rollout, and moderation items are resolved. They interact with no workspace-scoped personas directly; their counterpart is the platform itself.

5. Core User Flows

Flow 1 — Prospective user discovers ClipForge AI and enrolls

  1. The prospective user opens the Landing page and reads the product promise, the AI pipeline story, and the virality score concept.
  2. They open the Pricing page and compare Free, Pro, Team and Enterprise plans and their monthly video-minute limits.
  3. They choose a plan and proceed to Login/Register.
  4. On Login/Register, they sign up with email, Google, or a magic link. On success they are redirected to the Dashboard.
  5. If the magic link is expired or credentials are invalid, the page shows an error and offers to re-issue the magic link or return to the form.
  6. On the Dashboard, they create their first workspace and become its Workspace Owner.
Page 46 of 65

Flow 2 — Workspace Owner invites a member and the member joins

  1. The Workspace Owner opens the Team page.
  2. They enter the invitee's email and choose a role: Owner, Admin, Editor, or Viewer.
  3. They submit the invitation. The Team page shows a pending invitation.
  4. The invited member receives the invitation email and opens Login/Register to establish identity if they do not already have one.
  5. The invited member accepts the invitation and joins the workspace with the assigned role.
  6. If the invitation is not received, the Owner or Workspace Admin resends it from the Team page.
  7. The member now appears in the member list and can access role-appropriate pages.
Page 47 of 65

Flow 3 — Video Editor imports a long video and runs the AI pipeline

  1. The Video Editor opens Upload/Import.
  2. They drag and drop or select an MP4, MOV, MKV, WebM, MP3, or WAV file, or paste a YouTube, Vimeo, Zoom, Google Drive, or Dropbox URL.
  3. The page validates the format and enforces the 3-hour maximum source duration. If the source is unsupported or too long, the page shows an error and the Editor chooses another source.
  4. The upload shows progress and can be resumed if interrupted. On completion the video enters the processing queue.
  5. The Editor is routed to Processing status, where they choose a preset: Podcast, Webinar, Vlog, Gaming, or Edukasi.
  6. The pipeline runs asynchronously: FFmpeg transcode, audio extraction, WhisperX/Whisper large-v3 transcription, speaker diarization, scene and silence detection, LLM transcript analysis for hooks, high emotion, controversy, valuable insight, interesting stories, punchlines and viral quotes, virality scoring 0–100, optimal clip boundary determination, generation of 5–30 clips, 9:16 auto-reframe with face tracking, animated caption generation, emoji/B-roll/SFX/music addition, title/description/hashtags/thumbnail generation, and storage of all versions.
  7. The Editor watches live progress over WebSocket. If a stage fails, the page offers a retry for that stage.
  8. When the pipeline completes, the page shows the resulting clip count and a CTA to the Clip library.
Page 48 of 65

Flow 4 — Video Editor reviews clips and edits one

  1. The Video Editor opens the Clip library and sees the generated clips as white cards with circular lime virality sticker badges.
  2. They filter by score, duration, topic, status or date, sort by virality, newest or most popular, and search the transcript to find a specific moment.
  3. They hover a card to see a silent preview.
  4. They open a clip in the Editor.
  5. On the multi-track timeline they trim, split, delete, duplicate and reorder; they crop and reframe manually or automatically; they edit captions with font, color, position, animation and karaoke style; they add automatic or manual emoji, stickers, shapes and a progress bar; they add B-roll from the library or AI generation; they add music and SFX; they apply voice enhancement and noise removal; they generate text-to-speech; and they issue AI assistant commands such as "Buat hook lebih viral", "Pendekkan jadi 30 detik", and "Tambah caption".
  6. They preview in real time. If a render or AI command fails, the Editor shows an error and offers a retry, and the last saved version can be restored.
  7. They save the clip, creating a version entry in version history.
Page 49 of 65

Flow 5 — Video Editor exports a clip

  1. The Video Editor opens the Exports page from the Editor or the Clip library.
  2. They configure the export: MP4, MOV, GIF, SRT, VTT or ASS; 720p, 1080p or 4K; 9:16, 1:1, 16:9 or 4:5.
  3. They start the export. The job appears in the job list with a status badge.
  4. On success, they download the file. For multiple clips they perform a bulk export and download a ZIP.
  5. If the render fails, the job shows an error and offers a retry.

Flow 6 — Social Media Manager connects accounts and schedules a clip

  1. The Social Media Manager opens the Schedule page.
  2. They connect TikTok, Instagram Reels, YouTube Shorts, LinkedIn and X via OAuth. If authorization fails, they re-authorize.
  3. They select a clip and schedule it to one or more platforms, choosing a date and time.
  4. They toggle automatic captions on publish.
  5. The scheduled post appears on the calendar. They can edit or cancel it, or publish now.
  6. If a publish fails, the post shows an error and can be rescheduled.
Page 50 of 65

Flow 7 — Agency / Marketing Team Member collaborates and obtains approval

  1. The Agency / Marketing Team Member opens the Collaboration page for a client project.
  2. They add a timestamped comment on a clip and mention a teammate, who receives a notification.
  3. They request approval for the clip. The approver — a Viewer / Reviewer or Workspace Admin — grants or rejects it.
  4. If rejected, the Agency member revises the clip in the Editor and re-requests approval.
  5. They organize clips into shared folders and, if they are a Workspace Admin, set per-project permissions.
  6. The activity log records the actions for audit.

Flow 8 — Social Media Manager reviews analytics

  1. The Social Media Manager opens the Analytics page.
  2. They filter by platform and date range and see views, watch time, engagement and CTR.
  3. They compare virality score to actual performance and review the top clips list.
  4. They export CSV for offline analysis.
  5. If the data fails to load, the page shows an error and offers a retry.
Page 51 of 65

Flow 9 — Workspace Owner manages billing

  1. The Workspace Owner opens the Billing page.
  2. They start a free trial or choose Free, Pro, Team or Enterprise.
  3. They complete Stripe checkout. On success the subscription is provisioned.
  4. They monitor the usage meter against monthly video-minute limits.
  5. They view and download invoices.
  6. They upgrade, downgrade or cancel as needed. If checkout fails, they retry.

Flow 10 — Workspace Owner and Workspace Admin configure the brand kit

  1. The Workspace Owner or Workspace Admin opens the Brand kit page.
  2. They upload a logo, set colors and fonts, upload intro and outro, define caption and hook templates, set a watermark and a default aspect ratio.
  3. They save the brand kit as a preset.
  4. The Video Editor and Agency / Marketing Team Member apply the preset to clips in the Editor.
  5. If an upload or save fails, the page shows an error and offers a retry, and the last saved kit can be restored.

Flow 11 — Platform Administrator operates the platform

  1. The Platform Administrator opens the Admin page.
  2. They manage users, workspaces and subscriptions.
  3. They monitor processing queues and review error logs.
  4. They toggle feature flags and view usage statistics.
  5. They moderate content from the moderation queue.
  6. If a panel fails to load, it shows an error and offers a retry.
Page 52 of 65

Flow 12 — Member manages profile and preferences

  1. A workspace member opens the Settings page.
  2. They update their profile, change language (Indonesian, English, and others), change theme (light/dark), and update notification preferences.
  3. They save. A confirmation toast appears.
  4. If the save fails, the page shows an error and offers a retry, and the last saved values are restored.

6. Visuals Colors and Theme

The visual direction is saturated maximalism after Jessica Walsh — the editing bay as a hot-pink studio floor. The muse is Jessica Walsh. The headline is "ONE HOUR IN. THIRTY CLIPS OUT." The register is performance, momentum and creative ego: users are judged by how their clips pop in a feed, so the tool itself must feel like a colourful studio with taste, not a grey dashboard. The emotional job is "this makes me look more creative than I actually am."

Page 53 of 65

Colour tokens (light mode)

RoleHexUsage
Background#FFE9F0Pale pink paper ground for app content
Surface#FFFFFFPure white cards with 2px ink borders
Text#141118Near-black body text on white or #FFE9F0 (contrast 16:1 and 13:1)
Primary#FF2E88Hot pink ground colour of the product shell (top bars, section bands, active states), ~30% of any screen
Accent#C6FF3DLime — the single hot accent reserved for virality scores, the primary CTA and playback progress
Muted#7A6F7CSecondary text and micro-labels
Tangerine#FF7A1APlatform tags and chart series only
Cobalt#1B3BFFPlatform tags and chart series only
Ink#1411182px outlines on cards, 4px on hero panels; offset solid shadows 8px 8px 0 #141118

Accessibility rule. Never place white or lime text on hot pink at body size — on pink, text is always #141118. Tangerine and cobalt never appear as text on pink.

Page 54 of 65

Typography

  • Headings: Archivo Black at 900 weight, uppercase, tracking -0.02em, set enormous and tightly stacked. Display headlines run 44px on mobile to 132px on desktop with clamp(), and occasionally one word is set in outline (text-stroke) to break the slab.
  • Sub-headings: Space Grotesk 700 at 20–28px.
  • Micro-labels: Space Grotesk 500 uppercase 11px with 0.14em tracking.
  • Body: Space Grotesk.
  • Scale: 1.333 modular — 132/88/56/36/24/17/15. Display clamp(44px, 11vw, 132px); section heads clamp(32px, 5vw, 56px); card titles 24px; body 17px/1.6; labels 11px uppercase.

Shape language

Hard-edged colour fields with deliberately rounded exceptions: clip cards and buttons carry 18–22px radii, sticker badges are fully circular, timeline blocks are sharp-cornered rectangles so the editor reads as a tool inside a playful shell. 2px ink outlines on cards, 4px on hero panels; offset solid shadows (8px 8px 0 #141118) instead of soft blurs; organic squiggle and starburst SVG props used as section punctuation.

Page 55 of 65

Layout

Colour-blocked sections that change ground every band (pink → white → lime → ink) with no soft transitions. The landing hero is a full-bleed pink field with a 12-column asymmetric grid where type occupies columns 1–7 and a stack of tilted 9:16 clip mockups occupies 8–12, bleeding off the right edge. The app shell uses a 260px ink sidebar with a lime active pill, content on #FFE9F0, and the clip library as a masonry-ish 3-up grid of white cards with sticker score badges. The Editor is a three-zone layout — media rail left, preview centre on an ink stage, timeline as a full-width dark strip with coloured track blocks. Everything collapses to a single column at 375px with 20px gutters.

Imagery

Surreal, art-directed props photographed or rendered on flat colour grounds: a 9:16 phone frame held by a hand wearing a lime glove, oversized foam letters spelling hook words, a pink rotary telephone as the "import from URL" motif, cassette reels as the audio-track icon. Plus flat sticker illustration for empty states (a sad disco ball for "no clips yet"). No stock office photography, no gradient blobs, no glassmorphism.

Page 56 of 65

7. Signature Design Concept

The public entry is a full-bleed hot-pink #FF2E88 field that reads as a studio floor. On the left seven columns, an oversized uppercase Archivo Black headline spans to the viewport edge — "ONE HOUR IN. THIRTY CLIPS OUT." — set at clamp(44px, 11vw, 132px) with the word "THIRTY" in lime outline. A 17px ink subline sits beneath it, and one lime pill CTA with a 4px ink offset shadow is pinned directly under the type block. On the right five columns, five 9:16 clip mockups in white 2px-outlined frames are tilted between -6deg and +6deg, overlapping each other and bleeding past the right viewport edge, each carrying a circular lime virality badge (94, 88, 81, 76, 69). A thin ink ticker strip runs along the bottom of the hero with rotating hook lines. On mobile the mockups become a horizontally scrollable row beneath the headline, still bleeding off the edge by design. The concept recomposes only accepted content, states and controls — it introduces no new behaviour, page, or destination.

8. Interaction Model & Motion Direction

Interaction Model: Animated Motion Tempo: expressive Hero Dimensionality: layered_2d

Page 57 of 65

Landing Hero Motion Brief

  • Focal subject. The five tilted 9:16 clip mockups with circular lime virality badges, arranged as a stack bleeding off the right edge of the hot-pink field.
  • Input → transformation → outcome thesis. As the visitor scrolls, the section grounds wipe between colour blocks (pink → white → lime → ink) with a hard wipe, and the clip mockups scale-in with a 120ms overshoot and rotate ±1.5deg on hover. The virality badge numbers count up with a lime fill sweep. The outcome is a composed first frame that communicates "long video in, many scored clips out" using only accepted product behaviour.
  • Motion vocabulary. Expressive but purposeful: clip cards scale-in with a 120ms overshoot and rotate ±1.5deg on hover; virality score counts up with a lime fill sweep; section grounds wipe between colour blocks on scroll; a marquee ticker of generated hook lines runs along the top of the clip library. The timeline playhead is the only continuously moving element.
  • Composed first frame. Full-bleed pink field; oversized uppercase headline occupying columns 1–7 with "THIRTY" in lime outline; ink subline; lime pill CTA with 4px ink offset shadow; five tilted 9:16 mockups in columns 8–12 with lime virality badges; ink ticker strip along the bottom.
  • Reduced-motion state. All motion collapses to instant state changes under prefers-reduced-motion, and marquees become horizontally scrollable rows so every item can be brought fully into view.
Page 58 of 65

9. Non-Functional Requirements

  • Horizontal scalability. The system must scale horizontally. (explicit; rationale: accepted non-functional requirement.)
  • Asynchronous video processing. Video processing must run asynchronously off the request path. (explicit; rationale: accepted non-functional requirement and required for the 15-minute acceptance target.)
  • Automatic retry. Failed processing stages must retry automatically. (explicit; rationale: accepted non-functional requirement.)
  • Rate limiting. API endpoints must be rate limited. (explicit; rationale: accepted non-functional requirement.)
  • Data encryption. Data must be encrypted. (explicit; rationale: accepted non-functional requirement.)
  • GDPR and privacy. The product must comply with GDPR and privacy expectations. (explicit; rationale: accepted non-functional requirement.)
  • Daily backups. Backups must run daily. (explicit; rationale: accepted non-functional requirement.)
  • Audit log. An audit log must record workspace and platform actions. (explicit; rationale: accepted non-functional requirement.)
  • SSO for Enterprise. SSO is scoped to Enterprise. (explicit; rationale: accepted non-functional requirement and Phase 4 roadmap item.)
  • Public API. A public API is a Phase 4 roadmap item. (explicit; rationale: accepted non-functional requirement and Phase 4 roadmap item.)
  • Webhooks. Webhooks are a Phase 4 roadmap item. (explicit; rationale: accepted non-functional requirement and Phase 4 roadmap item.)
  • Multi-language. The product must support Indonesian, English, and others. (explicit; rationale: accepted non-functional requirement.)
  • WCAG AA accessibility. The UI must be accessible to WCAG AA. (explicit; rationale: accepted hard constraint.)
  • Responsive UI. The UI must be responsive. (explicit; rationale: accepted acceptance criterion.)
Page 59 of 65
  • Performance acceptance. A 1-hour video must be processed in under 15 minutes. (explicit; rationale: accepted acceptance criterion.)
  • Transcription accuracy. Transcription accuracy must exceed 90%. (explicit; rationale: accepted acceptance criterion.)
  • Virality correlation. The virality score must correlate with engagement. (explicit; rationale: accepted acceptance criterion.)
  • Export acceptance. 1080p export must succeed. (explicit; rationale: accepted acceptance criterion.)
  • Stability. No critical errors. (explicit; rationale: accepted acceptance criterion.)
  • Billing. Billing must work. (explicit; rationale: accepted acceptance criterion.)
  • Multi-tenant security. Multi-tenant isolation must be secure. (explicit; rationale: accepted acceptance criterion.)
  • Local run. The app must run locally with docker-compose up. (explicit; rationale: accepted hard constraint.)
  • No hardcoded API keys. API keys must not be hardcoded. (explicit; rationale: accepted hard constraint.)
  • No proprietary code. Proprietary licensed code must not be copied. (explicit; rationale: accepted hard constraint.)
  • No Opus Clip assets. The Opus Clip name, logo, or assets must not be used. (explicit; rationale: accepted hard constraint.)
  • No illegal features. Illegal features must not be built. (explicit; rationale: accepted hard constraint.)
  • Security. Security must not be ignored. (explicit; rationale: accepted hard constraint.)
Page 60 of 65

10. Tech Stack

  • Frontend: Next.js 14 App Router, TypeScript, Tailwind CSS, shadcn/ui, Zustand, React Query, Remotion for video preview, WaveSurfer for audio. (explicit)
  • Backend: NestJS or FastAPI, REST with optional GraphQL, WebSocket for progress. (explicit)
  • Database: PostgreSQL + Prisma. (explicit)
  • Cache & Queue: Redis + BullMQ/Celery. (explicit)
  • Storage: AWS S3 or Cloudflare R2. (explicit)
  • Video Processing: FFmpeg, MediaPipe, YOLO, Rembg. (explicit)
  • AI: OpenAI GPT-4o, Whisper, Claude, Gemini, Replicate, HuggingFace. (explicit)
  • Infra: Docker, Kubernetes, AWS/GCP, CloudFront, GitHub Actions. (explicit)
  • Monitoring: Sentry, PostHog, Grafana. (explicit)
  • Billing: Stripe. (explicit)
  • Social publishing: OAuth integrations for TikTok, Instagram Reels, YouTube Shorts, LinkedIn, X. (explicit)
  • Local run: docker-compose up. (explicit)
Page 61 of 65

11. Assumptions and Constraints

  • Assumption. Where the source is ambiguous, the best assumption is made and documented. (explicit)
  • Assumption. Mock data and placeholders are used when API keys are absent. (explicit)
  • Assumption. The application owns its identity; first-use enrollment and returning verification happen on Login/Register, and protected pages require an established identity. (required_inference)
  • Assumption. Workspace membership is provisioned by the Workspace Owner or Workspace Admin through the Team page, and invited members accept the invitation. (required_inference)
  • Assumption. Social publishing requires OAuth authorization to the connected social accounts before scheduling or publishing. (required_inference)
  • Assumption. Subscription provisioning requires Stripe checkout before plan-restricted usage is available. (required_inference)
  • Assumption. AI processing and generated media are executed asynchronously by a queue worker and persisted to durable storage. (required_inference)
  • Constraint. Maximum initial source video duration is 3 hours. (explicit)
  • Constraint. Generate 5–30 clips per video. (explicit)
  • Constraint. Virality score range is 0–100. (explicit)
  • Constraint. Export resolutions are limited to 720p, 1080p, 4K; aspect ratios are 9:16, 1:1, 16:9, 4:5. (explicit)
  • Constraint. Subscription plans are Free, Pro, Team, Enterprise with limits based on video minutes per month. (explicit)
  • Constraint. Workspace roles are Owner, Admin, Editor, Viewer. (explicit)
Page 62 of 65
  • Constraint. UI must be accessible to WCAG AA. (explicit)
  • Constraint. Multi-language support includes Indonesian, English, and others. (explicit)
  • Constraint. SSO is for Enterprise. (explicit)
  • Constraint. Acceptance: 1-hour video processed in under 15 minutes; transcription accuracy above 90%; 1080p export succeeds; responsive UI; no critical errors; billing works; multi-tenant secure. (explicit)
  • Constraint. App must run locally with docker-compose up. (explicit)
  • Constraint. Do not use the Opus Clip name, logo, or assets; use original branding, icons, colors, and code. (explicit)
  • Constraint. Do not copy proprietary licensed code. (explicit)
  • Constraint. Do not hardcode API keys. (explicit)
  • Constraint. Do not build illegal features. (explicit)
  • Constraint. Do not ignore security. (explicit)
  • Future. Phase 4 items — public API, SSO for Enterprise, enterprise deployment, and mobile app — are future work and are not part of the current page contract or acceptance. (explicit)
Page 63 of 65

12. Glossary

  • ClipForge AI — The product name for this multi-tenant SaaS that turns long-form video into short viral clips.
  • Virality score — A 0–100 score assigned to each generated clip, indicating predicted viral potential.
  • Preset — A processing profile chosen before the AI pipeline runs: Podcast, Webinar, Vlog, Gaming, or Edukasi.
  • Pipeline — The automatic AI processing sequence: transcode, audio extraction, transcription, diarization, scene/silence detection, LLM analysis, virality scoring, boundary determination, clip generation, auto-reframe, caption generation, asset addition, metadata generation, and storage.
  • Auto-reframe — Automatic reframing of a clip to 9:16 using face tracking.
  • Brand kit — A workspace or client preset holding logo, colors, fonts, intro, outro, caption templates, hook templates, watermark, and default aspect ratio.
  • Clip version — A saved state of a clip in version history.
  • Clip asset — A media element attached to a clip, such as B-roll, music, SFX, emoji, sticker, shape, or progress bar.
  • Workspace — A multi-tenant container for videos, clips, brand kits, members, and billing.
  • Role — A workspace member's access level: Owner, Admin, Editor, or Viewer.
  • Usage record — A record of video minutes consumed against a plan's monthly limit.
  • Schedule — A planned publication of a clip to one or more social platforms.
  • Social account — A connected platform account authorized via OAuth for scheduling and publishing.
Page 64 of 65
  • Feature flag — A platform-level toggle controlled by the Platform Administrator.
  • Moderation — Review and action on content flagged for abuse.
  • Magic link — A passwordless sign-in link delivered by email.
  • Diarization — Speaker separation in a transcript.
  • Karaoke style — A caption animation style that highlights words as they are spoken.
  • B-roll — Supporting footage added to a clip, from the library or AI-generated.
  • SFX — Sound effects added to a clip.
  • ZIP download — A bundled download of multiple exported clips.
  • CSV export — A downloadable analytics file.
  • WCAG AA — The accessibility conformance level the UI must meet.
  • Multi-tenant — Isolation of workspace data between separate customers.
Page 65 of 65

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing page: View product overview
Login/Register: Sign in
Dashboard: Open client projects
Clip library: Browse client clips
Collaboration: Add timestamped comment
Collaboration: Mention teammate
Collaboration: Request approval
Collaboration: Approval granted
Editor: Revise rejected clip
Collaboration: Re-request approval
Collaboration: Organize shared folder
Brand kit: Apply client brand kit
Exports: Deliver client clips
Analytics: Review client performance
Settings: Update preferences

No completed page designs yet.

Completed design pages will appear here when they are ready to preview.

Landing page: View product overview
Login/Register: Sign in
Dashboard: Open client projects
Clip library: Browse client clips
Collaboration: Add timestamped comment
Collaboration: Mention teammate
Collaboration: Request approval
Collaboration: Approval granted
Editor: Revise rejected clip
Collaboration: Re-request approval
Collaboration: Organize shared folder
Brand kit: Apply client brand kit
Exports: Deliver client clips
Analytics: Review client performance
Settings: Update preferences