kofi-stack-template-generator 2.1.51 → 2.1.53
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 +1906 -146
- package/package.json +2 -2
- package/src/generator.ts +9 -0
- package/src/templates.generated.ts +51 -5
- package/templates/marketing/astro/astro.config.ts.hbs +12 -0
- package/templates/marketing/astro/package.json.hbs +31 -0
- package/templates/marketing/astro/postcss.config.mjs.hbs +5 -0
- package/templates/marketing/astro/public/favicon.svg +4 -0
- package/templates/marketing/astro/public/media/hero-bg.png +1 -0
- package/templates/marketing/astro/src/components/Footer.astro +167 -0
- package/templates/marketing/astro/src/components/Header.astro +378 -0
- package/templates/marketing/astro/src/components/Logo.astro +30 -0
- package/templates/marketing/astro/src/components/ThemeSelector.astro +64 -0
- package/templates/marketing/astro/src/components/blocks/BentoFeatures.astro +209 -0
- package/templates/marketing/astro/src/components/blocks/FeatureShowcase.astro +102 -0
- package/templates/marketing/astro/src/components/blocks/FinalCTA.astro +82 -0
- package/templates/marketing/astro/src/components/blocks/IndustryTabs.astro +177 -0
- package/templates/marketing/astro/src/components/blocks/LogoBanner.astro +95 -0
- package/templates/marketing/astro/src/components/blocks/PricingTable.astro +176 -0
- package/templates/marketing/astro/src/components/blocks/ProofBanner.astro +56 -0
- package/templates/marketing/astro/src/components/blocks/TestimonialsGrid.astro +106 -0
- package/templates/marketing/astro/src/components/blocks/TrustColumns.astro +88 -0
- package/templates/marketing/astro/src/components/heros/AnimatedMockup.astro +711 -0
- package/templates/marketing/astro/src/components/heros/ProductShowcaseHero.astro +111 -0
- package/templates/marketing/astro/src/layouts/Layout.astro +37 -0
- package/templates/marketing/astro/src/lib/utils.ts +6 -0
- package/templates/marketing/astro/src/pages/index.astro +163 -0
- package/templates/marketing/astro/src/styles/globals.css.hbs +353 -0
- package/templates/marketing/astro/tsconfig.json.hbs +11 -0
- package/templates/marketing/nextjs/package.json.hbs +6 -1
- package/templates/marketing/nextjs/src/app/layout.tsx.hbs +19 -5
- package/templates/marketing/nextjs/src/app/page.tsx.hbs +160 -164
- package/templates/marketing/nextjs/src/components/Footer/index.tsx +188 -0
- package/templates/marketing/nextjs/src/components/Header/MegaMenu.tsx +117 -0
- package/templates/marketing/nextjs/src/components/Header/MobileMenu.tsx +178 -0
- package/templates/marketing/nextjs/src/components/Header/index.tsx +172 -0
- package/templates/marketing/nextjs/src/components/Logo.tsx +46 -0
- package/templates/marketing/nextjs/src/components/ThemeProvider.tsx +8 -0
- package/templates/marketing/nextjs/src/components/ThemeSelector.tsx +69 -0
- package/templates/marketing/nextjs/src/components/blocks/BentoFeatures.tsx +249 -0
- package/templates/marketing/nextjs/src/components/blocks/FeatureShowcase.tsx +110 -0
- package/templates/marketing/nextjs/src/components/blocks/FinalCTA.tsx +91 -0
- package/templates/marketing/nextjs/src/components/blocks/IndustryTabs.tsx +137 -0
- package/templates/marketing/nextjs/src/components/blocks/LogoBanner.tsx +80 -0
- package/templates/marketing/nextjs/src/components/blocks/PricingTable.tsx +210 -0
- package/templates/marketing/nextjs/src/components/blocks/ProofBanner.tsx +72 -0
- package/templates/marketing/nextjs/src/components/blocks/TestimonialsGrid.tsx +119 -0
- package/templates/marketing/nextjs/src/components/blocks/TrustColumns.tsx +110 -0
- package/templates/marketing/nextjs/src/components/blocks/index.ts +9 -0
- package/templates/marketing/nextjs/src/components/heros/AnimatedMockup.tsx +242 -0
- package/templates/marketing/nextjs/src/components/heros/ProductShowcaseHero.tsx +84 -0
- package/templates/marketing/nextjs/src/components/heros/index.ts +2 -0
- package/templates/marketing/nextjs/src/lib/utils.ts +6 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Metadata } from 'next'
|
|
2
2
|
import { Geist, Geist_Mono } from 'next/font/google'
|
|
3
|
+
import { ThemeProvider } from '@/components/ThemeProvider'
|
|
3
4
|
import './globals.css'
|
|
4
5
|
|
|
5
6
|
const geistSans = Geist({
|
|
@@ -13,8 +14,14 @@ const geistMono = Geist_Mono({
|
|
|
13
14
|
})
|
|
14
15
|
|
|
15
16
|
export const metadata: Metadata = {
|
|
16
|
-
title: '
|
|
17
|
-
description: '
|
|
17
|
+
title: 'SaaSify - The modern platform for growing teams',
|
|
18
|
+
description: 'Transform your workflow with our all-in-one platform. Streamline operations, boost productivity, and scale your business with powerful tools designed for modern teams.',
|
|
19
|
+
keywords: ['SaaS', 'productivity', 'workflow', 'automation', 'team collaboration'],
|
|
20
|
+
openGraph: {
|
|
21
|
+
title: 'SaaSify - The modern platform for growing teams',
|
|
22
|
+
description: 'Transform your workflow with our all-in-one platform.',
|
|
23
|
+
type: 'website',
|
|
24
|
+
},
|
|
18
25
|
}
|
|
19
26
|
|
|
20
27
|
export default function RootLayout({
|
|
@@ -23,9 +30,16 @@ export default function RootLayout({
|
|
|
23
30
|
children: React.ReactNode
|
|
24
31
|
}) {
|
|
25
32
|
return (
|
|
26
|
-
<html lang="en">
|
|
27
|
-
<body className={`${geistSans.variable} ${geistMono.variable} antialiased`}>
|
|
28
|
-
|
|
33
|
+
<html lang="en" suppressHydrationWarning>
|
|
34
|
+
<body className={`${geistSans.variable} ${geistMono.variable} font-sans antialiased`}>
|
|
35
|
+
<ThemeProvider
|
|
36
|
+
attribute="class"
|
|
37
|
+
defaultTheme="system"
|
|
38
|
+
enableSystem
|
|
39
|
+
disableTransitionOnChange
|
|
40
|
+
>
|
|
41
|
+
{children}
|
|
42
|
+
</ThemeProvider>
|
|
29
43
|
</body>
|
|
30
44
|
</html>
|
|
31
45
|
)
|
|
@@ -1,168 +1,164 @@
|
|
|
1
|
+
import { Header } from "@/components/Header"
|
|
2
|
+
import { Footer } from "@/components/Footer"
|
|
3
|
+
import { ProductShowcaseHero } from "@/components/heros"
|
|
4
|
+
import {
|
|
5
|
+
LogoBanner,
|
|
6
|
+
ProofBanner,
|
|
7
|
+
BentoFeatures,
|
|
8
|
+
FeatureShowcase,
|
|
9
|
+
IndustryTabs,
|
|
10
|
+
TestimonialsGrid,
|
|
11
|
+
TrustColumns,
|
|
12
|
+
PricingTable,
|
|
13
|
+
FinalCTA,
|
|
14
|
+
} from "@/components/blocks"
|
|
15
|
+
|
|
1
16
|
export default function HomePage() {
|
|
2
17
|
return (
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
{/* Footer */}
|
|
149
|
-
<footer className="border-t border-gray-200 dark:border-gray-700">
|
|
150
|
-
<div className="container mx-auto px-4 py-12">
|
|
151
|
-
<div className="text-center text-gray-600 dark:text-gray-300">
|
|
152
|
-
<p>
|
|
153
|
-
Built with{' '}
|
|
154
|
-
<a
|
|
155
|
-
href="https://github.com/theodenanyoh11/create-kofi-stack"
|
|
156
|
-
className="text-gray-900 dark:text-white hover:underline"
|
|
157
|
-
target="_blank"
|
|
158
|
-
rel="noopener noreferrer"
|
|
159
|
-
>
|
|
160
|
-
create-kofi-stack
|
|
161
|
-
</a>
|
|
162
|
-
</p>
|
|
163
|
-
</div>
|
|
164
|
-
</div>
|
|
165
|
-
</footer>
|
|
166
|
-
</main>
|
|
18
|
+
<div className="min-h-screen flex flex-col">
|
|
19
|
+
<Header />
|
|
20
|
+
|
|
21
|
+
<main className="flex-1">
|
|
22
|
+
{/* Hero Section */}
|
|
23
|
+
<ProductShowcaseHero
|
|
24
|
+
headline="The modern platform for growing teams"
|
|
25
|
+
description="Streamline workflows, boost productivity, and scale your business with one powerful platform."
|
|
26
|
+
links={[
|
|
27
|
+
{ label: "Start free trial", href: "/sign-up", variant: "default" },
|
|
28
|
+
{ label: "Watch demo", href: "/demo", variant: "outline" },
|
|
29
|
+
]}
|
|
30
|
+
/>
|
|
31
|
+
|
|
32
|
+
{/* Logo Banner - Social proof */}
|
|
33
|
+
<LogoBanner
|
|
34
|
+
heading="Trusted by fast-growing companies everywhere"
|
|
35
|
+
style="scroll"
|
|
36
|
+
/>
|
|
37
|
+
|
|
38
|
+
{/* Value Proposition */}
|
|
39
|
+
<ProofBanner
|
|
40
|
+
headline="Transform how your team works, collaborates, and grows"
|
|
41
|
+
subtext="Every interaction feeds into a powerful platform that powers personalized experiences, seamless collaboration, and intelligent automation across every touchpoint."
|
|
42
|
+
links={[
|
|
43
|
+
{ label: "Start free trial", href: "/sign-up", variant: "default" },
|
|
44
|
+
{ label: "Book a demo", href: "/contact", variant: "outline" },
|
|
45
|
+
]}
|
|
46
|
+
/>
|
|
47
|
+
|
|
48
|
+
{/* Bento Features */}
|
|
49
|
+
<BentoFeatures
|
|
50
|
+
heading="Discover what SaaSify can do"
|
|
51
|
+
subheading="Everything you need to work smarter and scale faster"
|
|
52
|
+
/>
|
|
53
|
+
|
|
54
|
+
{/* Feature Showcase: Integrations */}
|
|
55
|
+
<FeatureShowcase
|
|
56
|
+
label="Seamless Integrations"
|
|
57
|
+
headline="Connect everything your team uses in one place"
|
|
58
|
+
description="Integrate with 100+ popular tools including Slack, Salesforce, HubSpot, and more. Two-way sync keeps everything up to date automatically."
|
|
59
|
+
features={[
|
|
60
|
+
{ text: "100+ native integrations" },
|
|
61
|
+
{ text: "Two-way data sync" },
|
|
62
|
+
{ text: "Custom webhooks" },
|
|
63
|
+
{ text: "API access included" },
|
|
64
|
+
]}
|
|
65
|
+
link={{ label: "Explore integrations", href: "/features/integrations" }}
|
|
66
|
+
imagePosition="right"
|
|
67
|
+
/>
|
|
68
|
+
|
|
69
|
+
{/* Feature Showcase: Analytics */}
|
|
70
|
+
<FeatureShowcase
|
|
71
|
+
label="Actionable Analytics"
|
|
72
|
+
headline="Make decisions backed by real-time data"
|
|
73
|
+
description="Track every metric that matters. From team performance to customer insights, get the visibility you need to drive growth."
|
|
74
|
+
features={[
|
|
75
|
+
{ text: "Real-time dashboards" },
|
|
76
|
+
{ text: "Custom reports" },
|
|
77
|
+
{ text: "Team performance metrics" },
|
|
78
|
+
{ text: "Automated insights" },
|
|
79
|
+
]}
|
|
80
|
+
link={{ label: "Learn about analytics", href: "/features/analytics" }}
|
|
81
|
+
imagePosition="left"
|
|
82
|
+
/>
|
|
83
|
+
|
|
84
|
+
{/* Feature Showcase: Automation */}
|
|
85
|
+
<FeatureShowcase
|
|
86
|
+
label="Workflow Automation"
|
|
87
|
+
headline="Eliminate busywork with smart automation"
|
|
88
|
+
description="Build powerful workflows without code. Automate approvals, notifications, data entry, and more to focus on what matters."
|
|
89
|
+
features={[
|
|
90
|
+
{ text: "Visual workflow builder" },
|
|
91
|
+
{ text: "Conditional logic" },
|
|
92
|
+
{ text: "Scheduled triggers" },
|
|
93
|
+
{ text: "Cross-app automation" },
|
|
94
|
+
]}
|
|
95
|
+
link={{ label: "See automation features", href: "/features/automation" }}
|
|
96
|
+
imagePosition="right"
|
|
97
|
+
/>
|
|
98
|
+
|
|
99
|
+
{/* Feature Showcase: Collaboration */}
|
|
100
|
+
<FeatureShowcase
|
|
101
|
+
label="Team Collaboration"
|
|
102
|
+
headline="Work together seamlessly, from anywhere"
|
|
103
|
+
description="Real-time collaboration features keep everyone aligned. Share workspaces, leave comments, and track activity across your entire team."
|
|
104
|
+
features={[
|
|
105
|
+
{ text: "Real-time collaboration" },
|
|
106
|
+
{ text: "Shared workspaces" },
|
|
107
|
+
{ text: "Comments and mentions" },
|
|
108
|
+
{ text: "Activity tracking" },
|
|
109
|
+
]}
|
|
110
|
+
link={{ label: "Explore collaboration", href: "/features" }}
|
|
111
|
+
imagePosition="left"
|
|
112
|
+
/>
|
|
113
|
+
|
|
114
|
+
{/* Industry Tabs */}
|
|
115
|
+
<IndustryTabs
|
|
116
|
+
heading="Solutions that deliver real results"
|
|
117
|
+
subheading="Whether you're in sales, marketing, or product, SaaSify adapts to how your team works."
|
|
118
|
+
/>
|
|
119
|
+
|
|
120
|
+
{/* Testimonials */}
|
|
121
|
+
<TestimonialsGrid
|
|
122
|
+
heading="Loved by teams at companies of all sizes"
|
|
123
|
+
subheading="See how leading teams use SaaSify to drive growth and productivity."
|
|
124
|
+
/>
|
|
125
|
+
|
|
126
|
+
{/* Trust Columns */}
|
|
127
|
+
<TrustColumns />
|
|
128
|
+
|
|
129
|
+
{/* Second Logo Banner - Integrations */}
|
|
130
|
+
<LogoBanner
|
|
131
|
+
heading="Integrates with your favorite tools"
|
|
132
|
+
style="grid"
|
|
133
|
+
logos={[
|
|
134
|
+
{ name: "Slack", initials: "SL" },
|
|
135
|
+
{ name: "Salesforce", initials: "SF" },
|
|
136
|
+
{ name: "HubSpot", initials: "HS" },
|
|
137
|
+
{ name: "Google Workspace", initials: "GW" },
|
|
138
|
+
{ name: "Zapier", initials: "ZP" },
|
|
139
|
+
{ name: "Jira", initials: "JI" },
|
|
140
|
+
]}
|
|
141
|
+
/>
|
|
142
|
+
|
|
143
|
+
{/* Pricing */}
|
|
144
|
+
<PricingTable
|
|
145
|
+
heading="Simple, transparent pricing"
|
|
146
|
+
subheading="Start free, upgrade as your team grows. No hidden fees."
|
|
147
|
+
/>
|
|
148
|
+
|
|
149
|
+
{/* Final CTA */}
|
|
150
|
+
<FinalCTA
|
|
151
|
+
headline="Ready to transform how your team works?"
|
|
152
|
+
subheading="Join thousands of teams who chose the smarter way to work. Start free, upgrade as you grow."
|
|
153
|
+
style="dark"
|
|
154
|
+
links={[
|
|
155
|
+
{ label: "Start free trial", href: "/sign-up", variant: "outline" },
|
|
156
|
+
{ label: "Book a demo", href: "/contact", variant: "default" },
|
|
157
|
+
]}
|
|
158
|
+
/>
|
|
159
|
+
</main>
|
|
160
|
+
|
|
161
|
+
<Footer />
|
|
162
|
+
</div>
|
|
167
163
|
)
|
|
168
164
|
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
import Link from "next/link"
|
|
4
|
+
import { Logo } from "@/components/Logo"
|
|
5
|
+
import { ThemeSelector } from "@/components/ThemeSelector"
|
|
6
|
+
import { cn } from "@/lib/utils"
|
|
7
|
+
|
|
8
|
+
// Footer navigation structure matching SaaSify
|
|
9
|
+
const footerColumns = [
|
|
10
|
+
{
|
|
11
|
+
title: "Product",
|
|
12
|
+
links: [
|
|
13
|
+
{ label: "Home", href: "/" },
|
|
14
|
+
{ label: "Pricing", href: "/pricing" },
|
|
15
|
+
{ label: "Integrations", href: "/features/integrations" },
|
|
16
|
+
],
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
title: "Resources",
|
|
20
|
+
links: [
|
|
21
|
+
{ label: "Blog", href: "/blog" },
|
|
22
|
+
{ label: "Documentation", href: "/docs" },
|
|
23
|
+
],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "Company",
|
|
27
|
+
links: [
|
|
28
|
+
{ label: "About", href: "/about" },
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
title: "Legal",
|
|
33
|
+
links: [
|
|
34
|
+
{ label: "Privacy", href: "/privacy" },
|
|
35
|
+
{ label: "Terms", href: "/terms" },
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
const socialLinks = {
|
|
41
|
+
twitter: "https://x.com/saasify",
|
|
42
|
+
linkedin: "https://linkedin.com/company/saasify",
|
|
43
|
+
github: "https://github.com/saasify",
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const bottomLinks = [
|
|
47
|
+
{ label: "Contact Support", href: "/support" },
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
// Social icons as inline SVGs
|
|
51
|
+
const SocialIcons = {
|
|
52
|
+
twitter: (
|
|
53
|
+
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
|
54
|
+
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
|
|
55
|
+
</svg>
|
|
56
|
+
),
|
|
57
|
+
linkedin: (
|
|
58
|
+
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
|
59
|
+
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
|
|
60
|
+
</svg>
|
|
61
|
+
),
|
|
62
|
+
github: (
|
|
63
|
+
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
|
64
|
+
<path
|
|
65
|
+
fillRule="evenodd"
|
|
66
|
+
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
|
67
|
+
clipRule="evenodd"
|
|
68
|
+
/>
|
|
69
|
+
</svg>
|
|
70
|
+
),
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function Footer() {
|
|
74
|
+
const currentYear = new Date().getFullYear()
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<footer className="mt-auto border-t border-border bg-background">
|
|
78
|
+
{/* Main Footer Content */}
|
|
79
|
+
<div className="container mx-auto px-4 py-12 lg:py-16">
|
|
80
|
+
<div className="grid grid-cols-2 gap-8 md:grid-cols-3 lg:grid-cols-6">
|
|
81
|
+
{/* Link Columns */}
|
|
82
|
+
{footerColumns.map((column) => (
|
|
83
|
+
<div key={column.title} className="col-span-1">
|
|
84
|
+
<h3 className="mb-4 text-sm font-medium text-foreground">
|
|
85
|
+
{column.title}
|
|
86
|
+
</h3>
|
|
87
|
+
<ul className="space-y-3">
|
|
88
|
+
{column.links.map((link) => (
|
|
89
|
+
<li key={link.href}>
|
|
90
|
+
<Link
|
|
91
|
+
href={link.href}
|
|
92
|
+
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
|
|
93
|
+
>
|
|
94
|
+
{link.label}
|
|
95
|
+
</Link>
|
|
96
|
+
</li>
|
|
97
|
+
))}
|
|
98
|
+
</ul>
|
|
99
|
+
</div>
|
|
100
|
+
))}
|
|
101
|
+
|
|
102
|
+
{/* Newsletter Column */}
|
|
103
|
+
<div className="col-span-2 md:col-span-3 lg:col-span-2">
|
|
104
|
+
<h3 className="mb-4 text-sm font-medium text-foreground">
|
|
105
|
+
Newsletter
|
|
106
|
+
</h3>
|
|
107
|
+
<p className="mb-4 text-sm text-muted-foreground">
|
|
108
|
+
Get product updates, tips, and insights delivered weekly.
|
|
109
|
+
</p>
|
|
110
|
+
<form className="flex gap-2">
|
|
111
|
+
<input
|
|
112
|
+
type="email"
|
|
113
|
+
placeholder="Enter your email"
|
|
114
|
+
className="flex-1 px-3 py-2 text-sm rounded-md border border-input bg-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring"
|
|
115
|
+
/>
|
|
116
|
+
<button
|
|
117
|
+
type="submit"
|
|
118
|
+
className="px-4 py-2 text-sm font-medium rounded-md bg-primary text-primary-foreground hover:bg-primary/90"
|
|
119
|
+
>
|
|
120
|
+
Subscribe
|
|
121
|
+
</button>
|
|
122
|
+
</form>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
|
|
126
|
+
{/* Social Links */}
|
|
127
|
+
<div className="mt-10 flex items-center gap-4 border-t border-border pt-8">
|
|
128
|
+
<a
|
|
129
|
+
href={socialLinks.twitter}
|
|
130
|
+
target="_blank"
|
|
131
|
+
rel="noopener noreferrer"
|
|
132
|
+
className="text-muted-foreground transition-colors hover:text-foreground"
|
|
133
|
+
aria-label="X (Twitter)"
|
|
134
|
+
>
|
|
135
|
+
{SocialIcons.twitter}
|
|
136
|
+
</a>
|
|
137
|
+
<a
|
|
138
|
+
href={socialLinks.linkedin}
|
|
139
|
+
target="_blank"
|
|
140
|
+
rel="noopener noreferrer"
|
|
141
|
+
className="text-muted-foreground transition-colors hover:text-foreground"
|
|
142
|
+
aria-label="LinkedIn"
|
|
143
|
+
>
|
|
144
|
+
{SocialIcons.linkedin}
|
|
145
|
+
</a>
|
|
146
|
+
<a
|
|
147
|
+
href={socialLinks.github}
|
|
148
|
+
target="_blank"
|
|
149
|
+
rel="noopener noreferrer"
|
|
150
|
+
className="text-muted-foreground transition-colors hover:text-foreground"
|
|
151
|
+
aria-label="GitHub"
|
|
152
|
+
>
|
|
153
|
+
{SocialIcons.github}
|
|
154
|
+
</a>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
{/* Bottom Bar */}
|
|
159
|
+
<div className="border-t border-border">
|
|
160
|
+
<div className="container mx-auto flex flex-col items-center justify-between gap-4 px-4 py-6 sm:flex-row">
|
|
161
|
+
{/* Logo and Copyright */}
|
|
162
|
+
<div className="flex items-center gap-4">
|
|
163
|
+
<Link href="/" className="flex items-center">
|
|
164
|
+
<Logo className="h-6 w-6" />
|
|
165
|
+
</Link>
|
|
166
|
+
<p className="text-sm text-muted-foreground">
|
|
167
|
+
© {currentYear} SaaSify
|
|
168
|
+
</p>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
{/* Bottom Links and Theme Selector */}
|
|
172
|
+
<div className="flex items-center gap-6">
|
|
173
|
+
{bottomLinks.map((link) => (
|
|
174
|
+
<Link
|
|
175
|
+
key={link.href}
|
|
176
|
+
href={link.href}
|
|
177
|
+
className="text-sm text-muted-foreground transition-colors hover:text-foreground"
|
|
178
|
+
>
|
|
179
|
+
{link.label}
|
|
180
|
+
</Link>
|
|
181
|
+
))}
|
|
182
|
+
<ThemeSelector />
|
|
183
|
+
</div>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</footer>
|
|
187
|
+
)
|
|
188
|
+
}
|