diff --git a/.gitignore b/.gitignore index 5ef6a52..e46600e 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,7 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# source media (web versions live in public/) +content/*.mp4 +content/*.pdf diff --git a/app/page.tsx b/app/page.tsx index d646b43..4c6e7c6 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,15 +1,15 @@ -import Link from "next/link"; +import Filmography from "@/components/Filmography"; import Hero from "@/components/Hero"; import ProjectCard from "@/components/ProjectCard"; import Reveal from "@/components/Reveal"; import SectionLabel from "@/components/SectionLabel"; -import { projects, services, site, stats } from "@/content/site"; +import { filmography, projects, services, site, stats, studioStills } from "@/content/site"; const pipeline = [ { step: "Breakdown", body: "Script and plate breakdowns, bids and a shot list everyone agrees on." }, - { step: "Build", body: "Assets, environments and lookdev, approved in context, not in isolation." }, + { step: "Build", body: "Assets, creatures and environments, approved in context, not in isolation." }, { step: "Shot", body: "Artists work in tracked versions, reviewed daily on our own review platform." }, - { step: "QC", body: "Every EXR is checked automatically for frame range, NaNs, dead pixels and colour space before a human signs off." }, + { step: "QC", body: "Renders are checked automatically for frame range, bad pixels and colour space before a human signs off." }, { step: "Deliver", body: "Spec-correct, frame-accurate deliveries with full shot metadata." }, ]; @@ -28,42 +28,66 @@ export default function Home() { ))} -
- - All projects → - + + + {/* Filmography */} +
+
+ Filmography +
+ +

+ {filmography.length} titles. Seen across the world. +

+
+

+ Visual effects for features and series from South Africa and Nigeria, released in cinemas and on + Netflix, Prime Video and M-Net. +

+
+
{/* Services */}
- Services + Services

- From first breakdown to final delivery. + From photoreal VFX to stylised animation.

-
- {services.map((s, i) => ( - -
- {s.code} -

{s.title}

-

{s.body}

-
-
- ))} -
+ {services.map((g) => ( +
+

{g.group}

+
+ {g.items.map((s, i) => ( + +
+ {/* eslint-disable-next-line @next/next/no-img-element */} + +
+

+ {s.title} +

+
+ + ))} +
+
+ ))}
{/* Studio / pipeline */}
- Studio + Studio

@@ -72,16 +96,23 @@ export default function Home() {

- Two Tales started in {site.founded} as an animation studio. A decade later we're a visual - effects house that still thinks like animators: every frame is performance, every shot is story. + Founded in {site.founded} in Pretoria as Two Tales Animation, we bring stories to life with + creativity, technology and a passion for visual storytelling, from photoreal creatures and + simulations to stylised character animation.

- We're small on purpose. Senior artists, direct lines to supervisors, and an in-house pipeline - (review, shot tracking and automated QC) that lets a tight team deliver like a big one. + We're small on purpose: senior artists, direct lines to supervisors, and an in-house pipeline + for review, shot tracking and automated QC that lets a tight team deliver like a big one.

+
+ {studioStills.map((src) => ( + // eslint-disable-next-line @next/next/no-img-element + + ))} +
-
    +
      {pipeline.map((p, i) => (
    1. @@ -114,7 +145,7 @@ export default function Home() { aria-hidden="true" />
      - + Contact @@ -128,7 +159,7 @@ export default function Home() {

      {site.email} diff --git a/app/work/[slug]/page.tsx b/app/work/[slug]/page.tsx index e893dd8..389cd88 100644 --- a/app/work/[slug]/page.tsx +++ b/app/work/[slug]/page.tsx @@ -17,7 +17,7 @@ export async function generateMetadata({ params }: PageProps<"/work/[slug]">): P return { title: project.title, description: project.summary }; } -function Video({ src, title }: { src: string; title: string }) { +function Video({ src, title, poster }: { src: string; title: string; poster?: string }) { if (/vimeo\.com|youtube\.com|youtu\.be/.test(src)) { return (