From 6c464d6dfb4503577e35e6eb878e23f9ad19c3b8 Mon Sep 17 00:00:00 2001 From: twotalesanimation <80506065+twotalesanimation@users.noreply.github.com> Date: Mon, 5 Oct 2026 18:40:45 +0200 Subject: [PATCH] Add real studio content: Festo F1 film, filmography, service stills From the Dec 2024 company profile: Pretoria location, founding year, service list with stills, and 14 film/series credits with posters. Festo F1 spot transcoded for web (cropped letterbox, 14 MB, faststart). Co-Authored-By: Claude Opus 5.5 --- .gitignore | 4 + app/page.tsx | 95 ++++++---- app/work/[slug]/page.tsx | 16 +- app/work/page.tsx | 6 + components/Filmography.tsx | 38 ++++ components/Frame.tsx | 11 +- components/Header.tsx | 2 +- components/ProjectCard.tsx | 2 +- content/site.ts | 181 +++++++++++--------- public/capabilities/character-animation.jpg | Bin 0 -> 119923 bytes public/capabilities/character-creation.jpg | Bin 0 -> 114889 bytes public/capabilities/cleanup.jpg | Bin 0 -> 169816 bytes public/capabilities/compositing.jpg | Bin 0 -> 55137 bytes public/capabilities/creature.jpg | Bin 0 -> 135782 bytes public/capabilities/explosion.jpg | Bin 0 -> 238466 bytes public/capabilities/fluid-sim.jpg | Bin 0 -> 119514 bytes public/capabilities/green-screen.jpg | Bin 0 -> 107672 bytes public/capabilities/gun-fx.jpg | Bin 0 -> 187716 bytes public/capabilities/penguin-box.jpg | Bin 0 -> 77668 bytes public/capabilities/penguins.jpg | Bin 0 -> 232931 bytes public/capabilities/product-viz.jpg | Bin 0 -> 177015 bytes public/capabilities/screen-replacement.jpg | Bin 0 -> 55501 bytes public/capabilities/set-extension.jpg | Bin 0 -> 153432 bytes public/capabilities/shark.jpg | Bin 0 -> 98383 bytes public/capabilities/volume-sim.jpg | Bin 0 -> 299082 bytes public/film/ander-mens.jpg | Bin 0 -> 192836 bytes public/film/ellen.jpg | Bin 0 -> 71568 bytes public/film/fiela-se-kind.jpg | Bin 0 -> 56966 bytes public/film/funmilayo-ransome-kuti.jpg | Bin 0 -> 120569 bytes public/film/little-big-mouth.jpg | Bin 0 -> 201816 bytes public/film/modder-en-bloed.jpg | Bin 0 -> 111417 bytes public/film/oloture-the-journey.jpg | Bin 0 -> 110807 bytes public/film/som-van-twee.jpg | Bin 0 -> 70874 bytes public/film/stroomop.jpg | Bin 0 -> 126041 bytes public/film/summertide.jpg | Bin 0 -> 103025 bytes public/film/toorbos.jpg | Bin 0 -> 169352 bytes public/film/vergeet-my-nie.jpg | Bin 0 -> 182166 bytes public/film/vir-die-voels.jpg | Bin 0 -> 202634 bytes public/film/war-wrath-and-revenge.jpg | Bin 0 -> 316190 bytes public/work/festo-f1/festo-f1.mp4 | Bin 0 -> 13950254 bytes public/work/festo-f1/still-13.jpg | Bin 0 -> 104469 bytes public/work/festo-f1/still-2.jpg | Bin 0 -> 47337 bytes public/work/festo-f1/still-46.jpg | Bin 0 -> 96404 bytes 43 files changed, 226 insertions(+), 129 deletions(-) create mode 100644 components/Filmography.tsx create mode 100644 public/capabilities/character-animation.jpg create mode 100644 public/capabilities/character-creation.jpg create mode 100644 public/capabilities/cleanup.jpg create mode 100644 public/capabilities/compositing.jpg create mode 100644 public/capabilities/creature.jpg create mode 100644 public/capabilities/explosion.jpg create mode 100644 public/capabilities/fluid-sim.jpg create mode 100644 public/capabilities/green-screen.jpg create mode 100644 public/capabilities/gun-fx.jpg create mode 100644 public/capabilities/penguin-box.jpg create mode 100644 public/capabilities/penguins.jpg create mode 100644 public/capabilities/product-viz.jpg create mode 100644 public/capabilities/screen-replacement.jpg create mode 100644 public/capabilities/set-extension.jpg create mode 100644 public/capabilities/shark.jpg create mode 100644 public/capabilities/volume-sim.jpg create mode 100644 public/film/ander-mens.jpg create mode 100644 public/film/ellen.jpg create mode 100644 public/film/fiela-se-kind.jpg create mode 100644 public/film/funmilayo-ransome-kuti.jpg create mode 100644 public/film/little-big-mouth.jpg create mode 100644 public/film/modder-en-bloed.jpg create mode 100644 public/film/oloture-the-journey.jpg create mode 100644 public/film/som-van-twee.jpg create mode 100644 public/film/stroomop.jpg create mode 100644 public/film/summertide.jpg create mode 100644 public/film/toorbos.jpg create mode 100644 public/film/vergeet-my-nie.jpg create mode 100644 public/film/vir-die-voels.jpg create mode 100644 public/film/war-wrath-and-revenge.jpg create mode 100644 public/work/festo-f1/festo-f1.mp4 create mode 100644 public/work/festo-f1/still-13.jpg create mode 100644 public/work/festo-f1/still-2.jpg create mode 100644 public/work/festo-f1/still-46.jpg 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 (