diff --git a/apps/docs/app/[lang]/page.tsx b/apps/docs/app/[lang]/page.tsx index 9d0fbc6587..243e21aa1c 100644 --- a/apps/docs/app/[lang]/page.tsx +++ b/apps/docs/app/[lang]/page.tsx @@ -4,6 +4,11 @@ import { ArrowRight, Check } from 'lucide-react'; import { Bricolage_Grotesque, IBM_Plex_Mono } from 'next/font/google'; import { HomeLayout } from 'fumadocs-ui/layouts/home'; import { baseOptions, gitConfig } from '@/lib/layout.shared'; +import { YouTubeEmbed } from '@/components/youtube-embed'; + +/** The 90-second overview — the same video the README's hero cover links to. */ +const OVERVIEW_VIDEO_ID = 'CX_FlOoOtr0'; +const YOUTUBE_CHANNEL_URL = 'https://www.youtube.com/@objectstack'; const display = Bricolage_Grotesque({ subsets: ['latin'], @@ -105,72 +110,140 @@ export default function HomePage() { /> {/* ── hero ─────────────────────────────────────────────── */} -
-
-

- Open protocol & runtime · Apache-2.0 -

-

+

+ Open protocol & runtime · Apache-2.0 +

+

+ Apps small enough{' '} + + for AI to hold whole. + +

+

+ ObjectStack turns the whole app — data model, UI, workflows, permissions — into + typed metadata: a complete CRM in under 150k tokens, one context window. Agents + read it whole, reason it whole, refactor it whole. +

+
+ - Apps small enough{' '} - - for AI to hold whole. - - -

- ObjectStack turns the whole app — data model, UI, workflows, permissions — into - typed metadata: a complete CRM in under 150k tokens, one context window. Agents - read it whole, reason it whole, refactor it whole. -

-

+ Get started + + + + Documentation + + + GitHub + + + YouTube + +

+
+ Fits in an agent's context + | + Typed, validated, governed + | + Self-host anywhere +
+
+ + {/* ── the 90-second overview — the page's first visual ──── */} +
+
+ +
+ ▶ ObjectStack in 90 Seconds + + More videos on YouTube + + +
+
+
+ + {/* ── the claim the video makes, in prose ──────────────── */} +
+
+

The business logic alone — every object, workflow and permission — is under 100k tokens; the UI adds just 50k more.

-

+

That metadata is your business ontology — an open, versioned definition you own. - Strict TypeScript, Zod schemas, and a validation gate catch the agent's mistakes + Strict TypeScript, Zod schemas, and a validation gate catch the agent's mistakes at authoring time, and the runtime derives the database, REST API, UI, and MCP server — permissions and audit enforced on every call.

-
- - Get started - - - - Documentation - - - GitHub - -
-
- Fits in an agent's context - | - Typed, validated, governed - | - Self-host anywhere -
+
+
+ + {/* ── 01 · the loop ────────────────────────────────────── */} +
+
+ + 01 · The loop + +
+

+ From requirement to running app +

+
+ {STEPS.map((s) => ( +
+
+ {s.num} +
+
+

{s.title}

+

+ {s.cmd} +

+

{s.copy}

+
+ ))}
{/* the artifact card — requirement → metadata → gate → preview */} -
+

you → claude code

@@ -217,36 +290,6 @@ export default function HomePage() {
- {/* ── 01 · the loop ────────────────────────────────────── */} -
-
- - 01 · The loop - -
-

- From requirement to running app -

-
- {STEPS.map((s) => ( -
-
- {s.num} -
-
-

{s.title}

-

- {s.cmd} -

-

{s.copy}

-
- ))} -
-
- {/* ── 02 · four gates ──────────────────────────────────── */}
diff --git a/apps/docs/components/youtube-embed.tsx b/apps/docs/components/youtube-embed.tsx new file mode 100644 index 0000000000..4174e20ab1 --- /dev/null +++ b/apps/docs/components/youtube-embed.tsx @@ -0,0 +1,64 @@ +'use client'; + +import { useState } from 'react'; +import { Play } from 'lucide-react'; + +type YouTubeEmbedProps = { + /** The video id — the part after `youtu.be/`. */ + videoId: string; + /** Video title. Used for the iframe title and the play button's label. */ + title: string; + /** Cover shown until the viewer clicks play. Served from `public/`. */ + poster: string; +}; + +/** + * Click-to-play YouTube embed. + * + * A facade, not a bare `