Skip to content

Commit 8215aef

Browse files
dmealingclaude
andcommitted
site: publish the introduction video (captions + poster) on the homepage
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SKaSE8U5cwN4ZGFwhJwxSY
1 parent 638e9b0 commit 8215aef

4 files changed

Lines changed: 313 additions & 0 deletions

File tree

www/index.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,29 @@ <h1>Make schema drift a compile-time error.</h1>
6262
</figure>
6363
</section>
6464

65+
<!-- Introduction video -->
66+
<section class="intro-video" id="introduction-video">
67+
<h2 class="section-label">Watch the introduction</h2>
68+
<p style="color:#8b9ab5;max-width:720px;">
69+
The problem MetaObjects solves, what it actually is, and how the codegen and
70+
runtime halves work together — in eight minutes.
71+
</p>
72+
<figure style="margin:0;">
73+
<video controls preload="metadata" playsinline crossorigin="anonymous"
74+
poster="/video/introduction-poster.png"
75+
width="1280" height="720"
76+
aria-label="Introduction to MetaObjects: one model your database, API, UI, and AI all share."
77+
style="width:100%;max-width:860px;height:auto;border-radius:14px;border:1px solid rgba(255,255,255,0.08);margin:1rem auto 0;display:block;">
78+
<source src="/video/introduction.mp4" type="video/mp4">
79+
<track kind="captions" src="/video/introduction.vtt" srclang="en" label="English" default>
80+
Your browser doesn't support embedded video — <a href="/video/introduction.mp4">download the introduction</a>.
81+
</video>
82+
<figcaption style="text-align:center;color:#8b9ab5;font-size:0.9rem;margin-top:0.75rem;">
83+
One model — your objects, database, API, UI, and AI.
84+
</figcaption>
85+
</figure>
86+
</section>
87+
6588
<!-- Four pillars — all shipping -->
6689
<section class="pillars">
6790
<h2 class="section-label">Four pillars. All shipping.</h2>

www/video/introduction-poster.png

128 KB
Loading

www/video/introduction.mp4

17.2 MB
Binary file not shown.

www/video/introduction.vtt

Lines changed: 290 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,290 @@
1+
WEBVTT
2+
3+
00:00:00.000 --> 00:00:00.995
4+
MetaObjects.
5+
6+
00:00:00.995 --> 00:00:06.471
7+
One model your database, your API, your UI, and your AI all share.
8+
9+
00:00:06.471 --> 00:00:11.033
10+
Here's the problem it solves — and what it actually is.
11+
12+
00:00:11.033 --> 00:00:22.477
13+
Today, when you build an app with AI, the AI writes every layer by hand — the database, the API, the forms, the prompts, even the docs.
14+
15+
00:00:22.477 --> 00:00:26.037
16+
Each one a separate, hand-shaped artifact.
17+
18+
00:00:26.037 --> 00:00:29.767
19+
They never quite fit, and every copy drifts.
20+
21+
00:00:29.767 --> 00:00:31.404
22+
MetaObjects flips that.
23+
24+
00:00:31.404 --> 00:00:33.112
25+
The AI writes one model.
26+
27+
00:00:33.112 --> 00:00:40.587
28+
From it you either generate idiomatic code, or embed the model live to drive your server and UI directly.
29+
30+
00:00:40.587 --> 00:00:42.367
31+
One model, the whole app.
32+
33+
00:00:42.367 --> 00:00:44.704
34+
Let's see that problem up close.
35+
36+
00:00:44.704 --> 00:00:48.648
37+
Every app defines the same domain model a dozen times.
38+
39+
00:00:48.648 --> 00:00:50.767
40+
It's in your database schema.
41+
42+
00:00:50.767 --> 00:00:54.200
43+
It's in the validators that re-list every field.
44+
45+
00:00:54.200 --> 00:00:56.833
46+
It's in your API routes and their types.
47+
48+
00:00:56.833 --> 00:00:59.567
49+
It's in the forms on the screen.
50+
51+
00:00:59.567 --> 00:01:05.500
52+
And now it's even hand-built into your LLM prompt — and again, in every language you ship.
53+
54+
00:01:05.500 --> 00:01:09.376
55+
Rename one field, and you chase it through every copy.
56+
57+
00:01:09.376 --> 00:01:16.267
58+
And now an AI writes all of them — faster than you ever could, and with no guarantee they agree.
59+
60+
00:01:16.267 --> 00:01:17.511
61+
And it's not just you.
62+
63+
00:01:17.511 --> 00:01:24.467
64+
Practitioners call it prompt sprawl: hundreds of prompts scattered across services, impossible to reason about as a system.
65+
66+
00:01:24.467 --> 00:01:34.900
67+
And the academics are converging on the cause: the software model gets lost in code generation, and has to be recovered just to make sense of what the AI wrote.
68+
69+
00:01:34.900 --> 00:01:38.622
70+
So here's the cure, and it's refreshingly simple.
71+
72+
00:01:38.622 --> 00:01:48.725
73+
You declare your domain model once, in plain, readable text — an entity called Subscriber: its fields, its identity, its constraints.
74+
75+
00:01:48.725 --> 00:01:55.333
76+
Not code, not a database: one model, standing in for that dozen hand-maintained copies.
77+
78+
00:01:55.333 --> 00:01:57.284
79+
So what is MetaObjects, exactly?
80+
81+
00:01:57.284 --> 00:01:58.077
82+
Three pieces.
83+
84+
00:01:58.077 --> 00:02:00.699
85+
One: the model — the metadata you just saw.
86+
87+
00:02:00.699 --> 00:02:04.784
88+
Two: codegen — idiomatic code generated from it, in every language.
89+
90+
00:02:04.784 --> 00:02:09.296
91+
Three: the runtime — load that same model live to drive your app directly.
92+
93+
00:02:09.296 --> 00:02:10.089
94+
And the name?
95+
96+
00:02:10.089 --> 00:02:17.955
97+
In the runtime, your metadata is made of MetaData classes — and MetaObject, the one that describes an object, is the primary one.
98+
99+
00:02:17.955 --> 00:02:19.967
100+
That's where the name comes from.
101+
102+
00:02:19.967 --> 00:02:21.602
103+
And this isn't abstract.
104+
105+
00:02:21.602 --> 00:02:34.003
106+
From that one model you get real artifacts — your domain objects, your database schema, your API with validation and filters, your UI forms and grids, the typed I/O for your prompts.
107+
108+
00:02:34.003 --> 00:02:36.933
109+
The core of every layer, in five languages.
110+
111+
00:02:36.933 --> 00:02:38.383
112+
And this model is no toy.
113+
114+
00:02:38.383 --> 00:02:43.080
115+
It's a metamodel that's been evolving for twenty years, and it's built to extend.
116+
117+
00:02:43.080 --> 00:02:54.273
118+
You start from abstract, core models that give you consistent behavior; your concrete entities extend those; and downstream you can overlay — augment and enhance the model — without forking it.
119+
120+
00:02:54.273 --> 00:02:56.071
121+
Need something it doesn't ship?
122+
123+
00:02:56.071 --> 00:02:58.333
124+
Register your own types and attributes.
125+
126+
00:02:58.333 --> 00:03:00.785
127+
Now scale that across an enterprise.
128+
129+
00:03:00.785 --> 00:03:04.260
130+
One app builds on a shared concrete model directly.
131+
132+
00:03:04.260 --> 00:03:10.731
133+
Another team expands it — adds more objects — into a second model, and more apps build on that.
134+
135+
00:03:10.731 --> 00:03:14.887
136+
Many apps, many languages, all sharing one lineage of models.
137+
138+
00:03:14.887 --> 00:03:24.833
139+
That's how a large organization stays consistent across its whole ecosystem — drift designed out, not just inside one app, but across all of them.
140+
141+
00:03:24.833 --> 00:03:31.785
142+
Now, two of those pieces are really two ways to ship the same model — generate the code, or drive it live.
143+
144+
00:03:31.785 --> 00:03:33.622
145+
Let's start with generating.
146+
147+
00:03:33.622 --> 00:03:51.200
148+
From that same model, MetaObjects emits idiomatic code in every language, and every line traces back to the metadata: the field's maxLength becomes the column length and a validation rule; your enum values become a database CHECK; the unique identity becomes an index.
149+
150+
00:03:51.200 --> 00:03:53.413
151+
The same model generates your DTOs.
152+
153+
00:03:53.413 --> 00:04:02.200
154+
Because this one is an object dot value — no identity, no table — you get a typed payload your code fills in, with a schema to validate it.
155+
156+
00:04:02.200 --> 00:04:11.824
157+
And your read-only views: an object dot projection over a database view becomes read-only code — queries, but no inserts or updates.
158+
159+
00:04:11.824 --> 00:04:17.000
160+
Entities, value objects, projections — every shape, from the one model.
161+
162+
00:04:17.000 --> 00:04:21.541
163+
Now the two modes, side by side — same model, same metadata.
164+
165+
00:04:21.541 --> 00:04:22.677
166+
First, codegen.
167+
168+
00:04:22.677 --> 00:04:31.911
169+
At build time, meta gen walks the model — its fields, their views, the grid layout — and freezes your columns into a file.
170+
171+
00:04:31.911 --> 00:04:37.133
172+
That file is a snapshot: when the model changes, you re-run meta gen.
173+
174+
00:04:37.133 --> 00:04:41.564
175+
Now the runtime way — same diagram, same metadata, but live.
176+
177+
00:04:41.564 --> 00:04:47.398
178+
buildGrid walks that same loaded model on every render and returns the columns.
179+
180+
00:04:47.398 --> 00:04:51.902
181+
Nothing's frozen: change the model and the grid just follows.
182+
183+
00:04:51.902 --> 00:04:57.367
184+
One model, two delivery modes — a snapshot you regenerate, or a live feed.
185+
186+
00:04:57.367 --> 00:05:02.899
187+
Now, that third piece — the runtime — is the half most tools miss, and it's just as big as codegen.
188+
189+
00:05:02.899 --> 00:05:07.481
190+
You load the same model into your running app and drive behavior straight from it.
191+
192+
00:05:07.481 --> 00:05:18.824
193+
It's how Salesforce runs the biggest apps in the world, and how Airbnb ships UI without an app-store release — there's no codegen path to a phone that already shipped, or an agent that connects tomorrow.
194+
195+
00:05:18.824 --> 00:05:20.500
196+
A live model reaches them all.
197+
198+
00:05:20.500 --> 00:05:36.567
199+
And the loaded model drives a lot: dynamic CRUD, validation and relationships, server-driven admin grids that re-shape when the model changes, entities as LLM tools, prompt rendering and extraction — none of it needing a rebuild or a redeploy.
200+
201+
00:05:36.567 --> 00:05:37.834
202+
Now the AI itself.
203+
204+
00:05:37.834 --> 00:05:47.967
205+
The moment your app calls an LLM, you add two surfaces nothing in your stack is checking: the prompt going in, and the messy output coming back.
206+
207+
00:05:47.967 --> 00:05:50.476
208+
First, the prompt — and it's part of the model.
209+
210+
00:05:50.476 --> 00:05:58.218
211+
You declare a typed payload, the exact fields the prompt needs, and the text lives in an external Mustache template that references those fields.
212+
213+
00:05:58.218 --> 00:06:05.533
214+
The template can only use fields that exist on the payload, so a renamed field breaks the build instead of silently degrading the prompt.
215+
216+
00:06:05.533 --> 00:06:06.616
217+
Then the output.
218+
219+
00:06:06.616 --> 00:06:11.966
220+
Real model output is dirty: prose wrappers, code fences, off-vocabulary values.
221+
222+
00:06:11.966 --> 00:06:17.179
223+
MetaObjects generates a tolerant extract function from that same declaration.
224+
225+
00:06:17.179 --> 00:06:22.867
226+
It returns typed data, with a report of exactly what it fixed — and it never throws.
227+
228+
00:06:22.867 --> 00:06:27.297
229+
Now, an honest word: does MetaObjects write your whole app?
230+
231+
00:06:27.297 --> 00:06:27.522
232+
No.
233+
234+
00:06:27.522 --> 00:06:40.286
235+
It generates the core — entities, data access, routes, validation, forms, grids, prompt I/O — often as much as eighty percent, the boilerplate that's the same everywhere.
236+
237+
00:06:40.286 --> 00:06:53.800
238+
The other twenty percent — your pricing rules, your workflows, the logic that makes the app yours — you still write, against the generated code: typed, and right there to build on.
239+
240+
00:06:53.800 --> 00:06:55.568
241+
And here's the powerful part.
242+
243+
00:06:55.568 --> 00:07:08.433
244+
Because your logic builds on the generated code, when you change the model and regenerate, that logic breaks exactly where the change landed — a compile error, on the precise line, not a silent runtime surprise.
245+
246+
00:07:08.433 --> 00:07:14.774
247+
The AI changes the model, regenerates, and the breakage points it straight at the custom code to update.
248+
249+
00:07:14.774 --> 00:07:18.067
250+
Drift stops being a bug hunt and becomes a to-do list.
251+
252+
00:07:18.067 --> 00:07:20.940
253+
And one command ties the generated side together.
254+
255+
00:07:20.940 --> 00:07:28.385
256+
Meta verify checks that your code, your schema, and your prompts still agree with the model, and fails the build if they don't.
257+
258+
00:07:28.385 --> 00:07:32.900
259+
Verify keeps the generated code honest; the compiler keeps your logic honest.
260+
261+
00:07:32.900 --> 00:07:36.300
262+
The AI writes the code — the model keeps all of it honest.
263+
264+
00:07:36.300 --> 00:07:42.305
265+
And this is where the whole industry is heading: let the AI author a model, not raw code.
266+
267+
00:07:42.305 --> 00:07:50.063
268+
Google's A2UI now has agents author the user interface as a declarative model — a data format, not executable code.
269+
270+
00:07:50.063 --> 00:07:55.933
271+
But it's only the UI, a fixed palette — and every tool out there solves just one slice.
272+
273+
00:07:55.933 --> 00:08:05.556
274+
MetaObjects spans it, shipping today — one typed, extensible, portable model for your database, API, UI, and AI.
275+
276+
00:08:05.556 --> 00:08:06.758
277+
Not a roadmap.
278+
279+
00:08:06.758 --> 00:08:08.133
280+
Installable now.
281+
282+
00:08:08.133 --> 00:08:14.155
283+
So: drive your model live at runtime, or generate the code — in any of five languages.
284+
285+
00:08:14.155 --> 00:08:17.866
286+
Go take a look — everything's at metaobjects dot dev.
287+
288+
00:08:17.866 --> 00:08:19.267
289+
Thanks for watching.
290+

0 commit comments

Comments
 (0)