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