@contractspec/bundle.marketing 2.0.0 → 2.1.1

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 (87) hide show
  1. package/.turbo/turbo-build.log +73 -73
  2. package/CHANGELOG.md +51 -0
  3. package/README.md +6 -1
  4. package/dist/browser/components/marketing/CofounderPage.js +2 -2
  5. package/dist/browser/components/marketing/ContactClient.js +57 -961
  6. package/dist/browser/components/marketing/DesignPartnerPage.js +2 -2
  7. package/dist/browser/components/marketing/LandingPage.js +6 -6
  8. package/dist/browser/components/marketing/PricingClient.js +107 -1127
  9. package/dist/browser/components/marketing/ProductClientPage.js +2 -2
  10. package/dist/browser/components/marketing/index.js +157 -1064
  11. package/dist/browser/components/marketing/pricing-thinking-modal.js +3 -3
  12. package/dist/browser/components/marketing/sections/CorePositioningSection.js +2 -2
  13. package/dist/browser/components/marketing/sections/CtaSection.js +2 -2
  14. package/dist/browser/components/marketing/sections/HeroMarketingSection.js +2 -2
  15. package/dist/browser/components/marketing/studio-signup-section.js +87 -0
  16. package/dist/browser/components/templates/TemplatesClientPage.js +175 -1082
  17. package/dist/browser/components/templates/index.js +181 -1088
  18. package/dist/browser/index.js +505 -1157
  19. package/dist/browser/registry/engine.js +158 -1080
  20. package/dist/browser/registry/index.js +158 -1080
  21. package/dist/browser/registry/registry-docs.js +2 -17
  22. package/dist/browser/registry/registry-landing.js +156 -1063
  23. package/dist/browser/registry/registry.js +158 -1080
  24. package/dist/browser/registry/utils.js +158 -1080
  25. package/dist/components/marketing/CofounderPage.js +2 -2
  26. package/dist/components/marketing/ContactClient.js +57 -961
  27. package/dist/components/marketing/DesignPartnerPage.js +2 -2
  28. package/dist/components/marketing/LandingPage.js +6 -6
  29. package/dist/components/marketing/PricingClient.js +107 -1127
  30. package/dist/components/marketing/ProductClientPage.js +2 -2
  31. package/dist/components/marketing/index.d.ts +1 -1
  32. package/dist/components/marketing/index.js +157 -1064
  33. package/dist/components/marketing/pricing-thinking-modal.js +3 -3
  34. package/dist/components/marketing/sections/CorePositioningSection.js +2 -2
  35. package/dist/components/marketing/sections/CtaSection.js +2 -2
  36. package/dist/components/marketing/sections/HeroMarketingSection.js +2 -2
  37. package/dist/components/marketing/studio-signup-section.d.ts +5 -0
  38. package/dist/components/marketing/studio-signup-section.js +82 -0
  39. package/dist/components/templates/TemplatesClientPage.js +175 -1082
  40. package/dist/components/templates/index.js +181 -1088
  41. package/dist/index.js +505 -1157
  42. package/dist/node/components/marketing/CofounderPage.js +2 -2
  43. package/dist/node/components/marketing/ContactClient.js +57 -961
  44. package/dist/node/components/marketing/DesignPartnerPage.js +2 -2
  45. package/dist/node/components/marketing/LandingPage.js +6 -6
  46. package/dist/node/components/marketing/PricingClient.js +107 -1127
  47. package/dist/node/components/marketing/ProductClientPage.js +2 -2
  48. package/dist/node/components/marketing/index.js +157 -1064
  49. package/dist/node/components/marketing/pricing-thinking-modal.js +3 -3
  50. package/dist/node/components/marketing/sections/CorePositioningSection.js +2 -2
  51. package/dist/node/components/marketing/sections/CtaSection.js +2 -2
  52. package/dist/node/components/marketing/sections/HeroMarketingSection.js +2 -2
  53. package/dist/node/components/marketing/studio-signup-section.js +82 -0
  54. package/dist/node/components/templates/TemplatesClientPage.js +175 -1082
  55. package/dist/node/components/templates/index.js +181 -1088
  56. package/dist/node/index.js +505 -1157
  57. package/dist/node/registry/engine.js +158 -1080
  58. package/dist/node/registry/index.js +158 -1080
  59. package/dist/node/registry/registry-docs.js +2 -17
  60. package/dist/node/registry/registry-landing.js +156 -1063
  61. package/dist/node/registry/registry.js +158 -1080
  62. package/dist/node/registry/utils.js +158 -1080
  63. package/dist/registry/engine.js +158 -1080
  64. package/dist/registry/index.js +158 -1080
  65. package/dist/registry/registry-docs.js +2 -17
  66. package/dist/registry/registry-landing.js +156 -1063
  67. package/dist/registry/registry.js +158 -1080
  68. package/dist/registry/utils.js +158 -1080
  69. package/package.json +35 -35
  70. package/src/components/marketing/CofounderPage.tsx +2 -2
  71. package/src/components/marketing/ContactClient.tsx +3 -3
  72. package/src/components/marketing/DesignPartnerPage.tsx +3 -3
  73. package/src/components/marketing/PricingClient.tsx +39 -38
  74. package/src/components/marketing/ProductClientPage.tsx +2 -2
  75. package/src/components/marketing/index.ts +1 -1
  76. package/src/components/marketing/pricing-thinking-modal.tsx +5 -5
  77. package/src/components/marketing/sections/CorePositioningSection.tsx +2 -2
  78. package/src/components/marketing/sections/CtaSection.tsx +2 -2
  79. package/src/components/marketing/sections/HeroMarketingSection.tsx +2 -2
  80. package/src/components/marketing/studio-signup-section.tsx +56 -0
  81. package/src/components/templates/TemplatesClientPage.tsx +12 -9
  82. package/src/registry/registry-docs.ts +0 -40
  83. package/dist/browser/components/marketing/waitlist-section.js +0 -1104
  84. package/dist/components/marketing/waitlist-section.d.ts +0 -7
  85. package/dist/components/marketing/waitlist-section.js +0 -1099
  86. package/dist/node/components/marketing/waitlist-section.js +0 -1099
  87. package/src/components/marketing/waitlist-section.tsx +0 -606
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/bundle.marketing",
3
- "version": "2.0.0",
3
+ "version": "2.1.1",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "clean": "rm -rf dist",
@@ -178,12 +178,12 @@
178
178
  "browser": "./dist/browser/components/marketing/sections/StepsSection.js",
179
179
  "default": "./dist/components/marketing/sections/StepsSection.js"
180
180
  },
181
- "./components/marketing/waitlist-section": {
182
- "types": "./dist/components/marketing/waitlist-section.d.ts",
183
- "bun": "./dist/components/marketing/waitlist-section.js",
184
- "node": "./dist/node/components/marketing/waitlist-section.js",
185
- "browser": "./dist/browser/components/marketing/waitlist-section.js",
186
- "default": "./dist/components/marketing/waitlist-section.js"
181
+ "./components/marketing/studio-signup-section": {
182
+ "types": "./dist/components/marketing/studio-signup-section.d.ts",
183
+ "bun": "./dist/components/marketing/studio-signup-section.js",
184
+ "node": "./dist/node/components/marketing/studio-signup-section.js",
185
+ "browser": "./dist/browser/components/marketing/studio-signup-section.js",
186
+ "default": "./dist/components/marketing/studio-signup-section.js"
187
187
  },
188
188
  "./components/templates": {
189
189
  "types": "./dist/components/templates/index.d.ts",
@@ -342,28 +342,28 @@
342
342
  },
343
343
  "types": "./dist/index.d.ts",
344
344
  "dependencies": {
345
- "@contractspec/bundle.library": "2.0.0",
346
- "@contractspec/example.agent-console": "2.0.0",
347
- "@contractspec/example.analytics-dashboard": "2.0.0",
348
- "@contractspec/example.crm-pipeline": "2.0.0",
349
- "@contractspec/example.integration-hub": "2.0.0",
350
- "@contractspec/example.marketplace": "2.0.0",
351
- "@contractspec/example.saas-boilerplate": "2.0.0",
352
- "@contractspec/example.workflow-system": "2.0.0",
353
- "@contractspec/lib.contracts-spec": "2.0.0",
354
- "@contractspec/lib.contracts-runtime-client-react": "2.0.0",
355
- "@contractspec/lib.design-system": "2.0.0",
356
- "@contractspec/lib.email": "2.0.0",
357
- "@contractspec/lib.example-shared-ui": "2.0.0",
358
- "@contractspec/lib.logger": "2.0.0",
359
- "@contractspec/lib.runtime-sandbox": "1.0.0",
360
- "@contractspec/lib.ui-kit-core": "2.0.0",
361
- "@contractspec/lib.ui-kit-web": "2.0.0",
362
- "@contractspec/lib.ui-link": "2.0.0",
363
- "@contractspec/module.examples": "2.0.0",
345
+ "@contractspec/bundle.library": "2.1.1",
346
+ "@contractspec/example.agent-console": "2.1.1",
347
+ "@contractspec/example.analytics-dashboard": "2.1.1",
348
+ "@contractspec/example.crm-pipeline": "2.1.1",
349
+ "@contractspec/example.integration-hub": "2.1.1",
350
+ "@contractspec/example.marketplace": "2.1.1",
351
+ "@contractspec/example.saas-boilerplate": "2.1.1",
352
+ "@contractspec/example.workflow-system": "2.1.1",
353
+ "@contractspec/lib.contracts-spec": "2.1.1",
354
+ "@contractspec/lib.contracts-runtime-client-react": "2.1.1",
355
+ "@contractspec/lib.design-system": "2.1.1",
356
+ "@contractspec/lib.email": "2.1.0",
357
+ "@contractspec/lib.example-shared-ui": "2.1.1",
358
+ "@contractspec/lib.logger": "2.1.0",
359
+ "@contractspec/lib.runtime-sandbox": "1.1.0",
360
+ "@contractspec/lib.ui-kit-core": "2.1.0",
361
+ "@contractspec/lib.ui-kit-web": "2.1.0",
362
+ "@contractspec/lib.ui-link": "2.1.0",
363
+ "@contractspec/module.examples": "2.1.1",
364
364
  "@electric-sql/pglite": "^0.3.14",
365
365
  "@hookform/resolvers": "^5.2.2",
366
- "@scaleway/sdk": "^3.1.5",
366
+ "@scaleway/sdk": "^3.2.0",
367
367
  "@scaleway/sdk-client": "^2.1.0",
368
368
  "class-variance-authority": "^0.7.1",
369
369
  "framer-motion": "^12.34.0",
@@ -375,9 +375,9 @@
375
375
  },
376
376
  "devDependencies": {
377
377
  "@types/react": "~19.2.14",
378
- "@contractspec/tool.typescript": "2.0.0",
378
+ "@contractspec/tool.typescript": "2.1.0",
379
379
  "typescript": "^5.9.3",
380
- "@contractspec/tool.bun": "2.0.0"
380
+ "@contractspec/tool.bun": "2.1.0"
381
381
  },
382
382
  "publishConfig": {
383
383
  "access": "public",
@@ -544,12 +544,12 @@
544
544
  "browser": "./dist/browser/components/marketing/sections/StepsSection.js",
545
545
  "default": "./dist/components/marketing/sections/StepsSection.js"
546
546
  },
547
- "./components/marketing/waitlist-section": {
548
- "types": "./dist/components/marketing/waitlist-section.d.ts",
549
- "bun": "./dist/components/marketing/waitlist-section.js",
550
- "node": "./dist/node/components/marketing/waitlist-section.js",
551
- "browser": "./dist/browser/components/marketing/waitlist-section.js",
552
- "default": "./dist/components/marketing/waitlist-section.js"
547
+ "./components/marketing/studio-signup-section": {
548
+ "types": "./dist/components/marketing/studio-signup-section.d.ts",
549
+ "bun": "./dist/components/marketing/studio-signup-section.js",
550
+ "node": "./dist/node/components/marketing/studio-signup-section.js",
551
+ "browser": "./dist/browser/components/marketing/studio-signup-section.js",
552
+ "default": "./dist/components/marketing/studio-signup-section.js"
553
553
  },
554
554
  "./components/templates": {
555
555
  "types": "./dist/components/templates/index.d.ts",
@@ -77,7 +77,7 @@ function WhatExistsSection() {
77
77
  ];
78
78
 
79
79
  const planned = [
80
- 'Visual studio for specs',
80
+ 'ContractSpec Studio product-decision engine',
81
81
  'Auto-evolution engine',
82
82
  'Multi-tenant SaaS',
83
83
  'Integration marketplace',
@@ -128,7 +128,7 @@ function RoleSection() {
128
128
  const productDeliverables = [
129
129
  'Ship UI/UX improvements weekly',
130
130
  'Define specs based on user research',
131
- 'Own the studio experience',
131
+ 'Own the Studio product experience',
132
132
  'Collaborate on architecture decisions',
133
133
  ];
134
134
 
@@ -12,7 +12,7 @@ import type { SubmitContactFormResult } from '../../libs/email/types'; // Assumi
12
12
  // Wait check imports again. submitContactForm is imported from @contractspec/bundle.marketing.
13
13
  // In bundle.marketing, it is likely in 'src/actions' or 'src/utils'.
14
14
  // I need to check where submitContactForm is defined in bundle.marketing.
15
- import { WaitlistSection } from './waitlist-section';
15
+ import { StudioSignupSection } from './studio-signup-section';
16
16
  import {
17
17
  ActionForm,
18
18
  Button,
@@ -63,8 +63,8 @@ export function ContactClient() {
63
63
  </Muted>
64
64
  </VStack>
65
65
 
66
- {/* Waitlist Registration Section */}
67
- <WaitlistSection context="contact" />
66
+ {/* Studio Signup Section */}
67
+ <StudioSignupSection />
68
68
 
69
69
  {/* Book a Call Section */}
70
70
  <VStack className="card-subtle gap-6 p-8" id="call">
@@ -48,12 +48,12 @@ export function DesignPartnerPage() {
48
48
  <h3 className="text-xl font-semibold">1. Access the Studio</h3>
49
49
  <p className="text-muted-foreground">
50
50
  Your account has been enabled with Design Partner privileges.
51
- Log in to the Studio to start exploring the latest features
52
- before they're public.
51
+ Log in to ContractSpec Studio to run the full loop from evidence
52
+ to spec-first deliverables with your team.
53
53
  </p>
54
54
  <div className="pt-2">
55
55
  <Button asChild variant="outline">
56
- <Link href="https://www.contractspec.studio">
56
+ <Link href="https://app.contractspec.studio">
57
57
  Launch Studio <ArrowRight className="ml-2 h-4 w-4" />
58
58
  </Link>
59
59
  </Button>
@@ -4,7 +4,7 @@ import { useState } from 'react';
4
4
  import Link from 'next/link';
5
5
  import { CheckCircle, ChevronDown, ChevronRight } from 'lucide-react';
6
6
 
7
- import { WaitlistSection } from './waitlist-section';
7
+ import { StudioSignupSection } from './studio-signup-section';
8
8
  import { PricingThinkingModal } from './pricing-thinking-modal';
9
9
 
10
10
  interface FAQ {
@@ -14,19 +14,19 @@ interface FAQ {
14
14
 
15
15
  const faqs: FAQ[] = [
16
16
  {
17
- question: 'Can I pay for ContractSpec today?',
17
+ question: 'Can I use ContractSpec Studio today?',
18
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.",
19
+ 'Yes. ContractSpec Studio is live at app.contractspec.studio. Start with the free tier and upgrade as paid plans roll out.',
20
20
  },
21
21
  {
22
22
  question: 'What will you charge for later?',
23
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.',
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
25
  },
26
26
  {
27
27
  question: 'What do I get as a design partner?',
28
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.',
29
+ 'Direct collaboration on roadmap priorities, hands-on onboarding, and priority support. You also help shape Studio workflows before broad rollout.',
30
30
  },
31
31
  {
32
32
  question: 'Will you ever charge per seat?',
@@ -39,11 +39,12 @@ export function PricingClient() {
39
39
  const [openFaq, setOpenFaq] = useState<number | null>(null);
40
40
  const [pricingModalOpen, setPricingModalOpen] = useState(false);
41
41
 
42
- const scrollToWaitlist = () => {
43
- const waitlistElement = document.getElementById('waitlist');
44
- if (waitlistElement) {
45
- waitlistElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
46
- }
42
+ const openStudio = () => {
43
+ window.open(
44
+ 'https://app.contractspec.studio',
45
+ '_blank',
46
+ 'noopener,noreferrer'
47
+ );
47
48
  };
48
49
 
49
50
  return (
@@ -56,7 +57,8 @@ export function PricingClient() {
56
57
  </h1>
57
58
  <p className="text-muted-foreground mx-auto max-w-2xl text-lg">
58
59
  ContractSpec Core (the OSS compiler) is and always will be free.
59
- ContractSpec Studio (the managed platform) is in early access.
60
+ ContractSpec Studio is live, with paid plans rolling out
61
+ progressively.
60
62
  </p>
61
63
  <div className="flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row">
62
64
  <Link
@@ -65,12 +67,12 @@ export function PricingClient() {
65
67
  >
66
68
  Install OSS Core <ChevronRight size={16} />
67
69
  </Link>
68
- <button
69
- onClick={scrollToWaitlist}
70
+ <Link
71
+ href="https://app.contractspec.studio"
70
72
  className="btn-ghost inline-flex items-center gap-2"
71
73
  >
72
- Join Studio waitlist
73
- </button>
74
+ Try Studio Free
75
+ </Link>
74
76
  </div>
75
77
  </div>
76
78
  </section>
@@ -101,7 +103,7 @@ export function PricingClient() {
101
103
  size={16}
102
104
  className="mt-0.5 shrink-0 text-violet-400"
103
105
  />
104
- Early access to ContractSpec Studio
106
+ Priority access to new Studio capabilities
105
107
  </li>
106
108
  <li className="flex gap-2">
107
109
  <CheckCircle
@@ -122,22 +124,22 @@ export function PricingClient() {
122
124
  size={16}
123
125
  className="mt-0.5 shrink-0 text-violet-400"
124
126
  />
125
- Priority support during early access
127
+ Priority support through direct channels
126
128
  </li>
127
129
  <li className="flex gap-2">
128
130
  <CheckCircle
129
131
  size={16}
130
132
  className="mt-0.5 shrink-0 text-violet-400"
131
133
  />
132
- Founding discount when paid plans launch
134
+ Pricing input and partner incentives
133
135
  </li>
134
136
  </ul>
135
- <button
136
- onClick={scrollToWaitlist}
137
+ <Link
138
+ href="/design-partner"
137
139
  className="btn-primary w-full md:w-auto"
138
140
  >
139
- Apply to the waitlist
140
- </button>
141
+ Apply as a design partner
142
+ </Link>
141
143
  </div>
142
144
  </div>
143
145
  </div>
@@ -204,16 +206,14 @@ export function PricingClient() {
204
206
  {/* Design Partner (Current) */}
205
207
  <div className="card-subtle relative space-y-6 bg-violet-500/5 p-6 ring-2 ring-violet-500">
206
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">
207
- Current
209
+ Live program
208
210
  </div>
209
211
  <div className="space-y-2">
210
212
  <h2 className="text-2xl font-bold">Design Partner</h2>
211
213
  <div className="space-y-1">
212
- <div className="text-2xl font-bold">
213
- Free during early access
214
- </div>
214
+ <div className="text-2xl font-bold">Invite-based</div>
215
215
  <p className="text-muted-foreground text-xs">
216
- Founding discount when paid plans launch
216
+ Built for teams shaping the next Studio capabilities
217
217
  </p>
218
218
  </div>
219
219
  </div>
@@ -223,33 +223,34 @@ export function PricingClient() {
223
223
  size={16}
224
224
  className="mt-0.5 shrink-0 text-violet-400"
225
225
  />
226
- Use ContractSpec Studio for real projects during early access
226
+ Use ContractSpec Studio for real projects
227
227
  </li>
228
228
  <li className="text-muted-foreground flex gap-3 text-sm">
229
229
  <CheckCircle
230
230
  size={16}
231
231
  className="mt-0.5 shrink-0 text-violet-400"
232
232
  />
233
- Work directly with the founder on architecture & use cases
233
+ Work directly with the team on architecture and workflow
234
+ design
234
235
  </li>
235
236
  <li className="text-muted-foreground flex gap-3 text-sm">
236
237
  <CheckCircle
237
238
  size={16}
238
239
  className="mt-0.5 shrink-0 text-violet-400"
239
240
  />
240
- Reasonable "fair use" limits on regenerations and AI credits
241
+ Access to partner-only previews and feedback loops
241
242
  </li>
242
243
  <li className="text-muted-foreground flex gap-3 text-sm">
243
244
  <CheckCircle
244
245
  size={16}
245
246
  className="mt-0.5 shrink-0 text-violet-400"
246
247
  />
247
- Priority support & feedback loops
248
+ Priority support and roadmap influence
248
249
  </li>
249
250
  </ul>
250
- <button onClick={scrollToWaitlist} className="btn-primary w-full">
251
+ <Link href="/design-partner" className="btn-primary w-full">
251
252
  Apply as a design partner
252
- </button>
253
+ </Link>
253
254
  </div>
254
255
 
255
256
  {/* Builder (Coming Soon) */}
@@ -282,7 +283,7 @@ export function PricingClient() {
282
283
  disabled
283
284
  className="btn-ghost w-full cursor-not-allowed opacity-50"
284
285
  >
285
- Available after public launch
286
+ Available after pricing rollout
286
287
  </button>
287
288
  </div>
288
289
 
@@ -346,7 +347,7 @@ export function PricingClient() {
346
347
  <div className="mx-auto max-w-4xl space-y-8">
347
348
  <div className="space-y-4 text-center">
348
349
  <h2 className="text-3xl font-bold">
349
- How ContractSpec pricing will work
350
+ How ContractSpec pricing works now and next
350
351
  </h2>
351
352
  <p className="text-muted-foreground mx-auto max-w-2xl text-lg">
352
353
  We charge based on how much of your stack we help you maintain,
@@ -428,10 +429,10 @@ export function PricingClient() {
428
429
  </div>
429
430
  </section>
430
431
 
431
- {/* Waitlist Section */}
432
+ {/* Studio Signup Section */}
432
433
  <section className="section-padding hero-gradient">
433
434
  <div className="mx-auto max-w-4xl">
434
- <WaitlistSection />
435
+ <StudioSignupSection />
435
436
  </div>
436
437
  </section>
437
438
 
@@ -439,7 +440,7 @@ export function PricingClient() {
439
440
  <PricingThinkingModal
440
441
  open={pricingModalOpen}
441
442
  onOpenChange={setPricingModalOpen}
442
- onApplyClick={scrollToWaitlist}
443
+ onApplyClick={openStudio}
443
444
  />
444
445
  </main>
445
446
  );
@@ -381,8 +381,8 @@ export const ProductClientPage = () => (
381
381
  >
382
382
  Install OSS Core <ChevronRight size={16} />
383
383
  </Link>
384
- <Link href="/contact#waitlist" className="btn-ghost">
385
- Join Studio Waitlist
384
+ <Link href="https://app.contractspec.studio" className="btn-ghost">
385
+ Try Studio
386
386
  </Link>
387
387
  </div>
388
388
  </div>
@@ -6,5 +6,5 @@ export { ChangelogPage } from './ChangelogPage';
6
6
  export { CofounderPage } from './CofounderPage';
7
7
  export { ContributePage } from './ContributePage';
8
8
  export { DesignPartnerPage } from './DesignPartnerPage';
9
- export { WaitlistSection } from './waitlist-section';
9
+ export { StudioSignupSection } from './studio-signup-section';
10
10
  export { PricingThinkingModal } from './pricing-thinking-modal';
@@ -103,8 +103,8 @@ export function PricingThinkingModal({
103
103
  <DialogHeader>
104
104
  <DialogTitle>Tentative pricing (work in progress)</DialogTitle>
105
105
  <DialogDescription>
106
- We're still in design-partner mode. This is a draft of how we expect
107
- pricing to look once we open public access.
106
+ ContractSpec Studio is live. This is a draft of how paid plans are
107
+ expected to evolve as usage grows.
108
108
  </DialogDescription>
109
109
  </DialogHeader>
110
110
 
@@ -201,8 +201,8 @@ export function PricingThinkingModal({
201
201
  still in draft, subject to change based on what we learn.
202
202
  </p>
203
203
  <p className="text-muted-foreground text-xs">
204
- Design partners get early access and a founding discount when paid
205
- plans launch.
204
+ Design partners get priority onboarding and partner incentives as
205
+ paid plans launch.
206
206
  </p>
207
207
  {onApplyClick && (
208
208
  <Button
@@ -213,7 +213,7 @@ export function PricingThinkingModal({
213
213
  className="w-full"
214
214
  variant="outline"
215
215
  >
216
- Apply as a design partner
216
+ Try Studio
217
217
  </Button>
218
218
  )}
219
219
  </div>
@@ -31,8 +31,8 @@ export function CorePositioningSection() {
31
31
  align="center"
32
32
  className="pt-2 sm:flex sm:flex-row sm:flex-wrap sm:items-center sm:justify-center"
33
33
  >
34
- <ButtonLink href="/pricing#waitlist">
35
- Join waitlist <ChevronRight size={16} />
34
+ <ButtonLink href="https://app.contractspec.studio">
35
+ Try Studio <ChevronRight size={16} />
36
36
  </ButtonLink>
37
37
  <ButtonLink variant="ghost" href="/contact">
38
38
  Book a call
@@ -29,14 +29,14 @@ export function CtaSection() {
29
29
  className="pt-2 sm:flex sm:flex-row sm:flex-wrap sm:items-center sm:justify-center"
30
30
  >
31
31
  <ButtonLink
32
- href="/pricing#waitlist"
32
+ href="https://app.contractspec.studio"
33
33
  onClick={() =>
34
34
  captureAnalyticsEvent(analyticsEventNames.CTA_STUDIO_CLICK, {
35
35
  surface: 'cta-section',
36
36
  })
37
37
  }
38
38
  >
39
- Join waitlist
39
+ Try Studio
40
40
  </ButtonLink>
41
41
  <ButtonLink
42
42
  variant="ghost"
@@ -44,14 +44,14 @@ export function HeroMarketingSection() {
44
44
  </ButtonLink>
45
45
  <ButtonLink
46
46
  variant="ghost"
47
- href="/contact#waitlist"
47
+ href="https://app.contractspec.studio"
48
48
  onClick={() =>
49
49
  captureAnalyticsEvent(analyticsEventNames.CTA_STUDIO_CLICK, {
50
50
  surface: 'hero',
51
51
  })
52
52
  }
53
53
  >
54
- Join Studio Waitlist
54
+ Try Studio
55
55
  </ButtonLink>
56
56
  </HStack>
57
57
 
@@ -0,0 +1,56 @@
1
+ 'use client';
2
+
3
+ import Link from 'next/link';
4
+ import { ArrowRight, Rocket } from 'lucide-react';
5
+ import { Button } from '@contractspec/lib.design-system';
6
+
7
+ interface StudioSignupSectionProps {
8
+ variant?: 'default' | 'compact';
9
+ }
10
+
11
+ const studioUrl = 'https://app.contractspec.studio';
12
+ const studioDocsUrl = 'https://app.contractspec.studio/docs';
13
+
14
+ export function StudioSignupSection({
15
+ variant = 'default',
16
+ }: StudioSignupSectionProps) {
17
+ const isCompact = variant === 'compact';
18
+
19
+ return (
20
+ <div
21
+ id="studio-signup"
22
+ className={isCompact ? 'space-y-4' : 'card-subtle space-y-6 p-8'}
23
+ >
24
+ <div className="space-y-4">
25
+ <div className="inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1">
26
+ <Rocket size={14} className="text-violet-300" />
27
+ <span className="text-sm font-medium text-violet-300">
28
+ ContractSpec Studio
29
+ </span>
30
+ </div>
31
+ <h2 className={isCompact ? 'text-xl font-bold' : 'text-2xl font-bold'}>
32
+ Try ContractSpec Studio
33
+ </h2>
34
+ <p className="text-muted-foreground text-sm">
35
+ The AI-powered product decision engine that turns product signals into
36
+ spec-first deliverables.
37
+ </p>
38
+ <p className="text-muted-foreground text-xs">
39
+ Evidence -&gt; Correlation -&gt; Decision -&gt; Change -&gt; Export
40
+ -&gt; Check -&gt; Notify -&gt; Autopilot
41
+ </p>
42
+ </div>
43
+
44
+ <div className="flex flex-col gap-3 sm:flex-row">
45
+ <Button asChild className="w-full sm:w-auto">
46
+ <Link href={studioUrl}>
47
+ Get Started Free <ArrowRight className="ml-2 h-4 w-4" />
48
+ </Link>
49
+ </Button>
50
+ <Button asChild variant="outline" className="w-full sm:w-auto">
51
+ <Link href={studioDocsUrl}>Read Studio Docs</Link>
52
+ </Button>
53
+ </div>
54
+ </div>
55
+ );
56
+ }
@@ -27,7 +27,7 @@ import {
27
27
  DialogHeader,
28
28
  DialogTitle,
29
29
  } from '@contractspec/lib.ui-kit-web/ui/dialog';
30
- import { WaitlistSection } from '../marketing';
30
+ import { StudioSignupSection } from '../marketing';
31
31
  import { TemplatePreviewModal } from './TemplatesPreviewModal';
32
32
 
33
33
  const templates = [
@@ -252,7 +252,7 @@ export const TemplatesPage = () => {
252
252
  const [selectedTag, setSelectedTag] = useState<string | null>(null);
253
253
  const [search, setSearch] = useState('');
254
254
  const [preview, setPreview] = useState<TemplateId | null>(null);
255
- const [waitlistModalOpen, setWaitlistModalOpen] = useState(false);
255
+ const [studioSignupModalOpen, setStudioSignupModalOpen] = useState(false);
256
256
  const [source, setSource] = useState<'local' | 'registry'>('local');
257
257
  const [selectedTemplateForCommand, setSelectedTemplateForCommand] = useState<
258
258
  RegistryTemplate | LocalTemplate | null
@@ -632,16 +632,19 @@ export const TemplatesPage = () => {
632
632
  />
633
633
  {/*) : null}*/}
634
634
 
635
- <Dialog open={waitlistModalOpen} onOpenChange={setWaitlistModalOpen}>
635
+ <Dialog
636
+ open={studioSignupModalOpen}
637
+ onOpenChange={setStudioSignupModalOpen}
638
+ >
636
639
  <DialogContent className="max-h-[90vh] max-w-2xl overflow-y-auto">
637
640
  <DialogHeader>
638
- <DialogTitle>Early Access Required</DialogTitle>
641
+ <DialogTitle>Deploy in Studio</DialogTitle>
639
642
  <DialogDescription>
640
- ContractSpec Studio is in early access. Join the waitlist to
641
- deploy projects to our managed cloud.
643
+ Deploy templates in ContractSpec Studio and run the full
644
+ evidence-to-spec loop with your team.
642
645
  </DialogDescription>
643
646
  </DialogHeader>
644
- <WaitlistSection variant="compact" />
647
+ <StudioSignupSection variant="compact" />
645
648
  </DialogContent>
646
649
  </Dialog>
647
650
 
@@ -698,10 +701,10 @@ export const TemplatesPage = () => {
698
701
  templateId: commandId,
699
702
  });
700
703
  setSelectedTemplateForCommand(null);
701
- setWaitlistModalOpen(true);
704
+ setStudioSignupModalOpen(true);
702
705
  }}
703
706
  >
704
- Deploy to Studio (Waitlist)
707
+ Deploy to Studio
705
708
  </button>
706
709
  </div>
707
710
  </DialogContent>