Editor-Portfolio-Web

Kashyap Bera - Cinematic Video Portfolio & Reel Showcase

A production-quality portfolio website for video editor and post-production specialist Kashyap Bera. Built with a dark & cinematic aesthetic, featuring an Instagram/TikTok-style 9:16 vertical reel viewer with view-only video protection (zero third-party video subscriptions), smooth GSAP ScrollTrigger + Lenis animations, and a private admin panel.


๐Ÿ“ฝ๏ธ Features Overview


๐Ÿ”’ Security & Protection Notice

[!NOTE] View-Only Protection & Deterrence Notice: While this application implements industry-grade deterrents against direct video downloads (private filesystem storage, signed temporary tokens, HTTP Range chunk streaming, anti-hotlink origin verification, context menu blocking, and dynamic moving watermarks), complete client-side screen recording prevention is technically impossible on the open web (as any frame displayed on a screen or captured by external cameras can be recorded). The implemented architecture successfully blocks direct URL copying, video grabbing software, and casual unauthorized distribution.

Hosting & Bandwidth Considerations: Self-hosted video streaming consumes backend storage and bandwidth. For high-traffic scaling, the backend streaming function getPlayableVideoUrl(reelId) is decoupled so it can easily map to private object storage buckets (e.g. Cloudflare R2 or AWS S3 with CloudFront signed cookies) in the future without changing the frontend player.


๐Ÿ› ๏ธ Tech Stack & Requirements


๐Ÿš€ Local Development Setup

1. Prerequisites

Ensure you have Node.js (v18+), Python (v3.11+), and FFmpeg installed.

Installing FFmpeg on Windows:

winget install Gyan.FFmpeg --silent --accept-package-agreements --accept-source-agreements

Or download from gyan.dev/ffmpeg and add the bin folder to your system PATH.


2. Backend Setup

# Navigate to backend directory
cd "backend"

# Install Python dependencies
pip install -r requirements.txt

# Create .env from template
copy .env.example .env

# Seed the database with sample demo reels and default admin account
python -m app.seed

# Start the FastAPI server
uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload

Backend API will be accessible at:

Default Admin Credentials:


3. Frontend Setup

# Open a new terminal and navigate to frontend directory
cd "frontend"

# Install NPM packages
npm install

# Start Vite development server
npm run dev

Frontend will be accessible at:


๐ŸŒ Production Deployment

Frontend (Vercel / Netlify / Cloudflare Pages)

  1. Push repository to GitHub.
  2. Link the /frontend directory as Root Directory on Vercel.
  3. Build Command: npm run build
  4. Output Directory: dist
  5. Environment Variable:
    • VITE_API_URL: Your deployed backend URL (e.g. https://api.kashyapbera.com)

Backend (Render / Railway / VPS / DigitalOcean)

Videos are stored in the serverโ€™s storage folder, so deploy to a service with persistent disk storage:

  1. Render / Railway: Add a Persistent Disk volume mounted to /app/backend/storage (at least 20GBโ€“50GB depending on your reel library).
  2. Install ffmpeg via Docker or buildpack:
    FROM python:3.11-slim
    RUN apt-get update && apt-get install -y ffmpeg && rm -rf /var/lib/apt/lists/*
    WORKDIR /app
    COPY backend/requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    COPY backend .
    EXPOSE 8000
    CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
    
  3. Set environment variables in the hosting dashboard:
    • ENVIRONMENT=production
    • BACKEND_PORT=8000
    • FRONTEND_URL=https://kashyapbera.com
    • MONGODB_URL=mongodb+srv://... (MongoDB Atlas cluster URI)
    • JWT_SECRET=your_production_secret_32_chars
    • STREAM_SECRET=your_production_stream_secret_32_chars
    • ADMIN_EMAIL=your_email@domain.com
    • ADMIN_PASSWORD=your_secure_password