@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,578 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { joinWaitlist } from "../../libs/email/waitlist.js";
|
|
4
|
+
import { submitWaitlistApplication } from "../../libs/email/waitlist-application.js";
|
|
5
|
+
import { Button, Input, Textarea } from "@contractspec/lib.design-system";
|
|
6
|
+
import { AlertCircle, CheckCircle } from "lucide-react";
|
|
7
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { useEffect, useState } from "react";
|
|
9
|
+
import { useForm } from "react-hook-form";
|
|
10
|
+
import { zodResolver } from "@hookform/resolvers/zod";
|
|
11
|
+
import z from "zod";
|
|
12
|
+
import { Label } from "@contractspec/lib.ui-kit-web/ui/label";
|
|
13
|
+
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@contractspec/lib.ui-kit-web/ui/select";
|
|
14
|
+
import { Checkbox } from "@contractspec/lib.ui-kit-web/ui/checkbox";
|
|
15
|
+
import { Switch } from "@contractspec/lib.ui-kit-web/ui/switch";
|
|
16
|
+
|
|
17
|
+
//#region src/components/marketing/waitlist-section.tsx
|
|
18
|
+
const simpleWaitlistSchema = z.object({ email: z.email("Please enter a valid email address") });
|
|
19
|
+
const designPartnerSchema = z.object({
|
|
20
|
+
name: z.string().min(1, "Name is required"),
|
|
21
|
+
email: z.email("Please enter a valid email address"),
|
|
22
|
+
company: z.string().optional(),
|
|
23
|
+
role: z.string().optional(),
|
|
24
|
+
useCase: z.string().optional(),
|
|
25
|
+
currentStack: z.string().optional(),
|
|
26
|
+
whatBuilding: z.string().min(1, "Please tell us what you are building"),
|
|
27
|
+
whatSolving: z.string().min(1, "Please tell us what ContractSpec will solve for you"),
|
|
28
|
+
teamSize: z.string().optional(),
|
|
29
|
+
timeline: z.string().optional(),
|
|
30
|
+
openToSessions: z.boolean().default(false),
|
|
31
|
+
okayWithCaseStudies: z.boolean().default(false)
|
|
32
|
+
});
|
|
33
|
+
function WaitlistSection({ variant = "default", context = "pricing" }) {
|
|
34
|
+
const [isDesignPartner, setIsDesignPartner] = useState(false);
|
|
35
|
+
const [submitResult, setSubmitResult] = useState(null);
|
|
36
|
+
const [isPending, setIsPending] = useState(false);
|
|
37
|
+
const simpleForm = useForm({
|
|
38
|
+
resolver: zodResolver(simpleWaitlistSchema),
|
|
39
|
+
defaultValues: { email: "" }
|
|
40
|
+
});
|
|
41
|
+
const designPartnerForm = useForm({
|
|
42
|
+
resolver: zodResolver(designPartnerSchema),
|
|
43
|
+
defaultValues: {
|
|
44
|
+
name: "",
|
|
45
|
+
email: "",
|
|
46
|
+
company: "",
|
|
47
|
+
role: "",
|
|
48
|
+
useCase: "",
|
|
49
|
+
currentStack: "",
|
|
50
|
+
whatBuilding: "",
|
|
51
|
+
whatSolving: "",
|
|
52
|
+
teamSize: "",
|
|
53
|
+
timeline: "",
|
|
54
|
+
openToSessions: false,
|
|
55
|
+
okayWithCaseStudies: false
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
const simpleEmail = simpleForm.watch("email");
|
|
59
|
+
const designPartnerEmail = designPartnerForm.watch("email");
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
const currentDesignPartnerEmail = designPartnerForm.getValues("email");
|
|
62
|
+
if (simpleEmail && simpleEmail !== currentDesignPartnerEmail) designPartnerForm.setValue("email", simpleEmail, { shouldDirty: false });
|
|
63
|
+
}, [simpleEmail, designPartnerForm]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
const currentSimpleEmail = simpleForm.getValues("email");
|
|
66
|
+
if (designPartnerEmail && designPartnerEmail !== currentSimpleEmail) simpleForm.setValue("email", designPartnerEmail, { shouldDirty: false });
|
|
67
|
+
}, [designPartnerEmail, simpleForm]);
|
|
68
|
+
const handleSimpleSubmit = async (data) => {
|
|
69
|
+
setIsPending(true);
|
|
70
|
+
setSubmitResult(null);
|
|
71
|
+
try {
|
|
72
|
+
const formData = new FormData();
|
|
73
|
+
formData.set("email", data.email);
|
|
74
|
+
const result = await joinWaitlist(formData);
|
|
75
|
+
if (result.success) {
|
|
76
|
+
setSubmitResult({
|
|
77
|
+
success: true,
|
|
78
|
+
text: "Thanks for joining the waitlist! Check your inbox for a confirmation."
|
|
79
|
+
});
|
|
80
|
+
simpleForm.reset();
|
|
81
|
+
} else setSubmitResult({
|
|
82
|
+
success: false,
|
|
83
|
+
text: result.text || "Failed to join waitlist. Please try again."
|
|
84
|
+
});
|
|
85
|
+
} catch (_error) {
|
|
86
|
+
setSubmitResult({
|
|
87
|
+
success: false,
|
|
88
|
+
text: "Failed to join waitlist. Please try again."
|
|
89
|
+
});
|
|
90
|
+
} finally {
|
|
91
|
+
setIsPending(false);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const handleDesignPartnerSubmit = async (data) => {
|
|
95
|
+
setIsPending(true);
|
|
96
|
+
setSubmitResult(null);
|
|
97
|
+
try {
|
|
98
|
+
const formData = new FormData();
|
|
99
|
+
formData.set("email", data.email);
|
|
100
|
+
formData.set("name", data.name);
|
|
101
|
+
if (data.company) formData.set("company", data.company);
|
|
102
|
+
if (data.role) formData.set("role", data.role);
|
|
103
|
+
if (data.useCase) formData.set("useCase", data.useCase);
|
|
104
|
+
if (data.currentStack) formData.set("currentStack", data.currentStack);
|
|
105
|
+
formData.set("whatBuilding", data.whatBuilding);
|
|
106
|
+
formData.set("whatSolving", data.whatSolving);
|
|
107
|
+
if (data.teamSize) formData.set("teamSize", data.teamSize);
|
|
108
|
+
if (data.timeline) formData.set("timeline", data.timeline);
|
|
109
|
+
if (data.openToSessions) formData.set("openToSessions", "on");
|
|
110
|
+
if (data.okayWithCaseStudies) formData.set("okayWithCaseStudies", "on");
|
|
111
|
+
const result = await submitWaitlistApplication(formData);
|
|
112
|
+
if (result.success) {
|
|
113
|
+
setSubmitResult({
|
|
114
|
+
success: true,
|
|
115
|
+
text: "You're on the list. Thanks for applying. We're slowly onboarding design partners in waves. If your use case is a good fit, we'll reach out personally."
|
|
116
|
+
});
|
|
117
|
+
designPartnerForm.reset();
|
|
118
|
+
} else setSubmitResult({
|
|
119
|
+
success: false,
|
|
120
|
+
text: result.text || "Failed to submit application. Please try again."
|
|
121
|
+
});
|
|
122
|
+
} catch (_error) {
|
|
123
|
+
setSubmitResult({
|
|
124
|
+
success: false,
|
|
125
|
+
text: "Failed to submit application. Please try again."
|
|
126
|
+
});
|
|
127
|
+
} finally {
|
|
128
|
+
setIsPending(false);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const onSubmit = isDesignPartner ? designPartnerForm.handleSubmit(handleDesignPartnerSubmit) : simpleForm.handleSubmit(handleSimpleSubmit);
|
|
132
|
+
const isCompact = variant === "compact";
|
|
133
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
134
|
+
id: "waitlist",
|
|
135
|
+
className: isCompact ? "space-y-4" : "card-subtle space-y-6 p-8",
|
|
136
|
+
children: [
|
|
137
|
+
!isCompact && /* @__PURE__ */ jsxs("div", {
|
|
138
|
+
className: "space-y-4",
|
|
139
|
+
children: [
|
|
140
|
+
/* @__PURE__ */ jsx("div", {
|
|
141
|
+
className: "inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1",
|
|
142
|
+
children: /* @__PURE__ */ jsx("span", {
|
|
143
|
+
className: "text-sm font-medium text-violet-300",
|
|
144
|
+
children: isDesignPartner ? "Design Partner Waitlist" : "Join the Waitlist"
|
|
145
|
+
})
|
|
146
|
+
}),
|
|
147
|
+
/* @__PURE__ */ jsx("h2", {
|
|
148
|
+
className: "text-2xl font-bold",
|
|
149
|
+
children: isDesignPartner ? "Apply for early access to ContractSpec" : "Get early access to ContractSpec"
|
|
150
|
+
}),
|
|
151
|
+
/* @__PURE__ */ jsx("p", {
|
|
152
|
+
className: "text-muted-foreground text-sm",
|
|
153
|
+
children: isDesignPartner ? "Tell us what you're building. We'll prioritize teams where ContractSpec can have a big impact, and where we can learn the most." : "Join the waitlist to be notified when ContractSpec becomes available."
|
|
154
|
+
})
|
|
155
|
+
]
|
|
156
|
+
}),
|
|
157
|
+
!isCompact && /* @__PURE__ */ jsxs("div", {
|
|
158
|
+
className: "border-border bg-muted/20 flex items-center justify-between gap-4 rounded-lg border p-4",
|
|
159
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
160
|
+
className: "space-y-1",
|
|
161
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
162
|
+
htmlFor: "design-partner-toggle",
|
|
163
|
+
className: "text-sm font-medium",
|
|
164
|
+
children: "Apply as a design partner"
|
|
165
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
166
|
+
className: "text-muted-foreground text-xs",
|
|
167
|
+
children: isDesignPartner ? "Get hands-on support, influence the roadmap, and founding discount" : "Get priority access, 1:1 onboarding, and help shape ContractSpec"
|
|
168
|
+
})]
|
|
169
|
+
}), /* @__PURE__ */ jsx(Switch, {
|
|
170
|
+
id: "design-partner-toggle",
|
|
171
|
+
checked: isDesignPartner,
|
|
172
|
+
onCheckedChange: setIsDesignPartner,
|
|
173
|
+
disabled: isPending || submitResult?.success
|
|
174
|
+
})]
|
|
175
|
+
}),
|
|
176
|
+
!isCompact && isDesignPartner && /* @__PURE__ */ jsxs("div", {
|
|
177
|
+
className: "space-y-2",
|
|
178
|
+
children: [/* @__PURE__ */ jsx("p", {
|
|
179
|
+
className: "text-sm font-medium",
|
|
180
|
+
children: "Benefits:"
|
|
181
|
+
}), /* @__PURE__ */ jsxs("ul", {
|
|
182
|
+
className: "text-muted-foreground space-y-1 text-sm",
|
|
183
|
+
children: [
|
|
184
|
+
/* @__PURE__ */ jsx("li", { children: "• Early access to ContractSpec Studio" }),
|
|
185
|
+
/* @__PURE__ */ jsx("li", { children: "• 1:1 onboarding and architecture sessions" }),
|
|
186
|
+
/* @__PURE__ */ jsx("li", { children: "• Priority support via direct channels" }),
|
|
187
|
+
/* @__PURE__ */ jsx("li", { children: "• Influence over roadmap and features" }),
|
|
188
|
+
/* @__PURE__ */ jsx("li", { children: "• Founding discount when paid plans launch" })
|
|
189
|
+
]
|
|
190
|
+
})]
|
|
191
|
+
}),
|
|
192
|
+
/* @__PURE__ */ jsxs("form", {
|
|
193
|
+
onSubmit,
|
|
194
|
+
className: "space-y-4",
|
|
195
|
+
children: [
|
|
196
|
+
isDesignPartner ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
197
|
+
/* @__PURE__ */ jsxs("div", {
|
|
198
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
199
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
200
|
+
className: "space-y-2",
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ jsxs(Label, {
|
|
203
|
+
htmlFor: "waitlist-name",
|
|
204
|
+
className: "text-sm font-medium",
|
|
205
|
+
children: ["Name ", /* @__PURE__ */ jsx("span", {
|
|
206
|
+
className: "text-red-400",
|
|
207
|
+
children: "*"
|
|
208
|
+
})]
|
|
209
|
+
}),
|
|
210
|
+
/* @__PURE__ */ jsx(Input, {
|
|
211
|
+
id: "waitlist-name",
|
|
212
|
+
...designPartnerForm.register("name"),
|
|
213
|
+
type: "text",
|
|
214
|
+
placeholder: "Your name",
|
|
215
|
+
disabled: isPending || submitResult?.success
|
|
216
|
+
}),
|
|
217
|
+
designPartnerForm.formState.errors.name && /* @__PURE__ */ jsx("p", {
|
|
218
|
+
className: "text-xs text-red-400",
|
|
219
|
+
children: designPartnerForm.formState.errors.name.message
|
|
220
|
+
})
|
|
221
|
+
]
|
|
222
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
223
|
+
className: "space-y-2",
|
|
224
|
+
children: [
|
|
225
|
+
/* @__PURE__ */ jsxs(Label, {
|
|
226
|
+
htmlFor: "waitlist-email",
|
|
227
|
+
className: "text-sm font-medium",
|
|
228
|
+
children: ["Email ", /* @__PURE__ */ jsx("span", {
|
|
229
|
+
className: "text-red-400",
|
|
230
|
+
children: "*"
|
|
231
|
+
})]
|
|
232
|
+
}),
|
|
233
|
+
/* @__PURE__ */ jsx(Input, {
|
|
234
|
+
id: "waitlist-email",
|
|
235
|
+
...designPartnerForm.register("email"),
|
|
236
|
+
type: "email",
|
|
237
|
+
placeholder: "your@email.com",
|
|
238
|
+
disabled: isPending || submitResult?.success
|
|
239
|
+
}),
|
|
240
|
+
designPartnerForm.formState.errors.email && /* @__PURE__ */ jsx("p", {
|
|
241
|
+
className: "text-xs text-red-400",
|
|
242
|
+
children: designPartnerForm.formState.errors.email.message
|
|
243
|
+
})
|
|
244
|
+
]
|
|
245
|
+
})]
|
|
246
|
+
}),
|
|
247
|
+
/* @__PURE__ */ jsxs("div", {
|
|
248
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
249
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
250
|
+
className: "space-y-2",
|
|
251
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
252
|
+
htmlFor: "waitlist-company",
|
|
253
|
+
className: "text-sm font-medium",
|
|
254
|
+
children: "Company / Project Name"
|
|
255
|
+
}), /* @__PURE__ */ jsx(Input, {
|
|
256
|
+
id: "waitlist-company",
|
|
257
|
+
...designPartnerForm.register("company"),
|
|
258
|
+
type: "text",
|
|
259
|
+
placeholder: "Your company or project",
|
|
260
|
+
disabled: isPending || submitResult?.success
|
|
261
|
+
})]
|
|
262
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
263
|
+
className: "space-y-2",
|
|
264
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
265
|
+
htmlFor: "waitlist-role",
|
|
266
|
+
className: "text-sm font-medium",
|
|
267
|
+
children: "Role"
|
|
268
|
+
}), /* @__PURE__ */ jsxs(Select, {
|
|
269
|
+
value: designPartnerForm.watch("role") || "",
|
|
270
|
+
onValueChange: (value) => designPartnerForm.setValue("role", value),
|
|
271
|
+
disabled: isPending || submitResult?.success,
|
|
272
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
273
|
+
id: "waitlist-role",
|
|
274
|
+
className: "w-full",
|
|
275
|
+
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select your role" })
|
|
276
|
+
}), /* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
277
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
278
|
+
value: "founder",
|
|
279
|
+
children: "Founder"
|
|
280
|
+
}),
|
|
281
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
282
|
+
value: "cto",
|
|
283
|
+
children: "CTO"
|
|
284
|
+
}),
|
|
285
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
286
|
+
value: "lead-engineer",
|
|
287
|
+
children: "Lead Engineer"
|
|
288
|
+
}),
|
|
289
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
290
|
+
value: "engineer",
|
|
291
|
+
children: "Engineer"
|
|
292
|
+
}),
|
|
293
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
294
|
+
value: "product-manager",
|
|
295
|
+
children: "Product Manager"
|
|
296
|
+
}),
|
|
297
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
298
|
+
value: "other",
|
|
299
|
+
children: "Other"
|
|
300
|
+
})
|
|
301
|
+
] })]
|
|
302
|
+
})]
|
|
303
|
+
})]
|
|
304
|
+
}),
|
|
305
|
+
/* @__PURE__ */ jsxs("div", {
|
|
306
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
307
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
308
|
+
className: "space-y-2",
|
|
309
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
310
|
+
htmlFor: "waitlist-use-case",
|
|
311
|
+
className: "text-sm font-medium",
|
|
312
|
+
children: "Primary use case"
|
|
313
|
+
}), /* @__PURE__ */ jsxs(Select, {
|
|
314
|
+
value: designPartnerForm.watch("useCase") || "",
|
|
315
|
+
onValueChange: (value) => designPartnerForm.setValue("useCase", value),
|
|
316
|
+
disabled: isPending || submitResult?.success,
|
|
317
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
318
|
+
id: "waitlist-use-case",
|
|
319
|
+
className: "w-full",
|
|
320
|
+
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select a use case" })
|
|
321
|
+
}), /* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
322
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
323
|
+
value: "api-platform",
|
|
324
|
+
children: "API platform"
|
|
325
|
+
}),
|
|
326
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
327
|
+
value: "ai-ops",
|
|
328
|
+
children: "AI operations"
|
|
329
|
+
}),
|
|
330
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
331
|
+
value: "integration-hub",
|
|
332
|
+
children: "Integration hub"
|
|
333
|
+
}),
|
|
334
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
335
|
+
value: "internal-tools",
|
|
336
|
+
children: "Internal tools"
|
|
337
|
+
}),
|
|
338
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
339
|
+
value: "data-pipelines",
|
|
340
|
+
children: "Data pipelines"
|
|
341
|
+
}),
|
|
342
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
343
|
+
value: "other",
|
|
344
|
+
children: "Other"
|
|
345
|
+
})
|
|
346
|
+
] })]
|
|
347
|
+
})]
|
|
348
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
349
|
+
className: "space-y-2",
|
|
350
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
351
|
+
htmlFor: "waitlist-current-stack",
|
|
352
|
+
className: "text-sm font-medium",
|
|
353
|
+
children: "Current stack"
|
|
354
|
+
}), /* @__PURE__ */ jsx(Input, {
|
|
355
|
+
id: "waitlist-current-stack",
|
|
356
|
+
...designPartnerForm.register("currentStack"),
|
|
357
|
+
type: "text",
|
|
358
|
+
placeholder: "e.g. Next.js, Postgres, OpenAPI",
|
|
359
|
+
disabled: isPending || submitResult?.success
|
|
360
|
+
})]
|
|
361
|
+
})]
|
|
362
|
+
}),
|
|
363
|
+
/* @__PURE__ */ jsxs("div", {
|
|
364
|
+
className: "space-y-2",
|
|
365
|
+
children: [
|
|
366
|
+
/* @__PURE__ */ jsxs(Label, {
|
|
367
|
+
htmlFor: "waitlist-what-building",
|
|
368
|
+
className: "text-sm font-medium",
|
|
369
|
+
children: [
|
|
370
|
+
"What are you building with AI today?",
|
|
371
|
+
" ",
|
|
372
|
+
/* @__PURE__ */ jsx("span", {
|
|
373
|
+
className: "text-red-400",
|
|
374
|
+
children: "*"
|
|
375
|
+
})
|
|
376
|
+
]
|
|
377
|
+
}),
|
|
378
|
+
/* @__PURE__ */ jsx(Textarea, {
|
|
379
|
+
id: "waitlist-what-building",
|
|
380
|
+
...designPartnerForm.register("whatBuilding"),
|
|
381
|
+
placeholder: "Tell us about your project...",
|
|
382
|
+
disabled: isPending || submitResult?.success,
|
|
383
|
+
rows: 4
|
|
384
|
+
}),
|
|
385
|
+
designPartnerForm.formState.errors.whatBuilding && /* @__PURE__ */ jsx("p", {
|
|
386
|
+
className: "text-xs text-red-400",
|
|
387
|
+
children: designPartnerForm.formState.errors.whatBuilding.message
|
|
388
|
+
})
|
|
389
|
+
]
|
|
390
|
+
}),
|
|
391
|
+
/* @__PURE__ */ jsxs("div", {
|
|
392
|
+
className: "space-y-2",
|
|
393
|
+
children: [
|
|
394
|
+
/* @__PURE__ */ jsxs(Label, {
|
|
395
|
+
htmlFor: "waitlist-what-solving",
|
|
396
|
+
className: "text-sm font-medium",
|
|
397
|
+
children: [
|
|
398
|
+
"What do you hope ContractSpec will solve for you?",
|
|
399
|
+
" ",
|
|
400
|
+
/* @__PURE__ */ jsx("span", {
|
|
401
|
+
className: "text-red-400",
|
|
402
|
+
children: "*"
|
|
403
|
+
})
|
|
404
|
+
]
|
|
405
|
+
}),
|
|
406
|
+
/* @__PURE__ */ jsx(Textarea, {
|
|
407
|
+
id: "waitlist-what-solving",
|
|
408
|
+
...designPartnerForm.register("whatSolving"),
|
|
409
|
+
placeholder: "What problems are you trying to solve?",
|
|
410
|
+
disabled: isPending || submitResult?.success,
|
|
411
|
+
rows: 4
|
|
412
|
+
}),
|
|
413
|
+
designPartnerForm.formState.errors.whatSolving && /* @__PURE__ */ jsx("p", {
|
|
414
|
+
className: "text-xs text-red-400",
|
|
415
|
+
children: designPartnerForm.formState.errors.whatSolving.message
|
|
416
|
+
})
|
|
417
|
+
]
|
|
418
|
+
}),
|
|
419
|
+
/* @__PURE__ */ jsxs("div", {
|
|
420
|
+
className: "grid gap-4 md:grid-cols-2",
|
|
421
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
422
|
+
className: "space-y-2",
|
|
423
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
424
|
+
htmlFor: "waitlist-team-size",
|
|
425
|
+
className: "text-sm font-medium",
|
|
426
|
+
children: "Team Size"
|
|
427
|
+
}), /* @__PURE__ */ jsxs(Select, {
|
|
428
|
+
value: designPartnerForm.watch("teamSize") || "",
|
|
429
|
+
onValueChange: (value) => designPartnerForm.setValue("teamSize", value),
|
|
430
|
+
disabled: isPending || submitResult?.success,
|
|
431
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
432
|
+
id: "waitlist-team-size",
|
|
433
|
+
className: "w-full",
|
|
434
|
+
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select team size" })
|
|
435
|
+
}), /* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
436
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
437
|
+
value: "solo",
|
|
438
|
+
children: "Solo"
|
|
439
|
+
}),
|
|
440
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
441
|
+
value: "2-5",
|
|
442
|
+
children: "2-5"
|
|
443
|
+
}),
|
|
444
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
445
|
+
value: "6-20",
|
|
446
|
+
children: "6-20"
|
|
447
|
+
}),
|
|
448
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
449
|
+
value: "20+",
|
|
450
|
+
children: "20+"
|
|
451
|
+
})
|
|
452
|
+
] })]
|
|
453
|
+
})]
|
|
454
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
455
|
+
className: "space-y-2",
|
|
456
|
+
children: [/* @__PURE__ */ jsx(Label, {
|
|
457
|
+
htmlFor: "waitlist-timeline",
|
|
458
|
+
className: "text-sm font-medium",
|
|
459
|
+
children: "Timeline"
|
|
460
|
+
}), /* @__PURE__ */ jsxs(Select, {
|
|
461
|
+
value: designPartnerForm.watch("timeline") || "",
|
|
462
|
+
onValueChange: (value) => designPartnerForm.setValue("timeline", value),
|
|
463
|
+
disabled: isPending || submitResult?.success,
|
|
464
|
+
children: [/* @__PURE__ */ jsx(SelectTrigger, {
|
|
465
|
+
id: "waitlist-timeline",
|
|
466
|
+
className: "w-full",
|
|
467
|
+
children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select timeline" })
|
|
468
|
+
}), /* @__PURE__ */ jsxs(SelectContent, { children: [
|
|
469
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
470
|
+
value: "now",
|
|
471
|
+
children: "Now"
|
|
472
|
+
}),
|
|
473
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
474
|
+
value: "1-3-months",
|
|
475
|
+
children: "1-3 months"
|
|
476
|
+
}),
|
|
477
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
478
|
+
value: "3-6-months",
|
|
479
|
+
children: "3-6 months"
|
|
480
|
+
}),
|
|
481
|
+
/* @__PURE__ */ jsx(SelectItem, {
|
|
482
|
+
value: "exploring",
|
|
483
|
+
children: "Exploring"
|
|
484
|
+
})
|
|
485
|
+
] })]
|
|
486
|
+
})]
|
|
487
|
+
})]
|
|
488
|
+
}),
|
|
489
|
+
/* @__PURE__ */ jsxs("div", {
|
|
490
|
+
className: "space-y-3",
|
|
491
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
492
|
+
className: "flex items-start gap-3",
|
|
493
|
+
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
494
|
+
id: "waitlist-open-to-sessions",
|
|
495
|
+
checked: designPartnerForm.watch("openToSessions"),
|
|
496
|
+
onCheckedChange: (checked) => designPartnerForm.setValue("openToSessions", checked === true),
|
|
497
|
+
disabled: isPending || submitResult?.success
|
|
498
|
+
}), /* @__PURE__ */ jsx(Label, {
|
|
499
|
+
htmlFor: "waitlist-open-to-sessions",
|
|
500
|
+
className: "cursor-pointer text-sm leading-relaxed",
|
|
501
|
+
children: "I'm open to 1:1 product/design sessions"
|
|
502
|
+
})]
|
|
503
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
504
|
+
className: "flex items-start gap-3",
|
|
505
|
+
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
506
|
+
id: "waitlist-case-studies",
|
|
507
|
+
checked: designPartnerForm.watch("okayWithCaseStudies"),
|
|
508
|
+
onCheckedChange: (checked) => designPartnerForm.setValue("okayWithCaseStudies", checked === true),
|
|
509
|
+
disabled: isPending || submitResult?.success
|
|
510
|
+
}), /* @__PURE__ */ jsx(Label, {
|
|
511
|
+
htmlFor: "waitlist-case-studies",
|
|
512
|
+
className: "cursor-pointer text-sm leading-relaxed",
|
|
513
|
+
children: "I'm okay with anonymized case studies about our usage"
|
|
514
|
+
})]
|
|
515
|
+
})]
|
|
516
|
+
})
|
|
517
|
+
] }) : /* @__PURE__ */ jsxs("div", {
|
|
518
|
+
className: "space-y-2",
|
|
519
|
+
children: [
|
|
520
|
+
/* @__PURE__ */ jsxs(Label, {
|
|
521
|
+
htmlFor: "waitlist-email",
|
|
522
|
+
className: "text-sm font-medium",
|
|
523
|
+
children: ["Email ", /* @__PURE__ */ jsx("span", {
|
|
524
|
+
className: "text-red-400",
|
|
525
|
+
children: "*"
|
|
526
|
+
})]
|
|
527
|
+
}),
|
|
528
|
+
/* @__PURE__ */ jsx(Input, {
|
|
529
|
+
id: "waitlist-email",
|
|
530
|
+
...simpleForm.register("email"),
|
|
531
|
+
type: "email",
|
|
532
|
+
placeholder: "your@email.com",
|
|
533
|
+
disabled: isPending || submitResult?.success
|
|
534
|
+
}),
|
|
535
|
+
simpleForm.formState.errors.email && /* @__PURE__ */ jsx("p", {
|
|
536
|
+
className: "text-xs text-red-400",
|
|
537
|
+
children: simpleForm.formState.errors.email.message
|
|
538
|
+
})
|
|
539
|
+
]
|
|
540
|
+
}),
|
|
541
|
+
submitResult && !isPending && /* @__PURE__ */ jsxs("div", {
|
|
542
|
+
className: `flex items-start gap-2 rounded-lg p-4 text-sm ${submitResult.success ? "border border-green-500/20 bg-green-500/10 text-green-400" : "border border-red-500/20 bg-red-500/10 text-red-400"}`,
|
|
543
|
+
children: [submitResult.success ? /* @__PURE__ */ jsx(CheckCircle, {
|
|
544
|
+
size: 20,
|
|
545
|
+
className: "mt-0.5 shrink-0"
|
|
546
|
+
}) : /* @__PURE__ */ jsx(AlertCircle, {
|
|
547
|
+
size: 20,
|
|
548
|
+
className: "mt-0.5 shrink-0"
|
|
549
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
550
|
+
className: "flex-1",
|
|
551
|
+
children: submitResult.success ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
|
|
552
|
+
className: "mb-1 font-semibold",
|
|
553
|
+
children: "You're on the list."
|
|
554
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
555
|
+
className: "text-sm",
|
|
556
|
+
children: submitResult.text
|
|
557
|
+
})] }) : /* @__PURE__ */ jsx("p", { children: submitResult.text })
|
|
558
|
+
})]
|
|
559
|
+
}),
|
|
560
|
+
/* @__PURE__ */ jsx(Button, {
|
|
561
|
+
type: "submit",
|
|
562
|
+
disabled: isPending || submitResult?.success,
|
|
563
|
+
className: "w-full",
|
|
564
|
+
children: isPending ? "Submitting..." : isDesignPartner ? "Apply to the waitlist" : "Join waitlist"
|
|
565
|
+
}),
|
|
566
|
+
/* @__PURE__ */ jsx("p", {
|
|
567
|
+
className: "text-muted-foreground text-center text-xs",
|
|
568
|
+
children: "No spam. We'll only email you about ContractSpec and your application."
|
|
569
|
+
})
|
|
570
|
+
]
|
|
571
|
+
})
|
|
572
|
+
]
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
//#endregion
|
|
577
|
+
export { WaitlistSection };
|
|
578
|
+
//# sourceMappingURL=waitlist-section.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitlist-section.js","names":[],"sources":["../../../src/components/marketing/waitlist-section.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport z from 'zod';\nimport { AlertCircle, CheckCircle } from 'lucide-react';\nimport { joinWaitlist } from '../../libs/email/waitlist';\nimport { submitWaitlistApplication } from '../../libs/email/waitlist-application';\nimport { Button } from '@contractspec/lib.design-system';\nimport { Textarea } from '@contractspec/lib.design-system';\nimport { Label } from '@contractspec/lib.ui-kit-web/ui/label';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@contractspec/lib.ui-kit-web/ui/select';\nimport { Checkbox } from '@contractspec/lib.ui-kit-web/ui/checkbox';\nimport { Switch } from '@contractspec/lib.ui-kit-web/ui/switch';\nimport { Input } from '@contractspec/lib.design-system';\n\ninterface WaitlistSectionProps {\n variant?: 'default' | 'compact';\n context?: 'pricing' | 'contact';\n scrollToId?: string;\n}\n\n// Zod schemas\nconst simpleWaitlistSchema = z.object({\n email: z.email('Please enter a valid email address'),\n});\n\nconst designPartnerSchema = z.object({\n name: z.string().min(1, 'Name is required'),\n email: z.email('Please enter a valid email address'),\n company: z.string().optional(),\n role: z.string().optional(),\n useCase: z.string().optional(),\n currentStack: z.string().optional(),\n whatBuilding: z.string().min(1, 'Please tell us what you are building'),\n whatSolving: z\n .string()\n .min(1, 'Please tell us what ContractSpec will solve for you'),\n teamSize: z.string().optional(),\n timeline: z.string().optional(),\n openToSessions: z.boolean().default(false),\n okayWithCaseStudies: z.boolean().default(false),\n});\n\ntype SimpleWaitlistFormData = z.infer<typeof simpleWaitlistSchema>;\ntype DesignPartnerFormData = z.infer<typeof designPartnerSchema>;\n\nexport function WaitlistSection({\n variant = 'default',\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n context = 'pricing',\n}: WaitlistSectionProps) {\n const [isDesignPartner, setIsDesignPartner] = useState(false);\n const [submitResult, setSubmitResult] = useState<{\n success: boolean;\n text: string;\n } | null>(null);\n const [isPending, setIsPending] = useState(false);\n\n // Simple waitlist form\n const simpleForm = useForm<SimpleWaitlistFormData>({\n resolver: zodResolver(simpleWaitlistSchema),\n defaultValues: {\n email: '',\n },\n });\n\n // Design partner form\n const designPartnerForm = useForm({\n resolver: zodResolver<\n z.input<typeof designPartnerSchema>,\n unknown,\n z.output<typeof designPartnerSchema>\n >(designPartnerSchema),\n defaultValues: {\n name: '',\n email: '',\n company: '',\n role: '',\n useCase: '',\n currentStack: '',\n whatBuilding: '',\n whatSolving: '',\n teamSize: '',\n timeline: '',\n openToSessions: false,\n okayWithCaseStudies: false,\n },\n });\n\n // Sync email between forms\n const simpleEmail = simpleForm.watch('email');\n const designPartnerEmail = designPartnerForm.watch('email');\n\n // Sync from simple form to design partner form\n useEffect(() => {\n const currentDesignPartnerEmail = designPartnerForm.getValues('email');\n if (simpleEmail && simpleEmail !== currentDesignPartnerEmail) {\n designPartnerForm.setValue('email', simpleEmail, { shouldDirty: false });\n }\n }, [simpleEmail, designPartnerForm]);\n\n // Sync from design partner form to simple form\n useEffect(() => {\n const currentSimpleEmail = simpleForm.getValues('email');\n if (designPartnerEmail && designPartnerEmail !== currentSimpleEmail) {\n simpleForm.setValue('email', designPartnerEmail, { shouldDirty: false });\n }\n }, [designPartnerEmail, simpleForm]);\n\n const handleSimpleSubmit = async (data: SimpleWaitlistFormData) => {\n setIsPending(true);\n setSubmitResult(null);\n\n try {\n const formData = new FormData();\n formData.set('email', data.email);\n\n const result = await joinWaitlist(formData);\n\n if (result.success) {\n setSubmitResult({\n success: true,\n text: 'Thanks for joining the waitlist! Check your inbox for a confirmation.',\n });\n simpleForm.reset();\n } else {\n setSubmitResult({\n success: false,\n text: result.text || 'Failed to join waitlist. Please try again.',\n });\n }\n } catch (_error) {\n setSubmitResult({\n success: false,\n text: 'Failed to join waitlist. Please try again.',\n });\n } finally {\n setIsPending(false);\n }\n };\n\n const handleDesignPartnerSubmit = async (data: DesignPartnerFormData) => {\n setIsPending(true);\n setSubmitResult(null);\n\n try {\n const formData = new FormData();\n formData.set('email', data.email);\n formData.set('name', data.name);\n if (data.company) formData.set('company', data.company);\n if (data.role) formData.set('role', data.role);\n if (data.useCase) formData.set('useCase', data.useCase);\n if (data.currentStack) formData.set('currentStack', data.currentStack);\n formData.set('whatBuilding', data.whatBuilding);\n formData.set('whatSolving', data.whatSolving);\n if (data.teamSize) formData.set('teamSize', data.teamSize);\n if (data.timeline) formData.set('timeline', data.timeline);\n if (data.openToSessions) formData.set('openToSessions', 'on');\n if (data.okayWithCaseStudies) formData.set('okayWithCaseStudies', 'on');\n\n const result = await submitWaitlistApplication(formData);\n\n if (result.success) {\n setSubmitResult({\n success: true,\n text: \"You're on the list. Thanks for applying. We're slowly onboarding design partners in waves. If your use case is a good fit, we'll reach out personally.\",\n });\n designPartnerForm.reset();\n } else {\n setSubmitResult({\n success: false,\n text:\n result.text || 'Failed to submit application. Please try again.',\n });\n }\n } catch (_error) {\n setSubmitResult({\n success: false,\n text: 'Failed to submit application. Please try again.',\n });\n } finally {\n setIsPending(false);\n }\n };\n\n const onSubmit = isDesignPartner\n ? designPartnerForm.handleSubmit(handleDesignPartnerSubmit)\n : simpleForm.handleSubmit(handleSimpleSubmit);\n\n const isCompact = variant === 'compact';\n\n return (\n <div\n id=\"waitlist\"\n className={isCompact ? 'space-y-4' : 'card-subtle space-y-6 p-8'}\n >\n {!isCompact && (\n <div className=\"space-y-4\">\n <div className=\"inline-flex items-center gap-2 rounded-full border border-violet-500/20 bg-violet-500/10 px-3 py-1\">\n <span className=\"text-sm font-medium text-violet-300\">\n {isDesignPartner\n ? 'Design Partner Waitlist'\n : 'Join the Waitlist'}\n </span>\n </div>\n <h2 className=\"text-2xl font-bold\">\n {isDesignPartner\n ? 'Apply for early access to ContractSpec'\n : 'Get early access to ContractSpec'}\n </h2>\n <p className=\"text-muted-foreground text-sm\">\n {isDesignPartner\n ? \"Tell us what you're building. We'll prioritize teams where ContractSpec can have a big impact, and where we can learn the most.\"\n : 'Join the waitlist to be notified when ContractSpec becomes available.'}\n </p>\n </div>\n )}\n\n {!isCompact && (\n <div className=\"border-border bg-muted/20 flex items-center justify-between gap-4 rounded-lg border p-4\">\n <div className=\"space-y-1\">\n <Label\n htmlFor=\"design-partner-toggle\"\n className=\"text-sm font-medium\"\n >\n Apply as a design partner\n </Label>\n <p className=\"text-muted-foreground text-xs\">\n {isDesignPartner\n ? 'Get hands-on support, influence the roadmap, and founding discount'\n : 'Get priority access, 1:1 onboarding, and help shape ContractSpec'}\n </p>\n </div>\n <Switch\n id=\"design-partner-toggle\"\n checked={isDesignPartner}\n onCheckedChange={setIsDesignPartner}\n disabled={isPending || submitResult?.success}\n />\n </div>\n )}\n\n {!isCompact && isDesignPartner && (\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium\">Benefits:</p>\n <ul className=\"text-muted-foreground space-y-1 text-sm\">\n <li>• Early access to ContractSpec Studio</li>\n <li>• 1:1 onboarding and architecture sessions</li>\n <li>• Priority support via direct channels</li>\n <li>• Influence over roadmap and features</li>\n <li>• Founding discount when paid plans launch</li>\n </ul>\n </div>\n )}\n\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {isDesignPartner ? (\n <>\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"waitlist-name\" className=\"text-sm font-medium\">\n Name <span className=\"text-red-400\">*</span>\n </Label>\n <Input\n id=\"waitlist-name\"\n {...designPartnerForm.register('name')}\n type=\"text\"\n placeholder=\"Your name\"\n disabled={isPending || submitResult?.success}\n />\n {designPartnerForm.formState.errors.name && (\n <p className=\"text-xs text-red-400\">\n {designPartnerForm.formState.errors.name.message}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"waitlist-email\" className=\"text-sm font-medium\">\n Email <span className=\"text-red-400\">*</span>\n </Label>\n <Input\n id=\"waitlist-email\"\n {...designPartnerForm.register('email')}\n type=\"email\"\n placeholder=\"your@email.com\"\n disabled={isPending || submitResult?.success}\n />\n {designPartnerForm.formState.errors.email && (\n <p className=\"text-xs text-red-400\">\n {designPartnerForm.formState.errors.email.message}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-company\"\n className=\"text-sm font-medium\"\n >\n Company / Project Name\n </Label>\n <Input\n id=\"waitlist-company\"\n {...designPartnerForm.register('company')}\n type=\"text\"\n placeholder=\"Your company or project\"\n disabled={isPending || submitResult?.success}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"waitlist-role\" className=\"text-sm font-medium\">\n Role\n </Label>\n <Select\n value={designPartnerForm.watch('role') || ''}\n onValueChange={(value) =>\n designPartnerForm.setValue('role', value)\n }\n disabled={isPending || submitResult?.success}\n >\n <SelectTrigger id=\"waitlist-role\" className=\"w-full\">\n <SelectValue placeholder=\"Select your role\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"founder\">Founder</SelectItem>\n <SelectItem value=\"cto\">CTO</SelectItem>\n <SelectItem value=\"lead-engineer\">Lead Engineer</SelectItem>\n <SelectItem value=\"engineer\">Engineer</SelectItem>\n <SelectItem value=\"product-manager\">\n Product Manager\n </SelectItem>\n <SelectItem value=\"other\">Other</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-use-case\"\n className=\"text-sm font-medium\"\n >\n Primary use case\n </Label>\n <Select\n value={designPartnerForm.watch('useCase') || ''}\n onValueChange={(value) =>\n designPartnerForm.setValue('useCase', value)\n }\n disabled={isPending || submitResult?.success}\n >\n <SelectTrigger id=\"waitlist-use-case\" className=\"w-full\">\n <SelectValue placeholder=\"Select a use case\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"api-platform\">API platform</SelectItem>\n <SelectItem value=\"ai-ops\">AI operations</SelectItem>\n <SelectItem value=\"integration-hub\">\n Integration hub\n </SelectItem>\n <SelectItem value=\"internal-tools\">\n Internal tools\n </SelectItem>\n <SelectItem value=\"data-pipelines\">\n Data pipelines\n </SelectItem>\n <SelectItem value=\"other\">Other</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-current-stack\"\n className=\"text-sm font-medium\"\n >\n Current stack\n </Label>\n <Input\n id=\"waitlist-current-stack\"\n {...designPartnerForm.register('currentStack')}\n type=\"text\"\n placeholder=\"e.g. Next.js, Postgres, OpenAPI\"\n disabled={isPending || submitResult?.success}\n />\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-what-building\"\n className=\"text-sm font-medium\"\n >\n What are you building with AI today?{' '}\n <span className=\"text-red-400\">*</span>\n </Label>\n <Textarea\n id=\"waitlist-what-building\"\n {...designPartnerForm.register('whatBuilding')}\n placeholder=\"Tell us about your project...\"\n disabled={isPending || submitResult?.success}\n rows={4}\n />\n {designPartnerForm.formState.errors.whatBuilding && (\n <p className=\"text-xs text-red-400\">\n {designPartnerForm.formState.errors.whatBuilding.message}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-what-solving\"\n className=\"text-sm font-medium\"\n >\n What do you hope ContractSpec will solve for you?{' '}\n <span className=\"text-red-400\">*</span>\n </Label>\n <Textarea\n id=\"waitlist-what-solving\"\n {...designPartnerForm.register('whatSolving')}\n placeholder=\"What problems are you trying to solve?\"\n disabled={isPending || submitResult?.success}\n rows={4}\n />\n {designPartnerForm.formState.errors.whatSolving && (\n <p className=\"text-xs text-red-400\">\n {designPartnerForm.formState.errors.whatSolving.message}\n </p>\n )}\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-2\">\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-team-size\"\n className=\"text-sm font-medium\"\n >\n Team Size\n </Label>\n <Select\n value={designPartnerForm.watch('teamSize') || ''}\n onValueChange={(value) =>\n designPartnerForm.setValue('teamSize', value)\n }\n disabled={isPending || submitResult?.success}\n >\n <SelectTrigger id=\"waitlist-team-size\" className=\"w-full\">\n <SelectValue placeholder=\"Select team size\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"solo\">Solo</SelectItem>\n <SelectItem value=\"2-5\">2-5</SelectItem>\n <SelectItem value=\"6-20\">6-20</SelectItem>\n <SelectItem value=\"20+\">20+</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <Label\n htmlFor=\"waitlist-timeline\"\n className=\"text-sm font-medium\"\n >\n Timeline\n </Label>\n <Select\n value={designPartnerForm.watch('timeline') || ''}\n onValueChange={(value) =>\n designPartnerForm.setValue('timeline', value)\n }\n disabled={isPending || submitResult?.success}\n >\n <SelectTrigger id=\"waitlist-timeline\" className=\"w-full\">\n <SelectValue placeholder=\"Select timeline\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"now\">Now</SelectItem>\n <SelectItem value=\"1-3-months\">1-3 months</SelectItem>\n <SelectItem value=\"3-6-months\">3-6 months</SelectItem>\n <SelectItem value=\"exploring\">Exploring</SelectItem>\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"space-y-3\">\n <div className=\"flex items-start gap-3\">\n <Checkbox\n id=\"waitlist-open-to-sessions\"\n checked={designPartnerForm.watch('openToSessions')}\n onCheckedChange={(checked) =>\n designPartnerForm.setValue(\n 'openToSessions',\n checked === true\n )\n }\n disabled={isPending || submitResult?.success}\n />\n <Label\n htmlFor=\"waitlist-open-to-sessions\"\n className=\"cursor-pointer text-sm leading-relaxed\"\n >\n I'm open to 1:1 product/design sessions\n </Label>\n </div>\n\n <div className=\"flex items-start gap-3\">\n <Checkbox\n id=\"waitlist-case-studies\"\n checked={designPartnerForm.watch('okayWithCaseStudies')}\n onCheckedChange={(checked) =>\n designPartnerForm.setValue(\n 'okayWithCaseStudies',\n checked === true\n )\n }\n disabled={isPending || submitResult?.success}\n />\n <Label\n htmlFor=\"waitlist-case-studies\"\n className=\"cursor-pointer text-sm leading-relaxed\"\n >\n I'm okay with anonymized case studies about our usage\n </Label>\n </div>\n </div>\n </>\n ) : (\n <div className=\"space-y-2\">\n <Label htmlFor=\"waitlist-email\" className=\"text-sm font-medium\">\n Email <span className=\"text-red-400\">*</span>\n </Label>\n <Input\n id=\"waitlist-email\"\n {...simpleForm.register('email')}\n type=\"email\"\n placeholder=\"your@email.com\"\n disabled={isPending || submitResult?.success}\n />\n {simpleForm.formState.errors.email && (\n <p className=\"text-xs text-red-400\">\n {simpleForm.formState.errors.email.message}\n </p>\n )}\n </div>\n )}\n\n {submitResult && !isPending && (\n <div\n className={`flex items-start gap-2 rounded-lg p-4 text-sm ${\n submitResult.success\n ? 'border border-green-500/20 bg-green-500/10 text-green-400'\n : 'border border-red-500/20 bg-red-500/10 text-red-400'\n }`}\n >\n {submitResult.success ? (\n <CheckCircle size={20} className=\"mt-0.5 shrink-0\" />\n ) : (\n <AlertCircle size={20} className=\"mt-0.5 shrink-0\" />\n )}\n <div className=\"flex-1\">\n {submitResult.success ? (\n <>\n <p className=\"mb-1 font-semibold\">You're on the list.</p>\n <p className=\"text-sm\">{submitResult.text}</p>\n </>\n ) : (\n <p>{submitResult.text}</p>\n )}\n </div>\n </div>\n )}\n\n <Button\n type=\"submit\"\n disabled={isPending || submitResult?.success}\n className=\"w-full\"\n >\n {isPending\n ? 'Submitting...'\n : isDesignPartner\n ? 'Apply to the waitlist'\n : 'Join waitlist'}\n </Button>\n\n <p className=\"text-muted-foreground text-center text-xs\">\n No spam. We'll only email you about ContractSpec and your application.\n </p>\n </form>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
|
|
3
|
+
//#region src/components/templates/TemplatesClientPage.d.ts
|
|
4
|
+
declare const TemplatesPage: () => react_jsx_runtime0.JSX.Element;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { TemplatesPage };
|
|
7
|
+
//# sourceMappingURL=TemplatesClientPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplatesClientPage.d.ts","names":[],"sources":["../../../src/components/templates/TemplatesClientPage.tsx"],"mappings":";;;cA0Pa,aAAA,QAAa,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|