development
tsx 375 lines 15.8 KB
Raw
1 import type { Metadata } from "next";
2 import Link from "next/link";
3 import { StructuredData } from "@/components/structured-data";
4 import { absoluteUrl, genPageMetadata } from "../seo";
5
6 const comparisonRows = [
7 {
8 label: "Primary job",
9 smbcloud:
10 "Handle hosted sign-in, signup, sessions, and auth flows without extra identity weight.",
11 clerk:
12 "Provide developer-friendly hosted auth with a broader auth product around it.",
13 },
14 {
15 label: "Best fit",
16 smbcloud:
17 "Teams that want auth to stay simple and boring.",
18 clerk:
19 "Teams that like a more opinionated developer auth platform and its workflow.",
20 },
21 {
22 label: "Product shape",
23 smbcloud: "Focused hosted auth inside the smbCloud platform.",
24 clerk: "Hosted auth product with more surrounding auth surface area.",
25 },
26 {
27 label: "Why teams pick it",
28 smbcloud: "Because the product is the app, not the auth stack.",
29 clerk: "Because they want a richer dedicated auth product.",
30 },
31 ];
32
33 const smbcloudFits = [
34 "You want hosted auth to stay out of the way.",
35 "You need sign-in, signup, sessions, and user management without extra auth sprawl.",
36 "You want auth close to deploy, mail, and the rest of the stack.",
37 "You prefer a smaller auth surface area for a smaller team.",
38 ];
39
40 const clerkStillFits = [
41 "Your team already likes Clerk and wants to keep its workflow.",
42 "You want a more feature-rich dedicated auth product around the app.",
43 "The added auth surface area is useful instead of distracting.",
44 ];
45
46 const bestFor = [
47 "Small product teams",
48 "Founders who want hosted auth without ceremony",
49 "Apps that need sign-in and sessions solved quickly",
50 "Teams that want auth bundled close to deploy and mail",
51 "Projects that do not want auth to become its own category of work",
52 ];
53
54 const faqs = [
55 {
56 question: "Is smbCloud Auth a Clerk replacement?",
57 answer:
58 "For some teams, yes. If you want hosted sign-in, signup, sessions, and auth flows with less auth surface area, smbCloud Auth may fit better. If you want a richer dedicated auth product and already like Clerk's workflow, Clerk may fit better.",
59 },
60 {
61 question: "What is the biggest difference between smbCloud Auth and Clerk?",
62 answer:
63 "Clerk is more of a dedicated auth product. smbCloud Auth is a simpler auth service inside a broader application platform.",
64 },
65 {
66 question: "Who should switch from Clerk to smbCloud Auth?",
67 answer:
68 "Teams that want hosted auth, but want the auth product to get out of the way faster.",
69 },
70 ];
71
72 export const metadata: Metadata = {
73 ...genPageMetadata({
74 title: "Clerk alternative for simpler hosted auth",
75 description:
76 "smbCloud Auth is a Clerk alternative for teams that want hosted sign-in, signup, sessions, and auth flows with less auth surface area and less platform sprawl.",
77 path: "/clerk-alternative",
78 keywords: [
79 "Clerk alternative",
80 "hosted auth alternative",
81 "sign in and signup platform",
82 "session management platform",
83 "developer auth platform alternative",
84 "smbCloud Auth",
85 ],
86 }),
87 };
88
89 const structuredData = {
90 "@context": "https://schema.org",
91 "@graph": [
92 {
93 "@type": "WebPage",
94 "@id": absoluteUrl("/clerk-alternative#webpage"),
95 url: absoluteUrl("/clerk-alternative"),
96 name: "Clerk alternative for simpler hosted auth",
97 description:
98 "Compare smbCloud Auth and Clerk for simpler hosted auth workflows.",
99 isPartOf: {
100 "@id": absoluteUrl("/#website"),
101 },
102 },
103 {
104 "@type": "BreadcrumbList",
105 itemListElement: [
106 {
107 "@type": "ListItem",
108 position: 1,
109 name: "Home",
110 item: absoluteUrl("/"),
111 },
112 {
113 "@type": "ListItem",
114 position: 2,
115 name: "Clerk alternative",
116 item: absoluteUrl("/clerk-alternative"),
117 },
118 ],
119 },
120 {
121 "@type": "FAQPage",
122 mainEntity: faqs.map((faq) => ({
123 "@type": "Question",
124 name: faq.question,
125 acceptedAnswer: {
126 "@type": "Answer",
127 text: faq.answer,
128 },
129 })),
130 },
131 ],
132 };
133
134 export default function ClerkAlternativePage() {
135 return (
136 <div>
137 <StructuredData data={structuredData} />
138
139 <section className="relative overflow-hidden px-6 pt-24 pb-16 sm:pt-32 sm:pb-20 lg:px-8">
140 <div className="pointer-events-none absolute inset-x-0 top-0 -z-10 h-[520px] bg-[radial-gradient(ellipse_75%_50%_at_50%_0%,rgba(99,102,241,0.18),transparent)] dark:bg-[radial-gradient(ellipse_75%_50%_at_50%_0%,rgba(99,102,241,0.12),transparent)]" />
141
142 <div className="mx-auto max-w-4xl">
143 <div className="mb-6 inline-flex items-center gap-2 rounded-full border border-indigo-200 bg-indigo-50 px-4 py-1.5 dark:border-indigo-500/30 dark:bg-indigo-500/10">
144 <span className="h-1.5 w-1.5 rounded-full bg-indigo-500" />
145 <span className="text-xs font-semibold uppercase tracking-widest text-indigo-700 dark:text-indigo-400">
146 smbCloud Auth
147 </span>
148 </div>
149
150 <h1 className="max-w-3xl text-4xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-6xl leading-[1.05]">
151 Looking for a Clerk alternative?
152 </h1>
153
154 <p className="mt-6 max-w-3xl text-lg leading-8 text-slate-600 dark:text-slate-400">
155 smbCloud Auth is for teams that want hosted auth to stay simple,
156 hosted, and out of the way. Sign-in, signup, sessions, and auth
157 flows should support the product, not steal the whole conversation.
158 </p>
159
160 <div className="mt-8 flex flex-col gap-4 sm:flex-row">
161 <Link
162 href="https://console.smbcloud.xyz"
163 target="_blank"
164 rel="noopener noreferrer"
165 className="inline-flex items-center justify-center rounded-lg bg-indigo-600 px-8 py-3.5 text-sm font-semibold text-white shadow-lg shadow-indigo-500/20 transition-all hover:bg-indigo-500 hover:shadow-indigo-500/30 active:scale-[0.98]"
166 >
167 Create free account
168 </Link>
169 <Link
170 href="/services"
171 className="inline-flex items-center justify-center rounded-lg border border-slate-300 px-8 py-3.5 text-sm font-semibold text-slate-700 transition-colors hover:bg-slate-50 dark:border-white/[0.12] dark:text-slate-200 dark:hover:bg-white/[0.04]"
172 >
173 Explore smbCloud Auth
174 </Link>
175 </div>
176 </div>
177 </section>
178
179 <section className="px-6 pb-24 lg:px-8">
180 <div className="mx-auto grid max-w-5xl gap-8 lg:grid-cols-[0.95fr_1.05fr]">
181 <div>
182 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
183 Why teams compare them
184 </p>
185 <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
186 This is usually about whether you want more auth product than the team actually needs.
187 </h2>
188 <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
189 Some teams want a richer dedicated auth product. Others mostly
190 want auth flows that work well and stay out of the product team's
191 way.
192 </p>
193 </div>
194
195 <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
196 <p className="text-sm font-semibold text-slate-900 dark:text-white">
197 What smbCloud Auth does well
198 </p>
199 <ul className="mt-5 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
200 <li className="flex gap-3">
201 <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
202 <span>Hosted auth flows that stay straightforward.</span>
203 </li>
204 <li className="flex gap-3">
205 <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
206 <span>Sessions, signup, and sign-in without the auth stack sprawling outward.</span>
207 </li>
208 <li className="flex gap-3">
209 <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
210 <span>A better fit for teams that want auth solved, not celebrated.</span>
211 </li>
212 </ul>
213 </div>
214 </div>
215 </section>
216
217 <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
218 <div className="mx-auto max-w-5xl">
219 <div className="mb-12 max-w-3xl">
220 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
221 smbCloud Auth vs Clerk
222 </p>
223 <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
224 The trade is richer auth product versus calmer auth workflow.
225 </h2>
226 </div>
227
228 <div className="overflow-hidden rounded-2xl border border-slate-200 dark:border-white/[0.06]">
229 <div className="grid grid-cols-[0.8fr_1fr_1fr] bg-slate-50 text-sm font-semibold text-slate-900 dark:bg-white/[0.03] dark:text-white">
230 <div className="border-b border-slate-200 px-5 py-4 dark:border-white/[0.06]">
231 Area
232 </div>
233 <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
234 smbCloud Auth
235 </div>
236 <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
237 Clerk
238 </div>
239 </div>
240 {comparisonRows.map((row) => (
241 <div
242 key={row.label}
243 className="grid grid-cols-[0.8fr_1fr_1fr] text-sm leading-7 text-slate-600 dark:text-slate-400"
244 >
245 <div className="border-b border-slate-200 bg-white px-5 py-5 font-semibold text-slate-900 dark:border-white/[0.06] dark:bg-white/[0.02] dark:text-white">
246 {row.label}
247 </div>
248 <div className="border-b border-l border-slate-200 bg-white px-5 py-5 dark:border-white/[0.06] dark:bg-white/[0.02]">
249 {row.smbcloud}
250 </div>
251 <div className="border-b border-l border-slate-200 bg-white px-5 py-5 dark:border-white/[0.06] dark:bg-white/[0.02]">
252 {row.clerk}
253 </div>
254 </div>
255 ))}
256 </div>
257 </div>
258 </section>
259
260 <section className="px-6 py-24 lg:px-8">
261 <div className="mx-auto grid max-w-5xl gap-6 lg:grid-cols-2">
262 <div className="rounded-2xl border border-slate-200 bg-white p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
263 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
264 Pick smbCloud Auth if
265 </p>
266 <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
267 {smbcloudFits.map((item) => (
268 <li key={item} className="flex gap-3">
269 <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
270 <span>{item}</span>
271 </li>
272 ))}
273 </ul>
274 </div>
275
276 <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
277 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
278 Stay with Clerk if
279 </p>
280 <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
281 {clerkStillFits.map((item) => (
282 <li key={item} className="flex gap-3">
283 <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-slate-400" />
284 <span>{item}</span>
285 </li>
286 ))}
287 </ul>
288 </div>
289 </div>
290 </section>
291
292 <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
293 <div className="mx-auto max-w-5xl grid gap-8 lg:grid-cols-[0.95fr_1.05fr]">
294 <div>
295 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
296 Best fit
297 </p>
298 <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
299 A good fit if you want hosted auth to feel smaller than the auth category itself.
300 </h2>
301 </div>
302 <ul className="rounded-2xl border border-slate-200 bg-white p-8 text-sm leading-7 text-slate-600 dark:border-white/[0.06] dark:bg-white/[0.02] dark:text-slate-400">
303 {bestFor.map((item) => (
304 <li
305 key={item}
306 className="flex gap-3 border-b border-slate-200 py-3 last:border-0 last:pb-0 first:pt-0 dark:border-white/[0.06]"
307 >
308 <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
309 <span>{item}</span>
310 </li>
311 ))}
312 </ul>
313 </div>
314 </section>
315
316 <section className="px-6 pb-24 lg:px-8">
317 <div className="mx-auto max-w-3xl">
318 <div className="mb-10">
319 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
320 FAQ
321 </p>
322 <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
323 Common questions
324 </h2>
325 </div>
326 <div className="space-y-4">
327 {faqs.map((faq) => (
328 <div
329 key={faq.question}
330 className="rounded-2xl border border-slate-200 bg-white p-6 dark:border-white/[0.06] dark:bg-white/[0.02]"
331 >
332 <h3 className="text-lg font-semibold text-slate-900 dark:text-white">
333 {faq.question}
334 </h3>
335 <p className="mt-3 text-sm leading-7 text-slate-600 dark:text-slate-400">
336 {faq.answer}
337 </p>
338 </div>
339 ))}
340 </div>
341 </div>
342 </section>
343
344 <section className="px-6 pb-20 lg:px-8">
345 <div className="mx-auto max-w-3xl">
346 <div className="relative overflow-hidden rounded-2xl bg-indigo-600 px-8 py-14 text-center shadow-2xl shadow-indigo-500/20">
347 <div className="pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.1),transparent)]" />
348 <h2 className="relative text-3xl font-bold tracking-tight text-white">
349 If auth feels like too much product around the product, try smbCloud Auth.
350 </h2>
351 <p className="relative mt-4 text-indigo-200">
352 Create an account and see if the simpler auth workflow is the better fit.
353 </p>
354 <div className="relative mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row">
355 <Link
356 href="https://console.smbcloud.xyz"
357 target="_blank"
358 rel="noopener noreferrer"
359 className="inline-flex rounded-lg bg-white px-8 py-3.5 text-sm font-semibold text-indigo-700 shadow-sm transition-colors hover:bg-indigo-50"
360 >
361 Create free account
362 </Link>
363 <Link
364 href="/auth0-alternative"
365 className="inline-flex rounded-lg border border-white/20 px-8 py-3.5 text-sm font-semibold text-white transition-colors hover:bg-white/10"
366 >
367 Compare Auth0 alternative
368 </Link>
369 </div>
370 </div>
371 </div>
372 </section>
373 </div>
374 );
375 }