@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
@@ -2,9 +2,8 @@ import { createRequire } from "node:module";
2
2
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
3
3
 
4
4
  // src/components/marketing/studio-signup-section.tsx
5
+ import { ArrowRight, Sparkles } from "lucide-react";
5
6
  import Link from "next/link";
6
- import { ArrowRight, Rocket } from "lucide-react";
7
- import { Button } from "@contractspec/lib.design-system";
8
7
  import { jsxDEV } from "react/jsx-dev-runtime";
9
8
  "use client";
10
9
  var studioUrl = "https://www.contractspec.studio";
@@ -15,62 +14,47 @@ function StudioSignupSection({
15
14
  const isCompact = variant === "compact";
16
15
  return /* @__PURE__ */ jsxDEV("div", {
17
16
  id: "studio-signup",
18
- className: isCompact ? "space-y-4" : "card-subtle space-y-6 p-8",
17
+ className: `${isCompact ? "space-y-5 rounded-[28px] border border-border bg-card p-6" : "editorial-panel space-y-6"}`,
19
18
  children: [
20
19
  /* @__PURE__ */ jsxDEV("div", {
21
20
  className: "space-y-4",
22
21
  children: [
23
22
  /* @__PURE__ */ jsxDEV("div", {
24
- className: "inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1",
23
+ className: "badge",
25
24
  children: [
26
- /* @__PURE__ */ jsxDEV(Rocket, {
27
- size: 14,
28
- className: "text-violet-300"
25
+ /* @__PURE__ */ jsxDEV(Sparkles, {
26
+ size: 14
29
27
  }, undefined, false, undefined, this),
30
- /* @__PURE__ */ jsxDEV("span", {
31
- className: "text-sm font-medium text-violet-300",
32
- children: "ContractSpec Studio"
33
- }, undefined, false, undefined, this)
28
+ "Studio on top"
34
29
  ]
35
30
  }, undefined, true, undefined, this),
36
31
  /* @__PURE__ */ jsxDEV("h2", {
37
- className: isCompact ? "text-xl font-bold" : "text-2xl font-bold",
38
- children: "Try ContractSpec Studio"
39
- }, undefined, false, undefined, this),
40
- /* @__PURE__ */ jsxDEV("p", {
41
- className: "text-muted-foreground text-sm",
42
- children: "The AI-powered product decision engine that turns product signals into spec-first deliverables."
32
+ className: isCompact ? "font-serif text-3xl tracking-[-0.04em]" : "font-serif text-4xl tracking-[-0.04em]",
33
+ children: "See the operating layer built on top of the open system."
43
34
  }, undefined, false, undefined, this),
44
35
  /* @__PURE__ */ jsxDEV("p", {
45
- className: "text-muted-foreground text-xs",
46
- children: "Evidence -> Correlation -> Decision -> Change -> Export -> Check -> Notify -> Autopilot"
36
+ className: "text-muted-foreground text-sm leading-7",
37
+ children: "Studio packages the workflow for evidence, drafting, review, export, and follow-up. It should feel like the best product built on top of ContractSpec, not a different story."
47
38
  }, undefined, false, undefined, this)
48
39
  ]
49
40
  }, undefined, true, undefined, this),
50
41
  /* @__PURE__ */ jsxDEV("div", {
51
- className: "flex flex-col gap-3 sm:flex-row",
42
+ className: "grid gap-3 sm:grid-cols-2",
52
43
  children: [
53
- /* @__PURE__ */ jsxDEV(Button, {
54
- asChild: true,
55
- className: "w-full sm:w-auto",
56
- children: /* @__PURE__ */ jsxDEV(Link, {
57
- href: studioUrl,
58
- children: [
59
- "Get Started Free ",
60
- /* @__PURE__ */ jsxDEV(ArrowRight, {
61
- className: "ml-2 h-4 w-4"
62
- }, undefined, false, undefined, this)
63
- ]
64
- }, undefined, true, undefined, this)
65
- }, undefined, false, undefined, this),
66
- /* @__PURE__ */ jsxDEV(Button, {
67
- asChild: true,
68
- variant: "outline",
69
- className: "w-full sm:w-auto",
70
- children: /* @__PURE__ */ jsxDEV(Link, {
71
- href: studioDocsUrl,
72
- children: "Read Studio Docs"
73
- }, undefined, false, undefined, this)
44
+ /* @__PURE__ */ jsxDEV(Link, {
45
+ href: studioUrl,
46
+ className: "btn-primary",
47
+ children: [
48
+ "Explore Studio ",
49
+ /* @__PURE__ */ jsxDEV(ArrowRight, {
50
+ className: "ml-2 h-4 w-4"
51
+ }, undefined, false, undefined, this)
52
+ ]
53
+ }, undefined, true, undefined, this),
54
+ /* @__PURE__ */ jsxDEV(Link, {
55
+ href: studioDocsUrl,
56
+ className: "btn-ghost",
57
+ children: "Read Studio docs"
74
58
  }, undefined, false, undefined, this)
75
59
  ]
76
60
  }, undefined, true, undefined, this)
@@ -78,866 +62,256 @@ function StudioSignupSection({
78
62
  }, undefined, true, undefined, this);
79
63
  }
80
64
 
81
- // src/libs/pricing-examples.ts
82
- var PRICING_EXAMPLES = {
83
- free: {
84
- regenerationsPerMonth: 200,
85
- aiActionsPerMonth: 100,
86
- projects: 1
87
- },
88
- builder: {
89
- regenerationsPerMonthHint: "1,000–2,000+",
90
- aiActionsPerMonthHint: "1,000+"
91
- },
92
- team: {
93
- description: "Higher limits + cheaper per-regen at scale"
94
- }
95
- };
96
-
97
- // src/components/marketing/pricing-thinking-modal.tsx
98
- import { CheckCircle } from "lucide-react";
99
- import {
100
- Dialog,
101
- DialogContent,
102
- DialogDescription,
103
- DialogHeader,
104
- DialogTitle
105
- } from "@contractspec/lib.ui-kit-web/ui/dialog";
106
- import { Button as Button2 } from "@contractspec/lib.design-system";
65
+ // src/components/marketing/PricingClient.tsx
66
+ import { ChevronDown, ChevronRight } from "lucide-react";
67
+ import Link2 from "next/link";
68
+ import { useState } from "react";
107
69
  import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
108
70
  "use client";
109
- var pricingTiers = [
71
+ var faqs = [
110
72
  {
111
- tag: "Planned",
112
- title: "Free",
113
- priceLine: "For hobbyists and pre-PMF teams",
114
- bullets: [
115
- "1 active project",
116
- "Small spec size",
117
- `Example: ~${PRICING_EXAMPLES.free.regenerationsPerMonth} free regenerations per month`,
118
- `Example: ~${PRICING_EXAMPLES.free.aiActionsPerMonth} free AI agent actions per month`,
119
- "Unlimited collaborators"
120
- ],
121
- note: "Good enough to build and launch a real product before paying."
73
+ question: "What stays free?",
74
+ answer: "The OSS foundation stays free. Teams can adopt contracts, generation, runtime adapters, and the core package ecosystem without crossing into a paid product loop."
122
75
  },
123
76
  {
124
- tag: "Planned",
125
- title: "Builder",
126
- priceLine: "Usage-based, for solo builders and small teams",
127
- bullets: [
128
- "More projects",
129
- `More monthly regenerations included (e.g. ${PRICING_EXAMPLES.builder.regenerationsPerMonthHint})`,
130
- `More AI agent actions included (e.g. ${PRICING_EXAMPLES.builder.aiActionsPerMonthHint})`,
131
- "Pay-as-you-go for extra regenerations and AI",
132
- "Basic environments (dev / prod)"
133
- ],
134
- note: "Pay for how fast and how often you evolve your system, not for seats."
77
+ question: "What is Studio charging for?",
78
+ answer: "Studio is the operating layer: the packaged workflow for evidence, drafts, review, export, and follow-up on top of the same open system."
135
79
  },
136
80
  {
137
- tag: "Planned",
138
- title: "Team & Platform",
139
- priceLine: "For teams standardizing on ContractSpec",
140
- bullets: [
141
- "Multiple projects and environments",
142
- "Higher regeneration and AI action limits",
143
- "Cheaper overages as you scale",
144
- "Advanced RBAC and governance",
145
- "SSO, audit trails, and longer retention"
146
- ],
147
- note: "For platform teams using ContractSpec as infra for multiple apps."
81
+ question: "Why not price the OSS layer?",
82
+ answer: "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."
83
+ },
84
+ {
85
+ question: "Who should talk to you now?",
86
+ answer: "Teams already running AI-heavy product or ops workflows, especially those who feel drift, unsafe regeneration, or coordination pain across multiple surfaces."
148
87
  }
149
88
  ];
150
- var usageMetrics = [
89
+ var packages = [
151
90
  {
152
- name: "Regenerations",
153
- freeTier: `Free tier: e.g. ~${PRICING_EXAMPLES.free.regenerationsPerMonth} regenerations / month`,
154
- beyond: "Beyond: pay per additional regeneration, with volume discounts."
155
- },
156
- {
157
- name: "AI agent actions",
158
- freeTier: `Free tier: e.g. ~${PRICING_EXAMPLES.free.aiActionsPerMonth} AI agent actions / month`,
159
- beyond: "Beyond: pay-as-you-go for extra AI usage."
91
+ name: "OSS/Core",
92
+ subtitle: "Free and open",
93
+ description: "Use the open system when you want explicit contracts, safe regeneration, and standard outputs the team owns.",
94
+ items: [
95
+ "Contracts, generation, runtime adapters, harnesses, and agent tooling",
96
+ "Incremental adoption inside existing codebases",
97
+ "Local and CI-friendly workflows",
98
+ "No forced hosted runtime or locked delivery path"
99
+ ],
100
+ cta: {
101
+ label: "Start with OSS",
102
+ href: "/install",
103
+ className: "btn-primary"
104
+ }
160
105
  },
161
106
  {
162
- name: "Projects",
163
- freeTier: `Free tier: ${PRICING_EXAMPLES.free.projects} project`,
164
- beyond: "Builder / Team: more projects included; extra projects available as you scale."
107
+ name: "Studio",
108
+ subtitle: "Operating product",
109
+ description: "Use Studio when you want the product layer for evidence, drafting, review, exports, and follow-up.",
110
+ items: [
111
+ "Packaged operating loop on top of the same open system",
112
+ "Opinionated team workflows and governance surfaces",
113
+ "Faster coordination for teams running real product or ops loops",
114
+ "Design partner and rollout paths for teams with live complexity"
115
+ ],
116
+ cta: {
117
+ label: "Explore Studio",
118
+ href: "https://www.contractspec.studio",
119
+ className: "btn-ghost"
120
+ }
165
121
  }
166
122
  ];
167
- function PricingThinkingModal({
168
- open,
169
- onOpenChange,
170
- onApplyClick
171
- }) {
172
- return /* @__PURE__ */ jsxDEV2(Dialog, {
173
- open,
174
- onOpenChange,
175
- children: /* @__PURE__ */ jsxDEV2(DialogContent, {
176
- className: "max-h-[90vh] w-full overflow-y-auto md:max-w-5xl",
177
- children: [
178
- /* @__PURE__ */ jsxDEV2(DialogHeader, {
179
- children: [
180
- /* @__PURE__ */ jsxDEV2(DialogTitle, {
181
- children: "Tentative pricing (work in progress)"
182
- }, undefined, false, undefined, this),
183
- /* @__PURE__ */ jsxDEV2(DialogDescription, {
184
- children: "ContractSpec Studio is live. This is a draft of how paid plans are expected to evolve as usage grows."
185
- }, undefined, false, undefined, this)
186
- ]
187
- }, undefined, true, undefined, this),
188
- /* @__PURE__ */ jsxDEV2("div", {
189
- className: "space-y-8",
123
+ function PricingClient() {
124
+ const [openFaq, setOpenFaq] = useState(0);
125
+ return /* @__PURE__ */ jsxDEV2("main", {
126
+ children: [
127
+ /* @__PURE__ */ jsxDEV2("section", {
128
+ className: "section-padding hero-gradient border-border/70 border-b",
129
+ children: /* @__PURE__ */ jsxDEV2("div", {
130
+ className: "editorial-shell grid gap-8 lg:grid-cols-[1.05fr_0.95fr]",
190
131
  children: [
191
132
  /* @__PURE__ */ jsxDEV2("div", {
192
- className: "space-y-4",
193
- children: [
194
- /* @__PURE__ */ jsxDEV2("div", {
195
- className: "flex items-center gap-2",
196
- children: [
197
- /* @__PURE__ */ jsxDEV2("span", {
198
- className: "text-muted-foreground text-xs font-medium",
199
- children: "Draft"
200
- }, undefined, false, undefined, this),
201
- /* @__PURE__ */ jsxDEV2("span", {
202
- className: "text-muted-foreground text-xs",
203
- children: "•"
204
- }, undefined, false, undefined, this),
205
- /* @__PURE__ */ jsxDEV2("span", {
206
- className: "text-muted-foreground text-xs",
207
- children: "Subject to change"
208
- }, undefined, false, undefined, this)
209
- ]
210
- }, undefined, true, undefined, this),
211
- /* @__PURE__ */ jsxDEV2("div", {
212
- className: "grid gap-4 md:grid-cols-3",
213
- children: pricingTiers.map((tier) => /* @__PURE__ */ jsxDEV2("div", {
214
- className: "card-subtle relative space-y-4 p-6",
215
- children: [
216
- /* @__PURE__ */ jsxDEV2("div", {
217
- className: "bg-muted border-border absolute -top-2 left-1/2 -translate-x-1/2 rounded-full border px-2 py-0.5 text-xs font-medium",
218
- children: tier.tag
219
- }, undefined, false, undefined, this),
220
- /* @__PURE__ */ jsxDEV2("div", {
221
- className: "space-y-2 pt-2",
222
- children: [
223
- /* @__PURE__ */ jsxDEV2("h3", {
224
- className: "text-xl font-bold",
225
- children: tier.title
226
- }, undefined, false, undefined, this),
227
- /* @__PURE__ */ jsxDEV2("p", {
228
- className: "text-muted-foreground text-sm",
229
- children: tier.priceLine
230
- }, undefined, false, undefined, this)
231
- ]
232
- }, undefined, true, undefined, this),
233
- /* @__PURE__ */ jsxDEV2("ul", {
234
- className: "space-y-2",
235
- children: tier.bullets.map((bullet, i) => /* @__PURE__ */ jsxDEV2("li", {
236
- className: "text-muted-foreground flex gap-2 text-sm",
237
- children: [
238
- /* @__PURE__ */ jsxDEV2(CheckCircle, {
239
- size: 14,
240
- className: "mt-0.5 shrink-0 text-violet-400"
241
- }, undefined, false, undefined, this),
242
- bullet
243
- ]
244
- }, i, true, undefined, this))
245
- }, undefined, false, undefined, this),
246
- /* @__PURE__ */ jsxDEV2("p", {
247
- className: "text-muted-foreground text-xs italic",
248
- children: tier.note
249
- }, undefined, false, undefined, this)
250
- ]
251
- }, tier.title, true, undefined, this))
252
- }, undefined, false, undefined, this)
253
- ]
254
- }, undefined, true, undefined, this),
255
- /* @__PURE__ */ jsxDEV2("div", {
256
- className: "border-border space-y-4 border-t pt-6",
133
+ className: "space-y-6",
257
134
  children: [
135
+ /* @__PURE__ */ jsxDEV2("p", {
136
+ className: "editorial-kicker",
137
+ children: "Packaging, not upsell fog"
138
+ }, undefined, false, undefined, this),
139
+ /* @__PURE__ */ jsxDEV2("h1", {
140
+ className: "editorial-title max-w-4xl",
141
+ children: "The open system is how teams start. Studio is how some teams operate."
142
+ }, undefined, false, undefined, this),
143
+ /* @__PURE__ */ jsxDEV2("p", {
144
+ className: "editorial-subtitle",
145
+ children: "Pricing should reflect the product split honestly. The OSS layer is the open foundation. Studio is the paid operating surface when the team wants a packaged workflow on top."
146
+ }, undefined, false, undefined, this),
258
147
  /* @__PURE__ */ jsxDEV2("div", {
148
+ className: "flex flex-col gap-3 sm:flex-row",
259
149
  children: [
260
- /* @__PURE__ */ jsxDEV2("h3", {
261
- className: "text-lg font-bold",
262
- children: "Usage-based, with a generous free tier"
263
- }, undefined, false, undefined, this),
264
- /* @__PURE__ */ jsxDEV2("p", {
265
- className: "text-muted-foreground mt-2 text-sm",
266
- children: "Inspired by products like PostHog, we plan to keep a generous free tier on all plans, then charge based on actual usage: regenerations, AI agent actions, and the number of projects you run on ContractSpec."
267
- }, undefined, false, undefined, this),
268
- /* @__PURE__ */ jsxDEV2("p", {
269
- className: "text-muted-foreground mt-3 text-xs italic",
270
- children: "Free tier limits are intentionally small but useful: enough to try the agent and regenerate a real project, not enough to run a full team's workload for free."
150
+ /* @__PURE__ */ jsxDEV2(Link2, {
151
+ href: "/install",
152
+ className: "btn-primary",
153
+ children: [
154
+ "Start with OSS ",
155
+ /* @__PURE__ */ jsxDEV2(ChevronRight, {
156
+ className: "ml-2 h-4 w-4"
157
+ }, undefined, false, undefined, this)
158
+ ]
159
+ }, undefined, true, undefined, this),
160
+ /* @__PURE__ */ jsxDEV2(Link2, {
161
+ href: "https://www.contractspec.studio",
162
+ className: "btn-ghost",
163
+ children: "Explore Studio"
271
164
  }, undefined, false, undefined, this)
272
165
  ]
273
- }, undefined, true, undefined, this),
274
- /* @__PURE__ */ jsxDEV2("div", {
275
- className: "grid gap-4 md:grid-cols-3",
276
- children: usageMetrics.map((metric) => /* @__PURE__ */ jsxDEV2("div", {
277
- className: "card-subtle space-y-2 p-4",
278
- children: [
279
- /* @__PURE__ */ jsxDEV2("h4", {
280
- className: "text-sm font-semibold",
281
- children: metric.name
282
- }, undefined, false, undefined, this),
283
- /* @__PURE__ */ jsxDEV2("p", {
284
- className: "text-muted-foreground text-xs",
285
- children: metric.freeTier
286
- }, undefined, false, undefined, this),
287
- /* @__PURE__ */ jsxDEV2("p", {
288
- className: "text-muted-foreground text-xs",
289
- children: metric.beyond
290
- }, undefined, false, undefined, this)
291
- ]
292
- }, metric.name, true, undefined, this))
293
- }, undefined, false, undefined, this)
166
+ }, undefined, true, undefined, this)
294
167
  ]
295
168
  }, undefined, true, undefined, this),
296
169
  /* @__PURE__ */ jsxDEV2("div", {
297
- className: "border-border space-y-4 border-t pt-6",
170
+ className: "editorial-panel space-y-5",
298
171
  children: [
299
172
  /* @__PURE__ */ jsxDEV2("p", {
300
- className: "text-muted-foreground text-xs",
301
- children: "These numbers are examples only. Final pricing and limits will evolve as we learn from design partners."
173
+ className: "editorial-kicker",
174
+ children: "Current GTM"
302
175
  }, undefined, false, undefined, this),
303
- /* @__PURE__ */ jsxDEV2("p", {
304
- className: "text-muted-foreground text-xs",
305
- children: "This is a tentative pricing model. We're pre-PMF and pricing is still in draft, subject to change based on what we learn."
176
+ /* @__PURE__ */ jsxDEV2("h2", {
177
+ className: "editorial-panel-title",
178
+ children: "Earn trust in the open, then earn the right to sell the operating product."
306
179
  }, undefined, false, undefined, this),
307
180
  /* @__PURE__ */ jsxDEV2("p", {
308
- className: "text-muted-foreground text-xs",
309
- children: "Design partners get priority onboarding and partner incentives as paid plans launch."
310
- }, undefined, false, undefined, this),
311
- onApplyClick && /* @__PURE__ */ jsxDEV2(Button2, {
312
- onClick: () => {
313
- onOpenChange(false);
314
- onApplyClick();
315
- },
316
- className: "w-full",
317
- variant: "outline",
318
- children: "Try Studio"
319
- }, undefined, false, undefined, this)
320
- ]
321
- }, undefined, true, undefined, this)
322
- ]
323
- }, undefined, true, undefined, this)
324
- ]
325
- }, undefined, true, undefined, this)
326
- }, undefined, false, undefined, this);
327
- }
328
-
329
- // src/components/marketing/PricingClient.tsx
330
- import { useState } from "react";
331
- import Link2 from "next/link";
332
- import { CheckCircle as CheckCircle2, ChevronDown, ChevronRight } from "lucide-react";
333
- import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
334
- "use client";
335
- var faqs = [
336
- {
337
- question: "Can I use ContractSpec Studio today?",
338
- answer: "Yes. ContractSpec Studio is live at www.contractspec.studio. Start with the free tier and upgrade as paid plans roll out."
339
- },
340
- {
341
- question: "What will you charge for later?",
342
- answer: "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."
343
- },
344
- {
345
- question: "What do I get as a design partner?",
346
- answer: "Direct collaboration on roadmap priorities, hands-on onboarding, and priority support. You also help shape Studio workflows before broad rollout."
347
- },
348
- {
349
- question: "Will you ever charge per seat?",
350
- answer: "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."
351
- }
352
- ];
353
- function PricingClient() {
354
- const [openFaq, setOpenFaq] = useState(null);
355
- const [pricingModalOpen, setPricingModalOpen] = useState(false);
356
- const openStudio = () => {
357
- window.open("https://www.contractspec.studio", "_blank", "noopener,noreferrer");
358
- };
359
- return /* @__PURE__ */ jsxDEV3("main", {
360
- className: "",
361
- children: [
362
- /* @__PURE__ */ jsxDEV3("section", {
363
- className: "section-padding hero-gradient relative",
364
- children: /* @__PURE__ */ jsxDEV3("div", {
365
- className: "mx-auto max-w-4xl space-y-6 text-center",
366
- children: [
367
- /* @__PURE__ */ jsxDEV3("h1", {
368
- className: "text-5xl leading-tight font-bold md:text-6xl",
369
- children: "Transparent, usage-based pricing – after we earn it."
370
- }, undefined, false, undefined, this),
371
- /* @__PURE__ */ jsxDEV3("p", {
372
- className: "text-muted-foreground mx-auto max-w-2xl text-lg",
373
- children: "ContractSpec Core (the OSS compiler) is and always will be free. ContractSpec Studio is live, with paid plans rolling out progressively."
374
- }, undefined, false, undefined, this),
375
- /* @__PURE__ */ jsxDEV3("div", {
376
- className: "flex flex-col items-center justify-center gap-4 pt-4 sm:flex-row",
377
- children: [
378
- /* @__PURE__ */ jsxDEV3(Link2, {
379
- href: "/install",
380
- className: "btn-primary inline-flex items-center gap-2",
381
- children: [
382
- "Install OSS Core ",
383
- /* @__PURE__ */ jsxDEV3(ChevronRight, {
384
- size: 16
385
- }, undefined, false, undefined, this)
386
- ]
387
- }, undefined, true, undefined, this),
388
- /* @__PURE__ */ jsxDEV3(Link2, {
389
- href: "https://www.contractspec.studio",
390
- className: "btn-ghost inline-flex items-center gap-2",
391
- children: "Try Studio Free"
181
+ className: "text-muted-foreground text-sm leading-7",
182
+ children: "This page should make the ladder clear: prove the OSS foundation first, then package the workflow that removes operational drag for teams that need more."
392
183
  }, undefined, false, undefined, this)
393
184
  ]
394
185
  }, undefined, true, undefined, this)
395
186
  ]
396
187
  }, undefined, true, undefined, this)
397
188
  }, undefined, false, undefined, this),
398
- /* @__PURE__ */ jsxDEV3("section", {
399
- className: "section-padding border-border border-b",
400
- children: /* @__PURE__ */ jsxDEV3("div", {
401
- className: "mx-auto max-w-6xl",
402
- children: /* @__PURE__ */ jsxDEV3("div", {
403
- className: "card-subtle flex flex-col gap-6 p-8 md:flex-row md:items-center",
189
+ /* @__PURE__ */ jsxDEV2("section", {
190
+ className: "editorial-section",
191
+ children: /* @__PURE__ */ jsxDEV2("div", {
192
+ className: "editorial-shell grid gap-6 lg:grid-cols-2",
193
+ children: packages.map((pkg) => /* @__PURE__ */ jsxDEV2("div", {
194
+ className: "editorial-panel space-y-6",
404
195
  children: [
405
- /* @__PURE__ */ jsxDEV3("div", {
406
- className: "flex-1 space-y-4",
196
+ /* @__PURE__ */ jsxDEV2("div", {
197
+ className: "space-y-3",
407
198
  children: [
408
- /* @__PURE__ */ jsxDEV3("div", {
409
- className: "inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1",
410
- children: /* @__PURE__ */ jsxDEV3("span", {
411
- className: "text-sm font-medium text-violet-300",
412
- children: "Now accepting design partners"
413
- }, undefined, false, undefined, this)
199
+ /* @__PURE__ */ jsxDEV2("p", {
200
+ className: "editorial-kicker",
201
+ children: pkg.subtitle
414
202
  }, undefined, false, undefined, this),
415
- /* @__PURE__ */ jsxDEV3("h2", {
416
- className: "text-2xl font-bold",
417
- children: "Help us design the compiler for AI-native software."
203
+ /* @__PURE__ */ jsxDEV2("h2", {
204
+ className: "font-serif text-4xl tracking-[-0.04em]",
205
+ children: pkg.name
418
206
  }, undefined, false, undefined, this),
419
- /* @__PURE__ */ jsxDEV3("p", {
420
- className: "text-muted-foreground text-sm",
421
- children: "We work closely with a small group of teams building serious products with AI. You bring real-world complexity, we bring the spec-first engine and a lot of attention."
422
- }, undefined, false, undefined, this)
423
- ]
424
- }, undefined, true, undefined, this),
425
- /* @__PURE__ */ jsxDEV3("div", {
426
- className: "flex-1 space-y-4",
427
- children: [
428
- /* @__PURE__ */ jsxDEV3("ul", {
429
- className: "text-muted-foreground space-y-2 text-sm",
430
- children: [
431
- /* @__PURE__ */ jsxDEV3("li", {
432
- className: "flex gap-2",
433
- children: [
434
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
435
- size: 16,
436
- className: "mt-0.5 shrink-0 text-violet-400"
437
- }, undefined, false, undefined, this),
438
- "Priority access to new Studio capabilities"
439
- ]
440
- }, undefined, true, undefined, this),
441
- /* @__PURE__ */ jsxDEV3("li", {
442
- className: "flex gap-2",
443
- children: [
444
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
445
- size: 16,
446
- className: "mt-0.5 shrink-0 text-violet-400"
447
- }, undefined, false, undefined, this),
448
- "Hands-on onboarding and architecture help"
449
- ]
450
- }, undefined, true, undefined, this),
451
- /* @__PURE__ */ jsxDEV3("li", {
452
- className: "flex gap-2",
453
- children: [
454
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
455
- size: 16,
456
- className: "mt-0.5 shrink-0 text-violet-400"
457
- }, undefined, false, undefined, this),
458
- "Influence over roadmap and features"
459
- ]
460
- }, undefined, true, undefined, this),
461
- /* @__PURE__ */ jsxDEV3("li", {
462
- className: "flex gap-2",
463
- children: [
464
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
465
- size: 16,
466
- className: "mt-0.5 shrink-0 text-violet-400"
467
- }, undefined, false, undefined, this),
468
- "Priority support through direct channels"
469
- ]
470
- }, undefined, true, undefined, this),
471
- /* @__PURE__ */ jsxDEV3("li", {
472
- className: "flex gap-2",
473
- children: [
474
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
475
- size: 16,
476
- className: "mt-0.5 shrink-0 text-violet-400"
477
- }, undefined, false, undefined, this),
478
- "Pricing input and partner incentives"
479
- ]
480
- }, undefined, true, undefined, this)
481
- ]
482
- }, undefined, true, undefined, this),
483
- /* @__PURE__ */ jsxDEV3(Link2, {
484
- href: "/design-partner",
485
- className: "btn-primary w-full md:w-auto",
486
- children: "Apply as a design partner"
487
- }, undefined, false, undefined, this)
488
- ]
489
- }, undefined, true, undefined, this)
490
- ]
491
- }, undefined, true, undefined, this)
492
- }, undefined, false, undefined, this)
493
- }, undefined, false, undefined, this),
494
- /* @__PURE__ */ jsxDEV3("section", {
495
- className: "section-padding border-border border-b",
496
- children: /* @__PURE__ */ jsxDEV3("div", {
497
- className: "mx-auto max-w-6xl",
498
- children: /* @__PURE__ */ jsxDEV3("div", {
499
- className: "grid gap-6 md:grid-cols-3",
500
- children: [
501
- /* @__PURE__ */ jsxDEV3("div", {
502
- className: "card-subtle col-span-3 space-y-6 border-violet-500/20 p-6",
503
- children: [
504
- /* @__PURE__ */ jsxDEV3("div", {
505
- 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",
506
- children: [
507
- /* @__PURE__ */ jsxDEV3("div", {
508
- className: "text-1xl font-bold",
509
- children: "Free Forever"
510
- }, undefined, false, undefined, this),
511
- /* @__PURE__ */ jsxDEV3("p", {
512
- className: "text-muted-foreground text-xs",
513
- children: "Apache 2.0 / MIT License"
514
- }, undefined, false, undefined, this)
515
- ]
516
- }, undefined, true, undefined, this),
517
- /* @__PURE__ */ jsxDEV3("div", {
518
- className: "flex flex-row justify-around",
519
- children: [
520
- /* @__PURE__ */ jsxDEV3("div", {
521
- className: "w-1/2",
522
- children: [
523
- /* @__PURE__ */ jsxDEV3("div", {
524
- className: "space-y-2",
525
- children: /* @__PURE__ */ jsxDEV3("h2", {
526
- className: "text-2xl font-bold",
527
- children: "OSS Core"
528
- }, undefined, false, undefined, this)
529
- }, undefined, false, undefined, this),
530
- /* @__PURE__ */ jsxDEV3("p", {
531
- className: "text-muted-foreground text-sm",
532
- children: "The complete spec-first compiler. Generate API, DB, and UI code locally."
533
- }, undefined, false, undefined, this)
534
- ]
535
- }, undefined, true, undefined, this),
536
- /* @__PURE__ */ jsxDEV3("ul", {
537
- className: "space-y-3",
538
- children: [
539
- /* @__PURE__ */ jsxDEV3("li", {
540
- className: "text-muted-foreground flex gap-3 text-sm",
541
- children: [
542
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
543
- size: 16,
544
- className: "mt-0.5 shrink-0 text-violet-400"
545
- }, undefined, false, undefined, this),
546
- "Unlimited local regenerations"
547
- ]
548
- }, undefined, true, undefined, this),
549
- /* @__PURE__ */ jsxDEV3("li", {
550
- className: "text-muted-foreground flex gap-3 text-sm",
551
- children: [
552
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
553
- size: 16,
554
- className: "mt-0.5 shrink-0 text-violet-400"
555
- }, undefined, false, undefined, this),
556
- "All standard generators included"
557
- ]
558
- }, undefined, true, undefined, this),
559
- /* @__PURE__ */ jsxDEV3("li", {
560
- className: "text-muted-foreground flex gap-3 text-sm",
561
- children: [
562
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
563
- size: 16,
564
- className: "mt-0.5 shrink-0 text-violet-400"
565
- }, undefined, false, undefined, this),
566
- "Run in your own CI/CD"
567
- ]
568
- }, undefined, true, undefined, this),
569
- /* @__PURE__ */ jsxDEV3("li", {
570
- className: "text-muted-foreground flex gap-3 text-sm",
571
- children: [
572
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
573
- size: 16,
574
- className: "mt-0.5 shrink-0 text-violet-400"
575
- }, undefined, false, undefined, this),
576
- "Community support"
577
- ]
578
- }, undefined, true, undefined, this)
579
- ]
580
- }, undefined, true, undefined, this)
581
- ]
582
- }, undefined, true, undefined, this),
583
- /* @__PURE__ */ jsxDEV3(Link2, {
584
- href: "/install",
585
- className: "btn-ghost w-full",
586
- children: "Install now"
207
+ /* @__PURE__ */ jsxDEV2("p", {
208
+ className: "text-muted-foreground text-sm leading-7",
209
+ children: pkg.description
587
210
  }, undefined, false, undefined, this)
588
211
  ]
589
212
  }, undefined, true, undefined, this),
590
- /* @__PURE__ */ jsxDEV3("div", {
591
- className: "card-subtle relative space-y-6 bg-violet-500/5 p-6 ring-2 ring-violet-500",
592
- children: [
593
- /* @__PURE__ */ jsxDEV3("div", {
594
- 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",
595
- children: "Live program"
596
- }, undefined, false, undefined, this),
597
- /* @__PURE__ */ jsxDEV3("div", {
598
- className: "space-y-2",
599
- children: [
600
- /* @__PURE__ */ jsxDEV3("h2", {
601
- className: "text-2xl font-bold",
602
- children: "Design Partner"
603
- }, undefined, false, undefined, this),
604
- /* @__PURE__ */ jsxDEV3("div", {
605
- className: "space-y-1",
606
- children: [
607
- /* @__PURE__ */ jsxDEV3("div", {
608
- className: "text-2xl font-bold",
609
- children: "Invite-based"
610
- }, undefined, false, undefined, this),
611
- /* @__PURE__ */ jsxDEV3("p", {
612
- className: "text-muted-foreground text-xs",
613
- children: "Built for teams shaping the next Studio capabilities"
614
- }, undefined, false, undefined, this)
615
- ]
616
- }, undefined, true, undefined, this)
617
- ]
618
- }, undefined, true, undefined, this),
619
- /* @__PURE__ */ jsxDEV3("ul", {
620
- className: "space-y-3",
621
- children: [
622
- /* @__PURE__ */ jsxDEV3("li", {
623
- className: "text-muted-foreground flex gap-3 text-sm",
624
- children: [
625
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
626
- size: 16,
627
- className: "mt-0.5 shrink-0 text-violet-400"
628
- }, undefined, false, undefined, this),
629
- "Use ContractSpec Studio for real projects"
630
- ]
631
- }, undefined, true, undefined, this),
632
- /* @__PURE__ */ jsxDEV3("li", {
633
- className: "text-muted-foreground flex gap-3 text-sm",
634
- children: [
635
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
636
- size: 16,
637
- className: "mt-0.5 shrink-0 text-violet-400"
638
- }, undefined, false, undefined, this),
639
- "Work directly with the team on architecture and workflow design"
640
- ]
641
- }, undefined, true, undefined, this),
642
- /* @__PURE__ */ jsxDEV3("li", {
643
- className: "text-muted-foreground flex gap-3 text-sm",
644
- children: [
645
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
646
- size: 16,
647
- className: "mt-0.5 shrink-0 text-violet-400"
648
- }, undefined, false, undefined, this),
649
- "Access to partner-only previews and feedback loops"
650
- ]
651
- }, undefined, true, undefined, this),
652
- /* @__PURE__ */ jsxDEV3("li", {
653
- className: "text-muted-foreground flex gap-3 text-sm",
654
- children: [
655
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
656
- size: 16,
657
- className: "mt-0.5 shrink-0 text-violet-400"
658
- }, undefined, false, undefined, this),
659
- "Priority support and roadmap influence"
660
- ]
661
- }, undefined, true, undefined, this)
662
- ]
663
- }, undefined, true, undefined, this),
664
- /* @__PURE__ */ jsxDEV3(Link2, {
665
- href: "/design-partner",
666
- className: "btn-primary w-full",
667
- children: "Apply as a design partner"
668
- }, undefined, false, undefined, this)
669
- ]
670
- }, undefined, true, undefined, this),
671
- /* @__PURE__ */ jsxDEV3("div", {
672
- className: "card-subtle relative space-y-6 p-6",
673
- children: [
674
- /* @__PURE__ */ jsxDEV3("div", {
675
- 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",
676
- children: "Coming soon"
677
- }, undefined, false, undefined, this),
678
- /* @__PURE__ */ jsxDEV3("div", {
679
- className: "space-y-2",
680
- children: [
681
- /* @__PURE__ */ jsxDEV3("h2", {
682
- className: "text-2xl font-bold",
683
- children: "Builder"
684
- }, undefined, false, undefined, this),
685
- /* @__PURE__ */ jsxDEV3("div", {
686
- className: "space-y-1",
687
- children: /* @__PURE__ */ jsxDEV3("div", {
688
- className: "text-2xl font-bold",
689
- children: "Usage-based, for solo builders and small teams"
690
- }, undefined, false, undefined, this)
691
- }, undefined, false, undefined, this)
692
- ]
693
- }, undefined, true, undefined, this),
694
- /* @__PURE__ */ jsxDEV3("p", {
695
- className: "text-muted-foreground text-sm",
696
- children: "Pay only for what you regenerate and the AI you consume. No seat-based pricing, and a generous free tier for experiments."
697
- }, undefined, false, undefined, this),
698
- /* @__PURE__ */ jsxDEV3("ul", {
699
- className: "space-y-2",
700
- children: [
701
- /* @__PURE__ */ jsxDEV3("li", {
702
- className: "text-muted-foreground text-sm",
703
- children: "1–3 projects"
704
- }, undefined, false, undefined, this),
705
- /* @__PURE__ */ jsxDEV3("li", {
706
- className: "text-muted-foreground text-sm",
707
- children: "Generous monthly free regenerations"
708
- }, undefined, false, undefined, this),
709
- /* @__PURE__ */ jsxDEV3("li", {
710
- className: "text-muted-foreground text-sm",
711
- children: "Pay-as-you-go beyond the free tier"
712
- }, undefined, false, undefined, this)
713
- ]
714
- }, undefined, true, undefined, this),
715
- /* @__PURE__ */ jsxDEV3("button", {
716
- disabled: true,
717
- className: "btn-ghost w-full cursor-not-allowed opacity-50",
718
- children: "Available after pricing rollout"
719
- }, undefined, false, undefined, this)
720
- ]
721
- }, undefined, true, undefined, this),
722
- /* @__PURE__ */ jsxDEV3("div", {
723
- className: "card-subtle relative space-y-6 p-6",
724
- children: [
725
- /* @__PURE__ */ jsxDEV3("div", {
726
- 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",
727
- children: "Coming soon"
728
- }, undefined, false, undefined, this),
729
- /* @__PURE__ */ jsxDEV3("div", {
730
- className: "space-y-2",
731
- children: [
732
- /* @__PURE__ */ jsxDEV3("h2", {
733
- className: "text-2xl font-bold",
734
- children: "Team & Platform"
735
- }, undefined, false, undefined, this),
736
- /* @__PURE__ */ jsxDEV3("div", {
737
- className: "space-y-1",
738
- children: /* @__PURE__ */ jsxDEV3("div", {
739
- className: "text-2xl font-bold",
740
- children: "Custom, for teams standardizing on ContractSpec"
741
- }, undefined, false, undefined, this)
742
- }, undefined, false, undefined, this)
743
- ]
744
- }, undefined, true, undefined, this),
745
- /* @__PURE__ */ jsxDEV3("p", {
746
- className: "text-muted-foreground text-sm",
747
- children: "For teams running multiple apps or platforms on ContractSpec, with stricter governance, data, and compliance needs."
748
- }, undefined, false, undefined, this),
749
- /* @__PURE__ */ jsxDEV3("ul", {
750
- className: "space-y-3",
751
- children: [
752
- /* @__PURE__ */ jsxDEV3("li", {
753
- className: "text-muted-foreground flex gap-3 text-sm",
754
- children: [
755
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
756
- size: 16,
757
- className: "mt-0.5 shrink-0 text-violet-400"
758
- }, undefined, false, undefined, this),
759
- "Multiple projects and environments"
760
- ]
761
- }, undefined, true, undefined, this),
762
- /* @__PURE__ */ jsxDEV3("li", {
763
- className: "text-muted-foreground flex gap-3 text-sm",
764
- children: [
765
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
766
- size: 16,
767
- className: "mt-0.5 shrink-0 text-violet-400"
768
- }, undefined, false, undefined, this),
769
- "Advanced RBAC and policy packs"
770
- ]
771
- }, undefined, true, undefined, this),
772
- /* @__PURE__ */ jsxDEV3("li", {
773
- className: "text-muted-foreground flex gap-3 text-sm",
774
- children: [
775
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
776
- size: 16,
777
- className: "mt-0.5 shrink-0 text-violet-400"
778
- }, undefined, false, undefined, this),
779
- "SSO, audit trails, and longer retention"
780
- ]
781
- }, undefined, true, undefined, this),
782
- /* @__PURE__ */ jsxDEV3("li", {
783
- className: "text-muted-foreground flex gap-3 text-sm",
784
- children: [
785
- /* @__PURE__ */ jsxDEV3(CheckCircle2, {
786
- size: 16,
787
- className: "mt-0.5 shrink-0 text-violet-400"
788
- }, undefined, false, undefined, this),
789
- "Priority support & SLAs"
790
- ]
791
- }, undefined, true, undefined, this)
792
- ]
793
- }, undefined, true, undefined, this),
794
- /* @__PURE__ */ jsxDEV3(Link2, {
795
- href: "/contact",
796
- className: "btn-ghost w-full",
797
- children: "Talk to us"
798
- }, undefined, false, undefined, this)
799
- ]
800
- }, undefined, true, undefined, this)
213
+ /* @__PURE__ */ jsxDEV2("ul", {
214
+ className: "editorial-list",
215
+ children: pkg.items.map((item) => /* @__PURE__ */ jsxDEV2("li", {
216
+ children: [
217
+ /* @__PURE__ */ jsxDEV2("span", {
218
+ className: "editorial-list-marker"
219
+ }, undefined, false, undefined, this),
220
+ /* @__PURE__ */ jsxDEV2("span", {
221
+ children: item
222
+ }, undefined, false, undefined, this)
223
+ ]
224
+ }, item, true, undefined, this))
225
+ }, undefined, false, undefined, this),
226
+ /* @__PURE__ */ jsxDEV2(Link2, {
227
+ href: pkg.cta.href,
228
+ className: pkg.cta.className,
229
+ children: pkg.cta.label
230
+ }, undefined, false, undefined, this)
801
231
  ]
802
- }, undefined, true, undefined, this)
232
+ }, pkg.name, true, undefined, this))
803
233
  }, undefined, false, undefined, this)
804
234
  }, undefined, false, undefined, this),
805
- /* @__PURE__ */ jsxDEV3("section", {
806
- className: "section-padding border-border bg-muted/20 border-b",
807
- children: /* @__PURE__ */ jsxDEV3("div", {
808
- className: "mx-auto max-w-4xl space-y-8",
235
+ /* @__PURE__ */ jsxDEV2("section", {
236
+ className: "editorial-section bg-striped",
237
+ children: /* @__PURE__ */ jsxDEV2("div", {
238
+ className: "editorial-shell grid gap-8 lg:grid-cols-[0.95fr_1.05fr]",
809
239
  children: [
810
- /* @__PURE__ */ jsxDEV3("div", {
811
- className: "space-y-4 text-center",
240
+ /* @__PURE__ */ jsxDEV2("div", {
241
+ className: "space-y-4",
812
242
  children: [
813
- /* @__PURE__ */ jsxDEV3("h2", {
814
- className: "text-3xl font-bold",
815
- children: "How ContractSpec pricing works now and next"
243
+ /* @__PURE__ */ jsxDEV2("p", {
244
+ className: "editorial-kicker",
245
+ children: "Design partner path"
816
246
  }, undefined, false, undefined, this),
817
- /* @__PURE__ */ jsxDEV3("p", {
818
- className: "text-muted-foreground mx-auto max-w-2xl text-lg",
819
- children: "We charge based on how much of your stack we help you maintain, not how many people click around in the UI."
247
+ /* @__PURE__ */ jsxDEV2("h2", {
248
+ className: "font-serif text-4xl tracking-[-0.04em] md:text-5xl",
249
+ children: "For teams already carrying real AI-native complexity."
250
+ }, undefined, false, undefined, this),
251
+ /* @__PURE__ */ jsxDEV2("p", {
252
+ className: "editorial-copy",
253
+ children: "The design partner path exists for teams that need the operating layer now and are willing to shape it with us. That is not “enterprise later” positioning. It is a practical way to learn from the hardest live workflows first."
254
+ }, undefined, false, undefined, this),
255
+ /* @__PURE__ */ jsxDEV2(Link2, {
256
+ href: "/design-partner",
257
+ className: "btn-primary",
258
+ children: "Apply as a design partner"
820
259
  }, undefined, false, undefined, this)
821
260
  ]
822
261
  }, undefined, true, undefined, this),
823
- /* @__PURE__ */ jsxDEV3("div", {
824
- className: "grid gap-6 md:grid-cols-3",
825
- children: [
826
- /* @__PURE__ */ jsxDEV3("div", {
827
- className: "card-subtle space-y-3 p-6",
828
- children: [
829
- /* @__PURE__ */ jsxDEV3("h3", {
830
- className: "font-bold",
831
- children: "Generous free tier"
832
- }, undefined, false, undefined, this),
833
- /* @__PURE__ */ jsxDEV3("p", {
834
- className: "text-muted-foreground text-sm",
835
- children: "One serious project, small spec, and enough monthly regenerations to ship something real."
836
- }, undefined, false, undefined, this)
837
- ]
838
- }, undefined, true, undefined, this),
839
- /* @__PURE__ */ jsxDEV3("div", {
840
- className: "card-subtle space-y-3 p-6",
841
- children: [
842
- /* @__PURE__ */ jsxDEV3("h3", {
843
- className: "font-bold",
844
- children: "Usage-based beyond free"
845
- }, undefined, false, undefined, this),
846
- /* @__PURE__ */ jsxDEV3("p", {
847
- className: "text-muted-foreground text-sm",
848
- children: "You pay for regenerations and AI agent actions, not per-seat. The more your system evolves via ContractSpec, the more you pay."
849
- }, undefined, false, undefined, this)
850
- ]
851
- }, undefined, true, undefined, this),
852
- /* @__PURE__ */ jsxDEV3("div", {
853
- className: "card-subtle space-y-3 p-6",
854
- children: [
855
- /* @__PURE__ */ jsxDEV3("h3", {
856
- className: "font-bold",
857
- children: "No lock-in"
858
- }, undefined, false, undefined, this),
859
- /* @__PURE__ */ jsxDEV3("p", {
860
- className: "text-muted-foreground text-sm",
861
- children: "Generated code is standard, readable, and exportable. If you leave, your app keeps running."
862
- }, undefined, false, undefined, this)
863
- ]
864
- }, undefined, true, undefined, this)
865
- ]
866
- }, undefined, true, undefined, this),
867
- /* @__PURE__ */ jsxDEV3("div", {
868
- className: "pt-6 text-center",
869
- children: /* @__PURE__ */ jsxDEV3("button", {
870
- onClick: () => setPricingModalOpen(true),
871
- className: "btn-ghost",
872
- children: "View our tentative pricing model"
873
- }, undefined, false, undefined, this)
874
- }, undefined, false, undefined, this)
262
+ /* @__PURE__ */ jsxDEV2(StudioSignupSection, {}, undefined, false, undefined, this)
875
263
  ]
876
264
  }, undefined, true, undefined, this)
877
265
  }, undefined, false, undefined, this),
878
- /* @__PURE__ */ jsxDEV3("section", {
879
- className: "section-padding border-border border-b",
880
- children: /* @__PURE__ */ jsxDEV3("div", {
881
- className: "mx-auto max-w-3xl space-y-8",
266
+ /* @__PURE__ */ jsxDEV2("section", {
267
+ className: "editorial-section",
268
+ children: /* @__PURE__ */ jsxDEV2("div", {
269
+ className: "editorial-shell grid gap-8 lg:grid-cols-[0.9fr_1.1fr]",
882
270
  children: [
883
- /* @__PURE__ */ jsxDEV3("h2", {
884
- className: "text-center text-3xl font-bold",
885
- children: "Frequently asked questions"
886
- }, undefined, false, undefined, this),
887
- /* @__PURE__ */ jsxDEV3("div", {
271
+ /* @__PURE__ */ jsxDEV2("div", {
888
272
  className: "space-y-4",
889
- children: faqs.map((faq, i) => /* @__PURE__ */ jsxDEV3("div", {
890
- className: "card-subtle overflow-hidden",
891
- children: [
892
- /* @__PURE__ */ jsxDEV3("button", {
893
- onClick: () => setOpenFaq(openFaq === i ? null : i),
894
- className: "flex w-full items-center justify-between p-6 text-left",
895
- children: [
896
- /* @__PURE__ */ jsxDEV3("span", {
897
- className: "font-medium",
898
- children: faq.question
899
- }, undefined, false, undefined, this),
900
- /* @__PURE__ */ jsxDEV3(ChevronDown, {
901
- size: 20,
902
- className: `text-muted-foreground transition-transform ${openFaq === i ? "rotate-180" : ""}`
903
- }, undefined, false, undefined, this)
904
- ]
905
- }, undefined, true, undefined, this),
906
- openFaq === i && /* @__PURE__ */ jsxDEV3("div", {
907
- className: "text-muted-foreground px-6 pb-6 text-sm",
908
- children: faq.answer
909
- }, undefined, false, undefined, this)
910
- ]
911
- }, i, true, undefined, this))
912
- }, undefined, false, undefined, this),
913
- /* @__PURE__ */ jsxDEV3("div", {
914
- className: "pt-4 text-center",
915
273
  children: [
916
- /* @__PURE__ */ jsxDEV3("p", {
917
- className: "text-muted-foreground mb-2 text-sm",
918
- children: "Still unsure?"
274
+ /* @__PURE__ */ jsxDEV2("p", {
275
+ className: "editorial-kicker",
276
+ children: "FAQ"
919
277
  }, undefined, false, undefined, this),
920
- /* @__PURE__ */ jsxDEV3(Link2, {
921
- href: "/contact",
922
- className: "text-sm font-medium text-violet-400 hover:text-violet-300",
923
- children: "Contact us →"
278
+ /* @__PURE__ */ jsxDEV2("h2", {
279
+ className: "font-serif text-4xl tracking-[-0.04em] md:text-5xl",
280
+ children: "Questions teams usually ask before they pick a side."
924
281
  }, undefined, false, undefined, this)
925
282
  ]
926
- }, undefined, true, undefined, this)
283
+ }, undefined, true, undefined, this),
284
+ /* @__PURE__ */ jsxDEV2("div", {
285
+ className: "space-y-3",
286
+ children: faqs.map((faq, index) => {
287
+ const isOpen = openFaq === index;
288
+ return /* @__PURE__ */ jsxDEV2("div", {
289
+ className: "editorial-panel p-5",
290
+ children: [
291
+ /* @__PURE__ */ jsxDEV2("button", {
292
+ type: "button",
293
+ onClick: () => setOpenFaq(isOpen ? null : index),
294
+ className: "flex w-full items-center justify-between gap-4 text-left",
295
+ children: [
296
+ /* @__PURE__ */ jsxDEV2("span", {
297
+ className: "font-medium text-lg",
298
+ children: faq.question
299
+ }, undefined, false, undefined, this),
300
+ /* @__PURE__ */ jsxDEV2(ChevronDown, {
301
+ className: `h-4 w-4 shrink-0 text-muted-foreground transition-transform ${isOpen ? "rotate-180" : ""}`
302
+ }, undefined, false, undefined, this)
303
+ ]
304
+ }, undefined, true, undefined, this),
305
+ isOpen ? /* @__PURE__ */ jsxDEV2("p", {
306
+ className: "mt-4 text-muted-foreground text-sm leading-7",
307
+ children: faq.answer
308
+ }, undefined, false, undefined, this) : null
309
+ ]
310
+ }, faq.question, true, undefined, this);
311
+ })
312
+ }, undefined, false, undefined, this)
927
313
  ]
928
314
  }, undefined, true, undefined, this)
929
- }, undefined, false, undefined, this),
930
- /* @__PURE__ */ jsxDEV3("section", {
931
- className: "section-padding hero-gradient",
932
- children: /* @__PURE__ */ jsxDEV3("div", {
933
- className: "mx-auto max-w-4xl",
934
- children: /* @__PURE__ */ jsxDEV3(StudioSignupSection, {}, undefined, false, undefined, this)
935
- }, undefined, false, undefined, this)
936
- }, undefined, false, undefined, this),
937
- /* @__PURE__ */ jsxDEV3(PricingThinkingModal, {
938
- open: pricingModalOpen,
939
- onOpenChange: setPricingModalOpen,
940
- onApplyClick: openStudio
941
315
  }, undefined, false, undefined, this)
942
316
  ]
943
317
  }, undefined, true, undefined, this);