Join our team of writers
Hassan MohammadzadehHassan Mohammadzadeh
Back to projects

Vira Footage — Stock Footage & Video Marketplace

Inactive
My role: Full architecture design and full-stack implementation (frontend & backend)
Next.jsReactTypeScriptNestJSPrismaPostgreSQLRedisAWS S3JWTZustandTailwind CSS

This project is currently inactive

This project currently has no live domain and runs locally only for development and testing. More screenshots and details will be added soon via the admin panel.

Overview

Vira Footage is a complete stock footage and video marketplace — from browsing and searching the catalog to one-off purchases, monthly subscriptions, and secure downloads of the original file. The project was designed and built end to end, both frontend and backend, and includes a dedicated admin panel for fully managing products, orders, users, and financial settings.

Key Features

  • A footage catalog with categories, tags, search, and filtering by resolution (1080p up to 8K), format (MP4/MOV/WebM), and orientation (landscape/portrait/square)
  • In-browser video preview playback with video.js before purchase
  • Cart, checkout, and coupon codes (percentage or fixed amount) with usage caps and a minimum order total
  • A monthly subscription system with a defined daily download limit per plan
  • An account area with purchase history, downloads, favorites, and subscription management
  • A full, dedicated admin panel (not built on an off-the-shelf tool) for managing footage, categories, coupons, orders, users, and payment gateway settings
  • Supporting pages including about, contact, FAQ, terms & privacy, and footage usage licensing

Technical Architecture

The backend is built with NestJS using a modular architecture (auth, footages, orders, payments, subscriptions, downloads, coupons, favorites, categories, tags) and uses Prisma on PostgreSQL for the database. Video files are never stored directly on the server — all uploads and downloads go through S3-compatible presigned URLs, with the database holding only the file's storage key, never the file itself. The daily download limit for subscribers is enforced with an atomic database-level query (INSERT ... ON CONFLICT ... WHERE), so concurrent requests can never push a user past their allowed quota — this is reliable enough that there's a dedicated e2e test specifically for that race condition. The auth layer uses JWT with individually revocable, hashed refresh tokens, on top of Helmet for security headers, rate limiting against abuse, and strict input validation (whitelist/forbidNonWhitelisted) across every endpoint. Full API documentation is auto-generated with Swagger. The frontend is built with Next.js, TypeScript, Zustand for state management, and the shadcn/Radix UI component library.

My Role

I was fully responsible for the project's complete architecture (database, API, and frontend), implementing every backend module (auth, catalog, orders & payments, subscriptions, secure downloads, coupons), building the entire frontend in Next.js, and developing the dedicated admin panel. The project is currently under local development and testing.