256 lines
13 KiB
Markdown
256 lines
13 KiB
Markdown
# 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 scroll‑jacking.
|
||
- 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; third‑party 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 dark‑first 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 reduced‑motion 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 one‑off 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, low‑risk 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 non‑regression 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: Reduced‑motion mode disables heavy animations gracefully.
|
||
3: Mobile layout stacks content; performance budget respected.
|
||
Integration Verification
|
||
IV1: No scroll‑jacking; passive listeners only.
|
||
IV2: A11y tree/focus unaffected.
|
||
IV3: Frame budget within 16ms on mid‑range 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: Cross‑links 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 lazy‑loaded.
|
||
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 pre‑enhancement baselines.
|
||
IV2: No new 4xx/5xx in Sentry after launch.
|
||
IV3: Sitemap/robots updated if IA changed.
|
||
|
||
---
|
||
|
||
## Non‑Functional 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: Dark‑first 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.
|