kofi-stack-template-generator 2.1.59 → 2.1.61
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.log +6 -6
- package/dist/index.js +1126 -23
- package/package.json +2 -2
- package/src/templates.generated.ts +23 -7
- package/templates/marketing/nextjs/components.json.hbs +44 -0
- package/templates/marketing/nextjs/package.json.hbs +2 -1
- package/templates/marketing/nextjs/src/app/about/page.tsx +155 -0
- package/templates/marketing/nextjs/src/app/blog/[slug]/page.tsx +181 -0
- package/templates/marketing/nextjs/src/app/features/analytics/page.tsx +140 -0
- package/templates/marketing/nextjs/src/app/features/automation/page.tsx +171 -0
- package/templates/marketing/nextjs/src/app/features/dashboard/page.tsx +140 -0
- package/templates/marketing/nextjs/src/app/features/integrations/page.tsx +174 -0
- package/templates/marketing/nextjs/src/app/features/security/page.tsx +150 -0
- package/templates/marketing/nextjs/src/app/features/workflows/page.tsx +140 -0
- package/templates/marketing/nextjs/src/app/use-cases/marketing/page.tsx +154 -0
- package/templates/marketing/nextjs/src/app/use-cases/operations/page.tsx +154 -0
- package/templates/marketing/nextjs/src/app/use-cases/product/page.tsx +154 -0
- package/templates/marketing/nextjs/src/app/use-cases/sales/page.tsx +154 -0
- package/templates/marketing/nextjs/src/components/Header/index.tsx +52 -2
- package/templates/marketing/nextjs/src/components/blocks/FAQAccordion.tsx +119 -0
- package/templates/marketing/nextjs/src/components/blocks/HowItWorks.tsx +95 -0
- package/templates/marketing/nextjs/src/components/blocks/index.ts +2 -0
- package/templates/marketing/payload/components.json.hbs +44 -0
- package/templates/web/components.json.hbs +6 -0
- package/templates/web/src/app/globals.css.hbs +460 -14
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { Header } from "@/components/Header"
|
|
2
|
+
import { Footer } from "@/components/Footer"
|
|
3
|
+
import { TestimonialsGrid, FinalCTA } from "@/components/blocks"
|
|
4
|
+
import { Target, TrendingUp, Users, Zap, BarChart3, Clock } from "lucide-react"
|
|
5
|
+
|
|
6
|
+
const benefits = [
|
|
7
|
+
{
|
|
8
|
+
icon: <Target className="h-6 w-6" />,
|
|
9
|
+
title: "Close More Deals",
|
|
10
|
+
description:
|
|
11
|
+
"Track every opportunity from first contact to close. Never let a deal slip through the cracks.",
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
icon: <TrendingUp className="h-6 w-6" />,
|
|
15
|
+
title: "Forecast Accurately",
|
|
16
|
+
description:
|
|
17
|
+
"AI-powered forecasting gives you confidence in your pipeline. Know what's coming.",
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
icon: <Users className="h-6 w-6" />,
|
|
21
|
+
title: "Align Your Team",
|
|
22
|
+
description:
|
|
23
|
+
"Keep everyone on the same page with shared visibility into accounts and deals.",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
icon: <Zap className="h-6 w-6" />,
|
|
27
|
+
title: "Automate Follow-ups",
|
|
28
|
+
description:
|
|
29
|
+
"Never forget a follow-up. Automated reminders and sequences keep deals moving.",
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
icon: <BarChart3 className="h-6 w-6" />,
|
|
33
|
+
title: "Track Performance",
|
|
34
|
+
description:
|
|
35
|
+
"Real-time dashboards show rep performance, pipeline health, and revenue metrics.",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
icon: <Clock className="h-6 w-6" />,
|
|
39
|
+
title: "Save Hours Weekly",
|
|
40
|
+
description:
|
|
41
|
+
"Reduce data entry with automatic logging. Spend more time selling.",
|
|
42
|
+
},
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
const stats = [
|
|
46
|
+
{ value: "32%", label: "Faster deal cycles" },
|
|
47
|
+
{ value: "28%", label: "Higher win rates" },
|
|
48
|
+
{ value: "5hrs", label: "Saved per week" },
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
export default function SalesPage() {
|
|
52
|
+
return (
|
|
53
|
+
<div className="min-h-screen flex flex-col">
|
|
54
|
+
<Header />
|
|
55
|
+
|
|
56
|
+
<main className="flex-1">
|
|
57
|
+
{/* Hero */}
|
|
58
|
+
<section className="py-16 md:py-24">
|
|
59
|
+
<div className="container mx-auto px-4">
|
|
60
|
+
<div className="max-w-3xl mx-auto text-center">
|
|
61
|
+
<div className="inline-block px-4 py-1 rounded-full bg-primary/10 text-primary text-sm font-medium mb-6">
|
|
62
|
+
For Sales Teams
|
|
63
|
+
</div>
|
|
64
|
+
<h1 className="text-4xl md:text-5xl font-bold tracking-tight mb-6">
|
|
65
|
+
Close more deals, faster
|
|
66
|
+
</h1>
|
|
67
|
+
<p className="text-xl text-muted-foreground mb-8">
|
|
68
|
+
Give your sales team the tools they need to hit quota. Track deals, automate follow-ups, and forecast with confidence.
|
|
69
|
+
</p>
|
|
70
|
+
<div className="flex flex-wrap gap-4 justify-center">
|
|
71
|
+
<a
|
|
72
|
+
href="/sign-up"
|
|
73
|
+
className="inline-flex items-center justify-center px-6 py-3 text-sm font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"
|
|
74
|
+
>
|
|
75
|
+
Start free trial
|
|
76
|
+
</a>
|
|
77
|
+
<a
|
|
78
|
+
href="/demo"
|
|
79
|
+
className="inline-flex items-center justify-center px-6 py-3 text-sm font-medium rounded-md border border-border bg-background hover:bg-muted transition-colors"
|
|
80
|
+
>
|
|
81
|
+
See it in action
|
|
82
|
+
</a>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
</section>
|
|
87
|
+
|
|
88
|
+
{/* Stats */}
|
|
89
|
+
<section className="pb-16 md:pb-24">
|
|
90
|
+
<div className="container mx-auto px-4">
|
|
91
|
+
<div className="grid grid-cols-3 gap-8 max-w-2xl mx-auto">
|
|
92
|
+
{stats.map((stat) => (
|
|
93
|
+
<div key={stat.label} className="text-center">
|
|
94
|
+
<div className="text-3xl md:text-4xl font-bold text-primary mb-2">
|
|
95
|
+
{stat.value}
|
|
96
|
+
</div>
|
|
97
|
+
<div className="text-sm text-muted-foreground">{stat.label}</div>
|
|
98
|
+
</div>
|
|
99
|
+
))}
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</section>
|
|
103
|
+
|
|
104
|
+
{/* Benefits Grid */}
|
|
105
|
+
<section className="py-16 md:py-24 bg-muted/30">
|
|
106
|
+
<div className="container mx-auto px-4">
|
|
107
|
+
<div className="text-center mb-12 md:mb-16">
|
|
108
|
+
<h2 className="text-3xl md:text-4xl font-bold tracking-tight mb-4">
|
|
109
|
+
Built for modern sales teams
|
|
110
|
+
</h2>
|
|
111
|
+
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
|
112
|
+
Everything you need to manage your pipeline and close more deals.
|
|
113
|
+
</p>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8 max-w-5xl mx-auto">
|
|
117
|
+
{benefits.map((benefit) => (
|
|
118
|
+
<div
|
|
119
|
+
key={benefit.title}
|
|
120
|
+
className="bg-card rounded-lg border border-border p-6"
|
|
121
|
+
>
|
|
122
|
+
<div className="w-12 h-12 rounded-lg bg-primary/10 text-primary flex items-center justify-center mb-4">
|
|
123
|
+
{benefit.icon}
|
|
124
|
+
</div>
|
|
125
|
+
<h3 className="text-lg font-semibold mb-2">{benefit.title}</h3>
|
|
126
|
+
<p className="text-muted-foreground text-sm">{benefit.description}</p>
|
|
127
|
+
</div>
|
|
128
|
+
))}
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
</section>
|
|
132
|
+
|
|
133
|
+
{/* Testimonials */}
|
|
134
|
+
<TestimonialsGrid
|
|
135
|
+
heading="Trusted by sales teams everywhere"
|
|
136
|
+
subheading="See how teams like yours are crushing their quotas with SaaSify."
|
|
137
|
+
/>
|
|
138
|
+
|
|
139
|
+
{/* Final CTA */}
|
|
140
|
+
<FinalCTA
|
|
141
|
+
headline="Ready to accelerate your sales?"
|
|
142
|
+
subheading="Start your free trial and see why top sales teams choose SaaSify."
|
|
143
|
+
style="dark"
|
|
144
|
+
links={[
|
|
145
|
+
{ label: "Start free trial", href: "/sign-up", variant: "outline" },
|
|
146
|
+
{ label: "Talk to sales", href: "/contact", variant: "default" },
|
|
147
|
+
]}
|
|
148
|
+
/>
|
|
149
|
+
</main>
|
|
150
|
+
|
|
151
|
+
<Footer />
|
|
152
|
+
</div>
|
|
153
|
+
)
|
|
154
|
+
}
|
|
@@ -3,13 +3,61 @@
|
|
|
3
3
|
import Link from "next/link"
|
|
4
4
|
import { Logo } from "@/components/Logo"
|
|
5
5
|
import { MobileMenu } from "./MobileMenu"
|
|
6
|
+
import { MegaMenu } from "./MegaMenu"
|
|
6
7
|
import { cn } from "@/lib/utils"
|
|
7
8
|
|
|
8
|
-
//
|
|
9
|
+
// Features mega menu configuration
|
|
10
|
+
const featuresMenu = {
|
|
11
|
+
label: "Features",
|
|
12
|
+
columns: [
|
|
13
|
+
{
|
|
14
|
+
title: "Platform",
|
|
15
|
+
items: [
|
|
16
|
+
{ label: "Dashboard", description: "Your command center", href: "/features/dashboard", icon: "layout" },
|
|
17
|
+
{ label: "Analytics", description: "Real-time insights", href: "/features/analytics", icon: "barChart" },
|
|
18
|
+
{ label: "Integrations", description: "Connect your tools", href: "/features/integrations", icon: "layers" },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: "Capabilities",
|
|
23
|
+
items: [
|
|
24
|
+
{ label: "Automation", description: "Eliminate busywork", href: "/features/automation", icon: "zap" },
|
|
25
|
+
{ label: "Workflows", description: "Custom processes", href: "/features/workflows", icon: "settings" },
|
|
26
|
+
{ label: "Security", description: "Enterprise-grade", href: "/features/security", icon: "shield" },
|
|
27
|
+
],
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Solutions mega menu configuration
|
|
33
|
+
const solutionsMenu = {
|
|
34
|
+
label: "Solutions",
|
|
35
|
+
columns: [
|
|
36
|
+
{
|
|
37
|
+
title: "By Team",
|
|
38
|
+
items: [
|
|
39
|
+
{ label: "Sales Teams", description: "Close more deals", href: "/use-cases/sales", icon: "target" },
|
|
40
|
+
{ label: "Marketing Teams", description: "Launch campaigns", href: "/use-cases/marketing", icon: "rocket" },
|
|
41
|
+
{ label: "Product Teams", description: "Ship faster", href: "/use-cases/product", icon: "layers" },
|
|
42
|
+
{ label: "Operations", description: "Run efficiently", href: "/use-cases/operations", icon: "settings" },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Simple navigation links
|
|
9
49
|
const navLinks = [
|
|
50
|
+
{ label: "Pricing", href: "/pricing" },
|
|
51
|
+
{ label: "Blog", href: "/blog" },
|
|
52
|
+
{ label: "About", href: "/about" },
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
// For mobile menu - flat list of all links
|
|
56
|
+
const mobileNavLinks = [
|
|
10
57
|
{ label: "Features", href: "/features" },
|
|
11
58
|
{ label: "Pricing", href: "/pricing" },
|
|
12
59
|
{ label: "Blog", href: "/blog" },
|
|
60
|
+
{ label: "About", href: "/about" },
|
|
13
61
|
]
|
|
14
62
|
|
|
15
63
|
const ctaLinks = [
|
|
@@ -30,6 +78,8 @@ export function Header() {
|
|
|
30
78
|
|
|
31
79
|
{/* Desktop navigation */}
|
|
32
80
|
<nav className="hidden lg:flex items-center gap-1">
|
|
81
|
+
<MegaMenu menu={featuresMenu} />
|
|
82
|
+
<MegaMenu menu={solutionsMenu} />
|
|
33
83
|
{navLinks.map((link) => (
|
|
34
84
|
<Link
|
|
35
85
|
key={link.href}
|
|
@@ -71,7 +121,7 @@ export function Header() {
|
|
|
71
121
|
</Link>
|
|
72
122
|
|
|
73
123
|
<MobileMenu
|
|
74
|
-
navLinks={
|
|
124
|
+
navLinks={mobileNavLinks}
|
|
75
125
|
ctaLinks={ctaLinks}
|
|
76
126
|
/>
|
|
77
127
|
</div>
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import { useState } from "react"
|
|
4
|
+
import { ChevronDown } from "lucide-react"
|
|
5
|
+
import { cn } from "@/lib/utils"
|
|
6
|
+
|
|
7
|
+
interface FAQItem {
|
|
8
|
+
question: string
|
|
9
|
+
answer: string
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface FAQAccordionProps {
|
|
13
|
+
heading?: string
|
|
14
|
+
subheading?: string
|
|
15
|
+
items?: FAQItem[]
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const defaultFAQs: FAQItem[] = [
|
|
19
|
+
{
|
|
20
|
+
question: "How does the free trial work?",
|
|
21
|
+
answer:
|
|
22
|
+
"Our 14-day free trial gives you full access to all features with no credit card required. At the end of your trial, you can choose the plan that best fits your needs.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
question: "Can I change plans at any time?",
|
|
26
|
+
answer:
|
|
27
|
+
"Yes! You can upgrade or downgrade your plan at any time. Changes take effect immediately, and we'll prorate any billing differences.",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
question: "What payment methods do you accept?",
|
|
31
|
+
answer:
|
|
32
|
+
"We accept all major credit cards (Visa, Mastercard, American Express) as well as PayPal. For Enterprise plans, we also offer invoicing.",
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
question: "Is my data secure?",
|
|
36
|
+
answer:
|
|
37
|
+
"Absolutely. We use industry-standard encryption (AES-256) for all data at rest and in transit. We're SOC 2 Type II certified and GDPR compliant.",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
question: "Do you offer discounts for nonprofits or educational institutions?",
|
|
41
|
+
answer:
|
|
42
|
+
"Yes! We offer 50% off for qualified nonprofits and educational institutions. Contact our sales team to learn more about our discount programs.",
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
question: "What kind of support do you offer?",
|
|
46
|
+
answer:
|
|
47
|
+
"All plans include email support with 24-hour response time. Professional plans get priority support, and Enterprise plans include a dedicated success manager.",
|
|
48
|
+
},
|
|
49
|
+
]
|
|
50
|
+
|
|
51
|
+
export function FAQAccordion({
|
|
52
|
+
heading = "Frequently asked questions",
|
|
53
|
+
subheading = "Everything you need to know about SaaSify",
|
|
54
|
+
items = defaultFAQs,
|
|
55
|
+
}: FAQAccordionProps) {
|
|
56
|
+
const [openIndex, setOpenIndex] = useState<number | null>(null)
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<section className="py-16 md:py-24">
|
|
60
|
+
<div className="container mx-auto px-4">
|
|
61
|
+
{/* Header */}
|
|
62
|
+
<div className="text-center mb-12 md:mb-16">
|
|
63
|
+
<h2 className="text-3xl md:text-4xl font-bold tracking-tight mb-4">
|
|
64
|
+
{heading}
|
|
65
|
+
</h2>
|
|
66
|
+
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
|
67
|
+
{subheading}
|
|
68
|
+
</p>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
{/* Accordion */}
|
|
72
|
+
<div className="max-w-3xl mx-auto">
|
|
73
|
+
{items.map((item, index) => (
|
|
74
|
+
<div
|
|
75
|
+
key={index}
|
|
76
|
+
className="border-b border-border"
|
|
77
|
+
>
|
|
78
|
+
<button
|
|
79
|
+
onClick={() => setOpenIndex(openIndex === index ? null : index)}
|
|
80
|
+
className="flex items-center justify-between w-full py-5 text-left"
|
|
81
|
+
>
|
|
82
|
+
<span className="font-medium text-foreground pr-4">
|
|
83
|
+
{item.question}
|
|
84
|
+
</span>
|
|
85
|
+
<ChevronDown
|
|
86
|
+
className={cn(
|
|
87
|
+
"h-5 w-5 text-muted-foreground transition-transform shrink-0",
|
|
88
|
+
openIndex === index && "rotate-180"
|
|
89
|
+
)}
|
|
90
|
+
/>
|
|
91
|
+
</button>
|
|
92
|
+
<div
|
|
93
|
+
className={cn(
|
|
94
|
+
"overflow-hidden transition-all",
|
|
95
|
+
openIndex === index ? "max-h-96 pb-5" : "max-h-0"
|
|
96
|
+
)}
|
|
97
|
+
>
|
|
98
|
+
<p className="text-muted-foreground">{item.answer}</p>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
))}
|
|
102
|
+
</div>
|
|
103
|
+
|
|
104
|
+
{/* Contact CTA */}
|
|
105
|
+
<div className="text-center mt-12">
|
|
106
|
+
<p className="text-muted-foreground mb-4">
|
|
107
|
+
Still have questions?
|
|
108
|
+
</p>
|
|
109
|
+
<a
|
|
110
|
+
href="/contact"
|
|
111
|
+
className="inline-flex items-center justify-center px-6 py-3 text-sm font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"
|
|
112
|
+
>
|
|
113
|
+
Contact support
|
|
114
|
+
</a>
|
|
115
|
+
</div>
|
|
116
|
+
</div>
|
|
117
|
+
</section>
|
|
118
|
+
)
|
|
119
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { UserPlus, Settings, Zap } from "lucide-react"
|
|
2
|
+
|
|
3
|
+
interface Step {
|
|
4
|
+
icon: React.ReactNode
|
|
5
|
+
title: string
|
|
6
|
+
description: string
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
interface HowItWorksProps {
|
|
10
|
+
heading?: string
|
|
11
|
+
subheading?: string
|
|
12
|
+
steps?: Step[]
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const defaultSteps: Step[] = [
|
|
16
|
+
{
|
|
17
|
+
icon: <UserPlus className="h-8 w-8" />,
|
|
18
|
+
title: "Sign up in seconds",
|
|
19
|
+
description:
|
|
20
|
+
"Create your account with just an email. No credit card required to get started.",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
icon: <Settings className="h-8 w-8" />,
|
|
24
|
+
title: "Configure your workspace",
|
|
25
|
+
description:
|
|
26
|
+
"Set up your team, invite members, and customize your workspace to fit your workflow.",
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
icon: <Zap className="h-8 w-8" />,
|
|
30
|
+
title: "Start collaborating",
|
|
31
|
+
description:
|
|
32
|
+
"Hit the ground running with templates, integrations, and automation built right in.",
|
|
33
|
+
},
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
export function HowItWorks({
|
|
37
|
+
heading = "Get started in minutes",
|
|
38
|
+
subheading = "Three simple steps to transform how your team works",
|
|
39
|
+
steps = defaultSteps,
|
|
40
|
+
}: HowItWorksProps) {
|
|
41
|
+
return (
|
|
42
|
+
<section className="py-16 md:py-24 bg-muted/30">
|
|
43
|
+
<div className="container mx-auto px-4">
|
|
44
|
+
{/* Header */}
|
|
45
|
+
<div className="text-center mb-12 md:mb-16">
|
|
46
|
+
<h2 className="text-3xl md:text-4xl font-bold tracking-tight mb-4">
|
|
47
|
+
{heading}
|
|
48
|
+
</h2>
|
|
49
|
+
<p className="text-lg text-muted-foreground max-w-2xl mx-auto">
|
|
50
|
+
{subheading}
|
|
51
|
+
</p>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
{/* Steps */}
|
|
55
|
+
<div className="max-w-5xl mx-auto">
|
|
56
|
+
<div className="grid md:grid-cols-3 gap-8 md:gap-12">
|
|
57
|
+
{steps.map((step, index) => (
|
|
58
|
+
<div key={index} className="relative">
|
|
59
|
+
{/* Connector line (hidden on mobile, shown between items on desktop) */}
|
|
60
|
+
{index < steps.length - 1 && (
|
|
61
|
+
<div className="hidden md:block absolute top-10 left-[calc(50%+3rem)] w-[calc(100%-6rem)] h-px bg-border" />
|
|
62
|
+
)}
|
|
63
|
+
|
|
64
|
+
<div className="flex flex-col items-center text-center">
|
|
65
|
+
{/* Step number badge */}
|
|
66
|
+
<div className="relative mb-6">
|
|
67
|
+
<div className="w-20 h-20 rounded-full bg-primary/10 flex items-center justify-center text-primary">
|
|
68
|
+
{step.icon}
|
|
69
|
+
</div>
|
|
70
|
+
<span className="absolute -top-2 -right-2 w-8 h-8 rounded-full bg-primary text-primary-foreground text-sm font-bold flex items-center justify-center">
|
|
71
|
+
{index + 1}
|
|
72
|
+
</span>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<h3 className="text-xl font-semibold mb-3">{step.title}</h3>
|
|
76
|
+
<p className="text-muted-foreground">{step.description}</p>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
))}
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
{/* CTA */}
|
|
84
|
+
<div className="text-center mt-12 md:mt-16">
|
|
85
|
+
<a
|
|
86
|
+
href="/sign-up"
|
|
87
|
+
className="inline-flex items-center justify-center px-8 py-4 text-base font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90 transition-colors"
|
|
88
|
+
>
|
|
89
|
+
Get started for free
|
|
90
|
+
</a>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</section>
|
|
94
|
+
)
|
|
95
|
+
}
|
|
@@ -7,3 +7,5 @@ export { TestimonialsGrid } from "./TestimonialsGrid"
|
|
|
7
7
|
export { TrustColumns } from "./TrustColumns"
|
|
8
8
|
export { PricingTable } from "./PricingTable"
|
|
9
9
|
export { FinalCTA } from "./FinalCTA"
|
|
10
|
+
export { FAQAccordion } from "./FAQAccordion"
|
|
11
|
+
export { HowItWorks } from "./HowItWorks"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
{{#if (eq shadcn.style "nova")}}
|
|
4
|
+
"style": "new-york",
|
|
5
|
+
{{else if (eq shadcn.style "vega")}}
|
|
6
|
+
"style": "default",
|
|
7
|
+
{{else if (eq shadcn.style "maia")}}
|
|
8
|
+
"style": "new-york",
|
|
9
|
+
{{else if (eq shadcn.style "lyra")}}
|
|
10
|
+
"style": "new-york",
|
|
11
|
+
{{else if (eq shadcn.style "mira")}}
|
|
12
|
+
"style": "default",
|
|
13
|
+
{{else}}
|
|
14
|
+
"style": "new-york",
|
|
15
|
+
{{/if}}
|
|
16
|
+
"rsc": true,
|
|
17
|
+
"tsx": true,
|
|
18
|
+
"tailwind": {
|
|
19
|
+
"config": "",
|
|
20
|
+
"css": "src/app/(frontend)/globals.css",
|
|
21
|
+
"baseColor": "{{shadcn.baseColor}}",
|
|
22
|
+
"cssVariables": true,
|
|
23
|
+
"prefix": ""
|
|
24
|
+
},
|
|
25
|
+
{{#if (eq shadcn.iconLibrary "lucide")}}
|
|
26
|
+
"iconLibrary": "lucide",
|
|
27
|
+
{{else if (eq shadcn.iconLibrary "hugeicons")}}
|
|
28
|
+
"iconLibrary": "lucide",
|
|
29
|
+
{{else if (eq shadcn.iconLibrary "tabler")}}
|
|
30
|
+
"iconLibrary": "lucide",
|
|
31
|
+
{{else if (eq shadcn.iconLibrary "phosphor")}}
|
|
32
|
+
"iconLibrary": "lucide",
|
|
33
|
+
{{else}}
|
|
34
|
+
"iconLibrary": "lucide",
|
|
35
|
+
{{/if}}
|
|
36
|
+
"aliases": {
|
|
37
|
+
"components": "@/components",
|
|
38
|
+
"utils": "@/utilities",
|
|
39
|
+
"ui": "@/components/ui",
|
|
40
|
+
"lib": "@/lib",
|
|
41
|
+
"hooks": "@/hooks"
|
|
42
|
+
},
|
|
43
|
+
"registries": {}
|
|
44
|
+
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
{{#if (eq shadcn.style "nova")}}
|
|
3
4
|
"style": "new-york",
|
|
5
|
+
{{else if (eq shadcn.style "vega")}}
|
|
6
|
+
"style": "default",
|
|
7
|
+
{{else}}
|
|
8
|
+
"style": "new-york",
|
|
9
|
+
{{/if}}
|
|
4
10
|
"rsc": true,
|
|
5
11
|
"tsx": true,
|
|
6
12
|
"tailwind": {
|