@victusvinceere/saas-landing 0.1.0 → 0.1.1

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/README.md ADDED
@@ -0,0 +1,332 @@
1
+ # @victusvinceere/saas-landing
2
+
3
+ Landing page and marketing components for SaaS applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @victusvinceere/saas-landing
9
+ ```
10
+
11
+ ## Components
12
+
13
+ ### Navbar
14
+
15
+ Navigation bar with brand, links, and CTA button.
16
+
17
+ ```tsx
18
+ import { Navbar } from "@victusvinceere/saas-landing/components";
19
+
20
+ <Navbar
21
+ brand="MySaaS"
22
+ links={[
23
+ { label: "Features", href: "#features" },
24
+ { label: "Pricing", href: "#pricing" },
25
+ { label: "FAQ", href: "#faq" },
26
+ ]}
27
+ cta={{ label: "Get Started", href: "#waitlist" }}
28
+ />
29
+ ```
30
+
31
+ ### Hero
32
+
33
+ Hero section with badge, title, description, and CTAs.
34
+
35
+ ```tsx
36
+ import { Hero } from "@victusvinceere/saas-landing/components";
37
+
38
+ <Hero
39
+ badge="Now in Beta"
40
+ title="Your Amazing"
41
+ highlight="Product"
42
+ description="The best solution for your needs."
43
+ primaryCta={{ label: "Get Started", href: "#waitlist" }}
44
+ secondaryCta={{ label: "Learn More", href: "#features" }}
45
+ />
46
+ ```
47
+
48
+ ### Features
49
+
50
+ Feature grid with icons and descriptions.
51
+
52
+ ```tsx
53
+ import { Features } from "@victusvinceere/saas-landing/components";
54
+
55
+ <Features
56
+ title="Features"
57
+ subtitle="Everything you need to succeed"
58
+ features={[
59
+ {
60
+ icon: "Zap",
61
+ title: "Lightning Fast",
62
+ description: "Built for speed and performance.",
63
+ },
64
+ {
65
+ icon: "Shield",
66
+ title: "Secure",
67
+ description: "Enterprise-grade security.",
68
+ },
69
+ ]}
70
+ />
71
+ ```
72
+
73
+ ### Pricing
74
+
75
+ Pricing plans with feature lists.
76
+
77
+ ```tsx
78
+ import { Pricing } from "@victusvinceere/saas-landing/components";
79
+
80
+ <Pricing
81
+ title="Simple Pricing"
82
+ subtitle="Choose your plan"
83
+ plans={[
84
+ {
85
+ name: "Starter",
86
+ price: 29,
87
+ period: "mo",
88
+ description: "For individuals",
89
+ features: ["Feature 1", "Feature 2"],
90
+ cta: { label: "Get Started", href: "#" },
91
+ highlighted: false,
92
+ },
93
+ {
94
+ name: "Pro",
95
+ price: 79,
96
+ period: "mo",
97
+ description: "For teams",
98
+ features: ["Everything in Starter", "Feature 3"],
99
+ cta: { label: "Get Started", href: "#" },
100
+ highlighted: true,
101
+ },
102
+ ]}
103
+ />
104
+ ```
105
+
106
+ ### Faq
107
+
108
+ Accordion FAQ section.
109
+
110
+ ```tsx
111
+ import { Faq } from "@victusvinceere/saas-landing/components";
112
+
113
+ <Faq
114
+ title="Frequently Asked Questions"
115
+ subtitle="Everything you need to know"
116
+ items={[
117
+ {
118
+ question: "What is this product?",
119
+ answer: "It's the best SaaS solution.",
120
+ },
121
+ {
122
+ question: "How much does it cost?",
123
+ answer: "Plans start at $29/month.",
124
+ },
125
+ ]}
126
+ />
127
+ ```
128
+
129
+ ### Testimonials
130
+
131
+ Customer testimonials in a grid layout.
132
+
133
+ ```tsx
134
+ import { Testimonials } from "@victusvinceere/saas-landing/components";
135
+
136
+ <Testimonials
137
+ title="What Our Customers Say"
138
+ subtitle="Don't just take our word for it"
139
+ testimonials={[
140
+ {
141
+ quote: "This product changed everything for us!",
142
+ author: "Jane Smith",
143
+ role: "CEO",
144
+ company: "TechCorp",
145
+ initial: "J",
146
+ color: "from-blue-400 to-blue-600",
147
+ },
148
+ {
149
+ quote: "The best investment we've made.",
150
+ author: "John Doe",
151
+ role: "CTO",
152
+ company: "StartupXYZ",
153
+ image: "/avatars/john.jpg", // Or use initial/color
154
+ },
155
+ ]}
156
+ />
157
+ ```
158
+
159
+ ### Waitlist
160
+
161
+ Email capture form with optional business type selector.
162
+
163
+ ```tsx
164
+ import { Waitlist } from "@victusvinceere/saas-landing/components";
165
+
166
+ <Waitlist
167
+ title="Join the Waitlist"
168
+ description="Be the first to know when we launch."
169
+ badge="Early Access"
170
+ submitText="Join Waitlist"
171
+ successMessage="You're on the list!"
172
+ endpoint="/api/waitlist"
173
+ showBusinessType={true}
174
+ businessTypes={[
175
+ { value: "startup", label: "Startup" },
176
+ { value: "enterprise", label: "Enterprise" },
177
+ ]}
178
+ tracking={{
179
+ onFormStart: () => console.log("Form started"),
180
+ onSubmit: (success, businessType) => console.log("Submitted", success),
181
+ }}
182
+ />
183
+ ```
184
+
185
+ ### Cta
186
+
187
+ Call-to-action section.
188
+
189
+ ```tsx
190
+ import { Cta } from "@victusvinceere/saas-landing/components";
191
+
192
+ <Cta
193
+ title="Ready to get started?"
194
+ description="Join thousands of happy customers."
195
+ cta={{ label: "Start Free Trial", href: "/signup" }}
196
+ />
197
+ ```
198
+
199
+ ### Footer
200
+
201
+ Footer with brand and links.
202
+
203
+ ```tsx
204
+ import { Footer } from "@victusvinceere/saas-landing/components";
205
+
206
+ <Footer
207
+ brand="MySaaS"
208
+ links={[
209
+ { label: "Privacy", href: "/privacy" },
210
+ { label: "Terms", href: "/terms" },
211
+ { label: "Contact", href: "mailto:hello@example.com" },
212
+ ]}
213
+ copyright="© 2024 MySaaS. All rights reserved."
214
+ />
215
+ ```
216
+
217
+ ## Full Page Example
218
+
219
+ ```tsx
220
+ "use client";
221
+
222
+ import {
223
+ Navbar,
224
+ Hero,
225
+ Features,
226
+ Pricing,
227
+ Faq,
228
+ Testimonials,
229
+ Waitlist,
230
+ Footer,
231
+ } from "@victusvinceere/saas-landing/components";
232
+ import { siteConfig } from "@/config/site";
233
+
234
+ export default function LandingPage() {
235
+ return (
236
+ <div className="min-h-screen">
237
+ <Navbar
238
+ brand={siteConfig.name}
239
+ links={siteConfig.navigation}
240
+ cta={{ label: "Get Started", href: "#waitlist" }}
241
+ />
242
+
243
+ <Hero
244
+ badge={siteConfig.hero.badge}
245
+ title={siteConfig.hero.title}
246
+ highlight={siteConfig.hero.highlight}
247
+ description={siteConfig.hero.description}
248
+ primaryCta={siteConfig.hero.cta.primary}
249
+ secondaryCta={siteConfig.hero.cta.secondary}
250
+ />
251
+
252
+ <Features
253
+ title="Features"
254
+ subtitle="Everything you need"
255
+ features={siteConfig.features}
256
+ />
257
+
258
+ <Pricing
259
+ title={siteConfig.pricing.title}
260
+ subtitle={siteConfig.pricing.subtitle}
261
+ plans={siteConfig.pricing.plans}
262
+ />
263
+
264
+ <Testimonials
265
+ title="What Customers Say"
266
+ testimonials={siteConfig.testimonials}
267
+ />
268
+
269
+ <Faq
270
+ title="FAQ"
271
+ items={siteConfig.faq}
272
+ />
273
+
274
+ <Waitlist
275
+ title={siteConfig.waitlist.title}
276
+ description={siteConfig.waitlist.description}
277
+ badge={siteConfig.waitlist.badge}
278
+ submitText={siteConfig.waitlist.submitText}
279
+ businessTypes={siteConfig.waitlist.businessTypes}
280
+ />
281
+
282
+ <Footer
283
+ brand={siteConfig.name}
284
+ links={siteConfig.footer.links}
285
+ copyright={`© ${new Date().getFullYear()} ${siteConfig.name}`}
286
+ />
287
+ </div>
288
+ );
289
+ }
290
+ ```
291
+
292
+ ## TypeScript Types
293
+
294
+ All components export their prop types:
295
+
296
+ ```tsx
297
+ import type {
298
+ NavbarProps,
299
+ NavLink,
300
+ HeroProps,
301
+ FeaturesProps,
302
+ Feature,
303
+ PricingProps,
304
+ PricingPlan,
305
+ FaqProps,
306
+ FaqItem,
307
+ TestimonialsProps,
308
+ Testimonial,
309
+ WaitlistProps,
310
+ CtaProps,
311
+ FooterProps,
312
+ FooterLink,
313
+ } from "@victusvinceere/saas-landing/components";
314
+ ```
315
+
316
+ ## Styling
317
+
318
+ Components use Tailwind CSS and CSS variables for theming. Make sure your `tailwind.config.js` includes the package:
319
+
320
+ ```js
321
+ module.exports = {
322
+ content: [
323
+ "./src/**/*.{js,ts,jsx,tsx}",
324
+ "./node_modules/@victusvinceere/saas-landing/dist/**/*.{js,mjs}",
325
+ ],
326
+ // ...
327
+ };
328
+ ```
329
+
330
+ ## License
331
+
332
+ MIT
@@ -1,135 +1,56 @@
1
+ export { Cta, CtaProps, Faq, FaqItem, FaqProps, Feature, Features, FeaturesProps, Footer, FooterColumn, FooterLink, FooterProps, Hero, HeroProps, HeroStat, NavLink, Navbar, NavbarProps, Pricing, PricingPlan, PricingProps } from '../index.mjs';
1
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { LucideIcon } from 'lucide-react';
3
- import { ReactNode } from 'react';
4
-
5
- interface HeroStat {
6
- value: string;
7
- label: string;
8
- }
9
- interface HeroProps {
10
- badge?: {
11
- text: string;
12
- icon?: LucideIcon;
13
- };
14
- title: ReactNode;
15
- subtitle: string;
16
- stats?: HeroStat[];
17
- primaryCta?: {
18
- text: string;
19
- href: string;
20
- };
21
- secondaryCta?: {
22
- text: string;
23
- href: string;
24
- };
25
- trustedBy?: string[];
26
- children?: ReactNode;
27
- className?: string;
28
- }
29
- declare function Hero({ badge, title, subtitle, stats, primaryCta, secondaryCta, trustedBy, children, className, }: HeroProps): react_jsx_runtime.JSX.Element;
30
-
31
- interface Feature {
32
- name: string;
33
- description: string;
34
- icon: LucideIcon;
3
+ import 'lucide-react';
4
+ import 'react';
5
+
6
+ interface Testimonial {
7
+ quote: string;
8
+ author: string;
9
+ role: string;
10
+ company?: string;
11
+ initial?: string;
12
+ image?: string;
35
13
  color?: string;
36
- bg?: string;
37
- }
38
- interface FeaturesProps {
39
- badge?: string;
40
- title: string;
41
- subtitle?: string;
42
- features: Feature[];
43
- techStack?: Array<{
44
- name: string;
45
- color: string;
46
- textColor?: string;
47
- label: string;
48
- }>;
49
- className?: string;
50
14
  }
51
- declare function Features({ badge, title, subtitle, features, techStack, className, }: FeaturesProps): react_jsx_runtime.JSX.Element;
52
-
53
- interface PricingPlan {
54
- name: string;
55
- price: string;
56
- period?: string;
57
- description: string;
58
- features: string[];
59
- cta: string;
60
- href: string;
61
- popular?: boolean;
62
- }
63
- interface PricingProps {
15
+ interface TestimonialsProps {
64
16
  title?: string;
65
17
  subtitle?: string;
66
- plans: PricingPlan[];
18
+ testimonials: Testimonial[];
67
19
  className?: string;
68
20
  }
69
- declare function Pricing({ title, subtitle, plans, className, }: PricingProps): react_jsx_runtime.JSX.Element;
21
+ declare function Testimonials({ title, subtitle, testimonials, className, }: TestimonialsProps): react_jsx_runtime.JSX.Element;
70
22
 
71
- interface FaqItem {
72
- question: string;
73
- answer: string;
74
- }
75
- interface FaqProps {
23
+ interface WaitlistProps {
24
+ /** API endpoint for waitlist signup */
25
+ endpoint?: string;
26
+ /** Section title */
76
27
  title?: string;
77
- subtitle?: string;
78
- items: FaqItem[];
79
- className?: string;
80
- }
81
- declare function Faq({ title, subtitle, items, className, }: FaqProps): react_jsx_runtime.JSX.Element;
82
-
83
- interface CtaProps {
84
- title: string;
85
- subtitle?: string;
86
- primaryCta?: {
87
- text: string;
88
- href: string;
89
- };
90
- secondaryCta?: {
91
- text: string;
92
- href: string;
93
- };
94
- className?: string;
95
- }
96
- declare function Cta({ title, subtitle, primaryCta, secondaryCta, className, }: CtaProps): react_jsx_runtime.JSX.Element;
97
-
98
- interface FooterLink {
99
- label: string;
100
- href: string;
101
- }
102
- interface FooterColumn {
103
- title: string;
104
- links: FooterLink[];
105
- }
106
- interface FooterProps {
107
- logo?: ReactNode;
108
- siteName?: string;
109
- description?: string;
110
- columns?: FooterColumn[];
111
- socialLinks?: Array<{
112
- icon: ReactNode;
113
- href: string;
28
+ /** Section description */
29
+ description?: React.ReactNode;
30
+ /** Badge text */
31
+ badge?: string;
32
+ /** Submit button text */
33
+ submitText?: string;
34
+ /** Success message */
35
+ successMessage?: string;
36
+ /** Show business type selector */
37
+ showBusinessType?: boolean;
38
+ /** Business types list */
39
+ businessTypes?: Array<{
40
+ value: string;
114
41
  label: string;
115
42
  }>;
116
- copyright?: string;
117
- className?: string;
118
- }
119
- declare function Footer({ logo, siteName, description, columns, socialLinks, copyright, className, }: FooterProps): react_jsx_runtime.JSX.Element;
120
-
121
- interface NavLink {
122
- label: string;
123
- href: string;
124
- }
125
- interface NavbarProps {
126
- logo?: ReactNode;
127
- siteName?: string;
128
- links?: NavLink[];
129
- ctaText?: string;
130
- ctaHref?: string;
43
+ /** Tracking callbacks */
44
+ tracking?: {
45
+ onFormStart?: () => void;
46
+ onFieldFocus?: (field: string) => void;
47
+ onSubmit?: (success: boolean, businessType?: string) => void;
48
+ };
49
+ /** Additional data to send with the form */
50
+ additionalData?: Record<string, unknown>;
51
+ /** Custom class for the section */
131
52
  className?: string;
132
53
  }
133
- declare function Navbar({ logo, siteName, links, ctaText, ctaHref, className, }: NavbarProps): react_jsx_runtime.JSX.Element;
54
+ declare function Waitlist({ endpoint, title, description, badge, submitText, successMessage, showBusinessType, businessTypes, tracking, additionalData, className, }: WaitlistProps): react_jsx_runtime.JSX.Element;
134
55
 
135
- export { Cta, type CtaProps, Faq, type FaqItem, type FaqProps, type Feature, Features, type FeaturesProps, Footer, type FooterColumn, type FooterLink, type FooterProps, Hero, type HeroProps, type HeroStat, type NavLink, Navbar, type NavbarProps, Pricing, type PricingPlan, type PricingProps };
56
+ export { type Testimonial, Testimonials, type TestimonialsProps, Waitlist, type WaitlistProps };
@@ -1,135 +1,56 @@
1
+ export { Cta, CtaProps, Faq, FaqItem, FaqProps, Feature, Features, FeaturesProps, Footer, FooterColumn, FooterLink, FooterProps, Hero, HeroProps, HeroStat, NavLink, Navbar, NavbarProps, Pricing, PricingPlan, PricingProps } from '../index.js';
1
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { LucideIcon } from 'lucide-react';
3
- import { ReactNode } from 'react';
4
-
5
- interface HeroStat {
6
- value: string;
7
- label: string;
8
- }
9
- interface HeroProps {
10
- badge?: {
11
- text: string;
12
- icon?: LucideIcon;
13
- };
14
- title: ReactNode;
15
- subtitle: string;
16
- stats?: HeroStat[];
17
- primaryCta?: {
18
- text: string;
19
- href: string;
20
- };
21
- secondaryCta?: {
22
- text: string;
23
- href: string;
24
- };
25
- trustedBy?: string[];
26
- children?: ReactNode;
27
- className?: string;
28
- }
29
- declare function Hero({ badge, title, subtitle, stats, primaryCta, secondaryCta, trustedBy, children, className, }: HeroProps): react_jsx_runtime.JSX.Element;
30
-
31
- interface Feature {
32
- name: string;
33
- description: string;
34
- icon: LucideIcon;
3
+ import 'lucide-react';
4
+ import 'react';
5
+
6
+ interface Testimonial {
7
+ quote: string;
8
+ author: string;
9
+ role: string;
10
+ company?: string;
11
+ initial?: string;
12
+ image?: string;
35
13
  color?: string;
36
- bg?: string;
37
- }
38
- interface FeaturesProps {
39
- badge?: string;
40
- title: string;
41
- subtitle?: string;
42
- features: Feature[];
43
- techStack?: Array<{
44
- name: string;
45
- color: string;
46
- textColor?: string;
47
- label: string;
48
- }>;
49
- className?: string;
50
14
  }
51
- declare function Features({ badge, title, subtitle, features, techStack, className, }: FeaturesProps): react_jsx_runtime.JSX.Element;
52
-
53
- interface PricingPlan {
54
- name: string;
55
- price: string;
56
- period?: string;
57
- description: string;
58
- features: string[];
59
- cta: string;
60
- href: string;
61
- popular?: boolean;
62
- }
63
- interface PricingProps {
15
+ interface TestimonialsProps {
64
16
  title?: string;
65
17
  subtitle?: string;
66
- plans: PricingPlan[];
18
+ testimonials: Testimonial[];
67
19
  className?: string;
68
20
  }
69
- declare function Pricing({ title, subtitle, plans, className, }: PricingProps): react_jsx_runtime.JSX.Element;
21
+ declare function Testimonials({ title, subtitle, testimonials, className, }: TestimonialsProps): react_jsx_runtime.JSX.Element;
70
22
 
71
- interface FaqItem {
72
- question: string;
73
- answer: string;
74
- }
75
- interface FaqProps {
23
+ interface WaitlistProps {
24
+ /** API endpoint for waitlist signup */
25
+ endpoint?: string;
26
+ /** Section title */
76
27
  title?: string;
77
- subtitle?: string;
78
- items: FaqItem[];
79
- className?: string;
80
- }
81
- declare function Faq({ title, subtitle, items, className, }: FaqProps): react_jsx_runtime.JSX.Element;
82
-
83
- interface CtaProps {
84
- title: string;
85
- subtitle?: string;
86
- primaryCta?: {
87
- text: string;
88
- href: string;
89
- };
90
- secondaryCta?: {
91
- text: string;
92
- href: string;
93
- };
94
- className?: string;
95
- }
96
- declare function Cta({ title, subtitle, primaryCta, secondaryCta, className, }: CtaProps): react_jsx_runtime.JSX.Element;
97
-
98
- interface FooterLink {
99
- label: string;
100
- href: string;
101
- }
102
- interface FooterColumn {
103
- title: string;
104
- links: FooterLink[];
105
- }
106
- interface FooterProps {
107
- logo?: ReactNode;
108
- siteName?: string;
109
- description?: string;
110
- columns?: FooterColumn[];
111
- socialLinks?: Array<{
112
- icon: ReactNode;
113
- href: string;
28
+ /** Section description */
29
+ description?: React.ReactNode;
30
+ /** Badge text */
31
+ badge?: string;
32
+ /** Submit button text */
33
+ submitText?: string;
34
+ /** Success message */
35
+ successMessage?: string;
36
+ /** Show business type selector */
37
+ showBusinessType?: boolean;
38
+ /** Business types list */
39
+ businessTypes?: Array<{
40
+ value: string;
114
41
  label: string;
115
42
  }>;
116
- copyright?: string;
117
- className?: string;
118
- }
119
- declare function Footer({ logo, siteName, description, columns, socialLinks, copyright, className, }: FooterProps): react_jsx_runtime.JSX.Element;
120
-
121
- interface NavLink {
122
- label: string;
123
- href: string;
124
- }
125
- interface NavbarProps {
126
- logo?: ReactNode;
127
- siteName?: string;
128
- links?: NavLink[];
129
- ctaText?: string;
130
- ctaHref?: string;
43
+ /** Tracking callbacks */
44
+ tracking?: {
45
+ onFormStart?: () => void;
46
+ onFieldFocus?: (field: string) => void;
47
+ onSubmit?: (success: boolean, businessType?: string) => void;
48
+ };
49
+ /** Additional data to send with the form */
50
+ additionalData?: Record<string, unknown>;
51
+ /** Custom class for the section */
131
52
  className?: string;
132
53
  }
133
- declare function Navbar({ logo, siteName, links, ctaText, ctaHref, className, }: NavbarProps): react_jsx_runtime.JSX.Element;
54
+ declare function Waitlist({ endpoint, title, description, badge, submitText, successMessage, showBusinessType, businessTypes, tracking, additionalData, className, }: WaitlistProps): react_jsx_runtime.JSX.Element;
134
55
 
135
- export { Cta, type CtaProps, Faq, type FaqItem, type FaqProps, type Feature, Features, type FeaturesProps, Footer, type FooterColumn, type FooterLink, type FooterProps, Hero, type HeroProps, type HeroStat, type NavLink, Navbar, type NavbarProps, Pricing, type PricingPlan, type PricingProps };
56
+ export { type Testimonial, Testimonials, type TestimonialsProps, Waitlist, type WaitlistProps };