import AwardBand from "@/components/AwardBand"; 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 { awards, 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, 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: "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.", }, ]; export default function Home() { return ( <> {awards[0] && } {/* 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, M-Net and kykNET.

{/* Selected work */}
Selected work
{projects.slice(0, 4).map((p, i) => ( ))}
{/* Services */}
Services

From photoreal VFX to stylised animation.

{services.map((g) => (

{g.group}

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

{s.title}

))}
))}
{/* Studio / pipeline */}
Studio

Two tales.
One obsession.

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 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. {String(i + 1).padStart(2, "0")}

    {p.step}

    {p.body}

  2. ))}
{stats.map((s) => (

{s.value}

{s.label}

))}
{/* Contact */}
); }