Nicholai a06b2607c7 feat(video): add custom reel player with local mp4 support
Replaced Frame.io link with embedded local video player for the studio reel.

## Changes
- Created ReelPlayer component with custom HTML5 video controls
  - Play/pause, volume, fullscreen, progress bar with scrubbing
  - Loading and error states with user-friendly messages
  - Dark theme styling with orange (#ff4d00) accents and sharp corners
  - Responsive design for mobile/tablet/desktop

- Integrated ReelPlayer into Temp-Placeholder (Work section)
  - Replaced external Frame.io link with local /reel.mp4
  - Maintains minimal aesthetic with proper animations

- Fixed middleware whitelist issue
  - Added /reel.mp4 to middleware allowlist (src/middleware.ts:8)
  - Prevents 307 redirect that was causing "text/html" Content-Type error

- Added video file headers to next.config.ts
  - Ensures proper video/mp4 MIME type for all .mp4 files

- Updated CLAUDE.md documentation
  - Added critical warning about middleware whitelist in "Common pitfalls"
  - Added rule #9 to "Agents operating rules" for public/ file additions
  - Future-proofs against this issue happening again

## Technical Details
- Video: 146MB, H.264 codec, 4K resolution (3840x2160)
- Player handles large file buffering gracefully
- ReadyState check prevents loading overlay persistence
- All controls accessible and keyboard-friendly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 03:05:27 -06:00
2025-10-13 00:44:31 -06:00
2025-10-12 18:41:59 -06:00
2025-10-12 17:45:13 -06:00

Biohazard VFX Website

A modern, minimal Next.js website for Biohazard VFX studio, built with React, TypeScript, Tailwind CSS, and shadcn/ui components.

Features

  • Homepage: Hero section, studio showreel, featured projects, and capabilities overview
  • About: Studio origins, values, technical capabilities, and client testimonials
  • Services: Comprehensive service offerings with detailed descriptions
  • Portfolio: Masonry grid layout showcasing projects with varying aspect ratios
  • Contact: Multi-step smart contact form for efficient client intake

Tech Stack

  • Framework: Next.js 15.5.4 with App Router
  • Language: TypeScript
  • Styling: Tailwind CSS 4
  • UI Components: shadcn/ui (New York style)
  • Icons: Lucide React
  • Fonts: Geist Sans & Geist Mono

Getting Started

Prerequisites

  • Node.js 20+
  • npm or yarn

Installation

  1. Clone the repository:
git clone <repository-url>
cd biohazard-vfx-website
  1. Install dependencies:
npm install
  1. Run the development server:
npm run dev
  1. Open http://localhost:3000 in your browser.

Available Scripts

  • npm run dev - Start development server with Turbopack
  • npm run build - Build for production
  • npm run start - Start production server
  • npm run lint - Run ESLint
  • npm run type-check - Run TypeScript type checking

Project Structure

biohazard-vfx-website/
├── src/
│   ├── app/                    # Next.js app directory
│   │   ├── about/             # About page
│   │   ├── contact/           # Contact page
│   │   ├── portfolio/         # Portfolio page
│   │   ├── services/          # Services page
│   │   ├── layout.tsx         # Root layout with navigation & footer
│   │   ├── page.tsx           # Homepage
│   │   └── globals.css        # Global styles & CSS variables
│   ├── components/            # React components
│   │   ├── ui/               # shadcn/ui components
│   │   ├── Footer.tsx
│   │   ├── Hero.tsx
│   │   ├── MasonryGrid.tsx
│   │   ├── MultiStepForm.tsx
│   │   ├── Navigation.tsx
│   │   ├── ProjectCard.tsx
│   │   ├── ServiceCard.tsx
│   │   └── VideoPlayer.tsx
│   ├── data/                 # Data files
│   │   ├── projects.ts       # Project data
│   │   └── services.ts       # Services data
│   └── lib/
│       └── utils.ts          # Utility functions
├── public/                   # Static assets
└── components.json          # shadcn/ui configuration

Customization

Styling

The project uses shadcn/ui with the New York style variant. You can quickly try different styles by:

  1. Modifying CSS variables in src/app/globals.css
  2. Updating the shadcn theme in components.json
  3. All components use shadcn classnames for easy theme switching

Content

Update content in the data files:

  • Projects: Edit src/data/projects.ts
  • Services: Edit src/data/services.ts

Replace placeholder images with your own:

  • Update image URLs in data files
  • Add images to the public/ directory

Adding New Pages

  1. Create a new directory in src/app/
  2. Add a page.tsx file
  3. Export metadata and default component
  4. Update navigation in src/components/Navigation.tsx

SEO & Performance

The site includes:

  • Metadata for all pages
  • Canonical links
  • Open Graph tags
  • JSON-LD structured data
  • Font preloading
  • Image lazy loading
  • Next.js Image optimization

Deployment

Cloudflare Workers (Current)

This project is deployed to Cloudflare Workers using OpenNext:

Prerequisites:

  • Cloudflare account with Workers enabled
  • Domain configured in Cloudflare (if using custom domain)

Build & Deploy:

# Build for Cloudflare Workers
npx opennextjs-cloudflare build

# Deploy to Cloudflare
npx wrangler deploy

Configuration Files:

  • wrangler.toml - Cloudflare Workers configuration
  • open-next.config.ts - OpenNext adapter settings
  • next.config.ts - Next.js configuration

Live URLs:

Important Notes:

  • Linting and TypeScript errors are ignored during build (can be re-enabled in next.config.ts)
  • Compatible with Next.js 15.5.4
  • Uses nodejs_compat compatibility flag
  • Requires compatibility date 2024-09-23 or later

Alternative: Vercel

For Vercel deployment, revert next.config.ts to remove Cloudflare-specific settings:

npm run build
# Then deploy via Vercel dashboard or CLI

License

Private - All rights reserved to Biohazard VFX

Support

For issues or questions, contact: info@biohazardvfx.com

Description
The full implementation of all ideas into the Biohazard VFX Website
Readme 151 MiB
Languages
TypeScript 97.2%
CSS 2.1%
JavaScript 0.7%