@contractspec/bundle.marketing 3.7.6 → 3.7.7

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.
Files changed (163) hide show
  1. package/.turbo/turbo-build.log +84 -84
  2. package/AGENTS.md +29 -21
  3. package/README.md +36 -49
  4. package/dist/browser/components/marketing/ChangelogPage.js +8 -8
  5. package/dist/browser/components/marketing/CofounderPage.js +167 -523
  6. package/dist/browser/components/marketing/ContactClient.js +200 -207
  7. package/dist/browser/components/marketing/ContributePage.js +211 -463
  8. package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
  9. package/dist/browser/components/marketing/LandingPage.js +464 -568
  10. package/dist/browser/components/marketing/PricingClient.js +213 -839
  11. package/dist/browser/components/marketing/ProductClientPage.js +265 -463
  12. package/dist/browser/components/marketing/index.js +2007 -3338
  13. package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
  14. package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
  15. package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
  16. package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
  17. package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
  18. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
  19. package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
  20. package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
  21. package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
  22. package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
  23. package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
  24. package/dist/browser/components/marketing/studio-signup-section.js +25 -41
  25. package/dist/browser/components/templates/TemplatesClientPage.js +2324 -3578
  26. package/dist/browser/components/templates/TemplatesPage.js +1 -1
  27. package/dist/browser/components/templates/TemplatesPreviewModal.js +3 -3
  28. package/dist/browser/components/templates/index.js +2361 -3615
  29. package/dist/browser/index.js +2363 -3617
  30. package/dist/browser/libs/email/client.js +1 -1
  31. package/dist/browser/libs/email/contact.js +1 -1
  32. package/dist/browser/libs/email/newsletter.js +1 -1
  33. package/dist/browser/libs/email/waitlist-application.js +1 -1
  34. package/dist/browser/libs/email/waitlist.js +1 -1
  35. package/dist/browser/registry/engine.js +2003 -3334
  36. package/dist/browser/registry/index.js +2003 -3334
  37. package/dist/browser/registry/registry-docs.js +2 -2
  38. package/dist/browser/registry/registry-landing.js +2007 -3338
  39. package/dist/browser/registry/registry.js +2003 -3334
  40. package/dist/browser/registry/utils.js +2003 -3334
  41. package/dist/components/marketing/ChangelogPage.js +8 -8
  42. package/dist/components/marketing/CofounderPage.js +167 -523
  43. package/dist/components/marketing/ContactClient.js +200 -207
  44. package/dist/components/marketing/ContributePage.d.ts +0 -2
  45. package/dist/components/marketing/ContributePage.js +211 -463
  46. package/dist/components/marketing/DesignPartnerPage.js +165 -218
  47. package/dist/components/marketing/LandingPage.js +464 -568
  48. package/dist/components/marketing/PricingClient.js +213 -839
  49. package/dist/components/marketing/ProductClientPage.js +265 -463
  50. package/dist/components/marketing/index.d.ts +5 -5
  51. package/dist/components/marketing/index.js +2007 -3338
  52. package/dist/components/marketing/pricing-thinking-modal.js +12 -12
  53. package/dist/components/marketing/sections/AudienceSection.js +2 -2
  54. package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
  55. package/dist/components/marketing/sections/CtaSection.js +3 -3
  56. package/dist/components/marketing/sections/FearsSection.js +3 -3
  57. package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
  58. package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
  59. package/dist/components/marketing/sections/IconGridSection.js +2 -2
  60. package/dist/components/marketing/sections/OutputsSection.js +2 -2
  61. package/dist/components/marketing/sections/ProblemSection.js +2 -2
  62. package/dist/components/marketing/sections/SolutionSection.js +2 -2
  63. package/dist/components/marketing/sections/StepsSection.js +4 -4
  64. package/dist/components/marketing/studio-signup-section.js +25 -41
  65. package/dist/components/templates/TemplatesClientPage.js +2324 -3578
  66. package/dist/components/templates/TemplatesPage.js +1 -1
  67. package/dist/components/templates/TemplatesPreviewModal.js +3 -3
  68. package/dist/components/templates/index.js +2361 -3615
  69. package/dist/index.js +2363 -3617
  70. package/dist/libs/email/client.js +1 -1
  71. package/dist/libs/email/contact.js +1 -1
  72. package/dist/libs/email/newsletter.js +1 -1
  73. package/dist/libs/email/waitlist-application.js +1 -1
  74. package/dist/libs/email/waitlist.js +1 -1
  75. package/dist/node/components/marketing/ChangelogPage.js +8 -8
  76. package/dist/node/components/marketing/CofounderPage.js +167 -523
  77. package/dist/node/components/marketing/ContactClient.js +200 -207
  78. package/dist/node/components/marketing/ContributePage.js +211 -463
  79. package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
  80. package/dist/node/components/marketing/LandingPage.js +464 -568
  81. package/dist/node/components/marketing/PricingClient.js +213 -839
  82. package/dist/node/components/marketing/ProductClientPage.js +265 -463
  83. package/dist/node/components/marketing/index.js +2007 -3338
  84. package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
  85. package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
  86. package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
  87. package/dist/node/components/marketing/sections/CtaSection.js +3 -3
  88. package/dist/node/components/marketing/sections/FearsSection.js +3 -3
  89. package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
  90. package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
  91. package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
  92. package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
  93. package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
  94. package/dist/node/components/marketing/sections/StepsSection.js +4 -4
  95. package/dist/node/components/marketing/studio-signup-section.js +25 -41
  96. package/dist/node/components/templates/TemplatesClientPage.js +2324 -3578
  97. package/dist/node/components/templates/TemplatesPage.js +1 -1
  98. package/dist/node/components/templates/TemplatesPreviewModal.js +3 -3
  99. package/dist/node/components/templates/index.js +2361 -3615
  100. package/dist/node/index.js +2363 -3617
  101. package/dist/node/libs/email/client.js +1 -1
  102. package/dist/node/libs/email/contact.js +1 -1
  103. package/dist/node/libs/email/newsletter.js +1 -1
  104. package/dist/node/libs/email/waitlist-application.js +1 -1
  105. package/dist/node/libs/email/waitlist.js +1 -1
  106. package/dist/node/registry/engine.js +2003 -3334
  107. package/dist/node/registry/index.js +2003 -3334
  108. package/dist/node/registry/registry-docs.js +2 -2
  109. package/dist/node/registry/registry-landing.js +2007 -3338
  110. package/dist/node/registry/registry.js +2003 -3334
  111. package/dist/node/registry/utils.js +2003 -3334
  112. package/dist/registry/engine.js +2003 -3334
  113. package/dist/registry/index.js +2003 -3334
  114. package/dist/registry/registry-docs.js +2 -2
  115. package/dist/registry/registry-landing.js +2007 -3338
  116. package/dist/registry/registry.js +2003 -3334
  117. package/dist/registry/utils.js +2003 -3334
  118. package/package.json +22 -22
  119. package/src/bundles/MarketingBundle.ts +273 -273
  120. package/src/components/marketing/ChangelogPage.tsx +72 -100
  121. package/src/components/marketing/CofounderPage.tsx +120 -384
  122. package/src/components/marketing/ContactClient.tsx +164 -154
  123. package/src/components/marketing/ContributePage.tsx +139 -313
  124. package/src/components/marketing/DesignPartnerPage.tsx +133 -171
  125. package/src/components/marketing/LandingPage.tsx +353 -25
  126. package/src/components/marketing/PricingClient.tsx +192 -437
  127. package/src/components/marketing/ProductClientPage.tsx +255 -377
  128. package/src/components/marketing/index.ts +5 -5
  129. package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
  130. package/src/components/marketing/sections/AudienceSection.tsx +55 -56
  131. package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
  132. package/src/components/marketing/sections/CtaSection.tsx +49 -50
  133. package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
  134. package/src/components/marketing/sections/FearsSection.tsx +36 -37
  135. package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
  136. package/src/components/marketing/sections/IconGridSection.tsx +71 -71
  137. package/src/components/marketing/sections/OutputsSection.tsx +51 -52
  138. package/src/components/marketing/sections/ProblemSection.tsx +39 -40
  139. package/src/components/marketing/sections/SolutionSection.tsx +39 -40
  140. package/src/components/marketing/sections/StepsSection.tsx +47 -48
  141. package/src/components/marketing/studio-signup-section.tsx +39 -41
  142. package/src/components/templates/TemplatesClientPage.tsx +727 -685
  143. package/src/components/templates/TemplatesPage.tsx +110 -110
  144. package/src/components/templates/TemplatesPreviewModal.tsx +197 -198
  145. package/src/index.ts +4 -4
  146. package/src/libs/email/client.test.ts +81 -81
  147. package/src/libs/email/client.ts +111 -111
  148. package/src/libs/email/contact.ts +35 -35
  149. package/src/libs/email/newsletter.ts +46 -46
  150. package/src/libs/email/types.ts +29 -29
  151. package/src/libs/email/utils.ts +5 -5
  152. package/src/libs/email/waitlist-application.ts +72 -72
  153. package/src/libs/email/waitlist.ts +46 -46
  154. package/src/libs/pricing-examples.ts +12 -12
  155. package/src/registry/engine.ts +16 -16
  156. package/src/registry/factory.ts +57 -57
  157. package/src/registry/registry-docs.ts +656 -666
  158. package/src/registry/registry-landing.ts +94 -95
  159. package/src/registry/registry.ts +36 -37
  160. package/src/registry/types.ts +2 -2
  161. package/src/registry/utils.ts +56 -56
  162. package/tsconfig.json +11 -11
  163. package/tsdown.config.js +5 -5
@@ -1,447 +1,202 @@
1
1
  'use client';
2
2
 
3
- import { useState } from 'react';
3
+ import { ChevronDown, ChevronRight } from 'lucide-react';
4
4
  import Link from 'next/link';
5
- import { CheckCircle, ChevronDown, ChevronRight } from 'lucide-react';
6
-
5
+ import { useState } from 'react';
7
6
  import { StudioSignupSection } from './studio-signup-section';
8
- import { PricingThinkingModal } from './pricing-thinking-modal';
9
7
 
10
- interface FAQ {
11
- question: string;
12
- answer: string;
13
- }
8
+ const faqs = [
9
+ {
10
+ question: 'What stays free?',
11
+ answer:
12
+ 'The OSS foundation stays free. Teams can adopt contracts, generation, runtime adapters, and the core package ecosystem without crossing into a paid product loop.',
13
+ },
14
+ {
15
+ question: 'What is Studio charging for?',
16
+ answer:
17
+ 'Studio is the operating layer: the packaged workflow for evidence, drafts, review, export, and follow-up on top of the same open system.',
18
+ },
19
+ {
20
+ question: 'Why not price the OSS layer?',
21
+ answer:
22
+ 'The GTM works better when technical adopters can prove the foundation in the open, keep their leverage, and only pay when the operating product removes enough operational work.',
23
+ },
24
+ {
25
+ question: 'Who should talk to you now?',
26
+ answer:
27
+ 'Teams already running AI-heavy product or ops workflows, especially those who feel drift, unsafe regeneration, or coordination pain across multiple surfaces.',
28
+ },
29
+ ];
14
30
 
15
- const faqs: FAQ[] = [
16
- {
17
- question: 'Can I use ContractSpec Studio today?',
18
- answer:
19
- 'Yes. ContractSpec Studio is live at www.contractspec.studio. Start with the free tier and upgrade as paid plans roll out.',
20
- },
21
- {
22
- question: 'What will you charge for later?',
23
- answer:
24
- 'Pricing is evolving toward usage: regenerations, AI agent actions, and active projects. A generous free tier will remain so smaller teams and experiments can thrive.',
25
- },
26
- {
27
- question: 'What do I get as a design partner?',
28
- answer:
29
- 'Direct collaboration on roadmap priorities, hands-on onboarding, and priority support. You also help shape Studio workflows before broad rollout.',
30
- },
31
- {
32
- question: 'Will you ever charge per seat?',
33
- answer:
34
- 'No. We want everyone in your team to use ContractSpec without friction. Pricing is tied to how much of your system we help you maintain, not how many teammates you invite.',
35
- },
31
+ const packages = [
32
+ {
33
+ name: 'OSS/Core',
34
+ subtitle: 'Free and open',
35
+ description:
36
+ 'Use the open system when you want explicit contracts, safe regeneration, and standard outputs the team owns.',
37
+ items: [
38
+ 'Contracts, generation, runtime adapters, harnesses, and agent tooling',
39
+ 'Incremental adoption inside existing codebases',
40
+ 'Local and CI-friendly workflows',
41
+ 'No forced hosted runtime or locked delivery path',
42
+ ],
43
+ cta: {
44
+ label: 'Start with OSS',
45
+ href: '/install',
46
+ className: 'btn-primary',
47
+ },
48
+ },
49
+ {
50
+ name: 'Studio',
51
+ subtitle: 'Operating product',
52
+ description:
53
+ 'Use Studio when you want the product layer for evidence, drafting, review, exports, and follow-up.',
54
+ items: [
55
+ 'Packaged operating loop on top of the same open system',
56
+ 'Opinionated team workflows and governance surfaces',
57
+ 'Faster coordination for teams running real product or ops loops',
58
+ 'Design partner and rollout paths for teams with live complexity',
59
+ ],
60
+ cta: {
61
+ label: 'Explore Studio',
62
+ href: 'https://www.contractspec.studio',
63
+ className: 'btn-ghost',
64
+ },
65
+ },
36
66
  ];
37
67
 
38
68
  export function PricingClient() {
39
- const [openFaq, setOpenFaq] = useState<number | null>(null);
40
- const [pricingModalOpen, setPricingModalOpen] = useState(false);
41
-
42
- const openStudio = () => {
43
- window.open(
44
- 'https://www.contractspec.studio',
45
- '_blank',
46
- 'noopener,noreferrer'
47
- );
48
- };
49
-
50
- return (
51
- <main className="">
52
- {/* Hero */}
53
- <section className="section-padding hero-gradient relative">
54
- <div className="mx-auto max-w-4xl space-y-6 text-center">
55
- <h1 className="text-5xl leading-tight font-bold md:text-6xl">
56
- Transparent, usage-based pricing – after we earn it.
57
- </h1>
58
- <p className="text-muted-foreground mx-auto max-w-2xl text-lg">
59
- ContractSpec Core (the OSS compiler) is and always will be free.
60
- ContractSpec Studio is live, with paid plans rolling out
61
- progressively.
62
- </p>
63
- <div className="flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row">
64
- <Link
65
- href="/install"
66
- className="btn-primary inline-flex items-center gap-2"
67
- >
68
- Install OSS Core <ChevronRight size={16} />
69
- </Link>
70
- <Link
71
- href="https://www.contractspec.studio"
72
- className="btn-ghost inline-flex items-center gap-2"
73
- >
74
- Try Studio Free
75
- </Link>
76
- </div>
77
- </div>
78
- </section>
79
-
80
- {/* Design-Partner Highlight Strip */}
81
- <section className="section-padding border-border border-b">
82
- <div className="mx-auto max-w-6xl">
83
- <div className="card-subtle flex flex-col gap-6 p-8 md:flex-row md:items-center">
84
- <div className="flex-1 space-y-4">
85
- <div className="inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1">
86
- <span className="text-sm font-medium text-violet-300">
87
- Now accepting design partners
88
- </span>
89
- </div>
90
- <h2 className="text-2xl font-bold">
91
- Help us design the compiler for AI-native software.
92
- </h2>
93
- <p className="text-muted-foreground text-sm">
94
- We work closely with a small group of teams building serious
95
- products with AI. You bring real-world complexity, we bring the
96
- spec-first engine and a lot of attention.
97
- </p>
98
- </div>
99
- <div className="flex-1 space-y-4">
100
- <ul className="text-muted-foreground space-y-2 text-sm">
101
- <li className="flex gap-2">
102
- <CheckCircle
103
- size={16}
104
- className="mt-0.5 shrink-0 text-violet-400"
105
- />
106
- Priority access to new Studio capabilities
107
- </li>
108
- <li className="flex gap-2">
109
- <CheckCircle
110
- size={16}
111
- className="mt-0.5 shrink-0 text-violet-400"
112
- />
113
- Hands-on onboarding and architecture help
114
- </li>
115
- <li className="flex gap-2">
116
- <CheckCircle
117
- size={16}
118
- className="mt-0.5 shrink-0 text-violet-400"
119
- />
120
- Influence over roadmap and features
121
- </li>
122
- <li className="flex gap-2">
123
- <CheckCircle
124
- size={16}
125
- className="mt-0.5 shrink-0 text-violet-400"
126
- />
127
- Priority support through direct channels
128
- </li>
129
- <li className="flex gap-2">
130
- <CheckCircle
131
- size={16}
132
- className="mt-0.5 shrink-0 text-violet-400"
133
- />
134
- Pricing input and partner incentives
135
- </li>
136
- </ul>
137
- <Link
138
- href="/design-partner"
139
- className="btn-primary w-full md:w-auto"
140
- >
141
- Apply as a design partner
142
- </Link>
143
- </div>
144
- </div>
145
- </div>
146
- </section>
147
-
148
- {/* Future Pricing Tiers */}
149
- <section className="section-padding border-border border-b">
150
- <div className="mx-auto max-w-6xl">
151
- <div className="grid gap-6 md:grid-cols-3">
152
- {/* OSS Core (Forever Free) */}
153
- <div className="card-subtle col-span-3 space-y-6 border-violet-500/20 p-6">
154
- <div className="absolute -top-3 left-1/2 -translate-x-1/2 rounded-full bg-violet-500 px-3 py-1 text-xs font-medium text-white">
155
- <div className="text-1xl font-bold">Free Forever</div>
156
- <p className="text-muted-foreground text-xs">
157
- Apache 2.0 / MIT License
158
- </p>
159
- </div>
160
- <div className="flex flex-row justify-around">
161
- <div className="w-1/2">
162
- <div className="space-y-2">
163
- <h2 className="text-2xl font-bold">OSS Core</h2>
164
- </div>
165
- <p className="text-muted-foreground text-sm">
166
- The complete spec-first compiler. Generate API, DB, and UI
167
- code locally.
168
- </p>
169
- </div>
170
- <ul className="space-y-3">
171
- <li className="text-muted-foreground flex gap-3 text-sm">
172
- <CheckCircle
173
- size={16}
174
- className="mt-0.5 shrink-0 text-violet-400"
175
- />
176
- Unlimited local regenerations
177
- </li>
178
- <li className="text-muted-foreground flex gap-3 text-sm">
179
- <CheckCircle
180
- size={16}
181
- className="mt-0.5 shrink-0 text-violet-400"
182
- />
183
- All standard generators included
184
- </li>
185
- <li className="text-muted-foreground flex gap-3 text-sm">
186
- <CheckCircle
187
- size={16}
188
- className="mt-0.5 shrink-0 text-violet-400"
189
- />
190
- Run in your own CI/CD
191
- </li>
192
- <li className="text-muted-foreground flex gap-3 text-sm">
193
- <CheckCircle
194
- size={16}
195
- className="mt-0.5 shrink-0 text-violet-400"
196
- />
197
- Community support
198
- </li>
199
- </ul>
200
- </div>
201
- <Link href="/install" className="btn-ghost w-full">
202
- Install now
203
- </Link>
204
- </div>
205
-
206
- {/* Design Partner (Current) */}
207
- <div className="card-subtle relative space-y-6 bg-violet-500/5 p-6 ring-2 ring-violet-500">
208
- <div className="absolute -top-3 left-1/2 -translate-x-1/2 rounded-full bg-violet-500 px-3 py-1 text-xs font-medium text-white">
209
- Live program
210
- </div>
211
- <div className="space-y-2">
212
- <h2 className="text-2xl font-bold">Design Partner</h2>
213
- <div className="space-y-1">
214
- <div className="text-2xl font-bold">Invite-based</div>
215
- <p className="text-muted-foreground text-xs">
216
- Built for teams shaping the next Studio capabilities
217
- </p>
218
- </div>
219
- </div>
220
- <ul className="space-y-3">
221
- <li className="text-muted-foreground flex gap-3 text-sm">
222
- <CheckCircle
223
- size={16}
224
- className="mt-0.5 shrink-0 text-violet-400"
225
- />
226
- Use ContractSpec Studio for real projects
227
- </li>
228
- <li className="text-muted-foreground flex gap-3 text-sm">
229
- <CheckCircle
230
- size={16}
231
- className="mt-0.5 shrink-0 text-violet-400"
232
- />
233
- Work directly with the team on architecture and workflow
234
- design
235
- </li>
236
- <li className="text-muted-foreground flex gap-3 text-sm">
237
- <CheckCircle
238
- size={16}
239
- className="mt-0.5 shrink-0 text-violet-400"
240
- />
241
- Access to partner-only previews and feedback loops
242
- </li>
243
- <li className="text-muted-foreground flex gap-3 text-sm">
244
- <CheckCircle
245
- size={16}
246
- className="mt-0.5 shrink-0 text-violet-400"
247
- />
248
- Priority support and roadmap influence
249
- </li>
250
- </ul>
251
- <Link href="/design-partner" className="btn-primary w-full">
252
- Apply as a design partner
253
- </Link>
254
- </div>
255
-
256
- {/* Builder (Coming Soon) */}
257
- <div className="card-subtle relative space-y-6 p-6">
258
- <div className="bg-muted border-border absolute -top-3 left-1/2 -translate-x-1/2 rounded-full border px-3 py-1 text-xs font-medium">
259
- Coming soon
260
- </div>
261
- <div className="space-y-2">
262
- <h2 className="text-2xl font-bold">Builder</h2>
263
- <div className="space-y-1">
264
- <div className="text-2xl font-bold">
265
- Usage-based, for solo builders and small teams
266
- </div>
267
- </div>
268
- </div>
269
- <p className="text-muted-foreground text-sm">
270
- Pay only for what you regenerate and the AI you consume. No
271
- seat-based pricing, and a generous free tier for experiments.
272
- </p>
273
- <ul className="space-y-2">
274
- <li className="text-muted-foreground text-sm">1–3 projects</li>
275
- <li className="text-muted-foreground text-sm">
276
- Generous monthly free regenerations
277
- </li>
278
- <li className="text-muted-foreground text-sm">
279
- Pay-as-you-go beyond the free tier
280
- </li>
281
- </ul>
282
- <button
283
- disabled
284
- className="btn-ghost w-full cursor-not-allowed opacity-50"
285
- >
286
- Available after pricing rollout
287
- </button>
288
- </div>
289
-
290
- {/* Team / Enterprise (Coming Soon) */}
291
- <div className="card-subtle relative space-y-6 p-6">
292
- <div className="bg-muted border-border absolute -top-3 left-1/2 -translate-x-1/2 rounded-full border px-3 py-1 text-xs font-medium">
293
- Coming soon
294
- </div>
295
- <div className="space-y-2">
296
- <h2 className="text-2xl font-bold">Team & Platform</h2>
297
- <div className="space-y-1">
298
- <div className="text-2xl font-bold">
299
- Custom, for teams standardizing on ContractSpec
300
- </div>
301
- </div>
302
- </div>
303
- <p className="text-muted-foreground text-sm">
304
- For teams running multiple apps or platforms on ContractSpec,
305
- with stricter governance, data, and compliance needs.
306
- </p>
307
- <ul className="space-y-3">
308
- <li className="text-muted-foreground flex gap-3 text-sm">
309
- <CheckCircle
310
- size={16}
311
- className="mt-0.5 shrink-0 text-violet-400"
312
- />
313
- Multiple projects and environments
314
- </li>
315
- <li className="text-muted-foreground flex gap-3 text-sm">
316
- <CheckCircle
317
- size={16}
318
- className="mt-0.5 shrink-0 text-violet-400"
319
- />
320
- Advanced RBAC and policy packs
321
- </li>
322
- <li className="text-muted-foreground flex gap-3 text-sm">
323
- <CheckCircle
324
- size={16}
325
- className="mt-0.5 shrink-0 text-violet-400"
326
- />
327
- SSO, audit trails, and longer retention
328
- </li>
329
- <li className="text-muted-foreground flex gap-3 text-sm">
330
- <CheckCircle
331
- size={16}
332
- className="mt-0.5 shrink-0 text-violet-400"
333
- />
334
- Priority support & SLAs
335
- </li>
336
- </ul>
337
- <Link href="/contact" className="btn-ghost w-full">
338
- Talk to us
339
- </Link>
340
- </div>
341
- </div>
342
- </div>
343
- </section>
344
-
345
- {/* How Pricing Will Work */}
346
- <section className="section-padding border-border bg-muted/20 border-b">
347
- <div className="mx-auto max-w-4xl space-y-8">
348
- <div className="space-y-4 text-center">
349
- <h2 className="text-3xl font-bold">
350
- How ContractSpec pricing works now and next
351
- </h2>
352
- <p className="text-muted-foreground mx-auto max-w-2xl text-lg">
353
- We charge based on how much of your stack we help you maintain,
354
- not how many people click around in the UI.
355
- </p>
356
- </div>
357
- <div className="grid gap-6 md:grid-cols-3">
358
- <div className="card-subtle space-y-3 p-6">
359
- <h3 className="font-bold">Generous free tier</h3>
360
- <p className="text-muted-foreground text-sm">
361
- One serious project, small spec, and enough monthly
362
- regenerations to ship something real.
363
- </p>
364
- </div>
365
- <div className="card-subtle space-y-3 p-6">
366
- <h3 className="font-bold">Usage-based beyond free</h3>
367
- <p className="text-muted-foreground text-sm">
368
- You pay for regenerations and AI agent actions, not per-seat.
369
- The more your system evolves via ContractSpec, the more you pay.
370
- </p>
371
- </div>
372
- <div className="card-subtle space-y-3 p-6">
373
- <h3 className="font-bold">No lock-in</h3>
374
- <p className="text-muted-foreground text-sm">
375
- Generated code is standard, readable, and exportable. If you
376
- leave, your app keeps running.
377
- </p>
378
- </div>
379
- </div>
380
- <div className="pt-6 text-center">
381
- <button
382
- onClick={() => setPricingModalOpen(true)}
383
- className="btn-ghost"
384
- >
385
- View our tentative pricing model
386
- </button>
387
- </div>
388
- </div>
389
- </section>
390
-
391
- {/* FAQ */}
392
- <section className="section-padding border-border border-b">
393
- <div className="mx-auto max-w-3xl space-y-8">
394
- <h2 className="text-center text-3xl font-bold">
395
- Frequently asked questions
396
- </h2>
397
- <div className="space-y-4">
398
- {faqs.map((faq, i) => (
399
- <div key={i} className="card-subtle overflow-hidden">
400
- <button
401
- onClick={() => setOpenFaq(openFaq === i ? null : i)}
402
- className="flex w-full items-center justify-between p-6 text-left"
403
- >
404
- <span className="font-medium">{faq.question}</span>
405
- <ChevronDown
406
- size={20}
407
- className={`text-muted-foreground transition-transform ${
408
- openFaq === i ? 'rotate-180' : ''
409
- }`}
410
- />
411
- </button>
412
- {openFaq === i && (
413
- <div className="text-muted-foreground px-6 pb-6 text-sm">
414
- {faq.answer}
415
- </div>
416
- )}
417
- </div>
418
- ))}
419
- </div>
420
- <div className="pt-4 text-center">
421
- <p className="text-muted-foreground mb-2 text-sm">Still unsure?</p>
422
- <Link
423
- href="/contact"
424
- className="text-sm font-medium text-violet-400 hover:text-violet-300"
425
- >
426
- Contact us →
427
- </Link>
428
- </div>
429
- </div>
430
- </section>
431
-
432
- {/* Studio Signup Section */}
433
- <section className="section-padding hero-gradient">
434
- <div className="mx-auto max-w-4xl">
435
- <StudioSignupSection />
436
- </div>
437
- </section>
438
-
439
- {/* Pricing Thinking Modal */}
440
- <PricingThinkingModal
441
- open={pricingModalOpen}
442
- onOpenChange={setPricingModalOpen}
443
- onApplyClick={openStudio}
444
- />
445
- </main>
446
- );
69
+ const [openFaq, setOpenFaq] = useState<number | null>(0);
70
+
71
+ return (
72
+ <main>
73
+ <section className="section-padding hero-gradient border-border/70 border-b">
74
+ <div className="editorial-shell grid gap-8 lg:grid-cols-[1.05fr_0.95fr]">
75
+ <div className="space-y-6">
76
+ <p className="editorial-kicker">Packaging, not upsell fog</p>
77
+ <h1 className="editorial-title max-w-4xl">
78
+ The open system is how teams start. Studio is how some teams
79
+ operate.
80
+ </h1>
81
+ <p className="editorial-subtitle">
82
+ Pricing should reflect the product split honestly. The OSS layer
83
+ is the open foundation. Studio is the paid operating surface when
84
+ the team wants a packaged workflow on top.
85
+ </p>
86
+ <div className="flex flex-col gap-3 sm:flex-row">
87
+ <Link href="/install" className="btn-primary">
88
+ Start with OSS <ChevronRight className="ml-2 h-4 w-4" />
89
+ </Link>
90
+ <Link
91
+ href="https://www.contractspec.studio"
92
+ className="btn-ghost"
93
+ >
94
+ Explore Studio
95
+ </Link>
96
+ </div>
97
+ </div>
98
+ <div className="editorial-panel space-y-5">
99
+ <p className="editorial-kicker">Current GTM</p>
100
+ <h2 className="editorial-panel-title">
101
+ Earn trust in the open, then earn the right to sell the operating
102
+ product.
103
+ </h2>
104
+ <p className="text-muted-foreground text-sm leading-7">
105
+ This page should make the ladder clear: prove the OSS foundation
106
+ first, then package the workflow that removes operational drag for
107
+ teams that need more.
108
+ </p>
109
+ </div>
110
+ </div>
111
+ </section>
112
+
113
+ <section className="editorial-section">
114
+ <div className="editorial-shell grid gap-6 lg:grid-cols-2">
115
+ {packages.map((pkg) => (
116
+ <div key={pkg.name} className="editorial-panel space-y-6">
117
+ <div className="space-y-3">
118
+ <p className="editorial-kicker">{pkg.subtitle}</p>
119
+ <h2 className="font-serif text-4xl tracking-[-0.04em]">
120
+ {pkg.name}
121
+ </h2>
122
+ <p className="text-muted-foreground text-sm leading-7">
123
+ {pkg.description}
124
+ </p>
125
+ </div>
126
+ <ul className="editorial-list">
127
+ {pkg.items.map((item) => (
128
+ <li key={item}>
129
+ <span className="editorial-list-marker" />
130
+ <span>{item}</span>
131
+ </li>
132
+ ))}
133
+ </ul>
134
+ <Link href={pkg.cta.href} className={pkg.cta.className}>
135
+ {pkg.cta.label}
136
+ </Link>
137
+ </div>
138
+ ))}
139
+ </div>
140
+ </section>
141
+
142
+ <section className="editorial-section bg-striped">
143
+ <div className="editorial-shell grid gap-8 lg:grid-cols-[0.95fr_1.05fr]">
144
+ <div className="space-y-4">
145
+ <p className="editorial-kicker">Design partner path</p>
146
+ <h2 className="font-serif text-4xl tracking-[-0.04em] md:text-5xl">
147
+ For teams already carrying real AI-native complexity.
148
+ </h2>
149
+ <p className="editorial-copy">
150
+ The design partner path exists for teams that need the operating
151
+ layer now and are willing to shape it with us. That is not
152
+ “enterprise later” positioning. It is a practical way to learn
153
+ from the hardest live workflows first.
154
+ </p>
155
+ <Link href="/design-partner" className="btn-primary">
156
+ Apply as a design partner
157
+ </Link>
158
+ </div>
159
+ <StudioSignupSection />
160
+ </div>
161
+ </section>
162
+
163
+ <section className="editorial-section">
164
+ <div className="editorial-shell grid gap-8 lg:grid-cols-[0.9fr_1.1fr]">
165
+ <div className="space-y-4">
166
+ <p className="editorial-kicker">FAQ</p>
167
+ <h2 className="font-serif text-4xl tracking-[-0.04em] md:text-5xl">
168
+ Questions teams usually ask before they pick a side.
169
+ </h2>
170
+ </div>
171
+ <div className="space-y-3">
172
+ {faqs.map((faq, index) => {
173
+ const isOpen = openFaq === index;
174
+
175
+ return (
176
+ <div key={faq.question} className="editorial-panel p-5">
177
+ <button
178
+ type="button"
179
+ onClick={() => setOpenFaq(isOpen ? null : index)}
180
+ className="flex w-full items-center justify-between gap-4 text-left"
181
+ >
182
+ <span className="font-medium text-lg">{faq.question}</span>
183
+ <ChevronDown
184
+ className={`h-4 w-4 shrink-0 text-muted-foreground transition-transform ${
185
+ isOpen ? 'rotate-180' : ''
186
+ }`}
187
+ />
188
+ </button>
189
+ {isOpen ? (
190
+ <p className="mt-4 text-muted-foreground text-sm leading-7">
191
+ {faq.answer}
192
+ </p>
193
+ ) : null}
194
+ </div>
195
+ );
196
+ })}
197
+ </div>
198
+ </div>
199
+ </section>
200
+ </main>
201
+ );
447
202
  }