nicholai ed55376b9c
Some checks are pending
Build and Push to Docker Hub / Push Docker image to Docker Hub (push) Waiting to run
Build and Push Docker Image / build-and-push (push) Waiting to run
bmad-planning-complete
2025-09-24 10:54:01 -06:00

256 lines
13 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Biohazard VFX — Brownfield Enhancement PRD (Ready)
Note: This PRD is sharded for collaboration. See shard files in `docs/prd/` (start at `docs/prd/00-index.md`).
Status: Ready — confirmations applied (typography, palette, IA, epic, contact persistence; sidebar nav not collapsible)
Version: v4
---
## Intro Project Analysis and Context
### Existing Project Overview
- Analysis Source: IDE-based fresh analysis of current repository (`biohazard-vfx-nextjs`).
#### Current Project State
- Type: Next.js 15 (App Router) + React 19 + TypeScript + TailwindCSS
- UI libs: shadcn/ui primitives (via `class-variance-authority`, `tailwindcss-animate`), Lucide icons, custom components
- Motion & scrolling: `framer-motion`/`motion`, `lenis`
- Data layer: Prisma 6 with NextAuth; routes exist for `projects`, `blog`, `faq`, `team`, `assets`
- Observability: Sentry configured (`@sentry/nextjs`), client/server configs present
- IA present today (selected):
- Public: `/projects`, `/projects/[id]`, `/faq`, `/contact`, `/privacy`, `/terms`
- Admin: `/admin`, `/admin/{projects,blog,faq}`, `/admin/login`
- Docs: Architecture docs referenced in core-config are missing (`docs/architecture/*`), so this PRD derives from code and brainstorming results.
### Available Documentation Analysis
- Primary input: `docs/brainstorming-session-results.md` (Five Whys, SCAMPER, IA/journeys, sticky split pattern, design tokens, typography pairs).
- Additional docs: `README.md`, `VISUAL_ENHANCEMENTS*` provide context but are not canonical.
### Enhancement Complexity Assessment
- Significant, multi-story enhancement: unify design system, navigation and IA, add sticky split components, standardize pages (Projects, Process, Studio, Contact), and establish tokens/typography. This warrants a full PRD with sequenced stories.
---
## Problem Statement and Goals
### Problem
- UX/UI fragmentation (inconsistent fonts, ad-hoc styles), unclear IA and navigation model, and lack of codified design system hinder clarity, polish, and delivery velocity.
### Goals
- Establish a coherent brand-forward design system (tokens: color, type, spacing, motion).
- Standardize IA and navigation (sidebar nav + command palette) aligned to key user journeys.
- Implement reusable sticky split pattern for narrative + media without scrolljacking.
- Upgrade core pages: Projects (reel + case studies), Process, Studio, Contact (smart form).
- Preserve existing functionality and content while improving presentation and flows.
### Out of Scope (initial release)
- Custom CMS; thirdparty marketing automation; deep analytics beyond Sentry/basic events.
---
## Users and Stakeholders
- Primary: Directors/Producers evaluating capability and reliability.
- Secondary: Studio partners, collaborators, and recruits.
- Internal: Biohazard team (content ops, case study publishing, admin views).
---
## Functional Requirements (FR)
FR1: Global design tokens for color, typography, spacing, and motion are defined and consumed across components.
FR2: Select and apply one headline/display font and one body font globally; remove conflicting fonts.
FR3: Sidebar navigation (persistent, not collapsible) reflects target IA groups: Projects, Process, Studio, Contact.
FR4: Command palette (Cmd/Ctrl+K) for quick navigation and actions.
FR5: Projects section includes Reel, Case Studies index with filters, and Case Study detail pages.
FR6: Process section includes Pipeline, Tools, and Infrastructure subpages.
FR7: Studio section includes About, Team, Values pages.
FR8: Contact page implements smart intake form (project type, timeline, budget range, refs) with clear confirmation and next steps.
FR9: Sticky Split component pattern implemented and reusable across Home/Projects/Process/Studio.
FR10: Accessibility supports reduced motion, keyboard navigation, and visible focus management.
## Compatibility Requirements (CR)
CR1: Preserve existing public routes behavior and SEO where applicable (redirects if slugs change).
CR2: Maintain database schema and NextAuth integration; no breaking changes to auth flows.
CR3: UI/UX consistency with new tokens without breaking existing admin functions.
CR4: Integration compatibility with current API routes (`/api/*`) and Prisma models.
---
## UI Enhancement Goals
### Integration with Existing UI
- Adopt Tailwind design tokens via CSS variables layered on current config; refactor shadcn components to consume tokens.
- Consolidate color usage to a darkfirst palette (brand black/orange + neutrals) per brainstorming doc.
- Typography: Headings Rajdhani 600/700; Body Kanit 400/500. [Confirmed]
### Modified/New Screens and Views
- Global: Layout with Sidebar Nav (not collapsible) and Command Palette; Footer.
- Projects: Reel, Case Studies index (filters: type/tool/year), Case Study detail.
- Process: Pipeline, Tools, Infrastructure.
- Studio: About, Team, Values.
- Contact: Smart Form + Confirmation page.
### UI Consistency Requirements
- Tokenized spacing scale; motion presets; focus rings; media player wrapper for consistency.
- Sticky Split pattern components and hooks as a shared lib; mobile fallbacks and reducedmotion support.
---
## Technical Constraints and Integration Requirements
### Existing Technology Stack
**Languages**: TypeScript
**Frameworks**: Next.js 15 (App Router), React 19, TailwindCSS
**Database**: Prisma (SQLite/Postgres depending on env), NextAuth; optional Cloudflare D1 for contact submissions [Approved]
**Infrastructure**: Next build/start, Sentry for monitoring; no infra files for Vercel/CI in repo
**External Dependencies**: framer-motion/motion, lenis, uploadthing, shadcn primitives, zod, react-hook-form
### Integration Approach
**Database Integration Strategy**: No schema changes required; augment only content display and forms; ensure Contact writes via existing patterns or route additions without breaking Prisma clients.
**API Integration Strategy**: Reuse `/api/*` routes; add new endpoints cautiously (e.g., contact submissions) and version if needed. For contact persistence, allow optional integration with a Cloudflare Worker/D1 via server-side fetch, without impacting existing Prisma schema.
**Frontend Integration Strategy**: Introduce tokens and new components incrementally; gate behind feature flags if needed; refactor pages to consume tokens with minimal churn.
**Testing Integration Strategy**: Component tests for tokens and Sticky Split mechanics; route smoke tests; accessibility checks; performance snapshots.
### Code Organization and Standards
**File Structure Approach**: Keep `src/app/*` routes; add shared components under `src/components/ui/*` and `src/components/patterns/sticky-split/*`.
**Naming Conventions**: PascalCase for components, kebab for route segments, token names as `--bh-*`.
**Coding Standards**: ESLint + Prettier existing; maintain strict TS; avoid oneoff inline styles.
**Documentation Standards**: Co-locate README.md per component/pattern for usage; update main docs after shard.
### Deployment and Operations
**Build Process Integration**: Ensure no increase in warnings; tree-shake unused fonts/components.
**Deployment Strategy**: Incremental deploys; feature flags if needed; maintain redirects for IA adjustments.
**Monitoring and Logging**: Extend Sentry breadcrumbs for navigation and key CTA events.
**Configuration Management**: `.env` unchanged; add envs for contact handling only if required (e.g., Cloudflare credentials, D1 binding endpoint).
### Risk Assessment and Mitigation
**Technical Risks**: Global style regressions; performance drops from animation; font loading flashes.
**Integration Risks**: Breaking admin routes/layouts; IA changes affecting deep links.
**Deployment Risks**: CSS purge issues; caching of old assets.
**Mitigation Strategies**: Token gating and gradual rollout; perf budgets (CLS/LCP targets); redirects and manual QA script; font preloading.
---
## Epic and Story Structure
Epic Structure Decision: Single epic focused on UX/UI unification with sequenced, lowrisk increments. [Confirmed]
### Epic 1: UX/UI Unification and Core Pages
**Epic Goal**: Unify design system and IA, implement reusable patterns, and elevate core pages while preserving existing functionality.
**Integration Requirements**: Each story verifies nonregression on existing routes and key interactions; redirects for IA changes; accessibility and performance checks included.
#### Story 1.1 Design Tokens and Typography
As a visitor, I want a cohesive visual language so that the site feels premium and consistent.
Acceptance Criteria
1: Global CSS variables for color, spacing, radii, shadows, and motion exist and are documented.
2: Headline font and body font applied globally; extraneous fonts removed.
3: Tailwind config consumes tokens; shadcn primitives reflect tokens.
Integration Verification
IV1: No layout regressions in `/projects`, `/faq`, `/contact`.
IV2: Admin pages remain functional and readable.
IV3: Performance: no >10% increase in CSS/JS bundle.
#### Story 1.2 Global Layout, Sidebar Nav, Command Palette
As a user, I want clear navigation so that I can find Projects, Process, Studio, and Contact quickly.
Acceptance Criteria
1: Sidebar navigation (persistent 240px; not collapsible) groups routes as defined.
2: Command palette opens via Cmd/Ctrl+K with navigation to key routes.
3: Footer includes minimal links; responsive behavior verified.
Integration Verification
IV1: Deep links to existing `/projects/[id]` still resolve.
IV2: Keyboard navigation and focus order preserved.
IV3: No layout shift >0.1 CLS on nav open/close.
#### Story 1.3 Sticky Split Pattern Library
As a storyteller, I want a sticky split component so that narrative and media synchronize during scroll.
Acceptance Criteria
1: `<StickySplit.Section/Sticky/Track/Panel>` components implemented with docs.
2: Reducedmotion mode disables heavy animations gracefully.
3: Mobile layout stacks content; performance budget respected.
Integration Verification
IV1: No scrolljacking; passive listeners only.
IV2: A11y tree/focus unaffected.
IV3: Frame budget within 16ms on midrange devices.
#### Story 1.4 Projects Section Revamp
As a prospect, I want a Reel and clear Case Studies so that I can assess capability fast.
Acceptance Criteria
1: `/projects` index offers Reel + Case Studies tabs with filters.
2: Case Study detail template with hero, problem, approach, pipeline, results, credits, CTA.
3: Media player wrapper standardized.
Integration Verification
IV1: Existing project data remains valid.
IV2: SEO: titles/descriptions preserved or migrated.
IV3: Page renders within current TTFB/LCP budgets.
#### Story 1.5 Process Pages
As a technical stakeholder, I want pipeline/tools/infrastructure pages so that I understand reliability and stack.
Acceptance Criteria
1: `/process/{pipeline,tools,infrastructure}` pages implemented with sticky split or light reveals.
2: Badge and icon components for stack and capabilities.
3: Crosslinks to Projects and Contact.
Integration Verification
IV1: No regressions to other routes.
IV2: A11y checks pass.
IV3: Bundle size growth <10% vs prior story.
#### Story 1.6 Studio Pages
As a partner, I want About, Team, and Values so that I can understand ethos and people.
Acceptance Criteria
1: `/studio/{about,team,values}` with content placeholders.
2: Quote/testimonial and logo wall optional components.
3: Global tokens applied.
Integration Verification
IV1: Nav and links correct.
IV2: No console errors.
IV3: Lighthouse a11y 90.
#### Story 1.7 Contact Smart Form
As an inquirer, I want a guided contact form so that I can convey project essentials quickly.
Acceptance Criteria
1: Fields: project type, timeline, budget range, references/links; validation via zod.
2: Success page with next steps/SLA.
3: Optional route to persist submissions (or email integration) without breaking existing auth.
Integration Verification
IV1: Rate limiting or basic abuse mitigation.
IV2: Error states accessible and clear.
IV3: No PII leakage in logs.
#### Story 1.8 Hardening: Performance, Accessibility, SEO
As a steward, I want the site to be fast and accessible so that it reflects professional standards.
Acceptance Criteria
1: CLS < 0.1; LCP within target for hero pages; images lazyloaded.
2: Keyboard navigation across all interactive elements; visible focus rings.
3: Sentry breadcrumbs for nav/CTA; basic event tracking for key flows.
Integration Verification
IV1: Compare metrics to preenhancement baselines.
IV2: No new 4xx/5xx in Sentry after launch.
IV3: Sitemap/robots updated if IA changed.
---
## NonFunctional Requirements (NFR)
- Accessibility: Respect `prefers-reduced-motion`; maintain focus order; ARIA where needed.
- Performance: No story may increase bundle size by >10% without explicit approval.
- Reliability: No breaking changes to existing APIs or auth; error boundaries for new components.
- Observability: Sentry enabled across new interactions; console clean.
---
## Decisions (Resolved)
- Typography: Rajdhani (600/700) headings, Kanit (400/500) body — Approved.
- Brand palette: Darkfirst black/orange + neutrals — Approved.
- Navigation: Left sidebar (240px), not collapsible + Command Palette — Approved.
- IA routes: `/projects`, `/process`, `/studio`, `/contact` with listed children — Approved.
- Epic structure: Single-epic with Story 1.1 → 1.8 — Approved.
- Contact handling: Persist submissions allowed; Cloudflare D1 acceptable; no compliance constraints — Approved.