kofi-stack-template-generator 2.1.48 → 2.1.50

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 (26) hide show
  1. package/.turbo/turbo-build.log +5 -5
  2. package/dist/index.js +105 -725
  3. package/package.json +2 -2
  4. package/src/templates.generated.ts +24 -20
  5. package/templates/marketing/payload/public/favicon.ico +0 -0
  6. package/templates/marketing/payload/public/favicon.svg +6 -0
  7. package/templates/marketing/payload/public/logo-light.svg +6 -0
  8. package/templates/marketing/payload/public/logo.svg +6 -0
  9. package/templates/marketing/payload/src/Footer/Component.client.tsx +1 -1
  10. package/templates/marketing/payload/src/Footer/config.ts +1 -1
  11. package/templates/marketing/payload/src/Header/Component.client.tsx +1 -1
  12. package/templates/marketing/payload/src/Header/MobileMenu/index.tsx +1 -1
  13. package/templates/marketing/payload/src/app/(docs)/docs/[[...slug]]/page.tsx +6 -6
  14. package/templates/marketing/payload/src/app/(docs)/docs/layout.tsx +1 -1
  15. package/templates/marketing/payload/src/app/(docs)/layout.tsx +3 -3
  16. package/templates/marketing/payload/src/app/(frontend)/api/newsletter/route.ts +15 -15
  17. package/templates/marketing/payload/src/app/(frontend)/layout.tsx +17 -17
  18. package/templates/marketing/payload/src/app/(frontend)/posts/[slug]/BlogPostContent.tsx +5 -5
  19. package/templates/marketing/payload/src/app/(frontend)/posts/page.tsx +2 -2
  20. package/templates/marketing/payload/src/components/JsonLd/index.tsx +19 -19
  21. package/templates/marketing/payload/src/components/Logo/Logo.tsx +1 -1
  22. package/templates/marketing/payload/src/components/TableOfContents/index.tsx +3 -3
  23. package/templates/marketing/payload/src/endpoints/seed/home-static.ts +100 -600
  24. package/templates/marketing/payload/src/heros/ProductShowcase/AnimatedMockup.tsx +3 -3
  25. package/templates/marketing/payload/src/utilities/generateMeta.ts +16 -16
  26. package/templates/marketing/payload/src/utilities/mergeOpenGraph.ts +4 -4
@@ -0,0 +1,6 @@
1
+ <svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="32" height="32" rx="6" fill="#0F1F3D"/>
3
+ <path d="M16 6C11.029 6 7 10.029 7 15C7 16.5 7.4 17.9 8.1 19.1L16 26L23.9 19.1C24.6 17.9 25 16.5 25 15C25 10.029 20.971 6 16 6Z" fill="#3DA9A3"/>
4
+ <path d="M16 9C12.686 9 10 11.686 10 15C10 16.1 10.3 17.1 10.8 18L16 23L21.2 18C21.7 17.1 22 16.1 22 15C22 11.686 19.314 9 16 9Z" fill="#0F1F3D"/>
5
+ <text x="16" y="18" font-family="system-ui, -apple-system, sans-serif" font-size="10" font-weight="700" fill="white" text-anchor="middle">S</text>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="34" height="34" rx="8" fill="#3DA9A3"/>
3
+ <path d="M17 7C12.029 7 8 11.029 8 16C8 17.5 8.4 18.9 9.1 20.1L17 27L24.9 20.1C25.6 18.9 26 17.5 26 16C26 11.029 21.971 7 17 7Z" fill="white"/>
4
+ <path d="M17 10C13.686 10 11 12.686 11 16C11 17.1 11.3 18.1 11.8 19L17 24L22.2 19C22.7 18.1 23 17.1 23 16C23 12.686 20.314 10 17 10Z" fill="#3DA9A3"/>
5
+ <text x="17" y="19" font-family="system-ui, -apple-system, sans-serif" font-size="10" font-weight="700" fill="#0F1F3D" text-anchor="middle">S</text>
6
+ </svg>
@@ -0,0 +1,6 @@
1
+ <svg width="34" height="34" viewBox="0 0 34 34" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="34" height="34" rx="8" fill="#0F1F3D"/>
3
+ <path d="M17 7C12.029 7 8 11.029 8 16C8 17.5 8.4 18.9 9.1 20.1L17 27L24.9 20.1C25.6 18.9 26 17.5 26 16C26 11.029 21.971 7 17 7Z" fill="#3DA9A3"/>
4
+ <path d="M17 10C13.686 10 11 12.686 11 16C11 17.1 11.3 18.1 11.8 19L17 24L22.2 19C22.7 18.1 23 17.1 23 16C23 12.686 20.314 10 17 10Z" fill="#0F1F3D"/>
5
+ <text x="17" y="19" font-family="system-ui, -apple-system, sans-serif" font-size="10" font-weight="700" fill="white" text-anchor="middle">S</text>
6
+ </svg>
@@ -277,7 +277,7 @@ export const FooterClient: React.FC<FooterClientProps> = ({ data }) => {
277
277
  <Logo variant="auto" className="h-6 w-6" />
278
278
  </Link>
279
279
  <p className="text-sm text-muted-foreground">
280
- © {currentYear} {copyrightText || "DirectoryHub"}
280
+ © {currentYear} {copyrightText || "SaaSify"}
281
281
  </p>
282
282
  </div>
283
283
 
@@ -151,7 +151,7 @@ export const Footer: GlobalConfig = {
151
151
  name: "copyrightText",
152
152
  type: "text",
153
153
  label: "Copyright Text",
154
- defaultValue: "DirectoryHub",
154
+ defaultValue: "SaaSify",
155
155
  admin: {
156
156
  description: "Company name for copyright (year is added automatically)",
157
157
  },
@@ -83,7 +83,7 @@ export const HeaderClient: React.FC<HeaderClientProps> = ({ data }) => {
83
83
  <div className="flex items-center gap-8">
84
84
  <Link href="/" className="flex items-center gap-2">
85
85
  <Logo loading="eager" priority="high" variant="auto" />
86
- <span className="text-xl font-semibold hidden sm:inline">DirectoryHub</span>
86
+ <span className="text-xl font-semibold hidden sm:inline">SaaSify</span>
87
87
  </Link>
88
88
  {/* Left nav - hidden on tablet and below, visible on desktop */}
89
89
  <HeaderNav data={data} position="left" className="hidden lg:flex gap-6 items-center" />
@@ -148,7 +148,7 @@ export const MobileMenu: React.FC<MobileMenuProps> = ({ data }) => {
148
148
  {/* Header with close button */}
149
149
  <div className="flex items-center justify-between p-4 border-b border-border">
150
150
  <Link href="/" onClick={closeMenu} className="text-xl font-semibold">
151
- DirectoryHub
151
+ SaaSify
152
152
  </Link>
153
153
  <HamburgerIcon isOpen={isOpen} onClick={closeMenu} className="lg:block" />
154
154
  </div>
@@ -48,7 +48,7 @@ export default async function Page({ params }: DocsPageProps) {
48
48
  return (
49
49
  <DocsPage>
50
50
  <DocsTitle>Documentation</DocsTitle>
51
- <DocsDescription>Welcome to DirectoryHub documentation</DocsDescription>
51
+ <DocsDescription>Welcome to SaaSify documentation</DocsDescription>
52
52
  <DocsBody>
53
53
  <div className="flex flex-col items-center justify-center py-12 text-center">
54
54
  <h2 className="text-xl font-semibold mb-4">No documentation yet</h2>
@@ -101,16 +101,16 @@ export async function generateMetadata({ params }: DocsPageProps): Promise<Metad
101
101
 
102
102
  if (!doc) {
103
103
  return {
104
- title: "Documentation | DirectoryHub",
104
+ title: "Documentation | SaaSify",
105
105
  }
106
106
  }
107
107
 
108
108
  return {
109
- title: `${doc.title} | DirectoryHub Docs`,
110
- description: doc.description || `Learn about ${doc.title} in DirectoryHub documentation.`,
109
+ title: `${doc.title} | SaaSify Docs`,
110
+ description: doc.description || `Learn about ${doc.title} in SaaSify documentation.`,
111
111
  openGraph: {
112
- title: `${doc.title} | DirectoryHub Docs`,
113
- description: doc.description || `Learn about ${doc.title} in DirectoryHub documentation.`,
112
+ title: `${doc.title} | SaaSify Docs`,
113
+ description: doc.description || `Learn about ${doc.title} in SaaSify documentation.`,
114
114
  type: "article",
115
115
  },
116
116
  }
@@ -25,7 +25,7 @@ export default async function DocsLayoutWrapper({
25
25
  <DocsLayout
26
26
  tree={pageTree}
27
27
  nav={{
28
- title: "DirectoryHub Docs",
28
+ title: "SaaSify Docs",
29
29
  url: "/docs",
30
30
  }}
31
31
  sidebar={{
@@ -37,8 +37,8 @@ export default function DocsRootLayout({ children }: { children: ReactNode }) {
37
37
  export const metadata: Metadata = {
38
38
  metadataBase: new URL(getServerSideURL()),
39
39
  title: {
40
- default: "Documentation | DirectoryHub",
41
- template: "%s | DirectoryHub Docs",
40
+ default: "Documentation | SaaSify",
41
+ template: "%s | SaaSify Docs",
42
42
  },
43
- description: "DirectoryHub documentation - learn how to build and manage directory websites.",
43
+ description: "SaaSify documentation - learn how to use the platform and boost your team productivity.",
44
44
  }
@@ -13,9 +13,9 @@ const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
13
13
  const COMPANY_ADDRESS = "KrumaLabs • 102 West Main Street #501, New Albany, OH 43054"
14
14
 
15
15
  /**
16
- * DirectoryHub logo URL
16
+ * SaaSify logo URL
17
17
  */
18
- const LOGO_URL = "https://directoryhub.app/logo.png"
18
+ const LOGO_URL = "/logo.png"
19
19
 
20
20
  /**
21
21
  * Generate newsletter confirmation email HTML with logo and branding
@@ -120,9 +120,9 @@ function renderNewsletterConfirmationEmail(unsubscribeUrl?: string): string {
120
120
  <div style="${emailStyles.container}">
121
121
  <!-- Header with Logo -->
122
122
  <div style="${emailStyles.header}">
123
- <a href="https://directoryhub.app" style="display: inline-flex; align-items: center; gap: 12px; text-decoration: none; color: inherit;">
124
- <img src="${LOGO_URL}" alt="DirectoryHub" width="32" height="32" style="display: block; width: 32px; height: 32px;">
125
- <span style="${emailStyles.logoText}">DirectoryHub</span>
123
+ <a href="/" style="display: inline-flex; align-items: center; gap: 12px; text-decoration: none; color: inherit;">
124
+ <img src="${LOGO_URL}" alt="SaaSify" width="32" height="32" style="display: block; width: 32px; height: 32px;">
125
+ <span style="${emailStyles.logoText}">SaaSify</span>
126
126
  </a>
127
127
  </div>
128
128
 
@@ -130,14 +130,14 @@ function renderNewsletterConfirmationEmail(unsubscribeUrl?: string): string {
130
130
  <div style="padding: 32px 32px 0;"><h1 style="${emailStyles.heading}">Welcome to the Newsletter!</h1></div>
131
131
  <div style="${emailStyles.content}">
132
132
  <p style="${emailStyles.paragraph}">
133
- Thanks for subscribing to the DirectoryHub newsletter! 🎉
133
+ Thanks for subscribing to the SaaSify newsletter! 🎉
134
134
  </p>
135
135
  <p style="${emailStyles.paragraph}">
136
136
  You'll now receive updates about:
137
137
  </p>
138
138
  <ul style="${emailStyles.paragraph}">
139
139
  <li>New features and product updates</li>
140
- <li>Tips for building better directories</li>
140
+ <li>Tips for boosting team productivity</li>
141
141
  <li>Industry insights and best practices</li>
142
142
  <li>Special announcements and offers</li>
143
143
  </ul>
@@ -145,11 +145,11 @@ function renderNewsletterConfirmationEmail(unsubscribeUrl?: string): string {
145
145
  We respect your inbox and only send emails when we have something valuable to share.
146
146
  </p>
147
147
  <div style="margin: 32px 0; text-align: center;">
148
- <a href="https://directoryhub.app" style="${emailStyles.button}">Visit DirectoryHub</a>
148
+ <a href="/" style="${emailStyles.button}">Visit SaaSify</a>
149
149
  </div>
150
150
  <p style="${emailStyles.paragraphSmall}">
151
151
  If you didn't subscribe to this newsletter, you can safely ignore this email or
152
- <a href="${unsubscribeUrl || "https://directoryhub.app/unsubscribe"}" style="${emailStyles.link}">unsubscribe here</a>.
152
+ <a href="${unsubscribeUrl || "/unsubscribe"}" style="${emailStyles.link}">unsubscribe here</a>.
153
153
  </p>
154
154
  </div>
155
155
 
@@ -158,14 +158,14 @@ function renderNewsletterConfirmationEmail(unsubscribeUrl?: string): string {
158
158
 
159
159
  <!-- Footer -->
160
160
  <div style="${emailStyles.footer}">
161
- <p style="${emailStyles.footerText}">DirectoryHub - Build beautiful directory websites</p>
161
+ <p style="${emailStyles.footerText}">SaaSify - The modern platform for growing teams</p>
162
162
  <p style="${emailStyles.footerText}">
163
- <a href="https://directoryhub.app" style="${emailStyles.link}">Visit our website</a>
163
+ <a href="/" style="${emailStyles.link}">Visit our website</a>
164
164
  <span style="color: #999999;"> • </span>
165
- <a href="https://directoryhub.app/support" style="${emailStyles.link}">Support</a>
165
+ <a href="/support" style="${emailStyles.link}">Support</a>
166
166
  ${unsubscribeUrl ? `<span style="color: #999999;"> • </span><a href="${unsubscribeUrl}" style="${emailStyles.link}">Unsubscribe</a>` : ""}
167
167
  </p>
168
- <p style="${emailStyles.footerTextSmall}">You're receiving this email because you signed up for the DirectoryHub newsletter.</p>
168
+ <p style="${emailStyles.footerTextSmall}">You're receiving this email because you signed up for the SaaSify newsletter.</p>
169
169
  <p style="${emailStyles.footerAddress}">${COMPANY_ADDRESS}</p>
170
170
  </div>
171
171
  </div>
@@ -193,8 +193,8 @@ export async function POST(request: Request) {
193
193
 
194
194
  const apiKey = process.env.RESEND_API_KEY
195
195
  const audienceId = process.env.RESEND_AUDIENCE_NEWSLETTER
196
- // Marketing emails use "Theo from DirectoryHub" as sender
197
- const fromEmail = "Theo from DirectoryHub <theo@notifications.directoryhub.app>"
196
+ // Marketing emails sender - update with your domain
197
+ const fromEmail = "SaaSify Team <hello@notifications.saasify.com>"
198
198
 
199
199
  // In development without API key, just return success
200
200
  if (!apiKey) {
@@ -69,23 +69,23 @@ export default async function RootLayout({ children }: { children: React.ReactNo
69
69
  export const metadata: Metadata = {
70
70
  metadataBase: new URL(getServerSideURL()),
71
71
  title: {
72
- default: "DirectoryHub - Build Directories That Generate Real Business",
73
- template: "%s | DirectoryHub",
72
+ default: "SaaSify - The Modern Platform for Growing Teams",
73
+ template: "%s | SaaSify",
74
74
  },
75
75
  description:
76
- "Launch a profitable directory business in minutes. The no-code platform to build, manage, and monetize niche directory websites.",
76
+ "Streamline workflows, boost productivity, and scale your business with one powerful platform.",
77
77
  keywords: [
78
- "directory builder",
79
- "no-code directory",
80
- "directory website",
81
- "niche directory",
82
- "business directory software",
83
- "directory platform",
84
- "monetize directory",
78
+ "SaaS platform",
79
+ "team productivity",
80
+ "workflow automation",
81
+ "business software",
82
+ "collaboration tools",
83
+ "project management",
84
+ "team collaboration",
85
85
  ],
86
- authors: [{ name: "DirectoryHub", url: getServerSideURL() }],
87
- creator: "DirectoryHub",
88
- publisher: "DirectoryHub",
86
+ authors: [{ name: "SaaSify", url: getServerSideURL() }],
87
+ creator: "SaaSify",
88
+ publisher: "SaaSify",
89
89
  robots: {
90
90
  index: true,
91
91
  follow: true,
@@ -100,11 +100,11 @@ export const metadata: Metadata = {
100
100
  openGraph: mergeOpenGraph(),
101
101
  twitter: {
102
102
  card: "summary_large_image",
103
- creator: "@directoryhub",
104
- site: "@directoryhub",
105
- title: "DirectoryHub - Build Directories That Generate Real Business",
103
+ creator: "@saasify",
104
+ site: "@saasify",
105
+ title: "SaaSify - The Modern Platform for Growing Teams",
106
106
  description:
107
- "Launch a profitable directory business in minutes. The no-code platform to build, manage, and monetize niche directory websites.",
107
+ "Streamline workflows, boost productivity, and scale your business with one powerful platform.",
108
108
  },
109
109
  verification: {
110
110
  // Add your verification codes here when available
@@ -39,12 +39,12 @@ export function BlogPostContent({ content, headings }: BlogPostContentProps) {
39
39
  <TableOfContents
40
40
  headings={headings}
41
41
  signUpCta={{
42
- title: "Experience DirectoryHub",
43
- description: "Start building your directory today",
44
- buttonText: "Sign up for free",
45
- buttonLink: "https://app.directoryhub.app/sign-up",
42
+ title: "Experience SaaSify",
43
+ description: "Start boosting your team's productivity today",
44
+ buttonText: "Start free trial",
45
+ buttonLink: "/pricing",
46
46
  imageSrc: "/media/hero-dashboard-500x500.webp",
47
- imageAlt: "DirectoryHub dashboard feature",
47
+ imageAlt: "SaaSify dashboard feature",
48
48
  }}
49
49
  />
50
50
  </div>
@@ -42,8 +42,8 @@ export default async function Page() {
42
42
 
43
43
  export function generateMetadata(): Metadata {
44
44
  return {
45
- title: "Blog — DirectoryHub Resources & Guides",
45
+ title: "Blog — SaaSify Resources & Guides",
46
46
  description:
47
- "Learn how to build, grow, and monetize directory websites. Tips, strategies, and success stories from the DirectoryHub team.",
47
+ "Tips, strategies, and insights for growing teams. Learn how to boost productivity and scale your business with SaaSify.",
48
48
  }
49
49
  }
@@ -10,23 +10,23 @@ export const OrganizationSchema: React.FC = () => {
10
10
  const schema = {
11
11
  "@context": "https://schema.org",
12
12
  "@type": "Organization",
13
- name: "DirectoryHub",
14
- description: "The no-code platform to build, manage, and monetize niche directory websites.",
13
+ name: "SaaSify",
14
+ description: "The modern platform for growing teams. Streamline workflows and boost productivity.",
15
15
  url: siteUrl,
16
16
  logo: `${siteUrl}/logo.svg`,
17
17
  sameAs: [
18
- "https://twitter.com/directoryhub",
19
- "https://linkedin.com/company/directoryhub",
20
- "https://github.com/directoryhub",
18
+ "https://twitter.com/saasify",
19
+ "https://linkedin.com/company/saasify",
20
+ "https://github.com/saasify",
21
21
  ],
22
22
  contactPoint: {
23
23
  "@type": "ContactPoint",
24
24
  contactType: "customer support",
25
- email: "support@directoryhub.com",
25
+ email: "support@saasify.com",
26
26
  },
27
27
  founder: {
28
28
  "@type": "Person",
29
- name: "DirectoryHub Team",
29
+ name: "SaaSify Team",
30
30
  },
31
31
  foundingDate: "2024",
32
32
  }
@@ -47,9 +47,9 @@ export const SoftwareApplicationSchema: React.FC = () => {
47
47
  const schema = {
48
48
  "@context": "https://schema.org",
49
49
  "@type": "SoftwareApplication",
50
- name: "DirectoryHub",
50
+ name: "SaaSify",
51
51
  description:
52
- "Launch a profitable directory business in minutes. Create, monetize, and grow with DirectoryHub - the no-code directory builder.",
52
+ "The modern platform for growing teams. Streamline workflows, boost productivity, and scale your business.",
53
53
  applicationCategory: "BusinessApplication",
54
54
  operatingSystem: "Web",
55
55
  url: siteUrl,
@@ -57,7 +57,7 @@ export const SoftwareApplicationSchema: React.FC = () => {
57
57
  "@type": "AggregateOffer",
58
58
  priceCurrency: "USD",
59
59
  lowPrice: "0",
60
- highPrice: "199",
60
+ highPrice: "99",
61
61
  offerCount: "3",
62
62
  },
63
63
  aggregateRating: {
@@ -68,12 +68,12 @@ export const SoftwareApplicationSchema: React.FC = () => {
68
68
  worstRating: "1",
69
69
  },
70
70
  featureList: [
71
- "No-code directory builder",
72
- "Built-in payment processing",
73
- "SEO optimization",
74
- "Custom domains",
75
- "Multi-tenant architecture",
76
- "Analytics dashboard",
71
+ "Team collaboration tools",
72
+ "Workflow automation",
73
+ "Real-time analytics",
74
+ "100+ integrations",
75
+ "Enterprise security",
76
+ "Custom dashboards",
77
77
  ],
78
78
  screenshot: `${siteUrl}/website-template-OG.webp`,
79
79
  }
@@ -94,8 +94,8 @@ export const WebSiteSchema: React.FC = () => {
94
94
  const schema = {
95
95
  "@context": "https://schema.org",
96
96
  "@type": "WebSite",
97
- name: "DirectoryHub",
98
- description: "The no-code platform to build, manage, and monetize niche directory websites.",
97
+ name: "SaaSify",
98
+ description: "The modern platform for growing teams. Streamline workflows and boost productivity.",
99
99
  url: siteUrl,
100
100
  potentialAction: {
101
101
  "@type": "SearchAction",
@@ -107,7 +107,7 @@ export const WebSiteSchema: React.FC = () => {
107
107
  },
108
108
  publisher: {
109
109
  "@type": "Organization",
110
- name: "DirectoryHub",
110
+ name: "SaaSify",
111
111
  logo: {
112
112
  "@type": "ImageObject",
113
113
  url: `${siteUrl}/logo.svg`,
@@ -33,7 +33,7 @@ export const Logo = (props: Props) => {
33
33
  return (
34
34
  /* eslint-disable @next/next/no-img-element */
35
35
  <img
36
- alt="DirectoryHub Logo"
36
+ alt="SaaSify Logo"
37
37
  width={34}
38
38
  height={34}
39
39
  loading={loading}
@@ -95,7 +95,7 @@ export function TableOfContents({ headings, signUpCta }: TableOfContentsProps) {
95
95
  <div className="w-full aspect-square rounded-lg overflow-hidden bg-white dark:bg-[#0F1F3D] border border-[#E1E6EF] dark:border-[#0F1F3D]">
96
96
  <Image
97
97
  src={signUpCta.imageSrc}
98
- alt={signUpCta.imageAlt || "DirectoryHub app feature"}
98
+ alt={signUpCta.imageAlt || "SaaSify app feature"}
99
99
  width={200}
100
100
  height={200}
101
101
  className="w-full h-full object-cover"
@@ -106,7 +106,7 @@ export function TableOfContents({ headings, signUpCta }: TableOfContentsProps) {
106
106
  {/* Text */}
107
107
  <div>
108
108
  <p className="text-sm font-semibold text-foreground">
109
- {signUpCta.title || "Experience DirectoryHub"}
109
+ {signUpCta.title || "Experience SaaSify"}
110
110
  </p>
111
111
  <p className="text-xs text-muted-foreground mt-1">
112
112
  {signUpCta.description || "Start building your directory today"}
@@ -115,7 +115,7 @@ export function TableOfContents({ headings, signUpCta }: TableOfContentsProps) {
115
115
 
116
116
  {/* CTA Button */}
117
117
  <Link
118
- href={signUpCta.buttonLink || "https://app.directoryhub.app/sign-up"}
118
+ href={signUpCta.buttonLink || "/pricing"}
119
119
  className="inline-flex items-center justify-center px-4 py-2 text-sm font-medium text-white bg-[#0F1F3D] hover:bg-[#0B162C] dark:bg-[#3DA9A3] dark:hover:bg-[#3DA9A3]/90 rounded-lg transition-colors"
120
120
  >
121
121
  {signUpCta.buttonText || "Sign up for free"}