Initial ttvfx.com site: Next.js static export
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+138
@@ -0,0 +1,138 @@
|
||||
// All editable site copy lives here. Anything marked TODO is placeholder
|
||||
// content that should be replaced with real studio information before launch.
|
||||
|
||||
export const site = {
|
||||
name: "Two Tales VFX",
|
||||
shortName: "TTVFX",
|
||||
url: "https://ttvfx.com",
|
||||
founded: 2015,
|
||||
tagline: "Invisible work. Unforgettable frames.",
|
||||
description:
|
||||
"Two Tales VFX is an independent visual effects studio crafting compositing, CG and finishing for series, film and commercials.",
|
||||
// TODO: confirm the public contact address and location.
|
||||
email: "hello@ttvfx.com",
|
||||
location: "South Africa",
|
||||
// Optional showreel. Drop an MP4 at public/reel.mp4 (and a poster frame at
|
||||
// public/reel-poster.jpg) and set this to "/reel.mp4" to play it in the hero.
|
||||
reel: null as string | null,
|
||||
reelPoster: null as string | null,
|
||||
socials: [
|
||||
// TODO: add real profiles, e.g. { label: "Vimeo", href: "https://vimeo.com/..." }
|
||||
] as { label: string; href: string }[],
|
||||
};
|
||||
|
||||
export const nav = [
|
||||
{ label: "Work", href: "/work/" },
|
||||
{ label: "Services", href: "/#services" },
|
||||
{ label: "Studio", href: "/#studio" },
|
||||
{ label: "Contact", href: "/#contact" },
|
||||
];
|
||||
|
||||
export const services = [
|
||||
{
|
||||
code: "01",
|
||||
title: "Compositing",
|
||||
body: "Plate-driven, photoreal integration. Keying, set extensions, CG integration, sky replacements and the hundreds of invisible fixes that hold a cut together.",
|
||||
},
|
||||
{
|
||||
code: "02",
|
||||
title: "CG & Environments",
|
||||
body: "Assets, look development, lighting and rendering, from hero props to full digital environments built to sit inside live-action photography.",
|
||||
},
|
||||
{
|
||||
code: "03",
|
||||
title: "Paint, Roto & Cleanup",
|
||||
body: "Rig and wire removal, beauty work, logo replacement and precise roto. Tracked, QC'd and delivered to spec.",
|
||||
},
|
||||
{
|
||||
code: "04",
|
||||
title: "Animation",
|
||||
body: "Character and motion work rooted in a decade of animation production as Two Tales Animation.",
|
||||
},
|
||||
{
|
||||
code: "05",
|
||||
title: "Supervision",
|
||||
body: "On-set and remote VFX supervision, bidding and breakdowns, so problems are solved before the camera rolls.",
|
||||
},
|
||||
{
|
||||
code: "06",
|
||||
title: "Pipeline & Delivery",
|
||||
body: "In-house review, tracking and automated QC tooling. ACES colour-managed EXR workflows and frame-accurate, spec-checked deliveries.",
|
||||
},
|
||||
];
|
||||
|
||||
export const stats = [
|
||||
{ value: `${new Date().getFullYear() - 2015}+`, label: "Years in production" },
|
||||
{ value: "ACES", label: "Colour-managed pipeline" },
|
||||
{ value: "EXR", label: "Frame-accurate delivery" },
|
||||
{ value: "QC", label: "Automated shot checks" },
|
||||
];
|
||||
|
||||
export type Project = {
|
||||
slug: string;
|
||||
title: string;
|
||||
client: string;
|
||||
year: number;
|
||||
category: string;
|
||||
summary: string;
|
||||
// Path under /public, e.g. "/work/my-show.jpg". If missing, a generated
|
||||
// gradient frame is shown instead.
|
||||
image?: string;
|
||||
// Optional MP4 under /public, or an external Vimeo/YouTube embed URL.
|
||||
video?: string;
|
||||
credits: string[];
|
||||
shots?: number;
|
||||
// Accent hue (0-360) used for the generated placeholder frame.
|
||||
hue: number;
|
||||
};
|
||||
|
||||
// TODO: replace these placeholders with real projects (client approval permitting).
|
||||
export const projects: Project[] = [
|
||||
{
|
||||
slug: "project-one",
|
||||
title: "Episodic Drama",
|
||||
client: "Placeholder Network",
|
||||
year: 2026,
|
||||
category: "Series",
|
||||
summary:
|
||||
"Placeholder: a full season of invisible effects: set extensions, screen replacements, period cleanup and digital weather across every episode.",
|
||||
credits: ["Compositing", "Set Extension", "Cleanup"],
|
||||
shots: 420,
|
||||
hue: 22,
|
||||
},
|
||||
{
|
||||
slug: "project-two",
|
||||
title: "Feature Film",
|
||||
client: "Placeholder Pictures",
|
||||
year: 2025,
|
||||
category: "Film",
|
||||
summary:
|
||||
"Placeholder: CG environments and hero compositing for a feature, including a fully digital third act location.",
|
||||
credits: ["CG Environments", "Lighting", "Compositing"],
|
||||
shots: 180,
|
||||
hue: 205,
|
||||
},
|
||||
{
|
||||
slug: "project-three",
|
||||
title: "Automotive Spot",
|
||||
client: "Placeholder Agency",
|
||||
year: 2025,
|
||||
category: "Commercial",
|
||||
summary:
|
||||
"Placeholder: a CG car integrated into live-action plates with full reflections, road replacement and beauty finishing.",
|
||||
credits: ["CG", "Lookdev", "Compositing"],
|
||||
shots: 24,
|
||||
hue: 350,
|
||||
},
|
||||
{
|
||||
slug: "project-four",
|
||||
title: "Animated Short",
|
||||
client: "Two Tales Animation",
|
||||
year: 2024,
|
||||
category: "Animation",
|
||||
summary:
|
||||
"Placeholder: a stylised animated short produced end to end, from design through animation, lighting and final grade.",
|
||||
credits: ["Animation", "Lighting", "Compositing"],
|
||||
hue: 140,
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user