diff --git a/content/homepage/timelines/introduction.md b/content/homepage/timelines/introduction.md
index 30018ab..c2bbcc8 100644
--- a/content/homepage/timelines/introduction.md
+++ b/content/homepage/timelines/introduction.md
@@ -4,37 +4,31 @@ framerate: 24
---
# OpenTimelineIO
-## Bridging Editorial Workflows Across Platforms
-**An open-source API and interchange format for managing timeline data in media production pipelines.**
+## Bridging Editorial Workflows
+**The open-source interchange format for editorial timeline data in film, animation, and VFX.**
-### What is OpenTimelineIO?
-OpenTimelineIO (OTIO) is an open-source tool built for managing and exchanging editorial timeline data across a variety of editing tools and media formats, enabling seamless data interchange in film, animation, and VFX production.
+### About OpenTimelineIO
+A format and API for exchanging editorial timeline data between tools — enabling seamless workflows across editing, compositing, and review applications.
[Intro Video](https://www.youtube.com/watch?v=nb6MELswKKk)
## Key Features
-- **Interchange Format**: Effortlessly exchange timeline data across platforms.
-- **Python & C++ Integrations**: Robust support for developers.
-- **Adaptable**: Custom adapters for flexible workflows.
-
-
-## OTIO Suporting Apps & Integrations
-OTIO integrates with popular editing and production tools, offering a streamlined data exchange solution in modern pipelines.
+
-## Community and Contribution
-Join a collaborative community of developers and media professionals! Contribute new adapters, offer support, and help shape the future of OTIO.
+## Apps & Integrations
-
+
-## Resources & Documentation
-Access the full [documentation](#), API references, and community forums to unlock OTIO’s full potential.
+
----
+## Get Involved
+Join developers and media professionals shaping the future of editorial interchange.
+
diff --git a/package.json b/package.json
index 0fdddee..5b8eb6d 100644
--- a/package.json
+++ b/package.json
@@ -84,5 +84,6 @@
},
"resolutions": {
"string-width": "4.2.3"
- }
+ },
+ "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}
diff --git a/src/app/globals.css b/src/app/globals.css
index 6a28b90..49efba8 100644
--- a/src/app/globals.css
+++ b/src/app/globals.css
@@ -189,14 +189,13 @@
--track-height: 38px;
--track-header-width: 120px;
- /* Track label colors - light mode matching clip colors (blue-250, teal-250, violet-250, rose-250, slate-250) */
+ /* Track label colors - light mode matching clip colors */
--track-label-h1: oklch(0.75 0.12 250); /* Blue - matches blue-200/300 gradient */
--track-label-h2: oklch(0.75 0.10 180); /* Teal - matches teal-200/300 gradient */
--track-label-h3: oklch(0.75 0.12 300); /* Violet - matches violet-200/300 gradient */
- --track-label-img: oklch(0.75 0.10 15); /* Rose - matches rose-200/300 gradient */
+ --track-label-media: oklch(0.75 0.10 15); /* Rose - consolidated media track */
--track-label-p: oklch(0.70 0.02 250); /* Slate - matches slate-200/300 gradient */
--track-label-ul: oklch(0.75 0.12 85); /* Amber - matches amber-200/300 gradient */
- --track-label-embed: oklch(0.75 0.15 25); /* Red - matches red-200/300 gradient */
/* Track header background - light mode */
--track-header-bg: oklch(0.85 0.01 240); /* Light gray-blue */
@@ -235,10 +234,9 @@
--track-label-h1: oklch(0.50 0.15 250); /* Blue - matches dark mode blue-600/40-20 */
--track-label-h2: oklch(0.50 0.12 180); /* Teal - matches dark mode teal-600/40-20 */
--track-label-h3: oklch(0.50 0.15 300); /* Violet - matches dark mode violet-600/40-20 */
- --track-label-img: oklch(0.50 0.12 15); /* Rose - matches dark mode rose-600/40-20 */
+ --track-label-media: oklch(0.50 0.12 15); /* Rose - consolidated media track */
--track-label-p: oklch(0.45 0.08 250); /* Slate - matches dark mode slate-600/40-20 */
--track-label-ul: oklch(0.50 0.15 85); /* Amber - matches dark mode amber-600/40-20 */
- --track-label-embed: oklch(0.50 0.18 25); /* Red - matches dark mode red-600/40-20 */
/* Track header background - dark mode */
--track-header-bg: oklch(0.18 0.02 240); /* Darker gray-blue */
diff --git a/src/app/page.tsx b/src/app/page.tsx
index e2e1187..fd0b0d8 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
import { EditorialInterfaceComponent } from "@/components/nle/index";
import { NavWidthSetter } from "@/components/layout/nav-width-setter";
import { getSiteUrl } from "@/lib/site-config";
+import { getIntegrations } from "@/lib/integrations";
import { promises as fs } from "fs";
import path from "path";
@@ -30,10 +31,11 @@ export const metadata: Metadata = {
export default async function NonLinearEditor() {
const markdown = await getMarkdownContent();
+ const integrations = getIntegrations().filter((i) => i.logo);
return (
-
+
);
}
diff --git a/src/components/homepage/community-cta.tsx b/src/components/homepage/community-cta.tsx
new file mode 100644
index 0000000..ad07bdd
--- /dev/null
+++ b/src/components/homepage/community-cta.tsx
@@ -0,0 +1,35 @@
+import { Github, ExternalLink, Users } from "lucide-react";
+import { Button } from "@/components/ui/button";
+
+const links = [
+ {
+ icon: Github,
+ label: "GitHub",
+ href: "https://github.com/AcademySoftwareFoundation/OpenTimelineIO",
+ },
+ {
+ icon: ExternalLink,
+ label: "ASWF Project",
+ href: "https://www.aswf.io/projects/opentimelineio/",
+ },
+ {
+ icon: Users,
+ label: "Contributing",
+ href: "https://github.com/AcademySoftwareFoundation/OpenTimelineIO/blob/main/CONTRIBUTING.md",
+ },
+];
+
+export function CommunityCta() {
+ return (
+
+ {links.map((link) => (
+
+ ))}
+
+ );
+}
diff --git a/src/components/homepage/feature-cards.tsx b/src/components/homepage/feature-cards.tsx
new file mode 100644
index 0000000..97711ab
--- /dev/null
+++ b/src/components/homepage/feature-cards.tsx
@@ -0,0 +1,43 @@
+import { ArrowLeftRight, Code, Puzzle } from "lucide-react";
+import { Card, CardHeader, CardTitle, CardDescription, CardContent } from "@/components/ui/card";
+
+const features = [
+ {
+ icon: ArrowLeftRight,
+ title: "Interchange Format",
+ description:
+ "Effortlessly exchange timeline data across editing, compositing, and review platforms.",
+ },
+ {
+ icon: Code,
+ title: "Developer APIs",
+ description:
+ "Robust Python and C++ APIs for building pipeline tools and custom integrations.",
+ },
+ {
+ icon: Puzzle,
+ title: "Extensible Adapters",
+ description:
+ "Write custom adapters for any editorial format — flexible, open, and community-driven.",
+ },
+];
+
+export function FeatureCards() {
+ return (
+