@contractspec/bundle.marketing 1.12.0

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 (216) hide show
  1. package/.turbo/turbo-build$colon$types.log +1 -0
  2. package/.turbo/turbo-build.log +175 -0
  3. package/.turbo/turbo-lint.log +3 -0
  4. package/AGENTS.md +36 -0
  5. package/CHANGELOG.md +416 -0
  6. package/README.md +57 -0
  7. package/dist/components/marketing/ChangelogPage.d.ts +21 -0
  8. package/dist/components/marketing/ChangelogPage.d.ts.map +1 -0
  9. package/dist/components/marketing/ChangelogPage.js +65 -0
  10. package/dist/components/marketing/ChangelogPage.js.map +1 -0
  11. package/dist/components/marketing/CofounderPage.d.ts +7 -0
  12. package/dist/components/marketing/CofounderPage.d.ts.map +1 -0
  13. package/dist/components/marketing/CofounderPage.js +468 -0
  14. package/dist/components/marketing/CofounderPage.js.map +1 -0
  15. package/dist/components/marketing/ContactClient.d.ts +7 -0
  16. package/dist/components/marketing/ContactClient.d.ts.map +1 -0
  17. package/dist/components/marketing/ContactClient.js +158 -0
  18. package/dist/components/marketing/ContactClient.js.map +1 -0
  19. package/dist/components/marketing/ContributePage.d.ts +9 -0
  20. package/dist/components/marketing/ContributePage.d.ts.map +1 -0
  21. package/dist/components/marketing/ContributePage.js +362 -0
  22. package/dist/components/marketing/ContributePage.js.map +1 -0
  23. package/dist/components/marketing/DesignPartnerPage.d.ts +9 -0
  24. package/dist/components/marketing/DesignPartnerPage.d.ts.map +1 -0
  25. package/dist/components/marketing/DesignPartnerPage.js +215 -0
  26. package/dist/components/marketing/DesignPartnerPage.js.map +1 -0
  27. package/dist/components/marketing/LandingPage.d.ts +7 -0
  28. package/dist/components/marketing/LandingPage.d.ts.map +1 -0
  29. package/dist/components/marketing/LandingPage.js +38 -0
  30. package/dist/components/marketing/LandingPage.js.map +1 -0
  31. package/dist/components/marketing/PricingClient.d.ts +7 -0
  32. package/dist/components/marketing/PricingClient.d.ts.map +1 -0
  33. package/dist/components/marketing/PricingClient.js +521 -0
  34. package/dist/components/marketing/PricingClient.js.map +1 -0
  35. package/dist/components/marketing/ProductClientPage.d.ts +7 -0
  36. package/dist/components/marketing/ProductClientPage.d.ts.map +1 -0
  37. package/dist/components/marketing/ProductClientPage.js +460 -0
  38. package/dist/components/marketing/ProductClientPage.js.map +1 -0
  39. package/dist/components/marketing/index.d.ts +11 -0
  40. package/dist/components/marketing/index.js +12 -0
  41. package/dist/components/marketing/pricing-thinking-modal.d.ts +16 -0
  42. package/dist/components/marketing/pricing-thinking-modal.d.ts.map +1 -0
  43. package/dist/components/marketing/pricing-thinking-modal.js +202 -0
  44. package/dist/components/marketing/pricing-thinking-modal.js.map +1 -0
  45. package/dist/components/marketing/sections/AudienceSection.d.ts +7 -0
  46. package/dist/components/marketing/sections/AudienceSection.d.ts.map +1 -0
  47. package/dist/components/marketing/sections/AudienceSection.js +68 -0
  48. package/dist/components/marketing/sections/AudienceSection.js.map +1 -0
  49. package/dist/components/marketing/sections/CorePositioningSection.d.ts +7 -0
  50. package/dist/components/marketing/sections/CorePositioningSection.d.ts.map +1 -0
  51. package/dist/components/marketing/sections/CorePositioningSection.js +59 -0
  52. package/dist/components/marketing/sections/CorePositioningSection.js.map +1 -0
  53. package/dist/components/marketing/sections/CtaSection.d.ts +7 -0
  54. package/dist/components/marketing/sections/CtaSection.d.ts.map +1 -0
  55. package/dist/components/marketing/sections/CtaSection.js +54 -0
  56. package/dist/components/marketing/sections/CtaSection.js.map +1 -0
  57. package/dist/components/marketing/sections/DevelopersSection.d.ts +7 -0
  58. package/dist/components/marketing/sections/DevelopersSection.d.ts.map +1 -0
  59. package/dist/components/marketing/sections/DevelopersSection.js +45 -0
  60. package/dist/components/marketing/sections/DevelopersSection.js.map +1 -0
  61. package/dist/components/marketing/sections/FearsSection.d.ts +7 -0
  62. package/dist/components/marketing/sections/FearsSection.d.ts.map +1 -0
  63. package/dist/components/marketing/sections/FearsSection.js +48 -0
  64. package/dist/components/marketing/sections/FearsSection.js.map +1 -0
  65. package/dist/components/marketing/sections/HeroMarketingSection.d.ts +7 -0
  66. package/dist/components/marketing/sections/HeroMarketingSection.d.ts.map +1 -0
  67. package/dist/components/marketing/sections/HeroMarketingSection.js +77 -0
  68. package/dist/components/marketing/sections/HeroMarketingSection.js.map +1 -0
  69. package/dist/components/marketing/sections/IconGridSection.d.ts +45 -0
  70. package/dist/components/marketing/sections/IconGridSection.d.ts.map +1 -0
  71. package/dist/components/marketing/sections/IconGridSection.js +44 -0
  72. package/dist/components/marketing/sections/IconGridSection.js.map +1 -0
  73. package/dist/components/marketing/sections/OutputsSection.d.ts +7 -0
  74. package/dist/components/marketing/sections/OutputsSection.d.ts.map +1 -0
  75. package/dist/components/marketing/sections/OutputsSection.js +59 -0
  76. package/dist/components/marketing/sections/OutputsSection.js.map +1 -0
  77. package/dist/components/marketing/sections/ProblemSection.d.ts +7 -0
  78. package/dist/components/marketing/sections/ProblemSection.d.ts.map +1 -0
  79. package/dist/components/marketing/sections/ProblemSection.js +46 -0
  80. package/dist/components/marketing/sections/ProblemSection.js.map +1 -0
  81. package/dist/components/marketing/sections/SolutionSection.d.ts +7 -0
  82. package/dist/components/marketing/sections/SolutionSection.d.ts.map +1 -0
  83. package/dist/components/marketing/sections/SolutionSection.js +46 -0
  84. package/dist/components/marketing/sections/SolutionSection.js.map +1 -0
  85. package/dist/components/marketing/sections/StepsSection.d.ts +7 -0
  86. package/dist/components/marketing/sections/StepsSection.d.ts.map +1 -0
  87. package/dist/components/marketing/sections/StepsSection.js +52 -0
  88. package/dist/components/marketing/sections/StepsSection.js.map +1 -0
  89. package/dist/components/marketing/waitlist-section.d.ts +15 -0
  90. package/dist/components/marketing/waitlist-section.d.ts.map +1 -0
  91. package/dist/components/marketing/waitlist-section.js +578 -0
  92. package/dist/components/marketing/waitlist-section.js.map +1 -0
  93. package/dist/components/templates/TemplatesClientPage.d.ts +7 -0
  94. package/dist/components/templates/TemplatesClientPage.d.ts.map +1 -0
  95. package/dist/components/templates/TemplatesClientPage.js +625 -0
  96. package/dist/components/templates/TemplatesClientPage.js.map +1 -0
  97. package/dist/components/templates/TemplatesPage.d.ts +7 -0
  98. package/dist/components/templates/TemplatesPage.d.ts.map +1 -0
  99. package/dist/components/templates/TemplatesPage.js +125 -0
  100. package/dist/components/templates/TemplatesPage.js.map +1 -0
  101. package/dist/components/templates/TemplatesPreviewModal.d.ts +15 -0
  102. package/dist/components/templates/TemplatesPreviewModal.d.ts.map +1 -0
  103. package/dist/components/templates/TemplatesPreviewModal.js +137 -0
  104. package/dist/components/templates/TemplatesPreviewModal.js.map +1 -0
  105. package/dist/components/templates/index.d.ts +4 -0
  106. package/dist/components/templates/index.js +5 -0
  107. package/dist/index.d.ts +29 -0
  108. package/dist/index.js +28 -0
  109. package/dist/libs/email/client.d.ts +15 -0
  110. package/dist/libs/email/client.d.ts.map +1 -0
  111. package/dist/libs/email/client.js +113 -0
  112. package/dist/libs/email/client.js.map +1 -0
  113. package/dist/libs/email/contact.d.ts +7 -0
  114. package/dist/libs/email/contact.d.ts.map +1 -0
  115. package/dist/libs/email/contact.js +71 -0
  116. package/dist/libs/email/contact.js.map +1 -0
  117. package/dist/libs/email/newsletter.d.ts +7 -0
  118. package/dist/libs/email/newsletter.d.ts.map +1 -0
  119. package/dist/libs/email/newsletter.js +95 -0
  120. package/dist/libs/email/newsletter.js.map +1 -0
  121. package/dist/libs/email/types.d.ts +53 -0
  122. package/dist/libs/email/types.d.ts.map +1 -0
  123. package/dist/libs/email/types.js +1 -0
  124. package/dist/libs/email/utils.d.ts +6 -0
  125. package/dist/libs/email/utils.d.ts.map +1 -0
  126. package/dist/libs/email/utils.js +7 -0
  127. package/dist/libs/email/utils.js.map +1 -0
  128. package/dist/libs/email/waitlist-application.d.ts +7 -0
  129. package/dist/libs/email/waitlist-application.d.ts.map +1 -0
  130. package/dist/libs/email/waitlist-application.js +170 -0
  131. package/dist/libs/email/waitlist-application.js.map +1 -0
  132. package/dist/libs/email/waitlist.d.ts +7 -0
  133. package/dist/libs/email/waitlist.d.ts.map +1 -0
  134. package/dist/libs/email/waitlist.js +105 -0
  135. package/dist/libs/email/waitlist.js.map +1 -0
  136. package/dist/libs/pricing-examples.d.ts +22 -0
  137. package/dist/libs/pricing-examples.d.ts.map +1 -0
  138. package/dist/libs/pricing-examples.js +21 -0
  139. package/dist/libs/pricing-examples.js.map +1 -0
  140. package/dist/registry/engine.d.ts +17 -0
  141. package/dist/registry/engine.d.ts.map +1 -0
  142. package/dist/registry/engine.js +24 -0
  143. package/dist/registry/engine.js.map +1 -0
  144. package/dist/registry/factory.d.ts +64 -0
  145. package/dist/registry/factory.d.ts.map +1 -0
  146. package/dist/registry/factory.js +61 -0
  147. package/dist/registry/factory.js.map +1 -0
  148. package/dist/registry/index.d.ts +8 -0
  149. package/dist/registry/index.js +8 -0
  150. package/dist/registry/registry-docs.d.ts +15 -0
  151. package/dist/registry/registry-docs.d.ts.map +1 -0
  152. package/dist/registry/registry-docs.js +305 -0
  153. package/dist/registry/registry-docs.js.map +1 -0
  154. package/dist/registry/registry-landing.d.ts +19 -0
  155. package/dist/registry/registry-landing.d.ts.map +1 -0
  156. package/dist/registry/registry-landing.js +95 -0
  157. package/dist/registry/registry-landing.js.map +1 -0
  158. package/dist/registry/registry.d.ts +30 -0
  159. package/dist/registry/registry.d.ts.map +1 -0
  160. package/dist/registry/registry.js +61 -0
  161. package/dist/registry/registry.js.map +1 -0
  162. package/dist/registry/types.d.ts +19 -0
  163. package/dist/registry/types.d.ts.map +1 -0
  164. package/dist/registry/types.js +0 -0
  165. package/dist/registry/utils.d.ts +31 -0
  166. package/dist/registry/utils.d.ts.map +1 -0
  167. package/dist/registry/utils.js +54 -0
  168. package/dist/registry/utils.js.map +1 -0
  169. package/package.json +151 -0
  170. package/src/components/marketing/ChangelogPage.tsx +110 -0
  171. package/src/components/marketing/CofounderPage.tsx +409 -0
  172. package/src/components/marketing/ContactClient.tsx +174 -0
  173. package/src/components/marketing/ContributePage.tsx +319 -0
  174. package/src/components/marketing/DesignPartnerPage.tsx +181 -0
  175. package/src/components/marketing/LandingPage.tsx +30 -0
  176. package/src/components/marketing/PricingClient.tsx +446 -0
  177. package/src/components/marketing/ProductClientPage.tsx +391 -0
  178. package/src/components/marketing/index.ts +10 -0
  179. package/src/components/marketing/pricing-thinking-modal.tsx +224 -0
  180. package/src/components/marketing/sections/AudienceSection.tsx +66 -0
  181. package/src/components/marketing/sections/CorePositioningSection.tsx +44 -0
  182. package/src/components/marketing/sections/CtaSection.tsx +57 -0
  183. package/src/components/marketing/sections/DevelopersSection.tsx +38 -0
  184. package/src/components/marketing/sections/FearsSection.tsx +45 -0
  185. package/src/components/marketing/sections/HeroMarketingSection.tsx +73 -0
  186. package/src/components/marketing/sections/IconGridSection.tsx +91 -0
  187. package/src/components/marketing/sections/OutputsSection.tsx +59 -0
  188. package/src/components/marketing/sections/ProblemSection.tsx +47 -0
  189. package/src/components/marketing/sections/SolutionSection.tsx +47 -0
  190. package/src/components/marketing/sections/StepsSection.tsx +55 -0
  191. package/src/components/marketing/waitlist-section.tsx +606 -0
  192. package/src/components/templates/TemplatesClientPage.tsx +711 -0
  193. package/src/components/templates/TemplatesPage.tsx +129 -0
  194. package/src/components/templates/TemplatesPreviewModal.tsx +260 -0
  195. package/src/components/templates/index.ts +3 -0
  196. package/src/index.ts +15 -0
  197. package/src/libs/email/client.test.ts +107 -0
  198. package/src/libs/email/client.ts +146 -0
  199. package/src/libs/email/contact.ts +80 -0
  200. package/src/libs/email/newsletter.ts +108 -0
  201. package/src/libs/email/types.ts +59 -0
  202. package/src/libs/email/utils.ts +8 -0
  203. package/src/libs/email/waitlist-application.ts +192 -0
  204. package/src/libs/email/waitlist.ts +118 -0
  205. package/src/libs/pricing-examples.ts +19 -0
  206. package/src/registry/engine.ts +38 -0
  207. package/src/registry/factory.ts +110 -0
  208. package/src/registry/index.ts +7 -0
  209. package/src/registry/registry-docs.ts +843 -0
  210. package/src/registry/registry-landing.ts +118 -0
  211. package/src/registry/registry.ts +85 -0
  212. package/src/registry/types.ts +17 -0
  213. package/src/registry/utils.ts +99 -0
  214. package/tsconfig.json +13 -0
  215. package/tsconfig.tsbuildinfo +1 -0
  216. package/tsdown.config.js +10 -0
@@ -0,0 +1,446 @@
1
+ 'use client';
2
+
3
+ import { useState } from 'react';
4
+ import Link from 'next/link';
5
+ import { CheckCircle, ChevronDown, ChevronRight } from 'lucide-react';
6
+
7
+ import { WaitlistSection } from './waitlist-section';
8
+ import { PricingThinkingModal } from './pricing-thinking-modal';
9
+
10
+ interface FAQ {
11
+ question: string;
12
+ answer: string;
13
+ }
14
+
15
+ const faqs: FAQ[] = [
16
+ {
17
+ question: 'Can I pay for ContractSpec today?',
18
+ answer:
19
+ "Not yet. We're pre-PMF and working closely with a small set of design partners. They get full access during early access and will be first to move onto paid plans once we're confident in the value and stability.",
20
+ },
21
+ {
22
+ question: 'What will you charge for later?',
23
+ answer:
24
+ 'Our plan is to charge based on usage: regenerations, AI agent actions, and number of active projects. A generous free tier will stay available 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 features, priority onboarding, and a founding discount when paid plans launch. You also shape how ContractSpec works for teams like yours.',
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
+ },
36
+ ];
37
+
38
+ export function PricingClient() {
39
+ const [openFaq, setOpenFaq] = useState<number | null>(null);
40
+ const [pricingModalOpen, setPricingModalOpen] = useState(false);
41
+
42
+ const scrollToWaitlist = () => {
43
+ const waitlistElement = document.getElementById('waitlist');
44
+ if (waitlistElement) {
45
+ waitlistElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
46
+ }
47
+ };
48
+
49
+ return (
50
+ <main className="">
51
+ {/* Hero */}
52
+ <section className="section-padding hero-gradient relative">
53
+ <div className="mx-auto max-w-4xl space-y-6 text-center">
54
+ <h1 className="text-5xl leading-tight font-bold md:text-6xl">
55
+ Transparent, usage-based pricing – after we earn it.
56
+ </h1>
57
+ <p className="text-muted-foreground mx-auto max-w-2xl text-lg">
58
+ ContractSpec Core (the OSS compiler) is and always will be free.
59
+ ContractSpec Studio (the managed platform) is in early access.
60
+ </p>
61
+ <div className="flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row">
62
+ <Link
63
+ href="/install"
64
+ className="btn-primary inline-flex items-center gap-2"
65
+ >
66
+ Install OSS Core <ChevronRight size={16} />
67
+ </Link>
68
+ <button
69
+ onClick={scrollToWaitlist}
70
+ className="btn-ghost inline-flex items-center gap-2"
71
+ >
72
+ Join Studio waitlist
73
+ </button>
74
+ </div>
75
+ </div>
76
+ </section>
77
+
78
+ {/* Design-Partner Highlight Strip */}
79
+ <section className="section-padding border-border border-b">
80
+ <div className="mx-auto max-w-6xl">
81
+ <div className="card-subtle flex flex-col gap-6 p-8 md:flex-row md:items-center">
82
+ <div className="flex-1 space-y-4">
83
+ <div className="inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1">
84
+ <span className="text-sm font-medium text-violet-300">
85
+ Now accepting design partners
86
+ </span>
87
+ </div>
88
+ <h2 className="text-2xl font-bold">
89
+ Help us design the compiler for AI-native software.
90
+ </h2>
91
+ <p className="text-muted-foreground text-sm">
92
+ We work closely with a small group of teams building serious
93
+ products with AI. You bring real-world complexity, we bring the
94
+ spec-first engine and a lot of attention.
95
+ </p>
96
+ </div>
97
+ <div className="flex-1 space-y-4">
98
+ <ul className="text-muted-foreground space-y-2 text-sm">
99
+ <li className="flex gap-2">
100
+ <CheckCircle
101
+ size={16}
102
+ className="mt-0.5 shrink-0 text-violet-400"
103
+ />
104
+ Early access to ContractSpec Studio
105
+ </li>
106
+ <li className="flex gap-2">
107
+ <CheckCircle
108
+ size={16}
109
+ className="mt-0.5 shrink-0 text-violet-400"
110
+ />
111
+ Hands-on onboarding and architecture help
112
+ </li>
113
+ <li className="flex gap-2">
114
+ <CheckCircle
115
+ size={16}
116
+ className="mt-0.5 shrink-0 text-violet-400"
117
+ />
118
+ Influence over roadmap and features
119
+ </li>
120
+ <li className="flex gap-2">
121
+ <CheckCircle
122
+ size={16}
123
+ className="mt-0.5 shrink-0 text-violet-400"
124
+ />
125
+ Priority support during early access
126
+ </li>
127
+ <li className="flex gap-2">
128
+ <CheckCircle
129
+ size={16}
130
+ className="mt-0.5 shrink-0 text-violet-400"
131
+ />
132
+ Founding discount when paid plans launch
133
+ </li>
134
+ </ul>
135
+ <button
136
+ onClick={scrollToWaitlist}
137
+ className="btn-primary w-full md:w-auto"
138
+ >
139
+ Apply to the waitlist
140
+ </button>
141
+ </div>
142
+ </div>
143
+ </div>
144
+ </section>
145
+
146
+ {/* Future Pricing Tiers */}
147
+ <section className="section-padding border-border border-b">
148
+ <div className="mx-auto max-w-6xl">
149
+ <div className="grid gap-6 md:grid-cols-3">
150
+ {/* OSS Core (Forever Free) */}
151
+ <div className="card-subtle col-span-3 space-y-6 border-violet-500/20 p-6">
152
+ <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">
153
+ <div className="text-1xl font-bold">Free Forever</div>
154
+ <p className="text-muted-foreground text-xs">
155
+ Apache 2.0 / MIT License
156
+ </p>
157
+ </div>
158
+ <div className="flex flex-row justify-around">
159
+ <div className="w-1/2">
160
+ <div className="space-y-2">
161
+ <h2 className="text-2xl font-bold">OSS Core</h2>
162
+ </div>
163
+ <p className="text-muted-foreground text-sm">
164
+ The complete spec-first compiler. Generate API, DB, and UI
165
+ code locally.
166
+ </p>
167
+ </div>
168
+ <ul className="space-y-3">
169
+ <li className="text-muted-foreground flex gap-3 text-sm">
170
+ <CheckCircle
171
+ size={16}
172
+ className="mt-0.5 shrink-0 text-violet-400"
173
+ />
174
+ Unlimited local regenerations
175
+ </li>
176
+ <li className="text-muted-foreground flex gap-3 text-sm">
177
+ <CheckCircle
178
+ size={16}
179
+ className="mt-0.5 shrink-0 text-violet-400"
180
+ />
181
+ All standard generators included
182
+ </li>
183
+ <li className="text-muted-foreground flex gap-3 text-sm">
184
+ <CheckCircle
185
+ size={16}
186
+ className="mt-0.5 shrink-0 text-violet-400"
187
+ />
188
+ Run in your own CI/CD
189
+ </li>
190
+ <li className="text-muted-foreground flex gap-3 text-sm">
191
+ <CheckCircle
192
+ size={16}
193
+ className="mt-0.5 shrink-0 text-violet-400"
194
+ />
195
+ Community support
196
+ </li>
197
+ </ul>
198
+ </div>
199
+ <Link href="/install" className="btn-ghost w-full">
200
+ Install now
201
+ </Link>
202
+ </div>
203
+
204
+ {/* Design Partner (Current) */}
205
+ <div className="card-subtle relative space-y-6 bg-violet-500/5 p-6 ring-2 ring-violet-500">
206
+ <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">
207
+ Current
208
+ </div>
209
+ <div className="space-y-2">
210
+ <h2 className="text-2xl font-bold">Design Partner</h2>
211
+ <div className="space-y-1">
212
+ <div className="text-2xl font-bold">
213
+ Free during early access
214
+ </div>
215
+ <p className="text-muted-foreground text-xs">
216
+ Founding discount when paid plans launch
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 during early access
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 founder on architecture & use cases
234
+ </li>
235
+ <li className="text-muted-foreground flex gap-3 text-sm">
236
+ <CheckCircle
237
+ size={16}
238
+ className="mt-0.5 shrink-0 text-violet-400"
239
+ />
240
+ Reasonable "fair use" limits on regenerations and AI credits
241
+ </li>
242
+ <li className="text-muted-foreground flex gap-3 text-sm">
243
+ <CheckCircle
244
+ size={16}
245
+ className="mt-0.5 shrink-0 text-violet-400"
246
+ />
247
+ Priority support & feedback loops
248
+ </li>
249
+ </ul>
250
+ <button onClick={scrollToWaitlist} className="btn-primary w-full">
251
+ Apply as a design partner
252
+ </button>
253
+ </div>
254
+
255
+ {/* Builder (Coming Soon) */}
256
+ <div className="card-subtle relative space-y-6 p-6">
257
+ <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">
258
+ Coming soon
259
+ </div>
260
+ <div className="space-y-2">
261
+ <h2 className="text-2xl font-bold">Builder</h2>
262
+ <div className="space-y-1">
263
+ <div className="text-2xl font-bold">
264
+ Usage-based, for solo builders and small teams
265
+ </div>
266
+ </div>
267
+ </div>
268
+ <p className="text-muted-foreground text-sm">
269
+ Pay only for what you regenerate and the AI you consume. No
270
+ seat-based pricing, and a generous free tier for experiments.
271
+ </p>
272
+ <ul className="space-y-2">
273
+ <li className="text-muted-foreground text-sm">1–3 projects</li>
274
+ <li className="text-muted-foreground text-sm">
275
+ Generous monthly free regenerations
276
+ </li>
277
+ <li className="text-muted-foreground text-sm">
278
+ Pay-as-you-go beyond the free tier
279
+ </li>
280
+ </ul>
281
+ <button
282
+ disabled
283
+ className="btn-ghost w-full cursor-not-allowed opacity-50"
284
+ >
285
+ Available after public launch
286
+ </button>
287
+ </div>
288
+
289
+ {/* Team / Enterprise (Coming Soon) */}
290
+ <div className="card-subtle relative space-y-6 p-6">
291
+ <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">
292
+ Coming soon
293
+ </div>
294
+ <div className="space-y-2">
295
+ <h2 className="text-2xl font-bold">Team & Platform</h2>
296
+ <div className="space-y-1">
297
+ <div className="text-2xl font-bold">
298
+ Custom, for teams standardizing on ContractSpec
299
+ </div>
300
+ </div>
301
+ </div>
302
+ <p className="text-muted-foreground text-sm">
303
+ For teams running multiple apps or platforms on ContractSpec,
304
+ with stricter governance, data, and compliance needs.
305
+ </p>
306
+ <ul className="space-y-3">
307
+ <li className="text-muted-foreground flex gap-3 text-sm">
308
+ <CheckCircle
309
+ size={16}
310
+ className="mt-0.5 shrink-0 text-violet-400"
311
+ />
312
+ Multiple projects and environments
313
+ </li>
314
+ <li className="text-muted-foreground flex gap-3 text-sm">
315
+ <CheckCircle
316
+ size={16}
317
+ className="mt-0.5 shrink-0 text-violet-400"
318
+ />
319
+ Advanced RBAC and policy packs
320
+ </li>
321
+ <li className="text-muted-foreground flex gap-3 text-sm">
322
+ <CheckCircle
323
+ size={16}
324
+ className="mt-0.5 shrink-0 text-violet-400"
325
+ />
326
+ SSO, audit trails, and longer retention
327
+ </li>
328
+ <li className="text-muted-foreground flex gap-3 text-sm">
329
+ <CheckCircle
330
+ size={16}
331
+ className="mt-0.5 shrink-0 text-violet-400"
332
+ />
333
+ Priority support & SLAs
334
+ </li>
335
+ </ul>
336
+ <Link href="/contact" className="btn-ghost w-full">
337
+ Talk to us
338
+ </Link>
339
+ </div>
340
+ </div>
341
+ </div>
342
+ </section>
343
+
344
+ {/* How Pricing Will Work */}
345
+ <section className="section-padding border-border bg-muted/20 border-b">
346
+ <div className="mx-auto max-w-4xl space-y-8">
347
+ <div className="space-y-4 text-center">
348
+ <h2 className="text-3xl font-bold">
349
+ How ContractSpec pricing will work
350
+ </h2>
351
+ <p className="text-muted-foreground mx-auto max-w-2xl text-lg">
352
+ We charge based on how much of your stack we help you maintain,
353
+ not how many people click around in the UI.
354
+ </p>
355
+ </div>
356
+ <div className="grid gap-6 md:grid-cols-3">
357
+ <div className="card-subtle space-y-3 p-6">
358
+ <h3 className="font-bold">Generous free tier</h3>
359
+ <p className="text-muted-foreground text-sm">
360
+ One serious project, small spec, and enough monthly
361
+ regenerations to ship something real.
362
+ </p>
363
+ </div>
364
+ <div className="card-subtle space-y-3 p-6">
365
+ <h3 className="font-bold">Usage-based beyond free</h3>
366
+ <p className="text-muted-foreground text-sm">
367
+ You pay for regenerations and AI agent actions, not per-seat.
368
+ The more your system evolves via ContractSpec, the more you pay.
369
+ </p>
370
+ </div>
371
+ <div className="card-subtle space-y-3 p-6">
372
+ <h3 className="font-bold">No lock-in</h3>
373
+ <p className="text-muted-foreground text-sm">
374
+ Generated code is standard, readable, and exportable. If you
375
+ leave, your app keeps running.
376
+ </p>
377
+ </div>
378
+ </div>
379
+ <div className="pt-6 text-center">
380
+ <button
381
+ onClick={() => setPricingModalOpen(true)}
382
+ className="btn-ghost"
383
+ >
384
+ View our tentative pricing model
385
+ </button>
386
+ </div>
387
+ </div>
388
+ </section>
389
+
390
+ {/* FAQ */}
391
+ <section className="section-padding border-border border-b">
392
+ <div className="mx-auto max-w-3xl space-y-8">
393
+ <h2 className="text-center text-3xl font-bold">
394
+ Frequently asked questions
395
+ </h2>
396
+ <div className="space-y-4">
397
+ {faqs.map((faq, i) => (
398
+ <div key={i} className="card-subtle overflow-hidden">
399
+ <button
400
+ onClick={() => setOpenFaq(openFaq === i ? null : i)}
401
+ className="flex w-full items-center justify-between p-6 text-left"
402
+ >
403
+ <span className="font-medium">{faq.question}</span>
404
+ <ChevronDown
405
+ size={20}
406
+ className={`text-muted-foreground transition-transform ${
407
+ openFaq === i ? 'rotate-180' : ''
408
+ }`}
409
+ />
410
+ </button>
411
+ {openFaq === i && (
412
+ <div className="text-muted-foreground px-6 pb-6 text-sm">
413
+ {faq.answer}
414
+ </div>
415
+ )}
416
+ </div>
417
+ ))}
418
+ </div>
419
+ <div className="pt-4 text-center">
420
+ <p className="text-muted-foreground mb-2 text-sm">Still unsure?</p>
421
+ <Link
422
+ href="/contact"
423
+ className="text-sm font-medium text-violet-400 hover:text-violet-300"
424
+ >
425
+ Contact us →
426
+ </Link>
427
+ </div>
428
+ </div>
429
+ </section>
430
+
431
+ {/* Waitlist Section */}
432
+ <section className="section-padding hero-gradient">
433
+ <div className="mx-auto max-w-4xl">
434
+ <WaitlistSection />
435
+ </div>
436
+ </section>
437
+
438
+ {/* Pricing Thinking Modal */}
439
+ <PricingThinkingModal
440
+ open={pricingModalOpen}
441
+ onOpenChange={setPricingModalOpen}
442
+ onApplyClick={scrollToWaitlist}
443
+ />
444
+ </main>
445
+ );
446
+ }