@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.
- package/.turbo/turbo-build$colon$types.log +1 -0
- package/.turbo/turbo-build.log +175 -0
- package/.turbo/turbo-lint.log +3 -0
- package/AGENTS.md +36 -0
- package/CHANGELOG.md +416 -0
- package/README.md +57 -0
- package/dist/components/marketing/ChangelogPage.d.ts +21 -0
- package/dist/components/marketing/ChangelogPage.d.ts.map +1 -0
- package/dist/components/marketing/ChangelogPage.js +65 -0
- package/dist/components/marketing/ChangelogPage.js.map +1 -0
- package/dist/components/marketing/CofounderPage.d.ts +7 -0
- package/dist/components/marketing/CofounderPage.d.ts.map +1 -0
- package/dist/components/marketing/CofounderPage.js +468 -0
- package/dist/components/marketing/CofounderPage.js.map +1 -0
- package/dist/components/marketing/ContactClient.d.ts +7 -0
- package/dist/components/marketing/ContactClient.d.ts.map +1 -0
- package/dist/components/marketing/ContactClient.js +158 -0
- package/dist/components/marketing/ContactClient.js.map +1 -0
- package/dist/components/marketing/ContributePage.d.ts +9 -0
- package/dist/components/marketing/ContributePage.d.ts.map +1 -0
- package/dist/components/marketing/ContributePage.js +362 -0
- package/dist/components/marketing/ContributePage.js.map +1 -0
- package/dist/components/marketing/DesignPartnerPage.d.ts +9 -0
- package/dist/components/marketing/DesignPartnerPage.d.ts.map +1 -0
- package/dist/components/marketing/DesignPartnerPage.js +215 -0
- package/dist/components/marketing/DesignPartnerPage.js.map +1 -0
- package/dist/components/marketing/LandingPage.d.ts +7 -0
- package/dist/components/marketing/LandingPage.d.ts.map +1 -0
- package/dist/components/marketing/LandingPage.js +38 -0
- package/dist/components/marketing/LandingPage.js.map +1 -0
- package/dist/components/marketing/PricingClient.d.ts +7 -0
- package/dist/components/marketing/PricingClient.d.ts.map +1 -0
- package/dist/components/marketing/PricingClient.js +521 -0
- package/dist/components/marketing/PricingClient.js.map +1 -0
- package/dist/components/marketing/ProductClientPage.d.ts +7 -0
- package/dist/components/marketing/ProductClientPage.d.ts.map +1 -0
- package/dist/components/marketing/ProductClientPage.js +460 -0
- package/dist/components/marketing/ProductClientPage.js.map +1 -0
- package/dist/components/marketing/index.d.ts +11 -0
- package/dist/components/marketing/index.js +12 -0
- package/dist/components/marketing/pricing-thinking-modal.d.ts +16 -0
- package/dist/components/marketing/pricing-thinking-modal.d.ts.map +1 -0
- package/dist/components/marketing/pricing-thinking-modal.js +202 -0
- package/dist/components/marketing/pricing-thinking-modal.js.map +1 -0
- package/dist/components/marketing/sections/AudienceSection.d.ts +7 -0
- package/dist/components/marketing/sections/AudienceSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/AudienceSection.js +68 -0
- package/dist/components/marketing/sections/AudienceSection.js.map +1 -0
- package/dist/components/marketing/sections/CorePositioningSection.d.ts +7 -0
- package/dist/components/marketing/sections/CorePositioningSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/CorePositioningSection.js +59 -0
- package/dist/components/marketing/sections/CorePositioningSection.js.map +1 -0
- package/dist/components/marketing/sections/CtaSection.d.ts +7 -0
- package/dist/components/marketing/sections/CtaSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/CtaSection.js +54 -0
- package/dist/components/marketing/sections/CtaSection.js.map +1 -0
- package/dist/components/marketing/sections/DevelopersSection.d.ts +7 -0
- package/dist/components/marketing/sections/DevelopersSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/DevelopersSection.js +45 -0
- package/dist/components/marketing/sections/DevelopersSection.js.map +1 -0
- package/dist/components/marketing/sections/FearsSection.d.ts +7 -0
- package/dist/components/marketing/sections/FearsSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/FearsSection.js +48 -0
- package/dist/components/marketing/sections/FearsSection.js.map +1 -0
- package/dist/components/marketing/sections/HeroMarketingSection.d.ts +7 -0
- package/dist/components/marketing/sections/HeroMarketingSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/HeroMarketingSection.js +77 -0
- package/dist/components/marketing/sections/HeroMarketingSection.js.map +1 -0
- package/dist/components/marketing/sections/IconGridSection.d.ts +45 -0
- package/dist/components/marketing/sections/IconGridSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/IconGridSection.js +44 -0
- package/dist/components/marketing/sections/IconGridSection.js.map +1 -0
- package/dist/components/marketing/sections/OutputsSection.d.ts +7 -0
- package/dist/components/marketing/sections/OutputsSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/OutputsSection.js +59 -0
- package/dist/components/marketing/sections/OutputsSection.js.map +1 -0
- package/dist/components/marketing/sections/ProblemSection.d.ts +7 -0
- package/dist/components/marketing/sections/ProblemSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/ProblemSection.js +46 -0
- package/dist/components/marketing/sections/ProblemSection.js.map +1 -0
- package/dist/components/marketing/sections/SolutionSection.d.ts +7 -0
- package/dist/components/marketing/sections/SolutionSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/SolutionSection.js +46 -0
- package/dist/components/marketing/sections/SolutionSection.js.map +1 -0
- package/dist/components/marketing/sections/StepsSection.d.ts +7 -0
- package/dist/components/marketing/sections/StepsSection.d.ts.map +1 -0
- package/dist/components/marketing/sections/StepsSection.js +52 -0
- package/dist/components/marketing/sections/StepsSection.js.map +1 -0
- package/dist/components/marketing/waitlist-section.d.ts +15 -0
- package/dist/components/marketing/waitlist-section.d.ts.map +1 -0
- package/dist/components/marketing/waitlist-section.js +578 -0
- package/dist/components/marketing/waitlist-section.js.map +1 -0
- package/dist/components/templates/TemplatesClientPage.d.ts +7 -0
- package/dist/components/templates/TemplatesClientPage.d.ts.map +1 -0
- package/dist/components/templates/TemplatesClientPage.js +625 -0
- package/dist/components/templates/TemplatesClientPage.js.map +1 -0
- package/dist/components/templates/TemplatesPage.d.ts +7 -0
- package/dist/components/templates/TemplatesPage.d.ts.map +1 -0
- package/dist/components/templates/TemplatesPage.js +125 -0
- package/dist/components/templates/TemplatesPage.js.map +1 -0
- package/dist/components/templates/TemplatesPreviewModal.d.ts +15 -0
- package/dist/components/templates/TemplatesPreviewModal.d.ts.map +1 -0
- package/dist/components/templates/TemplatesPreviewModal.js +137 -0
- package/dist/components/templates/TemplatesPreviewModal.js.map +1 -0
- package/dist/components/templates/index.d.ts +4 -0
- package/dist/components/templates/index.js +5 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +28 -0
- package/dist/libs/email/client.d.ts +15 -0
- package/dist/libs/email/client.d.ts.map +1 -0
- package/dist/libs/email/client.js +113 -0
- package/dist/libs/email/client.js.map +1 -0
- package/dist/libs/email/contact.d.ts +7 -0
- package/dist/libs/email/contact.d.ts.map +1 -0
- package/dist/libs/email/contact.js +71 -0
- package/dist/libs/email/contact.js.map +1 -0
- package/dist/libs/email/newsletter.d.ts +7 -0
- package/dist/libs/email/newsletter.d.ts.map +1 -0
- package/dist/libs/email/newsletter.js +95 -0
- package/dist/libs/email/newsletter.js.map +1 -0
- package/dist/libs/email/types.d.ts +53 -0
- package/dist/libs/email/types.d.ts.map +1 -0
- package/dist/libs/email/types.js +1 -0
- package/dist/libs/email/utils.d.ts +6 -0
- package/dist/libs/email/utils.d.ts.map +1 -0
- package/dist/libs/email/utils.js +7 -0
- package/dist/libs/email/utils.js.map +1 -0
- package/dist/libs/email/waitlist-application.d.ts +7 -0
- package/dist/libs/email/waitlist-application.d.ts.map +1 -0
- package/dist/libs/email/waitlist-application.js +170 -0
- package/dist/libs/email/waitlist-application.js.map +1 -0
- package/dist/libs/email/waitlist.d.ts +7 -0
- package/dist/libs/email/waitlist.d.ts.map +1 -0
- package/dist/libs/email/waitlist.js +105 -0
- package/dist/libs/email/waitlist.js.map +1 -0
- package/dist/libs/pricing-examples.d.ts +22 -0
- package/dist/libs/pricing-examples.d.ts.map +1 -0
- package/dist/libs/pricing-examples.js +21 -0
- package/dist/libs/pricing-examples.js.map +1 -0
- package/dist/registry/engine.d.ts +17 -0
- package/dist/registry/engine.d.ts.map +1 -0
- package/dist/registry/engine.js +24 -0
- package/dist/registry/engine.js.map +1 -0
- package/dist/registry/factory.d.ts +64 -0
- package/dist/registry/factory.d.ts.map +1 -0
- package/dist/registry/factory.js +61 -0
- package/dist/registry/factory.js.map +1 -0
- package/dist/registry/index.d.ts +8 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/registry-docs.d.ts +15 -0
- package/dist/registry/registry-docs.d.ts.map +1 -0
- package/dist/registry/registry-docs.js +305 -0
- package/dist/registry/registry-docs.js.map +1 -0
- package/dist/registry/registry-landing.d.ts +19 -0
- package/dist/registry/registry-landing.d.ts.map +1 -0
- package/dist/registry/registry-landing.js +95 -0
- package/dist/registry/registry-landing.js.map +1 -0
- package/dist/registry/registry.d.ts +30 -0
- package/dist/registry/registry.d.ts.map +1 -0
- package/dist/registry/registry.js +61 -0
- package/dist/registry/registry.js.map +1 -0
- package/dist/registry/types.d.ts +19 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +0 -0
- package/dist/registry/utils.d.ts +31 -0
- package/dist/registry/utils.d.ts.map +1 -0
- package/dist/registry/utils.js +54 -0
- package/dist/registry/utils.js.map +1 -0
- package/package.json +151 -0
- package/src/components/marketing/ChangelogPage.tsx +110 -0
- package/src/components/marketing/CofounderPage.tsx +409 -0
- package/src/components/marketing/ContactClient.tsx +174 -0
- package/src/components/marketing/ContributePage.tsx +319 -0
- package/src/components/marketing/DesignPartnerPage.tsx +181 -0
- package/src/components/marketing/LandingPage.tsx +30 -0
- package/src/components/marketing/PricingClient.tsx +446 -0
- package/src/components/marketing/ProductClientPage.tsx +391 -0
- package/src/components/marketing/index.ts +10 -0
- package/src/components/marketing/pricing-thinking-modal.tsx +224 -0
- package/src/components/marketing/sections/AudienceSection.tsx +66 -0
- package/src/components/marketing/sections/CorePositioningSection.tsx +44 -0
- package/src/components/marketing/sections/CtaSection.tsx +57 -0
- package/src/components/marketing/sections/DevelopersSection.tsx +38 -0
- package/src/components/marketing/sections/FearsSection.tsx +45 -0
- package/src/components/marketing/sections/HeroMarketingSection.tsx +73 -0
- package/src/components/marketing/sections/IconGridSection.tsx +91 -0
- package/src/components/marketing/sections/OutputsSection.tsx +59 -0
- package/src/components/marketing/sections/ProblemSection.tsx +47 -0
- package/src/components/marketing/sections/SolutionSection.tsx +47 -0
- package/src/components/marketing/sections/StepsSection.tsx +55 -0
- package/src/components/marketing/waitlist-section.tsx +606 -0
- package/src/components/templates/TemplatesClientPage.tsx +711 -0
- package/src/components/templates/TemplatesPage.tsx +129 -0
- package/src/components/templates/TemplatesPreviewModal.tsx +260 -0
- package/src/components/templates/index.ts +3 -0
- package/src/index.ts +15 -0
- package/src/libs/email/client.test.ts +107 -0
- package/src/libs/email/client.ts +146 -0
- package/src/libs/email/contact.ts +80 -0
- package/src/libs/email/newsletter.ts +108 -0
- package/src/libs/email/types.ts +59 -0
- package/src/libs/email/utils.ts +8 -0
- package/src/libs/email/waitlist-application.ts +192 -0
- package/src/libs/email/waitlist.ts +118 -0
- package/src/libs/pricing-examples.ts +19 -0
- package/src/registry/engine.ts +38 -0
- package/src/registry/factory.ts +110 -0
- package/src/registry/index.ts +7 -0
- package/src/registry/registry-docs.ts +843 -0
- package/src/registry/registry-landing.ts +118 -0
- package/src/registry/registry.ts +85 -0
- package/src/registry/types.ts +17 -0
- package/src/registry/utils.ts +99 -0
- package/tsconfig.json +13 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/tsdown.config.js +10 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import type { Metadata } from 'next';
|
|
2
|
+
|
|
3
|
+
export const metadata: Metadata = {
|
|
4
|
+
title: 'Contribute to ContractSpec',
|
|
5
|
+
description:
|
|
6
|
+
'Join the ContractSpec open-source community. Report issues, improve docs, build integrations, and help shape the future of spec-first development.',
|
|
7
|
+
openGraph: {
|
|
8
|
+
title: 'Contribute to ContractSpec',
|
|
9
|
+
description:
|
|
10
|
+
'Get started contributing in under 3 minutes. Docs, examples, integrations, and more.',
|
|
11
|
+
url: 'https://contractspec.io/contribute',
|
|
12
|
+
},
|
|
13
|
+
alternates: {
|
|
14
|
+
canonical: 'https://contractspec.io/contribute',
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export function ContributePage() {
|
|
19
|
+
return (
|
|
20
|
+
<main className="flex grow flex-col items-center justify-center">
|
|
21
|
+
<section className="section-padding">
|
|
22
|
+
<div className="prose prose-invert mx-auto max-w-2xl">
|
|
23
|
+
<h1 className="mb-8 text-4xl font-bold">
|
|
24
|
+
Contribute to ContractSpec
|
|
25
|
+
</h1>
|
|
26
|
+
|
|
27
|
+
{/* Quick Start Box */}
|
|
28
|
+
<div className="not-prose border-border bg-muted/30 mb-12 rounded-lg border p-6">
|
|
29
|
+
<h2 className="text-foreground mb-4 text-xl font-bold">
|
|
30
|
+
⚡ Quick Start — 3 Minutes to Your First Contribution
|
|
31
|
+
</h2>
|
|
32
|
+
<ol className="text-muted-foreground list-inside list-decimal space-y-2">
|
|
33
|
+
<li>
|
|
34
|
+
Read the{' '}
|
|
35
|
+
<a
|
|
36
|
+
href="https://github.com/contractspec/contractspec/blob/main/CONTRIBUTING.md"
|
|
37
|
+
className="text-primary hover:underline"
|
|
38
|
+
target="_blank"
|
|
39
|
+
rel="noopener noreferrer"
|
|
40
|
+
>
|
|
41
|
+
CONTRIBUTING guide
|
|
42
|
+
</a>
|
|
43
|
+
</li>
|
|
44
|
+
<li>
|
|
45
|
+
Pick a{' '}
|
|
46
|
+
<a
|
|
47
|
+
href="https://github.com/contractspec/contractspec/labels/good%20first%20issue"
|
|
48
|
+
className="text-primary hover:underline"
|
|
49
|
+
target="_blank"
|
|
50
|
+
rel="noopener noreferrer"
|
|
51
|
+
>
|
|
52
|
+
good first issue
|
|
53
|
+
</a>{' '}
|
|
54
|
+
or{' '}
|
|
55
|
+
<a
|
|
56
|
+
href="https://github.com/contractspec/contractspec/labels/help%20wanted"
|
|
57
|
+
className="text-primary hover:underline"
|
|
58
|
+
target="_blank"
|
|
59
|
+
rel="noopener noreferrer"
|
|
60
|
+
>
|
|
61
|
+
help wanted
|
|
62
|
+
</a>{' '}
|
|
63
|
+
label
|
|
64
|
+
</li>
|
|
65
|
+
<li>Open a draft PR early — we'll guide you from there</li>
|
|
66
|
+
</ol>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
{/* Why Open Source */}
|
|
70
|
+
<section className="mb-10 space-y-4">
|
|
71
|
+
<h2 className="text-foreground text-2xl font-bold">
|
|
72
|
+
Why Open Source?
|
|
73
|
+
</h2>
|
|
74
|
+
<ul className="text-muted-foreground list-inside list-disc space-y-2">
|
|
75
|
+
<li>
|
|
76
|
+
<strong>Transparency:</strong> You can see exactly how your code
|
|
77
|
+
is compiled and deployed
|
|
78
|
+
</li>
|
|
79
|
+
<li>
|
|
80
|
+
<strong>Trust:</strong> No black boxes — audit the compiler that
|
|
81
|
+
shapes your AI-generated code
|
|
82
|
+
</li>
|
|
83
|
+
<li>
|
|
84
|
+
<strong>Faster ecosystem:</strong> Community contributions
|
|
85
|
+
accelerate adoption and surface real-world edge cases
|
|
86
|
+
</li>
|
|
87
|
+
<li>
|
|
88
|
+
<strong>Community review:</strong> More eyes catch more bugs,
|
|
89
|
+
and better patterns emerge
|
|
90
|
+
</li>
|
|
91
|
+
<li>
|
|
92
|
+
<strong>No lock-in:</strong> You own your code. The spec is
|
|
93
|
+
portable.
|
|
94
|
+
</li>
|
|
95
|
+
</ul>
|
|
96
|
+
</section>
|
|
97
|
+
|
|
98
|
+
{/* Where to Contribute */}
|
|
99
|
+
<section className="mb-10 space-y-4">
|
|
100
|
+
<h2 className="text-foreground text-2xl font-bold">
|
|
101
|
+
Where to Contribute
|
|
102
|
+
</h2>
|
|
103
|
+
<ul className="text-muted-foreground list-inside list-disc space-y-2">
|
|
104
|
+
<li>
|
|
105
|
+
<a
|
|
106
|
+
href="https://github.com/contractspec"
|
|
107
|
+
className="text-primary hover:underline"
|
|
108
|
+
target="_blank"
|
|
109
|
+
rel="noopener noreferrer"
|
|
110
|
+
>
|
|
111
|
+
GitHub Organization
|
|
112
|
+
</a>{' '}
|
|
113
|
+
— All repos live here
|
|
114
|
+
</li>
|
|
115
|
+
<li>
|
|
116
|
+
<a
|
|
117
|
+
href="https://github.com/contractspec/contractspec"
|
|
118
|
+
className="text-primary hover:underline"
|
|
119
|
+
target="_blank"
|
|
120
|
+
rel="noopener noreferrer"
|
|
121
|
+
>
|
|
122
|
+
Main Repository
|
|
123
|
+
</a>{' '}
|
|
124
|
+
— Core compiler and specs
|
|
125
|
+
</li>
|
|
126
|
+
<li>
|
|
127
|
+
<a
|
|
128
|
+
href="https://github.com/contractspec/contractspec/discussions"
|
|
129
|
+
className="text-primary hover:underline"
|
|
130
|
+
target="_blank"
|
|
131
|
+
rel="noopener noreferrer"
|
|
132
|
+
>
|
|
133
|
+
Discussions
|
|
134
|
+
</a>{' '}
|
|
135
|
+
— Questions, ideas, and RFCs
|
|
136
|
+
</li>
|
|
137
|
+
</ul>
|
|
138
|
+
</section>
|
|
139
|
+
|
|
140
|
+
{/* Contribution Types */}
|
|
141
|
+
<section className="mb-10 space-y-4">
|
|
142
|
+
<h2 className="text-foreground text-2xl font-bold">
|
|
143
|
+
Ways to Contribute
|
|
144
|
+
</h2>
|
|
145
|
+
<div className="text-muted-foreground space-y-3">
|
|
146
|
+
<p>
|
|
147
|
+
<strong className="text-foreground">📄 Documentation:</strong>{' '}
|
|
148
|
+
Fix typos, improve explanations, add missing guides
|
|
149
|
+
</p>
|
|
150
|
+
<p>
|
|
151
|
+
<strong className="text-foreground">
|
|
152
|
+
📦 Examples & Templates:
|
|
153
|
+
</strong>{' '}
|
|
154
|
+
Build real-world specs for common use cases
|
|
155
|
+
</p>
|
|
156
|
+
<p>
|
|
157
|
+
<strong className="text-foreground">
|
|
158
|
+
🔌 Integrations & Adapters:
|
|
159
|
+
</strong>{' '}
|
|
160
|
+
Connect ContractSpec to frameworks, databases, and tools
|
|
161
|
+
</p>
|
|
162
|
+
<p>
|
|
163
|
+
<strong className="text-foreground">🐛 Bug Reports:</strong>{' '}
|
|
164
|
+
File issues with clear reproduction steps — minimal cases help
|
|
165
|
+
the most
|
|
166
|
+
</p>
|
|
167
|
+
<p>
|
|
168
|
+
<strong className="text-foreground">
|
|
169
|
+
🔒 Security Reports:
|
|
170
|
+
</strong>{' '}
|
|
171
|
+
Found a vulnerability? See{' '}
|
|
172
|
+
<a href="#security" className="text-primary hover:underline">
|
|
173
|
+
Security
|
|
174
|
+
</a>{' '}
|
|
175
|
+
below
|
|
176
|
+
</p>
|
|
177
|
+
</div>
|
|
178
|
+
</section>
|
|
179
|
+
|
|
180
|
+
{/* Quality Bar */}
|
|
181
|
+
<section className="mb-10 space-y-4">
|
|
182
|
+
<h2 className="text-foreground text-2xl font-bold">Quality Bar</h2>
|
|
183
|
+
<p className="text-muted-foreground">
|
|
184
|
+
We keep the bar high so the codebase stays maintainable. Every PR
|
|
185
|
+
should:
|
|
186
|
+
</p>
|
|
187
|
+
<ul className="text-muted-foreground list-inside list-disc space-y-2">
|
|
188
|
+
<li>
|
|
189
|
+
<strong>Include tests</strong> — Unit tests for logic,
|
|
190
|
+
integration tests for adapters
|
|
191
|
+
</li>
|
|
192
|
+
<li>
|
|
193
|
+
<strong>Be fully typed</strong> — No <code>any</code>. Strict
|
|
194
|
+
TypeScript only.
|
|
195
|
+
</li>
|
|
196
|
+
<li>
|
|
197
|
+
<strong>Stay small</strong> — One concern per PR. Easier to
|
|
198
|
+
review, faster to merge.
|
|
199
|
+
</li>
|
|
200
|
+
<li>
|
|
201
|
+
<strong>Use clear commit messages</strong> — Describe _what_ and
|
|
202
|
+
_why_, not just _how_
|
|
203
|
+
</li>
|
|
204
|
+
</ul>
|
|
205
|
+
<div className="bg-muted/20 mt-4 rounded-md p-4">
|
|
206
|
+
<h3 className="text-foreground mb-2 font-semibold">
|
|
207
|
+
Spec-First Mindset
|
|
208
|
+
</h3>
|
|
209
|
+
<p className="text-muted-foreground text-sm">
|
|
210
|
+
ContractSpec exists to enforce contracts between humans, AI, and
|
|
211
|
+
code. When contributing, think spec-first: define the behavior
|
|
212
|
+
before the implementation. A well-defined spec makes changes
|
|
213
|
+
safe to regenerate and easy to validate.
|
|
214
|
+
</p>
|
|
215
|
+
</div>
|
|
216
|
+
</section>
|
|
217
|
+
|
|
218
|
+
{/* Governance */}
|
|
219
|
+
<section className="mb-10 space-y-4">
|
|
220
|
+
<h2 className="text-foreground text-2xl font-bold">
|
|
221
|
+
Governance & Decision Making
|
|
222
|
+
</h2>
|
|
223
|
+
<p className="text-muted-foreground">
|
|
224
|
+
ContractSpec uses a{' '}
|
|
225
|
+
<strong className="text-foreground">
|
|
226
|
+
founder-led maintainer model
|
|
227
|
+
</strong>
|
|
228
|
+
:
|
|
229
|
+
</p>
|
|
230
|
+
<ul className="text-muted-foreground list-inside list-disc space-y-2">
|
|
231
|
+
<li>
|
|
232
|
+
The founder has final say on significant decisions — for now
|
|
233
|
+
</li>
|
|
234
|
+
<li>All reasoning is shared publicly in issues or PRs</li>
|
|
235
|
+
<li>
|
|
236
|
+
Community input shapes direction; we don't merge in silence
|
|
237
|
+
</li>
|
|
238
|
+
<li>
|
|
239
|
+
This model may evolve as the project matures and trusted
|
|
240
|
+
maintainers emerge
|
|
241
|
+
</li>
|
|
242
|
+
</ul>
|
|
243
|
+
</section>
|
|
244
|
+
|
|
245
|
+
{/* Security */}
|
|
246
|
+
<section className="mb-10 space-y-4" id="security">
|
|
247
|
+
<h2 className="text-foreground text-2xl font-bold">Security</h2>
|
|
248
|
+
<p className="text-muted-foreground">
|
|
249
|
+
If you discover a security vulnerability, please{' '}
|
|
250
|
+
<strong className="text-foreground">do not</strong> open a public
|
|
251
|
+
issue.
|
|
252
|
+
</p>
|
|
253
|
+
<p className="text-muted-foreground">
|
|
254
|
+
Instead, email us at{' '}
|
|
255
|
+
<a
|
|
256
|
+
href="mailto:security@contractspec.io"
|
|
257
|
+
className="text-primary hover:underline"
|
|
258
|
+
>
|
|
259
|
+
security@contractspec.io
|
|
260
|
+
</a>{' '}
|
|
261
|
+
with:
|
|
262
|
+
</p>
|
|
263
|
+
<ul className="text-muted-foreground list-inside list-disc space-y-2">
|
|
264
|
+
<li>A clear description of the vulnerability</li>
|
|
265
|
+
<li>Steps to reproduce</li>
|
|
266
|
+
<li>Potential impact</li>
|
|
267
|
+
</ul>
|
|
268
|
+
<p className="text-muted-foreground">
|
|
269
|
+
We'll acknowledge within 48 hours and work with you to coordinate
|
|
270
|
+
disclosure.
|
|
271
|
+
</p>
|
|
272
|
+
</section>
|
|
273
|
+
|
|
274
|
+
{/* Code of Conduct */}
|
|
275
|
+
<section className="mb-10 space-y-4">
|
|
276
|
+
<h2 className="text-foreground text-2xl font-bold">
|
|
277
|
+
Code of Conduct
|
|
278
|
+
</h2>
|
|
279
|
+
<p className="text-muted-foreground">
|
|
280
|
+
We expect all contributors to follow our{' '}
|
|
281
|
+
<a
|
|
282
|
+
href="https://github.com/contractspec/contractspec/blob/main/CODE_OF_CONDUCT.md"
|
|
283
|
+
className="text-primary hover:underline"
|
|
284
|
+
target="_blank"
|
|
285
|
+
rel="noopener noreferrer"
|
|
286
|
+
>
|
|
287
|
+
Code of Conduct
|
|
288
|
+
</a>
|
|
289
|
+
. Be respectful, constructive, and assume good intent.
|
|
290
|
+
</p>
|
|
291
|
+
</section>
|
|
292
|
+
|
|
293
|
+
{/* Go Deeper */}
|
|
294
|
+
<section className="border-border mt-12 space-y-4 border-t pt-8">
|
|
295
|
+
<h2 className="text-foreground text-2xl font-bold">
|
|
296
|
+
Want to Go Deeper?
|
|
297
|
+
</h2>
|
|
298
|
+
<p className="text-muted-foreground">
|
|
299
|
+
If you're considering a long-term commitment to ContractSpec —
|
|
300
|
+
reviewing PRs regularly, shaping roadmap, mentoring new
|
|
301
|
+
contributors — we'd love to talk.
|
|
302
|
+
</p>
|
|
303
|
+
<p className="text-muted-foreground">
|
|
304
|
+
This isn't a job offer. It's an invitation to help build something
|
|
305
|
+
meaningful together. Reach out at{' '}
|
|
306
|
+
<a
|
|
307
|
+
href="mailto:maintainers@contractspec.io"
|
|
308
|
+
className="text-primary hover:underline"
|
|
309
|
+
>
|
|
310
|
+
maintainers@contractspec.io
|
|
311
|
+
</a>{' '}
|
|
312
|
+
and tell us what you'd bring to the table.
|
|
313
|
+
</p>
|
|
314
|
+
</section>
|
|
315
|
+
</div>
|
|
316
|
+
</section>
|
|
317
|
+
</main>
|
|
318
|
+
);
|
|
319
|
+
}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { Metadata } from 'next';
|
|
2
|
+
import Link from 'next/link';
|
|
3
|
+
import { Button } from '@contractspec/lib.design-system';
|
|
4
|
+
import {
|
|
5
|
+
ArrowRight,
|
|
6
|
+
BookOpen,
|
|
7
|
+
MessageSquare,
|
|
8
|
+
Rocket,
|
|
9
|
+
Users,
|
|
10
|
+
} from 'lucide-react';
|
|
11
|
+
|
|
12
|
+
export const metadata: Metadata = {
|
|
13
|
+
title: 'Design Partner Getting Started | ContractSpec',
|
|
14
|
+
description: 'Onboarding and resources for ContractSpec Design Partners.',
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export function DesignPartnerPage() {
|
|
18
|
+
return (
|
|
19
|
+
<main className="flex grow flex-col">
|
|
20
|
+
{/* Hero Section */}
|
|
21
|
+
<section className="section-padding relative overflow-hidden">
|
|
22
|
+
<div className="container mx-auto max-w-5xl">
|
|
23
|
+
<div className="mb-12 max-w-3xl">
|
|
24
|
+
<h1 className="mb-6 text-4xl font-bold tracking-tight sm:text-5xl">
|
|
25
|
+
Welcome, Design Partner
|
|
26
|
+
</h1>
|
|
27
|
+
<p className="text-muted-foreground text-xl leading-relaxed">
|
|
28
|
+
We're thrilled to have you on board. As a Design Partner, you play
|
|
29
|
+
a critical role in shaping the future of ContractSpec. This hub
|
|
30
|
+
contains everything you need to get started, collaborate with us,
|
|
31
|
+
and build your first specifications.
|
|
32
|
+
</p>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</section>
|
|
36
|
+
|
|
37
|
+
{/* Steps Section */}
|
|
38
|
+
<section className="section-padding bg-white/5">
|
|
39
|
+
<div className="container mx-auto max-w-5xl">
|
|
40
|
+
<h2 className="mb-12 text-3xl font-bold">Getting Started</h2>
|
|
41
|
+
|
|
42
|
+
<div className="grid gap-12 md:grid-cols-2">
|
|
43
|
+
{/* Step 1: Access */}
|
|
44
|
+
<div className="space-y-4">
|
|
45
|
+
<div className="border-primary/20 bg-primary/10 flex h-12 w-12 items-center justify-center rounded-lg border">
|
|
46
|
+
<Rocket className="text-primary h-6 w-6" />
|
|
47
|
+
</div>
|
|
48
|
+
<h3 className="text-xl font-semibold">1. Access the Studio</h3>
|
|
49
|
+
<p className="text-muted-foreground">
|
|
50
|
+
Your account has been enabled with Design Partner privileges.
|
|
51
|
+
Log in to the Studio to start exploring the latest features
|
|
52
|
+
before they're public.
|
|
53
|
+
</p>
|
|
54
|
+
<div className="pt-2">
|
|
55
|
+
<Button asChild variant="outline">
|
|
56
|
+
<Link href="https://www.contractspec.studio">
|
|
57
|
+
Launch Studio <ArrowRight className="ml-2 h-4 w-4" />
|
|
58
|
+
</Link>
|
|
59
|
+
</Button>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
{/* Step 2: Communication */}
|
|
64
|
+
<div className="space-y-4">
|
|
65
|
+
<div className="border-primary/20 bg-primary/10 flex h-12 w-12 items-center justify-center rounded-lg border">
|
|
66
|
+
<MessageSquare className="text-primary h-6 w-6" />
|
|
67
|
+
</div>
|
|
68
|
+
<h3 className="text-xl font-semibold">
|
|
69
|
+
2. Join the Conversation
|
|
70
|
+
</h3>
|
|
71
|
+
<p className="text-muted-foreground">
|
|
72
|
+
We've set up a dedicated private channel for real-time feedback
|
|
73
|
+
and support. Connect with our engineering team and other
|
|
74
|
+
partners.
|
|
75
|
+
</p>
|
|
76
|
+
<div className="pt-2">
|
|
77
|
+
<Button asChild variant="outline">
|
|
78
|
+
<Link href="mailto:partners@contractspec.io">
|
|
79
|
+
Contact Partner Success{' '}
|
|
80
|
+
<ArrowRight className="ml-2 h-4 w-4" />
|
|
81
|
+
</Link>
|
|
82
|
+
</Button>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
{/* Step 3: Documentation */}
|
|
87
|
+
<div className="space-y-4">
|
|
88
|
+
<div className="border-primary/20 bg-primary/10 flex h-12 w-12 items-center justify-center rounded-lg border">
|
|
89
|
+
<BookOpen className="text-primary h-6 w-6" />
|
|
90
|
+
</div>
|
|
91
|
+
<h3 className="text-xl font-semibold">
|
|
92
|
+
3. Explore Documentation
|
|
93
|
+
</h3>
|
|
94
|
+
<p className="text-muted-foreground">
|
|
95
|
+
Dive deep into the core concepts, API references, and
|
|
96
|
+
architecture guides. Our docs are evolving, and your feedback
|
|
97
|
+
helps us improve them.
|
|
98
|
+
</p>
|
|
99
|
+
<div className="pt-2">
|
|
100
|
+
<Button asChild variant="outline">
|
|
101
|
+
<Link href="/docs">
|
|
102
|
+
Read the Docs <ArrowRight className="ml-2 h-4 w-4" />
|
|
103
|
+
</Link>
|
|
104
|
+
</Button>
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
{/* Step 4: Sync */}
|
|
109
|
+
<div className="space-y-4">
|
|
110
|
+
<div className="border-primary/20 bg-primary/10 flex h-12 w-12 items-center justify-center rounded-lg border">
|
|
111
|
+
<Users className="text-primary h-6 w-6" />
|
|
112
|
+
</div>
|
|
113
|
+
<h3 className="text-xl font-semibold">4. Partner Syncs</h3>
|
|
114
|
+
<p className="text-muted-foreground">
|
|
115
|
+
We schedule bi-weekly syncs to review your progress, blockers,
|
|
116
|
+
and feature requests. Check your calendar invite for the next
|
|
117
|
+
session.
|
|
118
|
+
</p>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</section>
|
|
123
|
+
|
|
124
|
+
{/* Expectations / FAQ */}
|
|
125
|
+
<section className="section-padding">
|
|
126
|
+
<div className="container mx-auto max-w-3xl">
|
|
127
|
+
<h2 className="mb-8 text-3xl font-bold">What to Expect</h2>
|
|
128
|
+
|
|
129
|
+
<div className="space-y-8">
|
|
130
|
+
<div>
|
|
131
|
+
<h3 className="mb-2 text-xl font-semibold">
|
|
132
|
+
Fast Iteration Cycles
|
|
133
|
+
</h3>
|
|
134
|
+
<p className="text-muted-foreground">
|
|
135
|
+
We ship updates frequently. You might see UI changes or new
|
|
136
|
+
capabilities appear weekly. We'll do our best to communicate
|
|
137
|
+
breaking changes in advance.
|
|
138
|
+
</p>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<div>
|
|
142
|
+
<h3 className="mb-2 text-xl font-semibold">
|
|
143
|
+
Direct Engineering Access
|
|
144
|
+
</h3>
|
|
145
|
+
<p className="text-muted-foreground">
|
|
146
|
+
You're not talking to support agents; you're talking to the
|
|
147
|
+
builders. Your feedback goes directly into the issue tracker.
|
|
148
|
+
</p>
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
<div>
|
|
152
|
+
<h3 className="mb-2 text-xl font-semibold">Input on Roadmap</h3>
|
|
153
|
+
<p className="text-muted-foreground">
|
|
154
|
+
Design Partners influence priority. If a feature enables a
|
|
155
|
+
critical use case for you, let us know—we often reshuffle our
|
|
156
|
+
sprint to accommodate partner needs.
|
|
157
|
+
</p>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</section>
|
|
162
|
+
|
|
163
|
+
{/* Footer CTA */}
|
|
164
|
+
<section className="section-padding border-t border-white/10">
|
|
165
|
+
<div className="container mx-auto max-w-3xl text-center">
|
|
166
|
+
<h2 className="mb-4 text-3xl font-bold">
|
|
167
|
+
Have a question right now?
|
|
168
|
+
</h2>
|
|
169
|
+
<p className="text-muted-foreground mb-8">
|
|
170
|
+
Don't hesitate to reach out. We are here to help you succeed.
|
|
171
|
+
</p>
|
|
172
|
+
<Button asChild size="lg">
|
|
173
|
+
<Link href="mailto:partners@contractspec.io">
|
|
174
|
+
Email the Founders
|
|
175
|
+
</Link>
|
|
176
|
+
</Button>
|
|
177
|
+
</div>
|
|
178
|
+
</section>
|
|
179
|
+
</main>
|
|
180
|
+
);
|
|
181
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { VStack } from '@contractspec/lib.ui-kit-web/ui/stack';
|
|
4
|
+
import { HeroMarketingSection } from './sections/HeroMarketingSection';
|
|
5
|
+
import { ProblemSection } from './sections/ProblemSection';
|
|
6
|
+
import { SolutionSection } from './sections/SolutionSection';
|
|
7
|
+
import { FearsSection } from './sections/FearsSection';
|
|
8
|
+
import { CorePositioningSection } from './sections/CorePositioningSection';
|
|
9
|
+
import { AudienceSection } from './sections/AudienceSection';
|
|
10
|
+
import { OutputsSection } from './sections/OutputsSection';
|
|
11
|
+
import { StepsSection } from './sections/StepsSection';
|
|
12
|
+
import { DevelopersSection } from './sections/DevelopersSection';
|
|
13
|
+
import { CtaSection } from './sections/CtaSection';
|
|
14
|
+
|
|
15
|
+
export function LandingPage() {
|
|
16
|
+
return (
|
|
17
|
+
<VStack as="main" gap="none">
|
|
18
|
+
<HeroMarketingSection />
|
|
19
|
+
<ProblemSection />
|
|
20
|
+
<SolutionSection />
|
|
21
|
+
<FearsSection />
|
|
22
|
+
<CorePositioningSection />
|
|
23
|
+
<AudienceSection />
|
|
24
|
+
<OutputsSection />
|
|
25
|
+
<StepsSection />
|
|
26
|
+
<DevelopersSection />
|
|
27
|
+
<CtaSection />
|
|
28
|
+
</VStack>
|
|
29
|
+
);
|
|
30
|
+
}
|