@contractspec/bundle.marketing 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/.turbo/turbo-build$colon$types.log +1 -0
  2. package/.turbo/turbo-build.log +175 -0
  3. package/.turbo/turbo-lint.log +3 -0
  4. package/AGENTS.md +36 -0
  5. package/CHANGELOG.md +416 -0
  6. package/README.md +57 -0
  7. package/dist/components/marketing/ChangelogPage.d.ts +21 -0
  8. package/dist/components/marketing/ChangelogPage.d.ts.map +1 -0
  9. package/dist/components/marketing/ChangelogPage.js +65 -0
  10. package/dist/components/marketing/ChangelogPage.js.map +1 -0
  11. package/dist/components/marketing/CofounderPage.d.ts +7 -0
  12. package/dist/components/marketing/CofounderPage.d.ts.map +1 -0
  13. package/dist/components/marketing/CofounderPage.js +468 -0
  14. package/dist/components/marketing/CofounderPage.js.map +1 -0
  15. package/dist/components/marketing/ContactClient.d.ts +7 -0
  16. package/dist/components/marketing/ContactClient.d.ts.map +1 -0
  17. package/dist/components/marketing/ContactClient.js +158 -0
  18. package/dist/components/marketing/ContactClient.js.map +1 -0
  19. package/dist/components/marketing/ContributePage.d.ts +9 -0
  20. package/dist/components/marketing/ContributePage.d.ts.map +1 -0
  21. package/dist/components/marketing/ContributePage.js +362 -0
  22. package/dist/components/marketing/ContributePage.js.map +1 -0
  23. package/dist/components/marketing/DesignPartnerPage.d.ts +9 -0
  24. package/dist/components/marketing/DesignPartnerPage.d.ts.map +1 -0
  25. package/dist/components/marketing/DesignPartnerPage.js +215 -0
  26. package/dist/components/marketing/DesignPartnerPage.js.map +1 -0
  27. package/dist/components/marketing/LandingPage.d.ts +7 -0
  28. package/dist/components/marketing/LandingPage.d.ts.map +1 -0
  29. package/dist/components/marketing/LandingPage.js +38 -0
  30. package/dist/components/marketing/LandingPage.js.map +1 -0
  31. package/dist/components/marketing/PricingClient.d.ts +7 -0
  32. package/dist/components/marketing/PricingClient.d.ts.map +1 -0
  33. package/dist/components/marketing/PricingClient.js +521 -0
  34. package/dist/components/marketing/PricingClient.js.map +1 -0
  35. package/dist/components/marketing/ProductClientPage.d.ts +7 -0
  36. package/dist/components/marketing/ProductClientPage.d.ts.map +1 -0
  37. package/dist/components/marketing/ProductClientPage.js +460 -0
  38. package/dist/components/marketing/ProductClientPage.js.map +1 -0
  39. package/dist/components/marketing/index.d.ts +11 -0
  40. package/dist/components/marketing/index.js +12 -0
  41. package/dist/components/marketing/pricing-thinking-modal.d.ts +16 -0
  42. package/dist/components/marketing/pricing-thinking-modal.d.ts.map +1 -0
  43. package/dist/components/marketing/pricing-thinking-modal.js +202 -0
  44. package/dist/components/marketing/pricing-thinking-modal.js.map +1 -0
  45. package/dist/components/marketing/sections/AudienceSection.d.ts +7 -0
  46. package/dist/components/marketing/sections/AudienceSection.d.ts.map +1 -0
  47. package/dist/components/marketing/sections/AudienceSection.js +68 -0
  48. package/dist/components/marketing/sections/AudienceSection.js.map +1 -0
  49. package/dist/components/marketing/sections/CorePositioningSection.d.ts +7 -0
  50. package/dist/components/marketing/sections/CorePositioningSection.d.ts.map +1 -0
  51. package/dist/components/marketing/sections/CorePositioningSection.js +59 -0
  52. package/dist/components/marketing/sections/CorePositioningSection.js.map +1 -0
  53. package/dist/components/marketing/sections/CtaSection.d.ts +7 -0
  54. package/dist/components/marketing/sections/CtaSection.d.ts.map +1 -0
  55. package/dist/components/marketing/sections/CtaSection.js +54 -0
  56. package/dist/components/marketing/sections/CtaSection.js.map +1 -0
  57. package/dist/components/marketing/sections/DevelopersSection.d.ts +7 -0
  58. package/dist/components/marketing/sections/DevelopersSection.d.ts.map +1 -0
  59. package/dist/components/marketing/sections/DevelopersSection.js +45 -0
  60. package/dist/components/marketing/sections/DevelopersSection.js.map +1 -0
  61. package/dist/components/marketing/sections/FearsSection.d.ts +7 -0
  62. package/dist/components/marketing/sections/FearsSection.d.ts.map +1 -0
  63. package/dist/components/marketing/sections/FearsSection.js +48 -0
  64. package/dist/components/marketing/sections/FearsSection.js.map +1 -0
  65. package/dist/components/marketing/sections/HeroMarketingSection.d.ts +7 -0
  66. package/dist/components/marketing/sections/HeroMarketingSection.d.ts.map +1 -0
  67. package/dist/components/marketing/sections/HeroMarketingSection.js +77 -0
  68. package/dist/components/marketing/sections/HeroMarketingSection.js.map +1 -0
  69. package/dist/components/marketing/sections/IconGridSection.d.ts +45 -0
  70. package/dist/components/marketing/sections/IconGridSection.d.ts.map +1 -0
  71. package/dist/components/marketing/sections/IconGridSection.js +44 -0
  72. package/dist/components/marketing/sections/IconGridSection.js.map +1 -0
  73. package/dist/components/marketing/sections/OutputsSection.d.ts +7 -0
  74. package/dist/components/marketing/sections/OutputsSection.d.ts.map +1 -0
  75. package/dist/components/marketing/sections/OutputsSection.js +59 -0
  76. package/dist/components/marketing/sections/OutputsSection.js.map +1 -0
  77. package/dist/components/marketing/sections/ProblemSection.d.ts +7 -0
  78. package/dist/components/marketing/sections/ProblemSection.d.ts.map +1 -0
  79. package/dist/components/marketing/sections/ProblemSection.js +46 -0
  80. package/dist/components/marketing/sections/ProblemSection.js.map +1 -0
  81. package/dist/components/marketing/sections/SolutionSection.d.ts +7 -0
  82. package/dist/components/marketing/sections/SolutionSection.d.ts.map +1 -0
  83. package/dist/components/marketing/sections/SolutionSection.js +46 -0
  84. package/dist/components/marketing/sections/SolutionSection.js.map +1 -0
  85. package/dist/components/marketing/sections/StepsSection.d.ts +7 -0
  86. package/dist/components/marketing/sections/StepsSection.d.ts.map +1 -0
  87. package/dist/components/marketing/sections/StepsSection.js +52 -0
  88. package/dist/components/marketing/sections/StepsSection.js.map +1 -0
  89. package/dist/components/marketing/waitlist-section.d.ts +15 -0
  90. package/dist/components/marketing/waitlist-section.d.ts.map +1 -0
  91. package/dist/components/marketing/waitlist-section.js +578 -0
  92. package/dist/components/marketing/waitlist-section.js.map +1 -0
  93. package/dist/components/templates/TemplatesClientPage.d.ts +7 -0
  94. package/dist/components/templates/TemplatesClientPage.d.ts.map +1 -0
  95. package/dist/components/templates/TemplatesClientPage.js +625 -0
  96. package/dist/components/templates/TemplatesClientPage.js.map +1 -0
  97. package/dist/components/templates/TemplatesPage.d.ts +7 -0
  98. package/dist/components/templates/TemplatesPage.d.ts.map +1 -0
  99. package/dist/components/templates/TemplatesPage.js +125 -0
  100. package/dist/components/templates/TemplatesPage.js.map +1 -0
  101. package/dist/components/templates/TemplatesPreviewModal.d.ts +15 -0
  102. package/dist/components/templates/TemplatesPreviewModal.d.ts.map +1 -0
  103. package/dist/components/templates/TemplatesPreviewModal.js +137 -0
  104. package/dist/components/templates/TemplatesPreviewModal.js.map +1 -0
  105. package/dist/components/templates/index.d.ts +4 -0
  106. package/dist/components/templates/index.js +5 -0
  107. package/dist/index.d.ts +29 -0
  108. package/dist/index.js +28 -0
  109. package/dist/libs/email/client.d.ts +15 -0
  110. package/dist/libs/email/client.d.ts.map +1 -0
  111. package/dist/libs/email/client.js +113 -0
  112. package/dist/libs/email/client.js.map +1 -0
  113. package/dist/libs/email/contact.d.ts +7 -0
  114. package/dist/libs/email/contact.d.ts.map +1 -0
  115. package/dist/libs/email/contact.js +71 -0
  116. package/dist/libs/email/contact.js.map +1 -0
  117. package/dist/libs/email/newsletter.d.ts +7 -0
  118. package/dist/libs/email/newsletter.d.ts.map +1 -0
  119. package/dist/libs/email/newsletter.js +95 -0
  120. package/dist/libs/email/newsletter.js.map +1 -0
  121. package/dist/libs/email/types.d.ts +53 -0
  122. package/dist/libs/email/types.d.ts.map +1 -0
  123. package/dist/libs/email/types.js +1 -0
  124. package/dist/libs/email/utils.d.ts +6 -0
  125. package/dist/libs/email/utils.d.ts.map +1 -0
  126. package/dist/libs/email/utils.js +7 -0
  127. package/dist/libs/email/utils.js.map +1 -0
  128. package/dist/libs/email/waitlist-application.d.ts +7 -0
  129. package/dist/libs/email/waitlist-application.d.ts.map +1 -0
  130. package/dist/libs/email/waitlist-application.js +170 -0
  131. package/dist/libs/email/waitlist-application.js.map +1 -0
  132. package/dist/libs/email/waitlist.d.ts +7 -0
  133. package/dist/libs/email/waitlist.d.ts.map +1 -0
  134. package/dist/libs/email/waitlist.js +105 -0
  135. package/dist/libs/email/waitlist.js.map +1 -0
  136. package/dist/libs/pricing-examples.d.ts +22 -0
  137. package/dist/libs/pricing-examples.d.ts.map +1 -0
  138. package/dist/libs/pricing-examples.js +21 -0
  139. package/dist/libs/pricing-examples.js.map +1 -0
  140. package/dist/registry/engine.d.ts +17 -0
  141. package/dist/registry/engine.d.ts.map +1 -0
  142. package/dist/registry/engine.js +24 -0
  143. package/dist/registry/engine.js.map +1 -0
  144. package/dist/registry/factory.d.ts +64 -0
  145. package/dist/registry/factory.d.ts.map +1 -0
  146. package/dist/registry/factory.js +61 -0
  147. package/dist/registry/factory.js.map +1 -0
  148. package/dist/registry/index.d.ts +8 -0
  149. package/dist/registry/index.js +8 -0
  150. package/dist/registry/registry-docs.d.ts +15 -0
  151. package/dist/registry/registry-docs.d.ts.map +1 -0
  152. package/dist/registry/registry-docs.js +305 -0
  153. package/dist/registry/registry-docs.js.map +1 -0
  154. package/dist/registry/registry-landing.d.ts +19 -0
  155. package/dist/registry/registry-landing.d.ts.map +1 -0
  156. package/dist/registry/registry-landing.js +95 -0
  157. package/dist/registry/registry-landing.js.map +1 -0
  158. package/dist/registry/registry.d.ts +30 -0
  159. package/dist/registry/registry.d.ts.map +1 -0
  160. package/dist/registry/registry.js +61 -0
  161. package/dist/registry/registry.js.map +1 -0
  162. package/dist/registry/types.d.ts +19 -0
  163. package/dist/registry/types.d.ts.map +1 -0
  164. package/dist/registry/types.js +0 -0
  165. package/dist/registry/utils.d.ts +31 -0
  166. package/dist/registry/utils.d.ts.map +1 -0
  167. package/dist/registry/utils.js +54 -0
  168. package/dist/registry/utils.js.map +1 -0
  169. package/package.json +151 -0
  170. package/src/components/marketing/ChangelogPage.tsx +110 -0
  171. package/src/components/marketing/CofounderPage.tsx +409 -0
  172. package/src/components/marketing/ContactClient.tsx +174 -0
  173. package/src/components/marketing/ContributePage.tsx +319 -0
  174. package/src/components/marketing/DesignPartnerPage.tsx +181 -0
  175. package/src/components/marketing/LandingPage.tsx +30 -0
  176. package/src/components/marketing/PricingClient.tsx +446 -0
  177. package/src/components/marketing/ProductClientPage.tsx +391 -0
  178. package/src/components/marketing/index.ts +10 -0
  179. package/src/components/marketing/pricing-thinking-modal.tsx +224 -0
  180. package/src/components/marketing/sections/AudienceSection.tsx +66 -0
  181. package/src/components/marketing/sections/CorePositioningSection.tsx +44 -0
  182. package/src/components/marketing/sections/CtaSection.tsx +57 -0
  183. package/src/components/marketing/sections/DevelopersSection.tsx +38 -0
  184. package/src/components/marketing/sections/FearsSection.tsx +45 -0
  185. package/src/components/marketing/sections/HeroMarketingSection.tsx +73 -0
  186. package/src/components/marketing/sections/IconGridSection.tsx +91 -0
  187. package/src/components/marketing/sections/OutputsSection.tsx +59 -0
  188. package/src/components/marketing/sections/ProblemSection.tsx +47 -0
  189. package/src/components/marketing/sections/SolutionSection.tsx +47 -0
  190. package/src/components/marketing/sections/StepsSection.tsx +55 -0
  191. package/src/components/marketing/waitlist-section.tsx +606 -0
  192. package/src/components/templates/TemplatesClientPage.tsx +711 -0
  193. package/src/components/templates/TemplatesPage.tsx +129 -0
  194. package/src/components/templates/TemplatesPreviewModal.tsx +260 -0
  195. package/src/components/templates/index.ts +3 -0
  196. package/src/index.ts +15 -0
  197. package/src/libs/email/client.test.ts +107 -0
  198. package/src/libs/email/client.ts +146 -0
  199. package/src/libs/email/contact.ts +80 -0
  200. package/src/libs/email/newsletter.ts +108 -0
  201. package/src/libs/email/types.ts +59 -0
  202. package/src/libs/email/utils.ts +8 -0
  203. package/src/libs/email/waitlist-application.ts +192 -0
  204. package/src/libs/email/waitlist.ts +118 -0
  205. package/src/libs/pricing-examples.ts +19 -0
  206. package/src/registry/engine.ts +38 -0
  207. package/src/registry/factory.ts +110 -0
  208. package/src/registry/index.ts +7 -0
  209. package/src/registry/registry-docs.ts +843 -0
  210. package/src/registry/registry-landing.ts +118 -0
  211. package/src/registry/registry.ts +85 -0
  212. package/src/registry/types.ts +17 -0
  213. package/src/registry/utils.ts +99 -0
  214. package/tsconfig.json +13 -0
  215. package/tsconfig.tsbuildinfo +1 -0
  216. package/tsdown.config.js +10 -0
package/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # @contractspec/bundle.marketing
2
+
3
+ Marketing-focused bundle providing documentation pages, email templates, and landing page components.
4
+
5
+ ## Overview
6
+
7
+ This bundle provides components specifically for marketing and documentation:
8
+ - Documentation pages (same as library, for standalone use)
9
+ - Marketing landing page sections
10
+ - Email templates (waitlist, newsletter, contact)
11
+ - Pricing examples and comparisons
12
+ - Template preview components
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ bun add @contractspec/bundle.marketing
18
+ ```
19
+
20
+ ## Exports
21
+
22
+ ### Documentation
23
+ - `components/docs/*` — Full documentation pages by category
24
+ - `/advanced` — MCP, overlays, renderers, telemetry
25
+ - `/architecture` — App config, multi-tenancy, integrations
26
+ - `/comparison` — Platform comparisons
27
+ - `/getting-started` — CLI, installation, tutorials
28
+ - `/integrations` — Third-party service integrations
29
+ - `/knowledge` — Knowledge management
30
+ - `/libraries` — Library documentation
31
+ - `/safety` — Security, auditing, migrations
32
+ - `/specs` — Spec types and policies
33
+ - `/studio` — Studio features
34
+
35
+ ### Marketing
36
+ - `components/marketing/*` — Landing page sections
37
+ - `HeroMarketingSection`, `ProblemSection`, `SolutionSection`
38
+ - `AudienceSection`, `DevelopersSection`, `FearsSection`
39
+ - `PricingClient`, `ContactClient`, `ChangelogPage`
40
+
41
+ ### Templates
42
+ - `components/templates/*` — Template preview and gallery
43
+
44
+ ### Email
45
+ - `libs/email/*` — Email utilities and templates
46
+
47
+ ## Dependencies
48
+
49
+ - `@contractspec/lib.design-system` — Design tokens
50
+ - `@contractspec/lib.ui-kit-web` — UI components
51
+ - `@contractspec/bundle.library` — Shared library components
52
+ - `@contractspec/lib.email` — Email service
53
+
54
+ ## Related Packages
55
+
56
+ - [`@contractspec/app.web-landing`](../../apps/web-landing/README.md) — Marketing site
57
+ - [`@contractspec/bundle.library`](../library/README.md) — Library bundle
@@ -0,0 +1,21 @@
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+
3
+ //#region src/components/marketing/ChangelogPage.d.ts
4
+ interface ChangelogEntry {
5
+ version: string;
6
+ date: string;
7
+ isBreaking: boolean;
8
+ packages: {
9
+ name: string;
10
+ changes: string[];
11
+ }[];
12
+ }
13
+ interface ChangelogPageProps {
14
+ entries: ChangelogEntry[];
15
+ }
16
+ declare function ChangelogPage({
17
+ entries
18
+ }: ChangelogPageProps): react_jsx_runtime0.JSX.Element;
19
+ //#endregion
20
+ export { ChangelogEntry, ChangelogPage };
21
+ //# sourceMappingURL=ChangelogPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogPage.d.ts","names":[],"sources":["../../../src/components/marketing/ChangelogPage.tsx"],"mappings":";;;UA4BiB,cAAA;EACf,OAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;IACE,IAAA;IACA,OAAA;EAAA;AAAA;AAAA,UAIM,kBAAA;EACR,OAAA,EAAS,cAAA;AAAA;AAAA,iBAGK,aAAA,CAAA;EAAgB;AAAA,GAAW,kBAAA,GAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,65 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+
3
+ //#region src/components/marketing/ChangelogPage.tsx
4
+ function ChangelogPage({ entries }) {
5
+ return /* @__PURE__ */ jsxs("main", { children: [/* @__PURE__ */ jsx("section", {
6
+ className: "section-padding hero-gradient border-border relative border-b",
7
+ children: /* @__PURE__ */ jsxs("div", {
8
+ className: "mx-auto max-w-4xl space-y-6 text-center",
9
+ children: [/* @__PURE__ */ jsx("h1", {
10
+ className: "text-5xl leading-tight font-bold md:text-6xl",
11
+ children: "Changelog"
12
+ }), /* @__PURE__ */ jsx("p", {
13
+ className: "text-muted-foreground text-lg",
14
+ children: "Latest releases and improvements to ContractSpec."
15
+ })]
16
+ })
17
+ }), /* @__PURE__ */ jsx("section", {
18
+ className: "section-padding",
19
+ children: /* @__PURE__ */ jsx("div", {
20
+ className: "mx-auto max-w-3xl space-y-8",
21
+ children: entries.map((entry, i) => /* @__PURE__ */ jsxs("div", {
22
+ className: "card-subtle flex flex-col gap-6 p-8 md:flex-row md:items-start",
23
+ children: [/* @__PURE__ */ jsx("div", {
24
+ className: "md:w-48 md:flex-shrink-0",
25
+ children: /* @__PURE__ */ jsxs("div", {
26
+ className: "sticky top-24",
27
+ children: [
28
+ /* @__PURE__ */ jsx("h3", {
29
+ className: "text-2xl font-bold tracking-tight",
30
+ children: entry.version
31
+ }),
32
+ /* @__PURE__ */ jsx("time", {
33
+ className: "text-muted-foreground mt-1 block text-sm font-medium",
34
+ children: entry.date
35
+ }),
36
+ entry.isBreaking && /* @__PURE__ */ jsx("span", {
37
+ className: "mt-2 inline-flex items-center rounded-full border border-red-500/50 bg-red-500/10 px-2.5 py-0.5 text-xs font-semibold text-red-500",
38
+ children: "Breaking Change"
39
+ })
40
+ ]
41
+ })
42
+ }), /* @__PURE__ */ jsx("div", {
43
+ className: "flex-1 space-y-6",
44
+ children: entry.packages.map((pkg, j) => /* @__PURE__ */ jsxs("div", {
45
+ className: "space-y-3",
46
+ children: [/* @__PURE__ */ jsx("h4", {
47
+ className: "font-mono text-sm font-semibold text-violet-400",
48
+ children: pkg.name
49
+ }), /* @__PURE__ */ jsx("ul", {
50
+ className: "space-y-2",
51
+ children: pkg.changes.map((change, k) => /* @__PURE__ */ jsxs("li", {
52
+ className: "text-muted-foreground flex items-start gap-3 text-base leading-relaxed",
53
+ children: [/* @__PURE__ */ jsx("span", { className: "mt-1.5 h-1.5 w-1.5 flex-shrink-0 rounded-full bg-violet-500/50" }), /* @__PURE__ */ jsx("span", { children: change })]
54
+ }, k))
55
+ })]
56
+ }, j))
57
+ })]
58
+ }, i))
59
+ })
60
+ })] });
61
+ }
62
+
63
+ //#endregion
64
+ export { ChangelogPage };
65
+ //# sourceMappingURL=ChangelogPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangelogPage.js","names":[],"sources":["../../../src/components/marketing/ChangelogPage.tsx"],"sourcesContent":["// export const metadata: Metadata = {\n// title: 'Changelog: ContractSpec',\n// description:\n// 'Updates and releases for ContractSpec. New features, improvements, and breaking changes for the spec-first compiler.',\n// keywords: [\n// 'changelog',\n// 'updates',\n// 'releases',\n// 'features',\n// 'spec-first compiler',\n// 'AI code stabilization',\n// ],\n// openGraph: {\n// title: 'Changelog: ContractSpec',\n// description: 'Latest releases and improvements to ContractSpec.',\n// url: 'https://contractspec.io/changelog',\n// type: 'website',\n// },\n// alternates: {\n// canonical: 'https://contractspec.io/changelog',\n// },\n// };\n\n// export const metadata: Metadata = {\n// title: 'Changelog: ContractSpec',\n// ...\n// };\n\nexport interface ChangelogEntry {\n version: string;\n date: string;\n isBreaking: boolean;\n packages: {\n name: string;\n changes: string[];\n }[];\n}\n\ninterface ChangelogPageProps {\n entries: ChangelogEntry[];\n}\n\nexport function ChangelogPage({ entries }: ChangelogPageProps) {\n return (\n <main>\n {/* Hero */}\n <section className=\"section-padding hero-gradient border-border relative border-b\">\n <div className=\"mx-auto max-w-4xl space-y-6 text-center\">\n <h1 className=\"text-5xl leading-tight font-bold md:text-6xl\">\n Changelog\n </h1>\n <p className=\"text-muted-foreground text-lg\">\n Latest releases and improvements to ContractSpec.\n </p>\n </div>\n </section>\n\n {/* Timeline */}\n <section className=\"section-padding\">\n <div className=\"mx-auto max-w-3xl space-y-8\">\n {entries.map((entry, i) => (\n <div\n key={i}\n className=\"card-subtle flex flex-col gap-6 p-8 md:flex-row md:items-start\"\n >\n {/* Left: Version & Date */}\n <div className=\"md:w-48 md:flex-shrink-0\">\n <div className=\"sticky top-24\">\n <h3 className=\"text-2xl font-bold tracking-tight\">\n {entry.version}\n </h3>\n <time className=\"text-muted-foreground mt-1 block text-sm font-medium\">\n {entry.date}\n </time>\n {entry.isBreaking && (\n <span className=\"mt-2 inline-flex items-center rounded-full border border-red-500/50 bg-red-500/10 px-2.5 py-0.5 text-xs font-semibold text-red-500\">\n Breaking Change\n </span>\n )}\n </div>\n </div>\n\n {/* Right: Changes per package */}\n <div className=\"flex-1 space-y-6\">\n {entry.packages.map((pkg, j) => (\n <div key={j} className=\"space-y-3\">\n <h4 className=\"font-mono text-sm font-semibold text-violet-400\">\n {pkg.name}\n </h4>\n <ul className=\"space-y-2\">\n {pkg.changes.map((change, k) => (\n <li\n key={k}\n className=\"text-muted-foreground flex items-start gap-3 text-base leading-relaxed\"\n >\n <span className=\"mt-1.5 h-1.5 w-1.5 flex-shrink-0 rounded-full bg-violet-500/50\" />\n <span>{change}</span>\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n </section>\n </main>\n );\n}\n"],"mappings":";;;AA0CA,SAAgB,cAAc,EAAE,WAA+B;AAC7D,QACE,qBAAC,qBAEC,oBAAC;EAAQ,WAAU;YACjB,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAG,WAAU;cAA+C;KAExD,EACL,oBAAC;IAAE,WAAU;cAAgC;KAEzC;IACA;GACE,EAGV,oBAAC;EAAQ,WAAU;YACjB,oBAAC;GAAI,WAAU;aACZ,QAAQ,KAAK,OAAO,MACnB,qBAAC;IAEC,WAAU;eAGV,oBAAC;KAAI,WAAU;eACb,qBAAC;MAAI,WAAU;;OACb,oBAAC;QAAG,WAAU;kBACX,MAAM;SACJ;OACL,oBAAC;QAAK,WAAU;kBACb,MAAM;SACF;OACN,MAAM,cACL,oBAAC;QAAK,WAAU;kBAAqI;SAE9I;;OAEL;MACF,EAGN,oBAAC;KAAI,WAAU;eACZ,MAAM,SAAS,KAAK,KAAK,MACxB,qBAAC;MAAY,WAAU;iBACrB,oBAAC;OAAG,WAAU;iBACX,IAAI;QACF,EACL,oBAAC;OAAG,WAAU;iBACX,IAAI,QAAQ,KAAK,QAAQ,MACxB,qBAAC;QAEC,WAAU;mBAEV,oBAAC,UAAK,WAAU,mEAAmE,EACnF,oBAAC,oBAAM,SAAc;UAJhB,EAKF,CACL;QACC;QAdG,EAeJ,CACN;MACE;MAxCD,EAyCD,CACN;IACE;GACE,IACL"}
@@ -0,0 +1,7 @@
1
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
2
+
3
+ //#region src/components/marketing/CofounderPage.d.ts
4
+ declare function CofounderPage(): react_jsx_runtime0.JSX.Element;
5
+ //#endregion
6
+ export { CofounderPage };
7
+ //# sourceMappingURL=CofounderPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CofounderPage.d.ts","names":[],"sources":["../../../src/components/marketing/CofounderPage.tsx"],"mappings":";;;iBA2YgB,aAAA,CAAA,GAAa,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -0,0 +1,468 @@
1
+ 'use client';
2
+
3
+ import { Box, HStack, VStack } from "@contractspec/lib.ui-kit-web/ui/stack";
4
+ import { ButtonLink, MarketingSection } from "@contractspec/lib.design-system";
5
+ import { H1, H2, H3, Lead, Muted, Small } from "@contractspec/lib.ui-kit-web/ui/typography";
6
+ import { Check, Clock, MapPin, MessageSquare, Percent, Rocket, Target, Users, X } from "lucide-react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+
9
+ //#region src/components/marketing/CofounderPage.tsx
10
+ const mailtoLink = `mailto:tboutron@contractspec.io?subject=${encodeURIComponent("Co-founder application: ContractSpec")}&body=${encodeURIComponent(`Hi Theo,
11
+
12
+ I am reaching out about co-founding ContractSpec.
13
+
14
+ LinkedIn: [your link]
15
+ Proof of work #1: [link]
16
+ Proof of work #2: [link]
17
+
18
+ Why ContractSpec:
19
+ [your answer]
20
+
21
+ What I would own in the first 90 days:
22
+ [your answer]
23
+ `)}`;
24
+ function HeroSection() {
25
+ return /* @__PURE__ */ jsx(MarketingSection, {
26
+ tone: "gradient",
27
+ padding: "spacious",
28
+ align: "center",
29
+ children: /* @__PURE__ */ jsxs(VStack, {
30
+ gap: "lg",
31
+ align: "center",
32
+ className: "text-center",
33
+ children: [
34
+ /* @__PURE__ */ jsx(H1, {
35
+ className: "text-4xl leading-tight font-bold text-balance md:text-5xl",
36
+ children: "Co-founder wanted"
37
+ }),
38
+ /* @__PURE__ */ jsx(Lead, {
39
+ className: "text-muted-foreground max-w-2xl text-lg text-balance md:text-xl",
40
+ children: "ContractSpec is a contract-first compiler for AI-generated code. Define specs, enforce policies, regenerate safely. Pre-PMF. Building in public."
41
+ }),
42
+ /* @__PURE__ */ jsxs(HStack, {
43
+ gap: "md",
44
+ justify: "center",
45
+ wrap: "wrap",
46
+ className: "pt-2",
47
+ children: [/* @__PURE__ */ jsx(ButtonLink, {
48
+ href: mailtoLink,
49
+ children: "Talk about co-founding"
50
+ }), /* @__PURE__ */ jsx(ButtonLink, {
51
+ variant: "ghost",
52
+ href: "/contact",
53
+ children: "Become a design partner"
54
+ })]
55
+ })
56
+ ]
57
+ })
58
+ });
59
+ }
60
+ function WhatExistsSection() {
61
+ return /* @__PURE__ */ jsx(MarketingSection, {
62
+ padding: "comfortable",
63
+ align: "center",
64
+ maxWidth: "lg",
65
+ children: /* @__PURE__ */ jsxs(VStack, {
66
+ gap: "lg",
67
+ children: [/* @__PURE__ */ jsx(H2, {
68
+ className: "text-3xl font-bold",
69
+ children: "What exists today"
70
+ }), /* @__PURE__ */ jsxs("div", {
71
+ className: "grid w-full gap-8 md:grid-cols-2",
72
+ children: [/* @__PURE__ */ jsxs(VStack, {
73
+ gap: "sm",
74
+ align: "start",
75
+ children: [/* @__PURE__ */ jsx(H3, {
76
+ className: "text-lg font-semibold text-emerald-400",
77
+ children: "Real now"
78
+ }), /* @__PURE__ */ jsx("ul", {
79
+ className: "space-y-2",
80
+ children: [
81
+ "ContractSpec Core: open-source spec compiler",
82
+ "Working CLI and TypeScript runtime",
83
+ "Design partner pipeline open",
84
+ "Solo founder, bootstrapped"
85
+ ].map((item) => /* @__PURE__ */ jsxs("li", {
86
+ className: "flex items-start gap-2",
87
+ children: [/* @__PURE__ */ jsx(Check, {
88
+ size: 16,
89
+ className: "mt-1 shrink-0 text-emerald-400"
90
+ }), /* @__PURE__ */ jsx(Small, { children: item })]
91
+ }, item))
92
+ })]
93
+ }), /* @__PURE__ */ jsxs(VStack, {
94
+ gap: "sm",
95
+ align: "start",
96
+ children: [/* @__PURE__ */ jsx(H3, {
97
+ className: "text-lg font-semibold text-blue-400",
98
+ children: "Planned"
99
+ }), /* @__PURE__ */ jsx("ul", {
100
+ className: "space-y-2",
101
+ children: [
102
+ "Visual studio for specs",
103
+ "Auto-evolution engine",
104
+ "Multi-tenant SaaS",
105
+ "Integration marketplace"
106
+ ].map((item) => /* @__PURE__ */ jsxs("li", {
107
+ className: "flex items-start gap-2",
108
+ children: [/* @__PURE__ */ jsx(Target, {
109
+ size: 16,
110
+ className: "mt-1 shrink-0 text-blue-400"
111
+ }), /* @__PURE__ */ jsx(Small, { children: item })]
112
+ }, item))
113
+ })]
114
+ })]
115
+ })]
116
+ })
117
+ });
118
+ }
119
+ function RoleSection() {
120
+ return /* @__PURE__ */ jsx(MarketingSection, {
121
+ padding: "comfortable",
122
+ align: "center",
123
+ maxWidth: "lg",
124
+ children: /* @__PURE__ */ jsxs(VStack, {
125
+ gap: "lg",
126
+ children: [
127
+ /* @__PURE__ */ jsx(H2, {
128
+ className: "text-3xl font-bold",
129
+ children: "The role"
130
+ }),
131
+ /* @__PURE__ */ jsxs(VStack, {
132
+ gap: "md",
133
+ align: "start",
134
+ className: "w-full",
135
+ children: [
136
+ /* @__PURE__ */ jsx(H3, {
137
+ className: "text-xl font-semibold",
138
+ children: "Option A: GTM / Sales / Partnerships"
139
+ }),
140
+ /* @__PURE__ */ jsx(Muted, { children: "Weekly deliverables, not vague traits:" }),
141
+ /* @__PURE__ */ jsx("ul", {
142
+ className: "space-y-2",
143
+ children: [
144
+ "Run 5+ sales conversations per week",
145
+ "Own the design partner pipeline end-to-end",
146
+ "Write positioning copy that ships",
147
+ "Build and maintain partnership channels",
148
+ "Turn user feedback into roadmap signal"
149
+ ].map((item) => /* @__PURE__ */ jsxs("li", {
150
+ className: "flex items-start gap-2",
151
+ children: [/* @__PURE__ */ jsx(Rocket, {
152
+ size: 16,
153
+ className: "mt-1 shrink-0 text-amber-400"
154
+ }), /* @__PURE__ */ jsx(Small, { children: item })]
155
+ }, item))
156
+ })
157
+ ]
158
+ }),
159
+ /* @__PURE__ */ jsxs(VStack, {
160
+ gap: "md",
161
+ align: "start",
162
+ className: "w-full pt-4",
163
+ children: [
164
+ /* @__PURE__ */ jsx(H3, {
165
+ className: "text-xl font-semibold",
166
+ children: "Option B: Product / Design"
167
+ }),
168
+ /* @__PURE__ */ jsx(Muted, { children: "If this is your strength:" }),
169
+ /* @__PURE__ */ jsx("ul", {
170
+ className: "space-y-2",
171
+ children: [
172
+ "Ship UI/UX improvements weekly",
173
+ "Define specs based on user research",
174
+ "Own the studio experience",
175
+ "Collaborate on architecture decisions"
176
+ ].map((item) => /* @__PURE__ */ jsxs("li", {
177
+ className: "flex items-start gap-2",
178
+ children: [/* @__PURE__ */ jsx(Rocket, {
179
+ size: 16,
180
+ className: "mt-1 shrink-0 text-purple-400"
181
+ }), /* @__PURE__ */ jsx(Small, { children: item })]
182
+ }, item))
183
+ })
184
+ ]
185
+ })
186
+ ]
187
+ })
188
+ });
189
+ }
190
+ function IdealCofounderSection() {
191
+ return /* @__PURE__ */ jsx(MarketingSection, {
192
+ padding: "comfortable",
193
+ align: "center",
194
+ maxWidth: "lg",
195
+ children: /* @__PURE__ */ jsxs(VStack, {
196
+ gap: "lg",
197
+ children: [
198
+ /* @__PURE__ */ jsx(H2, {
199
+ className: "text-3xl font-bold",
200
+ children: "The ideal co-founder"
201
+ }),
202
+ /* @__PURE__ */ jsx("ul", {
203
+ className: "space-y-3",
204
+ children: [
205
+ "You have shipped products people paid for — links or it didn't happen",
206
+ "You have sold something (product, consulting, yourself)",
207
+ "You write clearly and fast — emails, docs, copy",
208
+ "You have taste: you know good UX when you see it",
209
+ "You can work 6+ months without a salary",
210
+ "You are allergic to meetings that could be docs",
211
+ "You have built in public or contributed to open source",
212
+ "You are based in Europe or overlap significantly with CET"
213
+ ].map((item) => /* @__PURE__ */ jsxs("li", {
214
+ className: "flex items-start gap-2",
215
+ children: [/* @__PURE__ */ jsx(Check, {
216
+ size: 16,
217
+ className: "mt-1 shrink-0 text-emerald-400"
218
+ }), /* @__PURE__ */ jsx(Small, { children: item })]
219
+ }, item))
220
+ }),
221
+ /* @__PURE__ */ jsx(Box, {
222
+ className: "border-border mt-4 rounded-lg border p-4",
223
+ children: /* @__PURE__ */ jsxs(VStack, {
224
+ gap: "sm",
225
+ align: "start",
226
+ children: [/* @__PURE__ */ jsx(H3, {
227
+ className: "text-lg font-semibold",
228
+ children: "Proof of work examples"
229
+ }), /* @__PURE__ */ jsx(Muted, {
230
+ className: "text-sm",
231
+ children: "GitHub profile, shipped product, writing (blog/Twitter/essays), revenue screenshot, open-source contributions, or anything that shows you execute."
232
+ })]
233
+ })
234
+ })
235
+ ]
236
+ })
237
+ });
238
+ }
239
+ function WhatYouGetSection() {
240
+ return /* @__PURE__ */ jsx(MarketingSection, {
241
+ padding: "comfortable",
242
+ align: "center",
243
+ maxWidth: "lg",
244
+ children: /* @__PURE__ */ jsxs(VStack, {
245
+ gap: "lg",
246
+ children: [
247
+ /* @__PURE__ */ jsx(H2, {
248
+ className: "text-3xl font-bold",
249
+ children: "What you get"
250
+ }),
251
+ /* @__PURE__ */ jsx("div", {
252
+ className: "grid w-full gap-6 md:grid-cols-3",
253
+ children: [
254
+ {
255
+ icon: /* @__PURE__ */ jsx(Percent, {
256
+ size: 20,
257
+ className: "text-emerald-400"
258
+ }),
259
+ title: "Equity-first",
260
+ desc: "Meaningful co-founder equity. Salary is minimal/zero until revenue covers it."
261
+ },
262
+ {
263
+ icon: /* @__PURE__ */ jsx(Users, {
264
+ size: 20,
265
+ className: "text-blue-400"
266
+ }),
267
+ title: "Real ownership",
268
+ desc: "You own your domain. No permission-seeking. Ship and iterate."
269
+ },
270
+ {
271
+ icon: /* @__PURE__ */ jsx(MessageSquare, {
272
+ size: 20,
273
+ className: "text-amber-400"
274
+ }),
275
+ title: "Written-first decisions",
276
+ desc: "We default to async, docs, and fast decisions. Meetings are last resort."
277
+ }
278
+ ].map((b) => /* @__PURE__ */ jsxs(VStack, {
279
+ gap: "sm",
280
+ align: "start",
281
+ className: "border-border rounded-lg border p-4",
282
+ children: [
283
+ b.icon,
284
+ /* @__PURE__ */ jsx(H3, {
285
+ className: "text-lg font-semibold",
286
+ children: b.title
287
+ }),
288
+ /* @__PURE__ */ jsx(Muted, {
289
+ className: "text-sm",
290
+ children: b.desc
291
+ })
292
+ ]
293
+ }, b.title))
294
+ }),
295
+ /* @__PURE__ */ jsxs(VStack, {
296
+ gap: "sm",
297
+ align: "start",
298
+ className: "w-full pt-4",
299
+ children: [/* @__PURE__ */ jsx(H3, {
300
+ className: "text-lg font-semibold",
301
+ children: "Our values"
302
+ }), /* @__PURE__ */ jsx(HStack, {
303
+ gap: "sm",
304
+ wrap: "wrap",
305
+ children: [
306
+ "Contracts over conventions",
307
+ "Clarity over cleverness",
308
+ "Safety over speed (in code)",
309
+ "Leverage over labor"
310
+ ].map((v) => /* @__PURE__ */ jsx(Box, {
311
+ className: "border-border rounded-full border px-3 py-1 text-sm",
312
+ children: v
313
+ }, v))
314
+ })]
315
+ })
316
+ ]
317
+ })
318
+ });
319
+ }
320
+ function RedFlagsSection() {
321
+ return /* @__PURE__ */ jsx(MarketingSection, {
322
+ padding: "comfortable",
323
+ align: "center",
324
+ maxWidth: "lg",
325
+ children: /* @__PURE__ */ jsxs(VStack, {
326
+ gap: "lg",
327
+ children: [
328
+ /* @__PURE__ */ jsx(H2, {
329
+ className: "text-3xl font-bold",
330
+ children: "Non-negotiables / red flags"
331
+ }),
332
+ /* @__PURE__ */ jsx(Muted, { children: "If any of these apply, this is not the right fit:" }),
333
+ /* @__PURE__ */ jsx("ul", {
334
+ className: "space-y-2",
335
+ children: [
336
+ "Needs a big salary now",
337
+ "Hates selling or talking to users",
338
+ "Vague about past execution",
339
+ "Wants to \"advise\" instead of build",
340
+ "Needs a big team to feel productive",
341
+ "Cannot write clearly"
342
+ ].map((item) => /* @__PURE__ */ jsxs("li", {
343
+ className: "flex items-start gap-2",
344
+ children: [/* @__PURE__ */ jsx(X, {
345
+ size: 16,
346
+ className: "mt-1 shrink-0 text-red-400"
347
+ }), /* @__PURE__ */ jsx(Small, { children: item })]
348
+ }, item))
349
+ })
350
+ ]
351
+ })
352
+ });
353
+ }
354
+ function FAQSection() {
355
+ return /* @__PURE__ */ jsx(MarketingSection, {
356
+ padding: "comfortable",
357
+ align: "center",
358
+ maxWidth: "lg",
359
+ children: /* @__PURE__ */ jsxs(VStack, {
360
+ gap: "lg",
361
+ children: [/* @__PURE__ */ jsx(H2, {
362
+ className: "text-3xl font-bold",
363
+ children: "FAQ"
364
+ }), /* @__PURE__ */ jsx(VStack, {
365
+ gap: "md",
366
+ className: "w-full",
367
+ children: [
368
+ {
369
+ icon: /* @__PURE__ */ jsx(Users, { size: 18 }),
370
+ q: "Why co-founder instead of hiring?",
371
+ a: "I need a partner who thinks like an owner, not an employee. Someone who will stay when things get hard and share in the upside when they don't."
372
+ },
373
+ {
374
+ icon: /* @__PURE__ */ jsx(Clock, { size: 18 }),
375
+ q: "What is the timeline to revenue?",
376
+ a: "Design partners are converting now. Goal: paying customers in 2025. But this is startup life — timelines are best guesses."
377
+ },
378
+ {
379
+ icon: /* @__PURE__ */ jsx(MapPin, { size: 18 }),
380
+ q: "Is this remote?",
381
+ a: "Yes. Async-first. Occasional in-person (Paris-based) for planning. Europe timezone overlap strongly preferred."
382
+ },
383
+ {
384
+ icon: /* @__PURE__ */ jsx(Percent, { size: 18 }),
385
+ q: "How much equity?",
386
+ a: "Depends on what you bring, when you join, and how much you can commit. Expect meaningful co-founder equity with 4-year vesting. We will discuss specifics in person."
387
+ }
388
+ ].map((faq) => /* @__PURE__ */ jsxs(VStack, {
389
+ gap: "xs",
390
+ align: "start",
391
+ className: "border-border w-full rounded-lg border p-4",
392
+ children: [/* @__PURE__ */ jsxs(HStack, {
393
+ gap: "sm",
394
+ align: "center",
395
+ children: [/* @__PURE__ */ jsx("span", {
396
+ className: "text-muted-foreground",
397
+ children: faq.icon
398
+ }), /* @__PURE__ */ jsx(H3, {
399
+ className: "text-lg font-semibold",
400
+ children: faq.q
401
+ })]
402
+ }), /* @__PURE__ */ jsx(Muted, { children: faq.a })]
403
+ }, faq.q))
404
+ })]
405
+ })
406
+ });
407
+ }
408
+ function FinalCtaSection() {
409
+ return /* @__PURE__ */ jsx(MarketingSection, {
410
+ tone: "gradient",
411
+ padding: "comfortable",
412
+ align: "center",
413
+ maxWidth: "lg",
414
+ children: /* @__PURE__ */ jsxs(VStack, {
415
+ gap: "md",
416
+ align: "center",
417
+ className: "text-center",
418
+ children: [
419
+ /* @__PURE__ */ jsx(H2, {
420
+ className: "text-3xl font-bold md:text-4xl",
421
+ children: "Ready to talk?"
422
+ }),
423
+ /* @__PURE__ */ jsx(Lead, {
424
+ className: "text-muted-foreground max-w-xl",
425
+ children: "Send an email with: your LinkedIn, 2 proof-of-work links, why ContractSpec, and what you would own in the first 90 days."
426
+ }),
427
+ /* @__PURE__ */ jsxs(HStack, {
428
+ gap: "md",
429
+ justify: "center",
430
+ wrap: "wrap",
431
+ className: "pt-2",
432
+ children: [/* @__PURE__ */ jsx(ButtonLink, {
433
+ href: mailtoLink,
434
+ children: "Talk about co-founding"
435
+ }), /* @__PURE__ */ jsx(ButtonLink, {
436
+ variant: "ghost",
437
+ href: "/contact",
438
+ children: "Become a design partner"
439
+ })]
440
+ }),
441
+ /* @__PURE__ */ jsx(Muted, {
442
+ className: "pt-4 text-sm",
443
+ children: "CHAMAN VENTURES, SASU · RCS Paris · SIREN 989 498 902 · 229 rue Saint-Honoré, 75001 Paris"
444
+ })
445
+ ]
446
+ })
447
+ });
448
+ }
449
+ function CofounderPage() {
450
+ return /* @__PURE__ */ jsxs(VStack, {
451
+ as: "main",
452
+ gap: "none",
453
+ children: [
454
+ /* @__PURE__ */ jsx(HeroSection, {}),
455
+ /* @__PURE__ */ jsx(WhatExistsSection, {}),
456
+ /* @__PURE__ */ jsx(RoleSection, {}),
457
+ /* @__PURE__ */ jsx(IdealCofounderSection, {}),
458
+ /* @__PURE__ */ jsx(WhatYouGetSection, {}),
459
+ /* @__PURE__ */ jsx(RedFlagsSection, {}),
460
+ /* @__PURE__ */ jsx(FAQSection, {}),
461
+ /* @__PURE__ */ jsx(FinalCtaSection, {})
462
+ ]
463
+ });
464
+ }
465
+
466
+ //#endregion
467
+ export { CofounderPage };
468
+ //# sourceMappingURL=CofounderPage.js.map