@contractspec/bundle.marketing 3.7.6 → 3.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +87 -87
- package/AGENTS.md +29 -21
- package/CHANGELOG.md +59 -0
- package/README.md +36 -49
- package/dist/browser/components/marketing/ChangelogPage.js +8 -8
- package/dist/browser/components/marketing/CofounderPage.js +167 -523
- package/dist/browser/components/marketing/ContactClient.js +200 -207
- package/dist/browser/components/marketing/ContributePage.js +211 -463
- package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/browser/components/marketing/LandingPage.js +464 -568
- package/dist/browser/components/marketing/PricingClient.js +213 -839
- package/dist/browser/components/marketing/ProductClientPage.js +265 -463
- package/dist/browser/components/marketing/index.js +2007 -3338
- package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
- package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
- package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
- package/dist/browser/components/marketing/studio-signup-section.js +25 -41
- package/dist/browser/components/templates/TemplatesClientPage.js +2374 -3571
- package/dist/browser/components/templates/TemplatesPage.js +1 -1
- package/dist/browser/components/templates/TemplatesPreviewModal.js +27 -3
- package/dist/browser/components/templates/index.js +2412 -3609
- package/dist/browser/index.js +2415 -3612
- package/dist/browser/libs/email/client.js +1 -1
- package/dist/browser/libs/email/contact.js +1 -1
- package/dist/browser/libs/email/newsletter.js +1 -1
- package/dist/browser/libs/email/waitlist-application.js +1 -1
- package/dist/browser/libs/email/waitlist.js +1 -1
- package/dist/browser/registry/engine.js +2003 -3334
- package/dist/browser/registry/index.js +2003 -3334
- package/dist/browser/registry/registry-docs.js +2 -2
- package/dist/browser/registry/registry-landing.js +2007 -3338
- package/dist/browser/registry/registry.js +2003 -3334
- package/dist/browser/registry/utils.js +2003 -3334
- package/dist/components/marketing/ChangelogPage.js +8 -8
- package/dist/components/marketing/CofounderPage.js +167 -523
- package/dist/components/marketing/ContactClient.js +200 -207
- package/dist/components/marketing/ContributePage.d.ts +0 -2
- package/dist/components/marketing/ContributePage.js +211 -463
- package/dist/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/components/marketing/LandingPage.js +464 -568
- package/dist/components/marketing/PricingClient.js +213 -839
- package/dist/components/marketing/ProductClientPage.js +265 -463
- package/dist/components/marketing/index.d.ts +5 -5
- package/dist/components/marketing/index.js +2007 -3338
- package/dist/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/components/marketing/sections/CtaSection.js +3 -3
- package/dist/components/marketing/sections/FearsSection.js +3 -3
- package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
- package/dist/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/components/marketing/sections/StepsSection.js +4 -4
- package/dist/components/marketing/studio-signup-section.js +25 -41
- package/dist/components/templates/TemplatesClientPage.js +2374 -3571
- package/dist/components/templates/TemplatesPage.js +1 -1
- package/dist/components/templates/TemplatesPreviewModal.js +27 -3
- package/dist/components/templates/index.js +2412 -3609
- package/dist/index.js +2415 -3612
- package/dist/libs/email/client.js +1 -1
- package/dist/libs/email/contact.js +1 -1
- package/dist/libs/email/newsletter.js +1 -1
- package/dist/libs/email/waitlist-application.js +1 -1
- package/dist/libs/email/waitlist.js +1 -1
- package/dist/node/components/marketing/ChangelogPage.js +8 -8
- package/dist/node/components/marketing/CofounderPage.js +167 -523
- package/dist/node/components/marketing/ContactClient.js +200 -207
- package/dist/node/components/marketing/ContributePage.js +211 -463
- package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
- package/dist/node/components/marketing/LandingPage.js +464 -568
- package/dist/node/components/marketing/PricingClient.js +213 -839
- package/dist/node/components/marketing/ProductClientPage.js +265 -463
- package/dist/node/components/marketing/index.js +2007 -3338
- package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
- package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
- package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
- package/dist/node/components/marketing/sections/CtaSection.js +3 -3
- package/dist/node/components/marketing/sections/FearsSection.js +3 -3
- package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
- package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
- package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
- package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
- package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
- package/dist/node/components/marketing/sections/StepsSection.js +4 -4
- package/dist/node/components/marketing/studio-signup-section.js +25 -41
- package/dist/node/components/templates/TemplatesClientPage.js +2374 -3571
- package/dist/node/components/templates/TemplatesPage.js +1 -1
- package/dist/node/components/templates/TemplatesPreviewModal.js +27 -3
- package/dist/node/components/templates/index.js +2412 -3609
- package/dist/node/index.js +2415 -3612
- package/dist/node/libs/email/client.js +1 -1
- package/dist/node/libs/email/contact.js +1 -1
- package/dist/node/libs/email/newsletter.js +1 -1
- package/dist/node/libs/email/waitlist-application.js +1 -1
- package/dist/node/libs/email/waitlist.js +1 -1
- package/dist/node/registry/engine.js +2003 -3334
- package/dist/node/registry/index.js +2003 -3334
- package/dist/node/registry/registry-docs.js +2 -2
- package/dist/node/registry/registry-landing.js +2007 -3338
- package/dist/node/registry/registry.js +2003 -3334
- package/dist/node/registry/utils.js +2003 -3334
- package/dist/registry/engine.js +2003 -3334
- package/dist/registry/index.js +2003 -3334
- package/dist/registry/registry-docs.js +2 -2
- package/dist/registry/registry-landing.js +2007 -3338
- package/dist/registry/registry.js +2003 -3334
- package/dist/registry/utils.js +2003 -3334
- package/package.json +31 -29
- package/src/bundles/MarketingBundle.ts +273 -273
- package/src/components/marketing/ChangelogPage.tsx +72 -100
- package/src/components/marketing/CofounderPage.tsx +120 -384
- package/src/components/marketing/ContactClient.tsx +164 -154
- package/src/components/marketing/ContributePage.tsx +139 -313
- package/src/components/marketing/DesignPartnerPage.tsx +133 -171
- package/src/components/marketing/LandingPage.tsx +353 -25
- package/src/components/marketing/PricingClient.tsx +192 -437
- package/src/components/marketing/ProductClientPage.tsx +255 -377
- package/src/components/marketing/index.ts +5 -5
- package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
- package/src/components/marketing/sections/AudienceSection.tsx +55 -56
- package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
- package/src/components/marketing/sections/CtaSection.tsx +49 -50
- package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
- package/src/components/marketing/sections/FearsSection.tsx +36 -37
- package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
- package/src/components/marketing/sections/IconGridSection.tsx +71 -71
- package/src/components/marketing/sections/OutputsSection.tsx +51 -52
- package/src/components/marketing/sections/ProblemSection.tsx +39 -40
- package/src/components/marketing/sections/SolutionSection.tsx +39 -40
- package/src/components/marketing/sections/StepsSection.tsx +47 -48
- package/src/components/marketing/studio-signup-section.tsx +39 -41
- package/src/components/templates/TemplatesClientPage.tsx +763 -685
- package/src/components/templates/TemplatesPage.tsx +110 -110
- package/src/components/templates/TemplatesPreviewModal.tsx +251 -198
- package/src/index.ts +4 -4
- package/src/libs/email/client.test.ts +81 -81
- package/src/libs/email/client.ts +111 -111
- package/src/libs/email/contact.ts +35 -35
- package/src/libs/email/newsletter.ts +46 -46
- package/src/libs/email/types.ts +29 -29
- package/src/libs/email/utils.ts +5 -5
- package/src/libs/email/waitlist-application.ts +72 -72
- package/src/libs/email/waitlist.ts +46 -46
- package/src/libs/pricing-examples.ts +12 -12
- package/src/registry/engine.ts +16 -16
- package/src/registry/factory.ts +57 -57
- package/src/registry/registry-docs.ts +656 -666
- package/src/registry/registry-landing.ts +94 -95
- package/src/registry/registry.ts +36 -37
- package/src/registry/types.ts +2 -2
- package/src/registry/utils.ts +56 -56
- package/tsconfig.json +11 -11
- package/tsdown.config.js +5 -5
|
@@ -1,30 +1,358 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
3
|
+
import {
|
|
4
|
+
ArrowRight,
|
|
5
|
+
Blocks,
|
|
6
|
+
Bot,
|
|
7
|
+
Braces,
|
|
8
|
+
ChartColumn,
|
|
9
|
+
Database,
|
|
10
|
+
GitBranch,
|
|
11
|
+
ShieldCheck,
|
|
12
|
+
Sparkles,
|
|
13
|
+
Workflow,
|
|
14
|
+
} from 'lucide-react';
|
|
15
|
+
import Link from 'next/link';
|
|
16
|
+
|
|
17
|
+
const failureModes = [
|
|
18
|
+
{
|
|
19
|
+
title: 'Implicit rules drift first',
|
|
20
|
+
description:
|
|
21
|
+
'Prompt chains and AI edits move faster than the product rules they are supposed to respect.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
title: 'Surfaces stop agreeing',
|
|
25
|
+
description:
|
|
26
|
+
'API, UI, database, events, and MCP tools evolve independently unless something explicit keeps them aligned.',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
title: 'Teams lose safe regeneration',
|
|
30
|
+
description:
|
|
31
|
+
'Without a stable contract layer, every regeneration feels like rewriting production in the dark.',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
const systemSurfaces = [
|
|
36
|
+
{
|
|
37
|
+
label: 'Contracts and generation',
|
|
38
|
+
description:
|
|
39
|
+
'Define the canonical behavior once and derive the implementation surfaces from it.',
|
|
40
|
+
icon: Braces,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: 'Runtime adapters',
|
|
44
|
+
description:
|
|
45
|
+
'Bind the same source of truth to REST, GraphQL, React, MCP, and operational flows.',
|
|
46
|
+
icon: Workflow,
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
label: 'Harness and proof',
|
|
50
|
+
description:
|
|
51
|
+
'Replay, evaluate, inspect, and verify how the system behaves before you trust automation with more.',
|
|
52
|
+
icon: ChartColumn,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
label: 'Studio operating layer',
|
|
56
|
+
description:
|
|
57
|
+
'Run the opinionated product loop when you want coordination, governance, and a packaged operating surface.',
|
|
58
|
+
icon: Sparkles,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
|
|
62
|
+
const outputs = [
|
|
63
|
+
{
|
|
64
|
+
title: 'APIs',
|
|
65
|
+
copy: 'Typed endpoints and schemas stay aligned with the same contract language the team edits.',
|
|
66
|
+
icon: GitBranch,
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
title: 'Data',
|
|
70
|
+
copy: 'Schema, validation, and migrations are shaped by the same product rules instead of scattered implementations.',
|
|
71
|
+
icon: Database,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
title: 'Interfaces',
|
|
75
|
+
copy: 'Forms, presentations, and client types inherit the same system boundaries instead of drifting from the backend.',
|
|
76
|
+
icon: Blocks,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
title: 'Agents and tools',
|
|
80
|
+
copy: 'MCP tools and agent-facing surfaces are generated from explicit contracts rather than guessed from code.',
|
|
81
|
+
icon: Bot,
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
|
|
85
|
+
const adoptionSteps = [
|
|
86
|
+
'Start with one module that is already drifting or feels unsafe to regenerate.',
|
|
87
|
+
'Define explicit contracts, then bring API, UI, data, and tools back into alignment.',
|
|
88
|
+
'Adopt Studio when the team wants an operating surface on top of the open system.',
|
|
89
|
+
];
|
|
14
90
|
|
|
15
91
|
export function LandingPage() {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
92
|
+
return (
|
|
93
|
+
<main>
|
|
94
|
+
<section className="section-padding hero-gradient border-border/70 border-b">
|
|
95
|
+
<div className="editorial-shell">
|
|
96
|
+
<div className="grid gap-10 lg:grid-cols-[1.15fr_0.85fr] lg:items-end">
|
|
97
|
+
<div className="space-y-7">
|
|
98
|
+
<div className="badge">
|
|
99
|
+
<ShieldCheck size={14} />
|
|
100
|
+
Open system, explicit control
|
|
101
|
+
</div>
|
|
102
|
+
<div className="space-y-5">
|
|
103
|
+
<p className="editorial-kicker">
|
|
104
|
+
ContractSpec for AI-native teams
|
|
105
|
+
</p>
|
|
106
|
+
<h1 className="editorial-title max-w-5xl">
|
|
107
|
+
Build and run AI-native systems on explicit contracts.
|
|
108
|
+
</h1>
|
|
109
|
+
<p className="editorial-subtitle">
|
|
110
|
+
ContractSpec gives teams an open spec system for defining
|
|
111
|
+
behavior, aligning every surface, and regenerating safely. The
|
|
112
|
+
OSS foundation stays yours. Studio is the operating layer when
|
|
113
|
+
you want a product on top.
|
|
114
|
+
</p>
|
|
115
|
+
</div>
|
|
116
|
+
<div className="flex flex-col gap-3 sm:flex-row">
|
|
117
|
+
<Link href="/install" className="btn-primary">
|
|
118
|
+
Start with OSS <ArrowRight className="ml-2 h-4 w-4" />
|
|
119
|
+
</Link>
|
|
120
|
+
<Link
|
|
121
|
+
href="https://www.contractspec.studio"
|
|
122
|
+
className="btn-ghost"
|
|
123
|
+
>
|
|
124
|
+
Explore Studio
|
|
125
|
+
</Link>
|
|
126
|
+
<Link href="/product" className="btn-ghost">
|
|
127
|
+
See the architecture
|
|
128
|
+
</Link>
|
|
129
|
+
</div>
|
|
130
|
+
<div className="editorial-proof-strip">
|
|
131
|
+
<div className="editorial-stat">
|
|
132
|
+
<span className="editorial-stat-value">1</span>
|
|
133
|
+
<span className="editorial-label">
|
|
134
|
+
explicit system source
|
|
135
|
+
</span>
|
|
136
|
+
</div>
|
|
137
|
+
<div className="editorial-stat">
|
|
138
|
+
<span className="editorial-stat-value">4+</span>
|
|
139
|
+
<span className="editorial-label">
|
|
140
|
+
aligned surface families
|
|
141
|
+
</span>
|
|
142
|
+
</div>
|
|
143
|
+
<div className="editorial-stat">
|
|
144
|
+
<span className="editorial-stat-value">0</span>
|
|
145
|
+
<span className="editorial-label">required lock-in</span>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
|
|
150
|
+
<div className="editorial-panel space-y-6">
|
|
151
|
+
<p className="editorial-kicker">
|
|
152
|
+
What the site should make clear
|
|
153
|
+
</p>
|
|
154
|
+
<div className="space-y-4">
|
|
155
|
+
<h2 className="editorial-panel-title">
|
|
156
|
+
This is not “yet another AI builder.”
|
|
157
|
+
</h2>
|
|
158
|
+
<p className="editorial-copy text-sm">
|
|
159
|
+
ContractSpec exists for teams that already know AI can write a
|
|
160
|
+
lot of software, but need explicit control over what that
|
|
161
|
+
software is allowed to become over time.
|
|
162
|
+
</p>
|
|
163
|
+
</div>
|
|
164
|
+
<ul className="editorial-list">
|
|
165
|
+
<li>
|
|
166
|
+
<span className="editorial-list-marker" />
|
|
167
|
+
<span>Keep the code and the standards you already use.</span>
|
|
168
|
+
</li>
|
|
169
|
+
<li>
|
|
170
|
+
<span className="editorial-list-marker" />
|
|
171
|
+
<span>
|
|
172
|
+
Stabilize one module at a time instead of rewriting your
|
|
173
|
+
app.
|
|
174
|
+
</span>
|
|
175
|
+
</li>
|
|
176
|
+
<li>
|
|
177
|
+
<span className="editorial-list-marker" />
|
|
178
|
+
<span>
|
|
179
|
+
Move into Studio only when you want the operating product.
|
|
180
|
+
</span>
|
|
181
|
+
</li>
|
|
182
|
+
</ul>
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</section>
|
|
187
|
+
|
|
188
|
+
<section className="editorial-section">
|
|
189
|
+
<div className="editorial-shell space-y-10">
|
|
190
|
+
<div className="max-w-3xl space-y-4">
|
|
191
|
+
<p className="editorial-kicker">Why teams end up here</p>
|
|
192
|
+
<h2 className="font-serif text-4xl tracking-[-0.04em] md:text-5xl">
|
|
193
|
+
AI speed is not the problem. Implicit systems are.
|
|
194
|
+
</h2>
|
|
195
|
+
<p className="editorial-copy">
|
|
196
|
+
Once a team depends on prompts, AI edits, and generated code
|
|
197
|
+
across multiple surfaces, the real failure mode is not “AI wrote
|
|
198
|
+
bad code.” It is that nobody can state the system rules precisely
|
|
199
|
+
enough to keep regeneration safe.
|
|
200
|
+
</p>
|
|
201
|
+
</div>
|
|
202
|
+
<div className="editorial-grid xl:grid-cols-3">
|
|
203
|
+
{failureModes.map((item) => (
|
|
204
|
+
<div key={item.title} className="editorial-panel">
|
|
205
|
+
<p className="editorial-kicker">{item.title}</p>
|
|
206
|
+
<p className="mt-4 text-base text-muted-foreground leading-8">
|
|
207
|
+
{item.description}
|
|
208
|
+
</p>
|
|
209
|
+
</div>
|
|
210
|
+
))}
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
</section>
|
|
214
|
+
|
|
215
|
+
<section className="editorial-section bg-striped">
|
|
216
|
+
<div className="editorial-shell space-y-10">
|
|
217
|
+
<div className="max-w-3xl space-y-4">
|
|
218
|
+
<p className="editorial-kicker">The open system</p>
|
|
219
|
+
<h2 className="font-serif text-4xl tracking-[-0.04em] md:text-5xl">
|
|
220
|
+
One explicit layer that keeps the whole stack honest.
|
|
221
|
+
</h2>
|
|
222
|
+
<p className="editorial-copy">
|
|
223
|
+
ContractSpec is broader than generation. It is the contract layer,
|
|
224
|
+
the runtime bridges, the proof surfaces, and the adoption path
|
|
225
|
+
that lets teams move from OSS control to an operating product
|
|
226
|
+
without pretending they are different systems.
|
|
227
|
+
</p>
|
|
228
|
+
</div>
|
|
229
|
+
<div className="editorial-grid">
|
|
230
|
+
{systemSurfaces.map((surface) => (
|
|
231
|
+
<div key={surface.label} className="editorial-panel">
|
|
232
|
+
<surface.icon className="h-5 w-5 text-[color:var(--rust)]" />
|
|
233
|
+
<h3 className="mt-5 font-serif text-2xl tracking-[-0.03em]">
|
|
234
|
+
{surface.label}
|
|
235
|
+
</h3>
|
|
236
|
+
<p className="mt-3 text-muted-foreground text-sm leading-7">
|
|
237
|
+
{surface.description}
|
|
238
|
+
</p>
|
|
239
|
+
</div>
|
|
240
|
+
))}
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
</section>
|
|
244
|
+
|
|
245
|
+
<section className="editorial-section">
|
|
246
|
+
<div className="editorial-shell grid gap-10 lg:grid-cols-[0.9fr_1.1fr]">
|
|
247
|
+
<div className="space-y-4">
|
|
248
|
+
<p className="editorial-kicker">
|
|
249
|
+
What the OSS layer actually gives you
|
|
250
|
+
</p>
|
|
251
|
+
<h2 className="font-serif text-4xl tracking-[-0.04em] md:text-5xl">
|
|
252
|
+
Explicit contracts show up where teams usually lose control.
|
|
253
|
+
</h2>
|
|
254
|
+
<p className="editorial-copy">
|
|
255
|
+
The promise is not magic generation. The promise is that the same
|
|
256
|
+
product rules can shape APIs, data, interfaces, and agent tools
|
|
257
|
+
without each surface inventing its own truth.
|
|
258
|
+
</p>
|
|
259
|
+
</div>
|
|
260
|
+
<div className="grid gap-5 md:grid-cols-2">
|
|
261
|
+
{outputs.map((output) => (
|
|
262
|
+
<div key={output.title} className="editorial-panel">
|
|
263
|
+
<output.icon className="h-5 w-5 text-[color:var(--blue)]" />
|
|
264
|
+
<h3 className="mt-5 font-serif text-2xl tracking-[-0.03em]">
|
|
265
|
+
{output.title}
|
|
266
|
+
</h3>
|
|
267
|
+
<p className="mt-3 text-muted-foreground text-sm leading-7">
|
|
268
|
+
{output.copy}
|
|
269
|
+
</p>
|
|
270
|
+
</div>
|
|
271
|
+
))}
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
</section>
|
|
275
|
+
|
|
276
|
+
<section className="editorial-section bg-striped">
|
|
277
|
+
<div className="editorial-shell grid gap-8 lg:grid-cols-[1.1fr_0.9fr]">
|
|
278
|
+
<div className="editorial-panel space-y-6">
|
|
279
|
+
<p className="editorial-kicker">Adoption path</p>
|
|
280
|
+
<h2 className="editorial-panel-title">
|
|
281
|
+
Start where the risk is highest, not where the marketing says to
|
|
282
|
+
start.
|
|
283
|
+
</h2>
|
|
284
|
+
<ol className="space-y-4">
|
|
285
|
+
{adoptionSteps.map((step, index) => (
|
|
286
|
+
<li key={step} className="flex gap-4">
|
|
287
|
+
<div className="flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-[rgb(162_79_42_/_0.12)] font-mono text-[color:var(--rust)] text-xs">
|
|
288
|
+
0{index + 1}
|
|
289
|
+
</div>
|
|
290
|
+
<p className="text-muted-foreground text-sm leading-7">
|
|
291
|
+
{step}
|
|
292
|
+
</p>
|
|
293
|
+
</li>
|
|
294
|
+
))}
|
|
295
|
+
</ol>
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
<div className="editorial-panel space-y-6">
|
|
299
|
+
<p className="editorial-kicker">Studio on top</p>
|
|
300
|
+
<h2 className="editorial-panel-title">
|
|
301
|
+
Studio is the operating surface, not a replacement identity.
|
|
302
|
+
</h2>
|
|
303
|
+
<p className="text-muted-foreground text-sm leading-7">
|
|
304
|
+
Use Studio when your team wants a packaged loop for evidence,
|
|
305
|
+
drafting, review, export, and follow-up. The relationship should
|
|
306
|
+
feel like the best application built on top of the same open
|
|
307
|
+
system, not a bait-and-switch away from it.
|
|
308
|
+
</p>
|
|
309
|
+
<div className="editorial-divider" />
|
|
310
|
+
<div className="grid gap-4 text-muted-foreground text-sm">
|
|
311
|
+
<p>
|
|
312
|
+
<span className="font-medium text-foreground">OSS/Core:</span>{' '}
|
|
313
|
+
contracts, generation, runtimes, harnesses, agent tooling.
|
|
314
|
+
</p>
|
|
315
|
+
<p>
|
|
316
|
+
<span className="font-medium text-foreground">Studio:</span> the
|
|
317
|
+
opinionated operating loop when a team wants the product.
|
|
318
|
+
</p>
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
</div>
|
|
322
|
+
</section>
|
|
323
|
+
|
|
324
|
+
<section className="section-padding">
|
|
325
|
+
<div className="editorial-shell">
|
|
326
|
+
<div className="editorial-panel flex flex-col gap-8 rounded-[40px] border-dashed px-6 py-8 md:px-10 md:py-10 lg:flex-row lg:items-end lg:justify-between">
|
|
327
|
+
<div className="max-w-3xl space-y-4">
|
|
328
|
+
<p className="editorial-kicker">Choose your path</p>
|
|
329
|
+
<h2 className="font-serif text-4xl tracking-[-0.04em] md:text-5xl">
|
|
330
|
+
Adopt the open system first. Evaluate Studio when the team is
|
|
331
|
+
ready for the operating layer.
|
|
332
|
+
</h2>
|
|
333
|
+
<p className="editorial-copy">
|
|
334
|
+
That is the product story the site should tell everywhere: open
|
|
335
|
+
foundation, explicit contracts, safe regeneration, then an
|
|
336
|
+
opinionated surface on top for teams that want it.
|
|
337
|
+
</p>
|
|
338
|
+
</div>
|
|
339
|
+
<div className="flex flex-col gap-3 sm:flex-row lg:flex-col">
|
|
340
|
+
<Link href="/install" className="btn-primary">
|
|
341
|
+
Start with OSS
|
|
342
|
+
</Link>
|
|
343
|
+
<Link
|
|
344
|
+
href="https://www.contractspec.studio"
|
|
345
|
+
className="btn-ghost"
|
|
346
|
+
>
|
|
347
|
+
Explore Studio
|
|
348
|
+
</Link>
|
|
349
|
+
<Link href="/pricing" className="btn-ghost">
|
|
350
|
+
See packaging
|
|
351
|
+
</Link>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
</section>
|
|
356
|
+
</main>
|
|
357
|
+
);
|
|
30
358
|
}
|