@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.
Files changed (164) hide show
  1. package/.turbo/turbo-build.log +87 -87
  2. package/AGENTS.md +29 -21
  3. package/CHANGELOG.md +59 -0
  4. package/README.md +36 -49
  5. package/dist/browser/components/marketing/ChangelogPage.js +8 -8
  6. package/dist/browser/components/marketing/CofounderPage.js +167 -523
  7. package/dist/browser/components/marketing/ContactClient.js +200 -207
  8. package/dist/browser/components/marketing/ContributePage.js +211 -463
  9. package/dist/browser/components/marketing/DesignPartnerPage.js +165 -218
  10. package/dist/browser/components/marketing/LandingPage.js +464 -568
  11. package/dist/browser/components/marketing/PricingClient.js +213 -839
  12. package/dist/browser/components/marketing/ProductClientPage.js +265 -463
  13. package/dist/browser/components/marketing/index.js +2007 -3338
  14. package/dist/browser/components/marketing/pricing-thinking-modal.js +12 -12
  15. package/dist/browser/components/marketing/sections/AudienceSection.js +2 -2
  16. package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
  17. package/dist/browser/components/marketing/sections/CtaSection.js +3 -3
  18. package/dist/browser/components/marketing/sections/FearsSection.js +3 -3
  19. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +6 -6
  20. package/dist/browser/components/marketing/sections/IconGridSection.js +2 -2
  21. package/dist/browser/components/marketing/sections/OutputsSection.js +2 -2
  22. package/dist/browser/components/marketing/sections/ProblemSection.js +2 -2
  23. package/dist/browser/components/marketing/sections/SolutionSection.js +2 -2
  24. package/dist/browser/components/marketing/sections/StepsSection.js +4 -4
  25. package/dist/browser/components/marketing/studio-signup-section.js +25 -41
  26. package/dist/browser/components/templates/TemplatesClientPage.js +2374 -3571
  27. package/dist/browser/components/templates/TemplatesPage.js +1 -1
  28. package/dist/browser/components/templates/TemplatesPreviewModal.js +27 -3
  29. package/dist/browser/components/templates/index.js +2412 -3609
  30. package/dist/browser/index.js +2415 -3612
  31. package/dist/browser/libs/email/client.js +1 -1
  32. package/dist/browser/libs/email/contact.js +1 -1
  33. package/dist/browser/libs/email/newsletter.js +1 -1
  34. package/dist/browser/libs/email/waitlist-application.js +1 -1
  35. package/dist/browser/libs/email/waitlist.js +1 -1
  36. package/dist/browser/registry/engine.js +2003 -3334
  37. package/dist/browser/registry/index.js +2003 -3334
  38. package/dist/browser/registry/registry-docs.js +2 -2
  39. package/dist/browser/registry/registry-landing.js +2007 -3338
  40. package/dist/browser/registry/registry.js +2003 -3334
  41. package/dist/browser/registry/utils.js +2003 -3334
  42. package/dist/components/marketing/ChangelogPage.js +8 -8
  43. package/dist/components/marketing/CofounderPage.js +167 -523
  44. package/dist/components/marketing/ContactClient.js +200 -207
  45. package/dist/components/marketing/ContributePage.d.ts +0 -2
  46. package/dist/components/marketing/ContributePage.js +211 -463
  47. package/dist/components/marketing/DesignPartnerPage.js +165 -218
  48. package/dist/components/marketing/LandingPage.js +464 -568
  49. package/dist/components/marketing/PricingClient.js +213 -839
  50. package/dist/components/marketing/ProductClientPage.js +265 -463
  51. package/dist/components/marketing/index.d.ts +5 -5
  52. package/dist/components/marketing/index.js +2007 -3338
  53. package/dist/components/marketing/pricing-thinking-modal.js +12 -12
  54. package/dist/components/marketing/sections/AudienceSection.js +2 -2
  55. package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
  56. package/dist/components/marketing/sections/CtaSection.js +3 -3
  57. package/dist/components/marketing/sections/FearsSection.js +3 -3
  58. package/dist/components/marketing/sections/HeroMarketingSection.js +6 -6
  59. package/dist/components/marketing/sections/IconGridSection.d.ts +3 -3
  60. package/dist/components/marketing/sections/IconGridSection.js +2 -2
  61. package/dist/components/marketing/sections/OutputsSection.js +2 -2
  62. package/dist/components/marketing/sections/ProblemSection.js +2 -2
  63. package/dist/components/marketing/sections/SolutionSection.js +2 -2
  64. package/dist/components/marketing/sections/StepsSection.js +4 -4
  65. package/dist/components/marketing/studio-signup-section.js +25 -41
  66. package/dist/components/templates/TemplatesClientPage.js +2374 -3571
  67. package/dist/components/templates/TemplatesPage.js +1 -1
  68. package/dist/components/templates/TemplatesPreviewModal.js +27 -3
  69. package/dist/components/templates/index.js +2412 -3609
  70. package/dist/index.js +2415 -3612
  71. package/dist/libs/email/client.js +1 -1
  72. package/dist/libs/email/contact.js +1 -1
  73. package/dist/libs/email/newsletter.js +1 -1
  74. package/dist/libs/email/waitlist-application.js +1 -1
  75. package/dist/libs/email/waitlist.js +1 -1
  76. package/dist/node/components/marketing/ChangelogPage.js +8 -8
  77. package/dist/node/components/marketing/CofounderPage.js +167 -523
  78. package/dist/node/components/marketing/ContactClient.js +200 -207
  79. package/dist/node/components/marketing/ContributePage.js +211 -463
  80. package/dist/node/components/marketing/DesignPartnerPage.js +165 -218
  81. package/dist/node/components/marketing/LandingPage.js +464 -568
  82. package/dist/node/components/marketing/PricingClient.js +213 -839
  83. package/dist/node/components/marketing/ProductClientPage.js +265 -463
  84. package/dist/node/components/marketing/index.js +2007 -3338
  85. package/dist/node/components/marketing/pricing-thinking-modal.js +12 -12
  86. package/dist/node/components/marketing/sections/AudienceSection.js +2 -2
  87. package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
  88. package/dist/node/components/marketing/sections/CtaSection.js +3 -3
  89. package/dist/node/components/marketing/sections/FearsSection.js +3 -3
  90. package/dist/node/components/marketing/sections/HeroMarketingSection.js +6 -6
  91. package/dist/node/components/marketing/sections/IconGridSection.js +2 -2
  92. package/dist/node/components/marketing/sections/OutputsSection.js +2 -2
  93. package/dist/node/components/marketing/sections/ProblemSection.js +2 -2
  94. package/dist/node/components/marketing/sections/SolutionSection.js +2 -2
  95. package/dist/node/components/marketing/sections/StepsSection.js +4 -4
  96. package/dist/node/components/marketing/studio-signup-section.js +25 -41
  97. package/dist/node/components/templates/TemplatesClientPage.js +2374 -3571
  98. package/dist/node/components/templates/TemplatesPage.js +1 -1
  99. package/dist/node/components/templates/TemplatesPreviewModal.js +27 -3
  100. package/dist/node/components/templates/index.js +2412 -3609
  101. package/dist/node/index.js +2415 -3612
  102. package/dist/node/libs/email/client.js +1 -1
  103. package/dist/node/libs/email/contact.js +1 -1
  104. package/dist/node/libs/email/newsletter.js +1 -1
  105. package/dist/node/libs/email/waitlist-application.js +1 -1
  106. package/dist/node/libs/email/waitlist.js +1 -1
  107. package/dist/node/registry/engine.js +2003 -3334
  108. package/dist/node/registry/index.js +2003 -3334
  109. package/dist/node/registry/registry-docs.js +2 -2
  110. package/dist/node/registry/registry-landing.js +2007 -3338
  111. package/dist/node/registry/registry.js +2003 -3334
  112. package/dist/node/registry/utils.js +2003 -3334
  113. package/dist/registry/engine.js +2003 -3334
  114. package/dist/registry/index.js +2003 -3334
  115. package/dist/registry/registry-docs.js +2 -2
  116. package/dist/registry/registry-landing.js +2007 -3338
  117. package/dist/registry/registry.js +2003 -3334
  118. package/dist/registry/utils.js +2003 -3334
  119. package/package.json +31 -29
  120. package/src/bundles/MarketingBundle.ts +273 -273
  121. package/src/components/marketing/ChangelogPage.tsx +72 -100
  122. package/src/components/marketing/CofounderPage.tsx +120 -384
  123. package/src/components/marketing/ContactClient.tsx +164 -154
  124. package/src/components/marketing/ContributePage.tsx +139 -313
  125. package/src/components/marketing/DesignPartnerPage.tsx +133 -171
  126. package/src/components/marketing/LandingPage.tsx +353 -25
  127. package/src/components/marketing/PricingClient.tsx +192 -437
  128. package/src/components/marketing/ProductClientPage.tsx +255 -377
  129. package/src/components/marketing/index.ts +5 -5
  130. package/src/components/marketing/pricing-thinking-modal.tsx +197 -197
  131. package/src/components/marketing/sections/AudienceSection.tsx +55 -56
  132. package/src/components/marketing/sections/CorePositioningSection.tsx +37 -37
  133. package/src/components/marketing/sections/CtaSection.tsx +49 -50
  134. package/src/components/marketing/sections/DevelopersSection.tsx +26 -27
  135. package/src/components/marketing/sections/FearsSection.tsx +36 -37
  136. package/src/components/marketing/sections/HeroMarketingSection.tsx +59 -59
  137. package/src/components/marketing/sections/IconGridSection.tsx +71 -71
  138. package/src/components/marketing/sections/OutputsSection.tsx +51 -52
  139. package/src/components/marketing/sections/ProblemSection.tsx +39 -40
  140. package/src/components/marketing/sections/SolutionSection.tsx +39 -40
  141. package/src/components/marketing/sections/StepsSection.tsx +47 -48
  142. package/src/components/marketing/studio-signup-section.tsx +39 -41
  143. package/src/components/templates/TemplatesClientPage.tsx +763 -685
  144. package/src/components/templates/TemplatesPage.tsx +110 -110
  145. package/src/components/templates/TemplatesPreviewModal.tsx +251 -198
  146. package/src/index.ts +4 -4
  147. package/src/libs/email/client.test.ts +81 -81
  148. package/src/libs/email/client.ts +111 -111
  149. package/src/libs/email/contact.ts +35 -35
  150. package/src/libs/email/newsletter.ts +46 -46
  151. package/src/libs/email/types.ts +29 -29
  152. package/src/libs/email/utils.ts +5 -5
  153. package/src/libs/email/waitlist-application.ts +72 -72
  154. package/src/libs/email/waitlist.ts +46 -46
  155. package/src/libs/pricing-examples.ts +12 -12
  156. package/src/registry/engine.ts +16 -16
  157. package/src/registry/factory.ts +57 -57
  158. package/src/registry/registry-docs.ts +656 -666
  159. package/src/registry/registry-landing.ts +94 -95
  160. package/src/registry/registry.ts +36 -37
  161. package/src/registry/types.ts +2 -2
  162. package/src/registry/utils.ts +56 -56
  163. package/tsconfig.json +11 -11
  164. package/tsdown.config.js +5 -5
@@ -1,26 +1,6 @@
1
1
  'use client';
2
2
 
3
- import { ButtonLink, MarketingSection } from '@contractspec/lib.design-system';
4
- import { Box, HStack, VStack } from '@contractspec/lib.ui-kit-web/ui/stack';
5
- import {
6
- H1,
7
- H2,
8
- H3,
9
- Lead,
10
- Muted,
11
- Small,
12
- } from '@contractspec/lib.ui-kit-web/ui/typography';
13
- import {
14
- Check,
15
- Clock,
16
- MapPin,
17
- MessageSquare,
18
- Percent,
19
- Rocket,
20
- Target,
21
- Users,
22
- X,
23
- } from 'lucide-react';
3
+ import Link from 'next/link';
24
4
 
25
5
  const COFOUNDER_EMAIL = 'tboutron@contractspec.io';
26
6
  const APPLY_SUBJECT = 'Co-founder application: ContractSpec';
@@ -41,369 +21,125 @@ What I would own in the first 90 days:
41
21
 
42
22
  const mailtoLink = `mailto:${COFOUNDER_EMAIL}?subject=${encodeURIComponent(APPLY_SUBJECT)}&body=${encodeURIComponent(APPLY_BODY)}`;
43
23
 
44
- /* -------------------------------------------------------------------------- */
45
- /* Section Components */
46
- /* -------------------------------------------------------------------------- */
47
-
48
- function HeroSection() {
49
- return (
50
- <MarketingSection tone="gradient" padding="spacious" align="center">
51
- <VStack gap="lg" align="center" className="text-center">
52
- <H1 className="text-4xl leading-tight font-bold text-balance md:text-5xl">
53
- Co-founder wanted
54
- </H1>
55
- <Lead className="text-muted-foreground max-w-2xl text-lg text-balance md:text-xl">
56
- ContractSpec is a contract-first compiler for AI-generated code.
57
- Define specs, enforce policies, regenerate safely. Pre-PMF. Building
58
- in public.
59
- </Lead>
60
- <HStack gap="md" justify="center" wrap="wrap" className="pt-2">
61
- <ButtonLink href={mailtoLink}>Talk about co-founding</ButtonLink>
62
- <ButtonLink variant="ghost" href="/contact">
63
- Become a design partner
64
- </ButtonLink>
65
- </HStack>
66
- </VStack>
67
- </MarketingSection>
68
- );
69
- }
70
-
71
- function WhatExistsSection() {
72
- const realNow = [
73
- 'ContractSpec Core: open-source spec compiler',
74
- 'Working CLI and TypeScript runtime',
75
- 'Design partner pipeline open',
76
- 'Solo founder, bootstrapped',
77
- ];
78
-
79
- const planned = [
80
- 'ContractSpec Studio product-decision engine',
81
- 'Auto-evolution engine',
82
- 'Multi-tenant SaaS',
83
- 'Integration marketplace',
84
- ];
85
-
86
- return (
87
- <MarketingSection padding="comfortable" align="center" maxWidth="lg">
88
- <VStack gap="lg">
89
- <H2 className="text-3xl font-bold">What exists today</H2>
90
- <div className="grid w-full gap-8 md:grid-cols-2">
91
- <VStack gap="sm" align="start">
92
- <H3 className="text-lg font-semibold text-emerald-400">Real now</H3>
93
- <ul className="space-y-2">
94
- {realNow.map((item) => (
95
- <li key={item} className="flex items-start gap-2">
96
- <Check size={16} className="mt-1 shrink-0 text-emerald-400" />
97
- <Small>{item}</Small>
98
- </li>
99
- ))}
100
- </ul>
101
- </VStack>
102
- <VStack gap="sm" align="start">
103
- <H3 className="text-lg font-semibold text-blue-400">Planned</H3>
104
- <ul className="space-y-2">
105
- {planned.map((item) => (
106
- <li key={item} className="flex items-start gap-2">
107
- <Target size={16} className="mt-1 shrink-0 text-blue-400" />
108
- <Small>{item}</Small>
109
- </li>
110
- ))}
111
- </ul>
112
- </VStack>
113
- </div>
114
- </VStack>
115
- </MarketingSection>
116
- );
117
- }
118
-
119
- function RoleSection() {
120
- const gtmDeliverables = [
121
- 'Run 5+ sales conversations per week',
122
- 'Own the design partner pipeline end-to-end',
123
- 'Write positioning copy that ships',
124
- 'Build and maintain partnership channels',
125
- 'Turn user feedback into roadmap signal',
126
- ];
127
-
128
- const productDeliverables = [
129
- 'Ship UI/UX improvements weekly',
130
- 'Define specs based on user research',
131
- 'Own the Studio product experience',
132
- 'Collaborate on architecture decisions',
133
- ];
134
-
135
- return (
136
- <MarketingSection
137
- // tone="subtle"
138
- padding="comfortable"
139
- align="center"
140
- maxWidth="lg"
141
- >
142
- <VStack gap="lg">
143
- <H2 className="text-3xl font-bold">The role</H2>
144
- <VStack gap="md" align="start" className="w-full">
145
- <H3 className="text-xl font-semibold">
146
- Option A: GTM / Sales / Partnerships
147
- </H3>
148
- <Muted>Weekly deliverables, not vague traits:</Muted>
149
- <ul className="space-y-2">
150
- {gtmDeliverables.map((item) => (
151
- <li key={item} className="flex items-start gap-2">
152
- <Rocket size={16} className="mt-1 shrink-0 text-amber-400" />
153
- <Small>{item}</Small>
154
- </li>
155
- ))}
156
- </ul>
157
- </VStack>
158
- <VStack gap="md" align="start" className="w-full pt-4">
159
- <H3 className="text-xl font-semibold">Option B: Product / Design</H3>
160
- <Muted>If this is your strength:</Muted>
161
- <ul className="space-y-2">
162
- {productDeliverables.map((item) => (
163
- <li key={item} className="flex items-start gap-2">
164
- <Rocket size={16} className="mt-1 shrink-0 text-purple-400" />
165
- <Small>{item}</Small>
166
- </li>
167
- ))}
168
- </ul>
169
- </VStack>
170
- </VStack>
171
- </MarketingSection>
172
- );
173
- }
174
-
175
- function IdealCofounderSection() {
176
- const qualities = [
177
- "You have shipped products people paid for — links or it didn't happen",
178
- 'You have sold something (product, consulting, yourself)',
179
- 'You write clearly and fast — emails, docs, copy',
180
- 'You have taste: you know good UX when you see it',
181
- 'You can work 6+ months without a salary',
182
- 'You are allergic to meetings that could be docs',
183
- 'You have built in public or contributed to open source',
184
- 'You are based in Europe or overlap significantly with CET',
185
- ];
186
-
187
- return (
188
- <MarketingSection padding="comfortable" align="center" maxWidth="lg">
189
- <VStack gap="lg">
190
- <H2 className="text-3xl font-bold">The ideal co-founder</H2>
191
- <ul className="space-y-3">
192
- {qualities.map((item) => (
193
- <li key={item} className="flex items-start gap-2">
194
- <Check size={16} className="mt-1 shrink-0 text-emerald-400" />
195
- <Small>{item}</Small>
196
- </li>
197
- ))}
198
- </ul>
199
- <Box className="border-border mt-4 rounded-lg border p-4">
200
- <VStack gap="sm" align="start">
201
- <H3 className="text-lg font-semibold">Proof of work examples</H3>
202
- <Muted className="text-sm">
203
- GitHub profile, shipped product, writing (blog/Twitter/essays),
204
- revenue screenshot, open-source contributions, or anything that
205
- shows you execute.
206
- </Muted>
207
- </VStack>
208
- </Box>
209
- </VStack>
210
- </MarketingSection>
211
- );
212
- }
213
-
214
- function WhatYouGetSection() {
215
- const benefits = [
216
- {
217
- icon: <Percent size={20} className="text-emerald-400" />,
218
- title: 'Equity-first',
219
- desc: 'Meaningful co-founder equity. Salary is minimal/zero until revenue covers it.',
220
- },
221
- {
222
- icon: <Users size={20} className="text-blue-400" />,
223
- title: 'Real ownership',
224
- desc: 'You own your domain. No permission-seeking. Ship and iterate.',
225
- },
226
- {
227
- icon: <MessageSquare size={20} className="text-amber-400" />,
228
- title: 'Written-first decisions',
229
- desc: 'We default to async, docs, and fast decisions. Meetings are last resort.',
230
- },
231
- ];
232
-
233
- const values = [
234
- 'Contracts over conventions',
235
- 'Clarity over cleverness',
236
- 'Safety over speed (in code)',
237
- 'Leverage over labor',
238
- ];
239
-
240
- return (
241
- <MarketingSection
242
- // tone="subtle"
243
- padding="comfortable"
244
- align="center"
245
- maxWidth="lg"
246
- >
247
- <VStack gap="lg">
248
- <H2 className="text-3xl font-bold">What you get</H2>
249
- <div className="grid w-full gap-6 md:grid-cols-3">
250
- {benefits.map((b) => (
251
- <VStack
252
- key={b.title}
253
- gap="sm"
254
- align="start"
255
- className="border-border rounded-lg border p-4"
256
- >
257
- {b.icon}
258
- <H3 className="text-lg font-semibold">{b.title}</H3>
259
- <Muted className="text-sm">{b.desc}</Muted>
260
- </VStack>
261
- ))}
262
- </div>
263
- <VStack gap="sm" align="start" className="w-full pt-4">
264
- <H3 className="text-lg font-semibold">Our values</H3>
265
- <HStack gap="sm" wrap="wrap">
266
- {values.map((v) => (
267
- <Box
268
- key={v}
269
- className="border-border rounded-full border px-3 py-1 text-sm"
270
- >
271
- {v}
272
- </Box>
273
- ))}
274
- </HStack>
275
- </VStack>
276
- </VStack>
277
- </MarketingSection>
278
- );
279
- }
280
-
281
- function RedFlagsSection() {
282
- const redFlags = [
283
- 'Needs a big salary now',
284
- 'Hates selling or talking to users',
285
- 'Vague about past execution',
286
- 'Wants to "advise" instead of build',
287
- 'Needs a big team to feel productive',
288
- 'Cannot write clearly',
289
- ];
290
-
291
- return (
292
- <MarketingSection padding="comfortable" align="center" maxWidth="lg">
293
- <VStack gap="lg">
294
- <H2 className="text-3xl font-bold">Non-negotiables / red flags</H2>
295
- <Muted>If any of these apply, this is not the right fit:</Muted>
296
- <ul className="space-y-2">
297
- {redFlags.map((item) => (
298
- <li key={item} className="flex items-start gap-2">
299
- <X size={16} className="mt-1 shrink-0 text-red-400" />
300
- <Small>{item}</Small>
301
- </li>
302
- ))}
303
- </ul>
304
- </VStack>
305
- </MarketingSection>
306
- );
307
- }
308
-
309
- function FAQSection() {
310
- const faqs = [
311
- {
312
- icon: <Users size={18} />,
313
- q: 'Why co-founder instead of hiring?',
314
- a: "I need a partner who thinks like an owner, not an employee. Someone who will stay when things get hard and share in the upside when they don't.",
315
- },
316
- {
317
- icon: <Clock size={18} />,
318
- q: 'What is the timeline to revenue?',
319
- a: 'Design partners are converting now. Goal: paying customers in 2025. But this is startup life — timelines are best guesses.',
320
- },
321
- {
322
- icon: <MapPin size={18} />,
323
- q: 'Is this remote?',
324
- a: 'Yes. Async-first. Occasional in-person (Paris-based) for planning. Europe timezone overlap strongly preferred.',
325
- },
326
- {
327
- icon: <Percent size={18} />,
328
- q: 'How much equity?',
329
- a: 'Depends on what you bring, when you join, and how much you can commit. Expect meaningful co-founder equity with 4-year vesting. We will discuss specifics in person.',
330
- },
331
- ];
332
-
333
- return (
334
- <MarketingSection
335
- // tone="subtle"
336
- padding="comfortable"
337
- align="center"
338
- maxWidth="lg"
339
- >
340
- <VStack gap="lg">
341
- <H2 className="text-3xl font-bold">FAQ</H2>
342
- <VStack gap="md" className="w-full">
343
- {faqs.map((faq) => (
344
- <VStack
345
- key={faq.q}
346
- gap="xs"
347
- align="start"
348
- className="border-border w-full rounded-lg border p-4"
349
- >
350
- <HStack gap="sm" align="center">
351
- <span className="text-muted-foreground">{faq.icon}</span>
352
- <H3 className="text-lg font-semibold">{faq.q}</H3>
353
- </HStack>
354
- <Muted>{faq.a}</Muted>
355
- </VStack>
356
- ))}
357
- </VStack>
358
- </VStack>
359
- </MarketingSection>
360
- );
361
- }
362
-
363
- function FinalCtaSection() {
364
- return (
365
- <MarketingSection
366
- tone="gradient"
367
- padding="comfortable"
368
- align="center"
369
- maxWidth="lg"
370
- >
371
- <VStack gap="md" align="center" className="text-center">
372
- <H2 className="text-3xl font-bold md:text-4xl">Ready to talk?</H2>
373
- <Lead className="text-muted-foreground max-w-xl">
374
- Send an email with: your LinkedIn, 2 proof-of-work links, why
375
- ContractSpec, and what you would own in the first 90 days.
376
- </Lead>
377
- <HStack gap="md" justify="center" wrap="wrap" className="pt-2">
378
- <ButtonLink href={mailtoLink}>Talk about co-founding</ButtonLink>
379
- <ButtonLink variant="ghost" href="/contact">
380
- Become a design partner
381
- </ButtonLink>
382
- </HStack>
383
- <Muted className="pt-4 text-sm">
384
- CHAMAN VENTURES, SASU · RCS Paris · SIREN 989 498 902 · 229 rue
385
- Saint-Honoré, 75001 Paris
386
- </Muted>
387
- </VStack>
388
- </MarketingSection>
389
- );
390
- }
391
-
392
- /* -------------------------------------------------------------------------- */
393
- /* Main Component */
394
- /* -------------------------------------------------------------------------- */
24
+ const tracks = [
25
+ {
26
+ title: 'GTM / partnerships',
27
+ copy: 'Own the design partner pipeline, sharpen messaging, and turn market feedback into product signal.',
28
+ },
29
+ {
30
+ title: 'Product / design',
31
+ copy: 'Own the Studio surface, shape the interaction model, and turn live user behavior into clearer workflows.',
32
+ },
33
+ ];
395
34
 
396
35
  export function CofounderPage() {
397
- return (
398
- <VStack as="main" gap="none">
399
- <HeroSection />
400
- <WhatExistsSection />
401
- <RoleSection />
402
- <IdealCofounderSection />
403
- <WhatYouGetSection />
404
- <RedFlagsSection />
405
- <FAQSection />
406
- <FinalCtaSection />
407
- </VStack>
408
- );
36
+ return (
37
+ <main>
38
+ <section className="section-padding hero-gradient border-border/70 border-b">
39
+ <div className="editorial-shell grid gap-8 lg:grid-cols-[1.05fr_0.95fr]">
40
+ <div className="space-y-5">
41
+ <p className="editorial-kicker">Co-founder search</p>
42
+ <h1 className="editorial-title max-w-4xl">
43
+ Looking for a co-founder who wants to build an open system and the
44
+ product on top of it.
45
+ </h1>
46
+ <p className="editorial-subtitle">
47
+ ContractSpec already has the early stack shape: explicit
48
+ contracts, runtimes, harnesses, examples, and the first Studio
49
+ operating loops. The next phase needs someone who can own either
50
+ GTM or product depth with real execution energy.
51
+ </p>
52
+ </div>
53
+ <div className="editorial-panel space-y-5">
54
+ <p className="editorial-kicker">What exists now</p>
55
+ <ul className="editorial-list">
56
+ <li>
57
+ <span className="editorial-list-marker" />
58
+ <span>
59
+ Open-source package ecosystem and working website/docs
60
+ surface.
61
+ </span>
62
+ </li>
63
+ <li>
64
+ <span className="editorial-list-marker" />
65
+ <span>
66
+ Studio product direction with live operating workflows.
67
+ </span>
68
+ </li>
69
+ <li>
70
+ <span className="editorial-list-marker" />
71
+ <span>
72
+ Founder-led product, bootstrapped, still early enough to
73
+ shape.
74
+ </span>
75
+ </li>
76
+ </ul>
77
+ <Link href={mailtoLink} className="btn-primary">
78
+ Talk about co-founding
79
+ </Link>
80
+ </div>
81
+ </div>
82
+ </section>
83
+
84
+ <section className="editorial-section">
85
+ <div className="editorial-shell grid gap-6 lg:grid-cols-2">
86
+ {tracks.map((track) => (
87
+ <div key={track.title} className="editorial-panel">
88
+ <p className="editorial-kicker">{track.title}</p>
89
+ <h2 className="mt-3 font-serif text-4xl tracking-[-0.04em]">
90
+ {track.title}
91
+ </h2>
92
+ <p className="mt-4 text-muted-foreground text-sm leading-7">
93
+ {track.copy}
94
+ </p>
95
+ </div>
96
+ ))}
97
+ </div>
98
+ </section>
99
+
100
+ <section className="editorial-section bg-striped">
101
+ <div className="editorial-shell grid gap-8 lg:grid-cols-2">
102
+ <div className="editorial-panel">
103
+ <p className="editorial-kicker">What good looks like</p>
104
+ <ul className="editorial-list mt-6">
105
+ <li>
106
+ <span className="editorial-list-marker" />
107
+ <span>You have proof of work, not just interest.</span>
108
+ </li>
109
+ <li>
110
+ <span className="editorial-list-marker" />
111
+ <span>
112
+ You can own a whole surface and move without waiting for
113
+ permission.
114
+ </span>
115
+ </li>
116
+ <li>
117
+ <span className="editorial-list-marker" />
118
+ <span>
119
+ You like written clarity, sharp product taste, and direct
120
+ feedback.
121
+ </span>
122
+ </li>
123
+ </ul>
124
+ </div>
125
+ <div className="editorial-panel">
126
+ <p className="editorial-kicker">Apply</p>
127
+ <p className="text-muted-foreground text-sm leading-7">
128
+ Send links that prove how you think and how you ship. The best
129
+ applications make it obvious what you would own in the first 90
130
+ days and why this problem is worth years of your attention.
131
+ </p>
132
+ <div className="mt-6 flex flex-col gap-3 sm:flex-row">
133
+ <Link href={mailtoLink} className="btn-primary">
134
+ Email application
135
+ </Link>
136
+ <Link href="/contact" className="btn-ghost">
137
+ Start with a conversation
138
+ </Link>
139
+ </div>
140
+ </div>
141
+ </div>
142
+ </section>
143
+ </main>
144
+ );
409
145
  }