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.
Files changed (54) hide show
  1. package/.turbo/turbo-build.log +6 -6
  2. package/dist/index.js +1906 -146
  3. package/package.json +2 -2
  4. package/src/generator.ts +9 -0
  5. package/src/templates.generated.ts +51 -5
  6. package/templates/marketing/astro/astro.config.ts.hbs +12 -0
  7. package/templates/marketing/astro/package.json.hbs +31 -0
  8. package/templates/marketing/astro/postcss.config.mjs.hbs +5 -0
  9. package/templates/marketing/astro/public/favicon.svg +4 -0
  10. package/templates/marketing/astro/public/media/hero-bg.png +1 -0
  11. package/templates/marketing/astro/src/components/Footer.astro +167 -0
  12. package/templates/marketing/astro/src/components/Header.astro +378 -0
  13. package/templates/marketing/astro/src/components/Logo.astro +30 -0
  14. package/templates/marketing/astro/src/components/ThemeSelector.astro +64 -0
  15. package/templates/marketing/astro/src/components/blocks/BentoFeatures.astro +209 -0
  16. package/templates/marketing/astro/src/components/blocks/FeatureShowcase.astro +102 -0
  17. package/templates/marketing/astro/src/components/blocks/FinalCTA.astro +82 -0
  18. package/templates/marketing/astro/src/components/blocks/IndustryTabs.astro +177 -0
  19. package/templates/marketing/astro/src/components/blocks/LogoBanner.astro +95 -0
  20. package/templates/marketing/astro/src/components/blocks/PricingTable.astro +176 -0
  21. package/templates/marketing/astro/src/components/blocks/ProofBanner.astro +56 -0
  22. package/templates/marketing/astro/src/components/blocks/TestimonialsGrid.astro +106 -0
  23. package/templates/marketing/astro/src/components/blocks/TrustColumns.astro +88 -0
  24. package/templates/marketing/astro/src/components/heros/AnimatedMockup.astro +711 -0
  25. package/templates/marketing/astro/src/components/heros/ProductShowcaseHero.astro +111 -0
  26. package/templates/marketing/astro/src/layouts/Layout.astro +37 -0
  27. package/templates/marketing/astro/src/lib/utils.ts +6 -0
  28. package/templates/marketing/astro/src/pages/index.astro +163 -0
  29. package/templates/marketing/astro/src/styles/globals.css.hbs +353 -0
  30. package/templates/marketing/astro/tsconfig.json.hbs +11 -0
  31. package/templates/marketing/nextjs/package.json.hbs +6 -1
  32. package/templates/marketing/nextjs/src/app/layout.tsx.hbs +19 -5
  33. package/templates/marketing/nextjs/src/app/page.tsx.hbs +160 -164
  34. package/templates/marketing/nextjs/src/components/Footer/index.tsx +188 -0
  35. package/templates/marketing/nextjs/src/components/Header/MegaMenu.tsx +117 -0
  36. package/templates/marketing/nextjs/src/components/Header/MobileMenu.tsx +178 -0
  37. package/templates/marketing/nextjs/src/components/Header/index.tsx +172 -0
  38. package/templates/marketing/nextjs/src/components/Logo.tsx +46 -0
  39. package/templates/marketing/nextjs/src/components/ThemeProvider.tsx +8 -0
  40. package/templates/marketing/nextjs/src/components/ThemeSelector.tsx +69 -0
  41. package/templates/marketing/nextjs/src/components/blocks/BentoFeatures.tsx +249 -0
  42. package/templates/marketing/nextjs/src/components/blocks/FeatureShowcase.tsx +110 -0
  43. package/templates/marketing/nextjs/src/components/blocks/FinalCTA.tsx +91 -0
  44. package/templates/marketing/nextjs/src/components/blocks/IndustryTabs.tsx +137 -0
  45. package/templates/marketing/nextjs/src/components/blocks/LogoBanner.tsx +80 -0
  46. package/templates/marketing/nextjs/src/components/blocks/PricingTable.tsx +210 -0
  47. package/templates/marketing/nextjs/src/components/blocks/ProofBanner.tsx +72 -0
  48. package/templates/marketing/nextjs/src/components/blocks/TestimonialsGrid.tsx +119 -0
  49. package/templates/marketing/nextjs/src/components/blocks/TrustColumns.tsx +110 -0
  50. package/templates/marketing/nextjs/src/components/blocks/index.ts +9 -0
  51. package/templates/marketing/nextjs/src/components/heros/AnimatedMockup.tsx +242 -0
  52. package/templates/marketing/nextjs/src/components/heros/ProductShowcaseHero.tsx +84 -0
  53. package/templates/marketing/nextjs/src/components/heros/index.ts +2 -0
  54. 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: '{{projectName}} - Marketing',
17
- description: 'Marketing site for {{projectName}}',
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
- {children}
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
- <main className="min-h-screen">
4
- {/* Navigation */}
5
- <nav className="sticky top-0 z-50 w-full border-b border-gray-200 dark:border-gray-800 bg-white/80 dark:bg-gray-900/80 backdrop-blur-sm">
6
- <div className="container mx-auto px-4">
7
- <div className="flex h-16 items-center justify-between">
8
- <div className="flex items-center gap-2">
9
- <div className="flex h-8 w-8 items-center justify-center rounded-lg bg-gray-900 dark:bg-white">
10
- <svg className="h-4 w-4 text-white dark:text-gray-900" fill="none" stroke="currentColor" viewBox="0 0 24 24">
11
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
12
- </svg>
13
- </div>
14
- <span className="font-semibold text-gray-900 dark:text-white">{{projectName}}</span>
15
- </div>
16
- <div className="hidden md:flex items-center gap-6">
17
- <a href="#features" className="text-sm text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors">
18
- Features
19
- </a>
20
- <a href="#" className="text-sm text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors">
21
- Pricing
22
- </a>
23
- <a href="#" className="text-sm text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors">
24
- Docs
25
- </a>
26
- </div>
27
- <div className="flex items-center gap-4">
28
- <a
29
- href="/sign-in"
30
- className="text-sm font-medium text-gray-600 hover:text-gray-900 dark:text-gray-300 dark:hover:text-white transition-colors"
31
- >
32
- Sign in
33
- </a>
34
- <a
35
- href="/sign-up"
36
- className="rounded-lg bg-gray-900 dark:bg-white px-4 py-2 text-sm font-medium text-white dark:text-gray-900 hover:opacity-90 transition-opacity"
37
- >
38
- Get Started
39
- </a>
40
- </div>
41
- </div>
42
- </div>
43
- </nav>
44
-
45
- {/* Hero Section */}
46
- <section className="relative overflow-hidden bg-gradient-to-b from-gray-50 to-white dark:from-gray-900 dark:to-gray-800">
47
- <div className="container mx-auto px-4 py-24 sm:py-32">
48
- <div className="text-center">
49
- <h1 className="text-4xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-6xl">
50
- Welcome to {{projectName}}
51
- </h1>
52
- <p className="mt-6 text-lg leading-8 text-gray-600 dark:text-gray-300 max-w-2xl mx-auto">
53
- A modern full-stack application built with Next.js, Convex, and Better-Auth.
54
- </p>
55
- <div className="mt-10 flex items-center justify-center gap-x-6">
56
- <a
57
- href="/app"
58
- className="rounded-lg bg-gray-900 dark:bg-white px-6 py-3 text-sm font-semibold text-white dark:text-gray-900 shadow-sm hover:opacity-90 transition-opacity"
59
- >
60
- Get Started
61
- </a>
62
- <a
63
- href="#features"
64
- className="text-sm font-semibold leading-6 text-gray-900 dark:text-white"
65
- >
66
- Learn more <span aria-hidden="true">→</span>
67
- </a>
68
- </div>
69
- </div>
70
- </div>
71
- </section>
72
-
73
- {/* Features Section */}
74
- <section id="features" className="py-24 sm:py-32">
75
- <div className="container mx-auto px-4">
76
- <div className="text-center mb-16">
77
- <h2 className="text-3xl font-bold tracking-tight text-gray-900 dark:text-white sm:text-4xl">
78
- Everything you need
79
- </h2>
80
- <p className="mt-4 text-lg text-gray-600 dark:text-gray-300">
81
- Built with the best tools for modern web development
82
- </p>
83
- </div>
84
- <div className="grid grid-cols-1 md:grid-cols-3 gap-8">
85
- <div className="p-6 rounded-xl border border-gray-200 dark:border-gray-700">
86
- <div className="w-12 h-12 bg-gray-100 dark:bg-gray-800 rounded-lg flex items-center justify-center mb-4">
87
- <svg className="w-6 h-6 text-gray-900 dark:text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
88
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 10V3L4 14h7v7l9-11h-7z" />
89
- </svg>
90
- </div>
91
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
92
- Lightning Fast
93
- </h3>
94
- <p className="text-gray-600 dark:text-gray-300">
95
- Built on Next.js with Turbopack for instant hot reload and optimized production builds.
96
- </p>
97
- </div>
98
- <div className="p-6 rounded-xl border border-gray-200 dark:border-gray-700">
99
- <div className="w-12 h-12 bg-gray-100 dark:bg-gray-800 rounded-lg flex items-center justify-center mb-4">
100
- <svg className="w-6 h-6 text-gray-900 dark:text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
101
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4" />
102
- </svg>
103
- </div>
104
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
105
- Real-time Database
106
- </h3>
107
- <p className="text-gray-600 dark:text-gray-300">
108
- Powered by Convex for automatic real-time sync and type-safe queries.
109
- </p>
110
- </div>
111
- <div className="p-6 rounded-xl border border-gray-200 dark:border-gray-700">
112
- <div className="w-12 h-12 bg-gray-100 dark:bg-gray-800 rounded-lg flex items-center justify-center mb-4">
113
- <svg className="w-6 h-6 text-gray-900 dark:text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
114
- <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" />
115
- </svg>
116
- </div>
117
- <h3 className="text-lg font-semibold text-gray-900 dark:text-white mb-2">
118
- Secure Auth
119
- </h3>
120
- <p className="text-gray-600 dark:text-gray-300">
121
- Better-Auth provides secure, flexible authentication with social login support.
122
- </p>
123
- </div>
124
- </div>
125
- </div>
126
- </section>
127
-
128
- {/* CTA Section */}
129
- <section className="py-24 sm:py-32 bg-gray-900 dark:bg-gray-800">
130
- <div className="container mx-auto px-4 text-center">
131
- <h2 className="text-3xl font-bold tracking-tight text-white sm:text-4xl">
132
- Ready to get started?
133
- </h2>
134
- <p className="mt-4 text-lg text-gray-300 max-w-2xl mx-auto">
135
- Start building your next project with our full-stack template.
136
- </p>
137
- <div className="mt-10">
138
- <a
139
- href="/app"
140
- className="rounded-lg bg-white px-6 py-3 text-sm font-semibold text-gray-900 shadow-sm hover:opacity-90 transition-opacity"
141
- >
142
- Launch App
143
- </a>
144
- </div>
145
- </div>
146
- </section>
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
+ }