Add Resend, useSend, and SendGrid alternative pages

- Add /resend-alternative, /usesend-alternative, and /sendgrid-alternative comparison pages for smbCloud Mail - Update sitemap to include new alternative pages - Update llms.txt with new alternative URLs - Fix next-env.d.ts to use correct routes import - Refactor comparisonPages to deployComparisonPages in app/page.tsx

keypair34 committed May 8, 2026 at 21:46 UTC c053922dfc9c317df280fca41b7d8f921d7b42d1
7 files changed +1279 -35
app/page.tsx
+132 -34
@@ -52,10 +52,10 @@ const bestFit = [
52 "Teams that already like SSH and fewer moving parts",
53 ];
54
55 -const comparisonPages = [
55 +const deployComparisonPages = [
56 {
57 href: "/heroku-alternative",
58 - eyebrow: "Comparison page",
58 + eyebrow: "Deploy comparison",
59 title: "Heroku alternative",
60 description:
61 "If you still want simplicity, but with less platform in the middle.",
@@ -66,7 +66,7 @@ const comparisonPages = [
66 },
67 {
68 href: "/railway-alternative",
69 - eyebrow: "Comparison page",
69 + eyebrow: "Deploy comparison",
70 title: "Railway alternative",
71 description:
72 "If Railway feels a bit too broad and you want a calmer deploy flow.",
@@ -77,6 +77,42 @@ const comparisonPages = [
77 },
78 ];
79
80 +const mailComparisonPages = [
81 + {
82 + href: "/resend-alternative",
83 + eyebrow: "Mail comparison",
84 + title: "Resend alternative",
85 + description:
86 + "If your problem starts with the inbox, not just the send API.",
87 + bullets: [
88 + "Compare inbox-first mail workflows against sending-first tools",
89 + "See where smbCloud Mail fits for routing, forwarding, and stored inbound mail",
90 + ],
91 + },
92 + {
93 + href: "/usesend-alternative",
94 + eyebrow: "Mail comparison",
95 + title: "useSend alternative",
96 + description:
97 + "If you want managed mail workflows instead of running the email stack yourself.",
98 + bullets: [
99 + "A cleaner fit for domain inbox routes and forwarding",
100 + "Honest tradeoffs between hosted mail and open-source sending infrastructure",
101 + ],
102 + },
103 + {
104 + href: "/sendgrid-alternative",
105 + eyebrow: "Mail comparison",
106 + title: "SendGrid alternative",
107 + description:
108 + "If you need domain inboxes and inbound routing more than a giant email suite.",
109 + bullets: [
110 + "Compare inbox routes, forwarding, and stored inbound mail against send-heavy tooling",
111 + "See when smbCloud Mail is the better bet and when it is not",
112 + ],
113 + },
114 +];
115 +
116 export const metadata: Metadata = {
117 ...genPageMetadata({
118 title: "Deploy Node.js, Rails, and Vapor apps with one command",
@@ -347,48 +383,110 @@ export default function Home() {
383
384 <section className="border-t border-slate-200 dark:border-white/[0.06] px-6 py-24 lg:px-8">
385 <div className="mx-auto max-w-5xl">
350 - <div className="mb-14 max-w-3xl">
386 + <div className="mb-16 max-w-3xl">
387 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
352 - Compare platforms
388 + Compare services
389 </p>
390 <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-4xl">
355 - Looking at Heroku or Railway?
391 + Start with the service you are actually choosing.
392 </h2>
357 - <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
358 - Fair enough. We wrote the comparison pages I would actually want
359 - to read before switching: direct, specific, and honest about fit.
360 - </p>
393 </div>
394
363 - <div className="grid gap-6 lg:grid-cols-2">
364 - {comparisonPages.map((page) => (
365 - <Link
366 - key={page.href}
367 - href={page.href}
368 - className="group rounded-2xl border border-slate-200 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] p-8 transition-colors hover:border-indigo-300 dark:hover:border-indigo-700/50 hover:bg-slate-50 dark:hover:bg-white/[0.04]"
369 - >
395 + <div className="space-y-16">
396 + <div>
397 + <div className="mb-10 max-w-3xl">
398 <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
371 - {page.eyebrow}
399 + smbCloud Deploy
400 </p>
373 - <h3 className="mt-4 text-2xl font-semibold tracking-tight text-slate-900 transition-colors group-hover:text-indigo-600 dark:text-white dark:group-hover:text-indigo-400">
374 - {page.title}
401 + <h3 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
402 + Looking at Heroku or Railway?
403 </h3>
376 - <p className="mt-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
377 - {page.description}
404 + <p className="mt-4 text-base leading-8 text-slate-600 dark:text-slate-400">
405 + Fair enough. We wrote the comparison pages I would actually
406 + want to read before switching: direct, specific, and honest
407 + about fit.
408 </p>
379 - <ul className="mt-5 space-y-3 text-sm leading-6 text-slate-500 dark:text-slate-400">
380 - {page.bullets.map((bullet) => (
381 - <li key={bullet} className="flex gap-3">
382 - <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
383 - <span>{bullet}</span>
384 - </li>
385 - ))}
386 - </ul>
387 - <p className="mt-6 text-sm font-semibold text-indigo-600 dark:text-indigo-400">
388 - Read comparison →
409 + </div>
410 +
411 + <div className="grid gap-6 lg:grid-cols-2">
412 + {deployComparisonPages.map((page) => (
413 + <Link
414 + key={page.href}
415 + href={page.href}
416 + className="group rounded-2xl border border-slate-200 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] p-8 transition-colors hover:border-indigo-300 dark:hover:border-indigo-700/50 hover:bg-slate-50 dark:hover:bg-white/[0.04]"
417 + >
418 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
419 + {page.eyebrow}
420 + </p>
421 + <h4 className="mt-4 text-2xl font-semibold tracking-tight text-slate-900 transition-colors group-hover:text-indigo-600 dark:text-white dark:group-hover:text-indigo-400">
422 + {page.title}
423 + </h4>
424 + <p className="mt-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
425 + {page.description}
426 + </p>
427 + <ul className="mt-5 space-y-3 text-sm leading-6 text-slate-500 dark:text-slate-400">
428 + {page.bullets.map((bullet) => (
429 + <li key={bullet} className="flex gap-3">
430 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
431 + <span>{bullet}</span>
432 + </li>
433 + ))}
434 + </ul>
435 + <p className="mt-6 text-sm font-semibold text-indigo-600 dark:text-indigo-400">
436 + Read comparison →
437 + </p>
438 + </Link>
439 + ))}
440 + </div>
441 + </div>
442 +
443 + <div className="border-t border-slate-200 pt-16 dark:border-white/[0.06]">
444 + <div className="mb-10 max-w-3xl">
445 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
446 + smbCloud Mail
447 </p>
390 - </Link>
391 - ))}
448 + <h3 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
449 + Looking at Resend, useSend, or SendGrid?
450 + </h3>
451 + <p className="mt-4 text-base leading-8 text-slate-600 dark:text-slate-400">
452 + That is the smbCloud Mail side of the business. Most email
453 + tools start with sending. We started with the inbox: domain
454 + routes, forwarding, and keeping the messages that actually
455 + came in.
456 + </p>
457 + </div>
458 +
459 + <div className="grid gap-6 lg:grid-cols-3">
460 + {mailComparisonPages.map((page) => (
461 + <Link
462 + key={page.href}
463 + href={page.href}
464 + className="group rounded-2xl border border-slate-200 dark:border-white/[0.06] bg-white dark:bg-white/[0.02] p-8 transition-colors hover:border-indigo-300 dark:hover:border-indigo-700/50 hover:bg-slate-50 dark:hover:bg-white/[0.04]"
465 + >
466 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
467 + {page.eyebrow}
468 + </p>
469 + <h4 className="mt-4 text-2xl font-semibold tracking-tight text-slate-900 transition-colors group-hover:text-indigo-600 dark:text-white dark:group-hover:text-indigo-400">
470 + {page.title}
471 + </h4>
472 + <p className="mt-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
473 + {page.description}
474 + </p>
475 + <ul className="mt-5 space-y-3 text-sm leading-6 text-slate-500 dark:text-slate-400">
476 + {page.bullets.map((bullet) => (
477 + <li key={bullet} className="flex gap-3">
478 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
479 + <span>{bullet}</span>
480 + </li>
481 + ))}
482 + </ul>
483 + <p className="mt-6 text-sm font-semibold text-indigo-600 dark:text-indigo-400">
484 + Read comparison →
485 + </p>
486 + </Link>
487 + ))}
488 + </div>
489 + </div>
490 </div>
491 </div>
492 </section>
app/resend-alternative/page.tsx new
+376
@@ -0,0 +1,376 @@
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 + "Route domain inboxes, forward mail, and keep the inbound messages.",
11 + resend:
12 + "Send transactional email and build developer email workflows.",
13 + },
14 + {
15 + label: "Best fit",
16 + smbcloud:
17 + "Teams that care about where email lands after it is sent.",
18 + resend:
19 + "Teams whose first problem is sending product or transactional email.",
20 + },
21 + {
22 + label: "Product shape",
23 + smbcloud: "Mail service plus inbox workflows and MailX.",
24 + resend: "Developer email API with sending-first tooling around it.",
25 + },
26 + {
27 + label: "Why teams pick it",
28 + smbcloud: "Because the inbox is part of the product.",
29 + resend: "Because sending from code is the main job.",
30 + },
31 +];
32 +
33 +const smbcloudFits = [
34 + "You want domain inbox routes, forwarding, and stored inbound mail.",
35 + "You care more about the inbox than the send API.",
36 + "You want email to arrive somewhere real, not just trigger a webhook.",
37 + "You want a simpler mail workflow for a small team.",
38 +];
39 +
40 +const resendStillFits = [
41 + "Your main problem is sending transactional email from your app.",
42 + "You want a developer email API first and everything else second.",
43 + "Your team is already centered around outbound email workflows.",
44 +];
45 +
46 +const bestFor = [
47 + "Support inboxes",
48 + "Contact addresses on product sites",
49 + "Project mailboxes that need forwarding plus stored copies",
50 + "Small teams that want inbound mail to stay simple",
51 + "Founders who want to stop duct-taping inbox workflows",
52 +];
53 +
54 +const faqs = [
55 + {
56 + question: "Is smbCloud Mail a Resend replacement?",
57 + answer:
58 + "For some teams, yes. If the inbox is the real problem and you need domain routes, forwarding, and stored inbound mail, smbCloud Mail may fit better. If outbound email from your app is the main job, Resend may fit better.",
59 + },
60 + {
61 + question: "What is the biggest difference between smbCloud Mail and Resend?",
62 + answer:
63 + "Resend starts from sending. smbCloud Mail starts from the inbox.",
64 + },
65 + {
66 + question: "Who should switch from Resend to smbCloud Mail?",
67 + answer:
68 + "Teams that keep running into inbox problems, forwarding rules, or the need to keep the actual messages that came in.",
69 + },
70 +];
71 +
72 +export const metadata: Metadata = {
73 + ...genPageMetadata({
74 + title: "Resend alternative for inbox-first mail workflows",
75 + description:
76 + "smbCloud Mail is a Resend alternative for teams that care about domain inboxes, inbound routing, forwarding, and keeping the messages that actually arrived.",
77 + path: "/resend-alternative",
78 + keywords: [
79 + "Resend alternative",
80 + "email API alternative",
81 + "inbound email routing",
82 + "domain inbox routing",
83 + "email forwarding platform",
84 + "hosted inbox workflow",
85 + "smbCloud Mail",
86 + ],
87 + }),
88 +};
89 +
90 +const structuredData = {
91 + "@context": "https://schema.org",
92 + "@graph": [
93 + {
94 + "@type": "WebPage",
95 + "@id": absoluteUrl("/resend-alternative#webpage"),
96 + url: absoluteUrl("/resend-alternative"),
97 + name: "Resend alternative for inbox-first mail workflows",
98 + description:
99 + "Compare smbCloud Mail and Resend for inbox-first mail workflows.",
100 + isPartOf: {
101 + "@id": absoluteUrl("/#website"),
102 + },
103 + },
104 + {
105 + "@type": "BreadcrumbList",
106 + itemListElement: [
107 + {
108 + "@type": "ListItem",
109 + position: 1,
110 + name: "Home",
111 + item: absoluteUrl("/"),
112 + },
113 + {
114 + "@type": "ListItem",
115 + position: 2,
116 + name: "Resend alternative",
117 + item: absoluteUrl("/resend-alternative"),
118 + },
119 + ],
120 + },
121 + {
122 + "@type": "FAQPage",
123 + mainEntity: faqs.map((faq) => ({
124 + "@type": "Question",
125 + name: faq.question,
126 + acceptedAnswer: {
127 + "@type": "Answer",
128 + text: faq.answer,
129 + },
130 + })),
131 + },
132 + ],
133 +};
134 +
135 +export default function ResendAlternativePage() {
136 + return (
137 + <div>
138 + <StructuredData data={structuredData} />
139 +
140 + <section className="relative overflow-hidden px-6 pt-24 pb-16 sm:pt-32 sm:pb-20 lg:px-8">
141 + <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)]" />
142 +
143 + <div className="mx-auto max-w-4xl">
144 + <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">
145 + <span className="h-1.5 w-1.5 rounded-full bg-indigo-500" />
146 + <span className="text-xs font-semibold uppercase tracking-widest text-indigo-700 dark:text-indigo-400">
147 + smbCloud Mail
148 + </span>
149 + </div>
150 +
151 + <h1 className="max-w-3xl text-4xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-6xl leading-[1.05]">
152 + Looking for a Resend alternative?
153 + </h1>
154 +
155 + <p className="mt-6 max-w-3xl text-lg leading-8 text-slate-600 dark:text-slate-400">
156 + smbCloud Mail is a different kind of email product. Resend is great
157 + when sending is the job. We built smbCloud Mail for teams that care
158 + about where email lands after it gets sent.
159 + </p>
160 +
161 + <div className="mt-8 flex flex-col gap-4 sm:flex-row">
162 + <Link
163 + href="https://console.smbcloud.xyz/signup-mailx"
164 + target="_blank"
165 + rel="noopener noreferrer"
166 + 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]"
167 + >
168 + Get a free @smbcloud.xyz inbox
169 + </Link>
170 + <Link
171 + href="/services"
172 + 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]"
173 + >
174 + Explore smbCloud Mail
175 + </Link>
176 + </div>
177 + </div>
178 + </section>
179 +
180 + <section className="px-6 pb-24 lg:px-8">
181 + <div className="mx-auto grid max-w-5xl gap-8 lg:grid-cols-[0.95fr_1.05fr]">
182 + <div>
183 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
184 + Why teams compare them
185 + </p>
186 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
187 + The real split is sending-first versus inbox-first.
188 + </h2>
189 + <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
190 + A lot of teams start by solving outbound email. Later they realize
191 + the annoying part is inbound routing, forwarding, aliases, and
192 + keeping a copy of what actually came in.
193 + </p>
194 + </div>
195 +
196 + <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
197 + <p className="text-sm font-semibold text-slate-900 dark:text-white">
198 + What smbCloud Mail does well
199 + </p>
200 + <ul className="mt-5 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
201 + <li className="flex gap-3">
202 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
203 + <span>Route inboxes under your domain.</span>
204 + </li>
205 + <li className="flex gap-3">
206 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
207 + <span>Forward mail and keep a stored copy.</span>
208 + </li>
209 + <li className="flex gap-3">
210 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
211 + <span>Give the team an actual inbox workflow, not just an email API.</span>
212 + </li>
213 + </ul>
214 + </div>
215 + </div>
216 + </section>
217 +
218 + <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
219 + <div className="mx-auto max-w-5xl">
220 + <div className="mb-12 max-w-3xl">
221 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
222 + smbCloud Mail vs Resend
223 + </p>
224 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
225 + Here is the actual trade.
226 + </h2>
227 + </div>
228 +
229 + <div className="overflow-hidden rounded-2xl border border-slate-200 dark:border-white/[0.06]">
230 + <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">
231 + <div className="border-b border-slate-200 px-5 py-4 dark:border-white/[0.06]">
232 + Area
233 + </div>
234 + <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
235 + smbCloud Mail
236 + </div>
237 + <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
238 + Resend
239 + </div>
240 + </div>
241 + {comparisonRows.map((row) => (
242 + <div
243 + key={row.label}
244 + className="grid grid-cols-[0.8fr_1fr_1fr] text-sm leading-7 text-slate-600 dark:text-slate-400"
245 + >
246 + <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">
247 + {row.label}
248 + </div>
249 + <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]">
250 + {row.smbcloud}
251 + </div>
252 + <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]">
253 + {row.resend}
254 + </div>
255 + </div>
256 + ))}
257 + </div>
258 + </div>
259 + </section>
260 +
261 + <section className="px-6 py-24 lg:px-8">
262 + <div className="mx-auto grid max-w-5xl gap-6 lg:grid-cols-2">
263 + <div className="rounded-2xl border border-slate-200 bg-white p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
264 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
265 + Pick smbCloud Mail if
266 + </p>
267 + <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
268 + {smbcloudFits.map((item) => (
269 + <li key={item} className="flex gap-3">
270 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
271 + <span>{item}</span>
272 + </li>
273 + ))}
274 + </ul>
275 + </div>
276 +
277 + <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
278 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
279 + Stay with Resend if
280 + </p>
281 + <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
282 + {resendStillFits.map((item) => (
283 + <li key={item} className="flex gap-3">
284 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-slate-400" />
285 + <span>{item}</span>
286 + </li>
287 + ))}
288 + </ul>
289 + </div>
290 + </div>
291 + </section>
292 +
293 + <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
294 + <div className="mx-auto max-w-5xl grid gap-8 lg:grid-cols-[0.95fr_1.05fr]">
295 + <div>
296 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
297 + Best fit
298 + </p>
299 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
300 + A good fit if the inbox is part of the product, not an afterthought.
301 + </h2>
302 + </div>
303 + <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">
304 + {bestFor.map((item) => (
305 + <li
306 + key={item}
307 + 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]"
308 + >
309 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
310 + <span>{item}</span>
311 + </li>
312 + ))}
313 + </ul>
314 + </div>
315 + </section>
316 +
317 + <section className="px-6 pb-24 lg:px-8">
318 + <div className="mx-auto max-w-3xl">
319 + <div className="mb-10">
320 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
321 + FAQ
322 + </p>
323 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
324 + Common questions
325 + </h2>
326 + </div>
327 + <div className="space-y-4">
328 + {faqs.map((faq) => (
329 + <div
330 + key={faq.question}
331 + className="rounded-2xl border border-slate-200 bg-white p-6 dark:border-white/[0.06] dark:bg-white/[0.02]"
332 + >
333 + <h3 className="text-lg font-semibold text-slate-900 dark:text-white">
334 + {faq.question}
335 + </h3>
336 + <p className="mt-3 text-sm leading-7 text-slate-600 dark:text-slate-400">
337 + {faq.answer}
338 + </p>
339 + </div>
340 + ))}
341 + </div>
342 + </div>
343 + </section>
344 +
345 + <section className="px-6 pb-20 lg:px-8">
346 + <div className="mx-auto max-w-3xl">
347 + <div className="relative overflow-hidden rounded-2xl bg-indigo-600 px-8 py-14 text-center shadow-2xl shadow-indigo-500/20">
348 + <div className="pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.1),transparent)]" />
349 + <h2 className="relative text-3xl font-bold tracking-tight text-white">
350 + If the inbox is the real problem, start there.
351 + </h2>
352 + <p className="relative mt-4 text-indigo-200">
353 + Get a free @smbcloud.xyz inbox and see if smbCloud Mail solves the part the send APIs do not.
354 + </p>
355 + <div className="relative mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row">
356 + <Link
357 + href="https://console.smbcloud.xyz/signup-mailx"
358 + target="_blank"
359 + rel="noopener noreferrer"
360 + 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"
361 + >
362 + Get a free inbox
363 + </Link>
364 + <Link
365 + href="/sendgrid-alternative"
366 + 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"
367 + >
368 + Compare SendGrid alternative
369 + </Link>
370 + </div>
371 + </div>
372 + </div>
373 + </section>
374 + </div>
375 + );
376 +}
app/sendgrid-alternative/page.tsx new
+376
@@ -0,0 +1,376 @@
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 + "Manage domain inboxes, forwarding, and stored inbound mail workflows.",
11 + sendgrid:
12 + "Handle large-scale sending, email APIs, and broader email programs.",
13 + },
14 + {
15 + label: "Best fit",
16 + smbcloud:
17 + "Teams that need the inbox and routing side of email to stay simple.",
18 + sendgrid:
19 + "Teams that need a broad sending platform with lots of surrounding tooling.",
20 + },
21 + {
22 + label: "Product shape",
23 + smbcloud: "Focused mail service plus inbox workflows and MailX.",
24 + sendgrid: "Large email suite for sending, deliverability, and campaigns.",
25 + },
26 + {
27 + label: "Why teams pick it",
28 + smbcloud: "Because the inbox is the thing that keeps breaking.",
29 + sendgrid: "Because email sending is a major system in the business.",
30 + },
31 +];
32 +
33 +const smbcloudFits = [
34 + "You need domain inbox routes and forwarding.",
35 + "You care more about inbound workflows than enterprise email tooling.",
36 + "You want a focused service instead of a giant suite.",
37 + "You want the team to actually use the inbox, not just configure it.",
38 +];
39 +
40 +const sendgridStillFits = [
41 + "Your main job is outbound email at scale.",
42 + "You need a broader email platform with more sending-oriented tooling.",
43 + "Your organization already runs a substantial SendGrid setup.",
44 +];
45 +
46 +const bestFor = [
47 + "Support and contact inboxes",
48 + "Inbound mail routing for product teams",
49 + "Forwarding plus stored inbound copies",
50 + "Small teams that do not want a heavyweight email suite",
51 + "Founders who want mail to feel manageable again",
52 +];
53 +
54 +const faqs = [
55 + {
56 + question: "Is smbCloud Mail a SendGrid replacement?",
57 + answer:
58 + "Not across the board. If you need a broad sending platform, SendGrid may still be the better fit. If your problem is domain inboxes, forwarding, and inbound mail workflows, smbCloud Mail may fit better.",
59 + },
60 + {
61 + question: "What is the biggest difference between smbCloud Mail and SendGrid?",
62 + answer:
63 + "SendGrid is much broader on the sending side. smbCloud Mail is much more focused on the inbox side.",
64 + },
65 + {
66 + question: "Who should switch from SendGrid to smbCloud Mail?",
67 + answer:
68 + "Teams that keep reaching for a large email platform when what they really need is simpler inbox routing, forwarding, and stored inbound mail.",
69 + },
70 +];
71 +
72 +export const metadata: Metadata = {
73 + ...genPageMetadata({
74 + title: "SendGrid alternative for inbox-first mail workflows",
75 + description:
76 + "smbCloud Mail is a SendGrid alternative for teams that want domain inbox routing, forwarding, and stored inbound mail without adopting a giant email suite.",
77 + path: "/sendgrid-alternative",
78 + keywords: [
79 + "SendGrid alternative",
80 + "email platform alternative",
81 + "domain inbox routing",
82 + "inbound email workflow",
83 + "email forwarding platform",
84 + "hosted inbox workflow",
85 + "smbCloud Mail",
86 + ],
87 + }),
88 +};
89 +
90 +const structuredData = {
91 + "@context": "https://schema.org",
92 + "@graph": [
93 + {
94 + "@type": "WebPage",
95 + "@id": absoluteUrl("/sendgrid-alternative#webpage"),
96 + url: absoluteUrl("/sendgrid-alternative"),
97 + name: "SendGrid alternative for inbox-first mail workflows",
98 + description:
99 + "Compare smbCloud Mail and SendGrid for inbox-first mail workflows.",
100 + isPartOf: {
101 + "@id": absoluteUrl("/#website"),
102 + },
103 + },
104 + {
105 + "@type": "BreadcrumbList",
106 + itemListElement: [
107 + {
108 + "@type": "ListItem",
109 + position: 1,
110 + name: "Home",
111 + item: absoluteUrl("/"),
112 + },
113 + {
114 + "@type": "ListItem",
115 + position: 2,
116 + name: "SendGrid alternative",
117 + item: absoluteUrl("/sendgrid-alternative"),
118 + },
119 + ],
120 + },
121 + {
122 + "@type": "FAQPage",
123 + mainEntity: faqs.map((faq) => ({
124 + "@type": "Question",
125 + name: faq.question,
126 + acceptedAnswer: {
127 + "@type": "Answer",
128 + text: faq.answer,
129 + },
130 + })),
131 + },
132 + ],
133 +};
134 +
135 +export default function SendGridAlternativePage() {
136 + return (
137 + <div>
138 + <StructuredData data={structuredData} />
139 +
140 + <section className="relative overflow-hidden px-6 pt-24 pb-16 sm:pt-32 sm:pb-20 lg:px-8">
141 + <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)]" />
142 +
143 + <div className="mx-auto max-w-4xl">
144 + <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">
145 + <span className="h-1.5 w-1.5 rounded-full bg-indigo-500" />
146 + <span className="text-xs font-semibold uppercase tracking-widest text-indigo-700 dark:text-indigo-400">
147 + smbCloud Mail
148 + </span>
149 + </div>
150 +
151 + <h1 className="max-w-3xl text-4xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-6xl leading-[1.05]">
152 + Looking for a SendGrid alternative?
153 + </h1>
154 +
155 + <p className="mt-6 max-w-3xl text-lg leading-8 text-slate-600 dark:text-slate-400">
156 + SendGrid is built for teams with serious sending requirements. We
157 + built smbCloud Mail for teams that mostly need the inbox, routing,
158 + and forwarding side of email to stop being annoying.
159 + </p>
160 +
161 + <div className="mt-8 flex flex-col gap-4 sm:flex-row">
162 + <Link
163 + href="https://console.smbcloud.xyz/signup-mailx"
164 + target="_blank"
165 + rel="noopener noreferrer"
166 + 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]"
167 + >
168 + Get a free @smbcloud.xyz inbox
169 + </Link>
170 + <Link
171 + href="/services"
172 + 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]"
173 + >
174 + Explore smbCloud Mail
175 + </Link>
176 + </div>
177 + </div>
178 + </section>
179 +
180 + <section className="px-6 pb-24 lg:px-8">
181 + <div className="mx-auto grid max-w-5xl gap-8 lg:grid-cols-[0.95fr_1.05fr]">
182 + <div>
183 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
184 + Why teams compare them
185 + </p>
186 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
187 + Sometimes the inbox problem gets buried under a much bigger email platform.
188 + </h2>
189 + <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
190 + That works for some companies. Other teams just want inbound mail,
191 + forwarding, aliases, and a place to keep what came in, without
192 + signing up for a much larger email stack.
193 + </p>
194 + </div>
195 +
196 + <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
197 + <p className="text-sm font-semibold text-slate-900 dark:text-white">
198 + What smbCloud Mail does well
199 + </p>
200 + <ul className="mt-5 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
201 + <li className="flex gap-3">
202 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
203 + <span>Route inboxes under one domain.</span>
204 + </li>
205 + <li className="flex gap-3">
206 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
207 + <span>Forward messages and keep the inbound copy.</span>
208 + </li>
209 + <li className="flex gap-3">
210 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
211 + <span>Keep the mail workflow focused instead of sprawling.</span>
212 + </li>
213 + </ul>
214 + </div>
215 + </div>
216 + </section>
217 +
218 + <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
219 + <div className="mx-auto max-w-5xl">
220 + <div className="mb-12 max-w-3xl">
221 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
222 + smbCloud Mail vs SendGrid
223 + </p>
224 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
225 + One is broader. One is narrower. That is the point.
226 + </h2>
227 + </div>
228 +
229 + <div className="overflow-hidden rounded-2xl border border-slate-200 dark:border-white/[0.06]">
230 + <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">
231 + <div className="border-b border-slate-200 px-5 py-4 dark:border-white/[0.06]">
232 + Area
233 + </div>
234 + <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
235 + smbCloud Mail
236 + </div>
237 + <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
238 + SendGrid
239 + </div>
240 + </div>
241 + {comparisonRows.map((row) => (
242 + <div
243 + key={row.label}
244 + className="grid grid-cols-[0.8fr_1fr_1fr] text-sm leading-7 text-slate-600 dark:text-slate-400"
245 + >
246 + <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">
247 + {row.label}
248 + </div>
249 + <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]">
250 + {row.smbcloud}
251 + </div>
252 + <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]">
253 + {row.sendgrid}
254 + </div>
255 + </div>
256 + ))}
257 + </div>
258 + </div>
259 + </section>
260 +
261 + <section className="px-6 py-24 lg:px-8">
262 + <div className="mx-auto grid max-w-5xl gap-6 lg:grid-cols-2">
263 + <div className="rounded-2xl border border-slate-200 bg-white p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
264 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
265 + Pick smbCloud Mail if
266 + </p>
267 + <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
268 + {smbcloudFits.map((item) => (
269 + <li key={item} className="flex gap-3">
270 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
271 + <span>{item}</span>
272 + </li>
273 + ))}
274 + </ul>
275 + </div>
276 +
277 + <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
278 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
279 + Stay with SendGrid if
280 + </p>
281 + <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
282 + {sendgridStillFits.map((item) => (
283 + <li key={item} className="flex gap-3">
284 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-slate-400" />
285 + <span>{item}</span>
286 + </li>
287 + ))}
288 + </ul>
289 + </div>
290 + </div>
291 + </section>
292 +
293 + <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
294 + <div className="mx-auto max-w-5xl grid gap-8 lg:grid-cols-[0.95fr_1.05fr]">
295 + <div>
296 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
297 + Best fit
298 + </p>
299 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
300 + A good fit if you want the mail workflow smaller than the problem it solves.
301 + </h2>
302 + </div>
303 + <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">
304 + {bestFor.map((item) => (
305 + <li
306 + key={item}
307 + 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]"
308 + >
309 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
310 + <span>{item}</span>
311 + </li>
312 + ))}
313 + </ul>
314 + </div>
315 + </section>
316 +
317 + <section className="px-6 pb-24 lg:px-8">
318 + <div className="mx-auto max-w-3xl">
319 + <div className="mb-10">
320 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
321 + FAQ
322 + </p>
323 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
324 + Common questions
325 + </h2>
326 + </div>
327 + <div className="space-y-4">
328 + {faqs.map((faq) => (
329 + <div
330 + key={faq.question}
331 + className="rounded-2xl border border-slate-200 bg-white p-6 dark:border-white/[0.06] dark:bg-white/[0.02]"
332 + >
333 + <h3 className="text-lg font-semibold text-slate-900 dark:text-white">
334 + {faq.question}
335 + </h3>
336 + <p className="mt-3 text-sm leading-7 text-slate-600 dark:text-slate-400">
337 + {faq.answer}
338 + </p>
339 + </div>
340 + ))}
341 + </div>
342 + </div>
343 + </section>
344 +
345 + <section className="px-6 pb-20 lg:px-8">
346 + <div className="mx-auto max-w-3xl">
347 + <div className="relative overflow-hidden rounded-2xl bg-indigo-600 px-8 py-14 text-center shadow-2xl shadow-indigo-500/20">
348 + <div className="pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.1),transparent)]" />
349 + <h2 className="relative text-3xl font-bold tracking-tight text-white">
350 + If you need the inbox more than the giant suite, try smbCloud Mail.
351 + </h2>
352 + <p className="relative mt-4 text-indigo-200">
353 + Get a free @smbcloud.xyz inbox and see if the smaller mail workflow is the better fit.
354 + </p>
355 + <div className="relative mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row">
356 + <Link
357 + href="https://console.smbcloud.xyz/signup-mailx"
358 + target="_blank"
359 + rel="noopener noreferrer"
360 + 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"
361 + >
362 + Get a free inbox
363 + </Link>
364 + <Link
365 + href="/usesend-alternative"
366 + 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"
367 + >
368 + Compare useSend alternative
369 + </Link>
370 + </div>
371 + </div>
372 + </div>
373 + </section>
374 + </div>
375 + );
376 +}
app/sitemap.ts
+15
@@ -36,6 +36,21 @@ export default function sitemap(): MetadataRoute.Sitemap {
36 changeFrequency: "weekly",
37 priority: 0.8,
38 },
39 + {
40 + url: absoluteUrl("/resend-alternative"),
41 + changeFrequency: "weekly",
42 + priority: 0.8,
43 + },
44 + {
45 + url: absoluteUrl("/usesend-alternative"),
46 + changeFrequency: "weekly",
47 + priority: 0.8,
48 + },
49 + {
50 + url: absoluteUrl("/sendgrid-alternative"),
51 + changeFrequency: "weekly",
52 + priority: 0.8,
53 + },
54 ];
55
56 const postRoutes: MetadataRoute.Sitemap = allPosts
app/usesend-alternative/page.tsx new
+376
@@ -0,0 +1,376 @@
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 + "Manage domain inbox routes, forwarding, and stored inbound mail.",
11 + usesend:
12 + "Run open-source sending infrastructure for transactional and bulk email.",
13 + },
14 + {
15 + label: "Best fit",
16 + smbcloud:
17 + "Teams that want managed mail workflows without operating the stack.",
18 + usesend:
19 + "Teams that want an open-source email platform they can run and shape themselves.",
20 + },
21 + {
22 + label: "Product shape",
23 + smbcloud: "Hosted mail service plus inbox workflows and MailX.",
24 + usesend: "Open-source sending stack with dashboard and API.",
25 + },
26 + {
27 + label: "Why teams pick it",
28 + smbcloud: "Because they want the inbox solved without another ops project.",
29 + usesend: "Because they want more control over the sending stack.",
30 + },
31 +];
32 +
33 +const smbcloudFits = [
34 + "You want managed inbox routes and forwarding.",
35 + "You do not want to run the email stack yourself.",
36 + "You care about inbound mail more than email infrastructure as a hobby.",
37 + "You want a simple way to keep the messages that came in.",
38 +];
39 +
40 +const usesendStillFits = [
41 + "You want an open-source sending platform you can self-host.",
42 + "Your team wants to own more of the email infrastructure directly.",
43 + "Outbound email is the main job and running the stack is acceptable.",
44 +];
45 +
46 +const bestFor = [
47 + "Founders who want mail handled, not another system to operate",
48 + "Teams with domain inboxes and forwarding rules",
49 + "Projects that need inbound mail stored and easy to review",
50 + "Support and contact inbox workflows",
51 + "Small teams that want hosted mail, not self-hosted mail software",
52 +];
53 +
54 +const faqs = [
55 + {
56 + question: "Is smbCloud Mail a useSend replacement?",
57 + answer:
58 + "For some teams, yes. If you want managed inbox routes, forwarding, and stored inbound mail, smbCloud Mail may fit better. If you want open-source sending infrastructure you can run yourself, useSend is closer to that job.",
59 + },
60 + {
61 + question: "What is the biggest difference between smbCloud Mail and useSend?",
62 + answer:
63 + "useSend is closer to an open-source sending stack. smbCloud Mail is a hosted inbox-first mail service.",
64 + },
65 + {
66 + question: "Who should switch from useSend to smbCloud Mail?",
67 + answer:
68 + "Teams that do not want to keep owning the email stack just to get inbox routing and forwarding working cleanly.",
69 + },
70 +];
71 +
72 +export const metadata: Metadata = {
73 + ...genPageMetadata({
74 + title: "useSend alternative for managed inbox workflows",
75 + description:
76 + "smbCloud Mail is a useSend alternative for teams that want managed domain inbox routes, forwarding, and stored inbound mail instead of running an open-source sending stack.",
77 + path: "/usesend-alternative",
78 + keywords: [
79 + "useSend alternative",
80 + "open source email alternative",
81 + "managed inbox routing",
82 + "domain inbox routing",
83 + "email forwarding platform",
84 + "hosted mail workflow",
85 + "smbCloud Mail",
86 + ],
87 + }),
88 +};
89 +
90 +const structuredData = {
91 + "@context": "https://schema.org",
92 + "@graph": [
93 + {
94 + "@type": "WebPage",
95 + "@id": absoluteUrl("/usesend-alternative#webpage"),
96 + url: absoluteUrl("/usesend-alternative"),
97 + name: "useSend alternative for managed inbox workflows",
98 + description:
99 + "Compare smbCloud Mail and useSend for managed inbox workflows and email infrastructure choices.",
100 + isPartOf: {
101 + "@id": absoluteUrl("/#website"),
102 + },
103 + },
104 + {
105 + "@type": "BreadcrumbList",
106 + itemListElement: [
107 + {
108 + "@type": "ListItem",
109 + position: 1,
110 + name: "Home",
111 + item: absoluteUrl("/"),
112 + },
113 + {
114 + "@type": "ListItem",
115 + position: 2,
116 + name: "useSend alternative",
117 + item: absoluteUrl("/usesend-alternative"),
118 + },
119 + ],
120 + },
121 + {
122 + "@type": "FAQPage",
123 + mainEntity: faqs.map((faq) => ({
124 + "@type": "Question",
125 + name: faq.question,
126 + acceptedAnswer: {
127 + "@type": "Answer",
128 + text: faq.answer,
129 + },
130 + })),
131 + },
132 + ],
133 +};
134 +
135 +export default function UseSendAlternativePage() {
136 + return (
137 + <div>
138 + <StructuredData data={structuredData} />
139 +
140 + <section className="relative overflow-hidden px-6 pt-24 pb-16 sm:pt-32 sm:pb-20 lg:px-8">
141 + <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)]" />
142 +
143 + <div className="mx-auto max-w-4xl">
144 + <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">
145 + <span className="h-1.5 w-1.5 rounded-full bg-indigo-500" />
146 + <span className="text-xs font-semibold uppercase tracking-widest text-indigo-700 dark:text-indigo-400">
147 + smbCloud Mail
148 + </span>
149 + </div>
150 +
151 + <h1 className="max-w-3xl text-4xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-6xl leading-[1.05]">
152 + Looking for a useSend alternative?
153 + </h1>
154 +
155 + <p className="mt-6 max-w-3xl text-lg leading-8 text-slate-600 dark:text-slate-400">
156 + useSend is an interesting open-source sending stack. smbCloud Mail
157 + is for the team that would rather not run the stack at all, because
158 + the inbox workflow is the thing they actually care about.
159 + </p>
160 +
161 + <div className="mt-8 flex flex-col gap-4 sm:flex-row">
162 + <Link
163 + href="https://console.smbcloud.xyz/signup-mailx"
164 + target="_blank"
165 + rel="noopener noreferrer"
166 + 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]"
167 + >
168 + Get a free @smbcloud.xyz inbox
169 + </Link>
170 + <Link
171 + href="/services"
172 + 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]"
173 + >
174 + Explore smbCloud Mail
175 + </Link>
176 + </div>
177 + </div>
178 + </section>
179 +
180 + <section className="px-6 pb-24 lg:px-8">
181 + <div className="mx-auto grid max-w-5xl gap-8 lg:grid-cols-[0.95fr_1.05fr]">
182 + <div>
183 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
184 + Why teams compare them
185 + </p>
186 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
187 + This is mostly a question of whether you want to run the email stack yourself.
188 + </h2>
189 + <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
190 + Some teams want open-source control. Others just want domain
191 + inboxes, forwarding, and stored inbound mail without turning mail
192 + into another infrastructure project.
193 + </p>
194 + </div>
195 +
196 + <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
197 + <p className="text-sm font-semibold text-slate-900 dark:text-white">
198 + What smbCloud Mail does well
199 + </p>
200 + <ul className="mt-5 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
201 + <li className="flex gap-3">
202 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
203 + <span>Route inboxes under your domain.</span>
204 + </li>
205 + <li className="flex gap-3">
206 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
207 + <span>Forward mail and keep the received copy.</span>
208 + </li>
209 + <li className="flex gap-3">
210 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
211 + <span>Keep mail managed instead of self-hosted.</span>
212 + </li>
213 + </ul>
214 + </div>
215 + </div>
216 + </section>
217 +
218 + <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
219 + <div className="mx-auto max-w-5xl">
220 + <div className="mb-12 max-w-3xl">
221 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
222 + smbCloud Mail vs useSend
223 + </p>
224 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
225 + The trade is hosted inbox workflows versus open-source sending control.
226 + </h2>
227 + </div>
228 +
229 + <div className="overflow-hidden rounded-2xl border border-slate-200 dark:border-white/[0.06]">
230 + <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">
231 + <div className="border-b border-slate-200 px-5 py-4 dark:border-white/[0.06]">
232 + Area
233 + </div>
234 + <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
235 + smbCloud Mail
236 + </div>
237 + <div className="border-b border-l border-slate-200 px-5 py-4 dark:border-white/[0.06]">
238 + useSend
239 + </div>
240 + </div>
241 + {comparisonRows.map((row) => (
242 + <div
243 + key={row.label}
244 + className="grid grid-cols-[0.8fr_1fr_1fr] text-sm leading-7 text-slate-600 dark:text-slate-400"
245 + >
246 + <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">
247 + {row.label}
248 + </div>
249 + <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]">
250 + {row.smbcloud}
251 + </div>
252 + <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]">
253 + {row.usesend}
254 + </div>
255 + </div>
256 + ))}
257 + </div>
258 + </div>
259 + </section>
260 +
261 + <section className="px-6 py-24 lg:px-8">
262 + <div className="mx-auto grid max-w-5xl gap-6 lg:grid-cols-2">
263 + <div className="rounded-2xl border border-slate-200 bg-white p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
264 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
265 + Pick smbCloud Mail if
266 + </p>
267 + <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
268 + {smbcloudFits.map((item) => (
269 + <li key={item} className="flex gap-3">
270 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
271 + <span>{item}</span>
272 + </li>
273 + ))}
274 + </ul>
275 + </div>
276 +
277 + <div className="rounded-2xl border border-slate-200 bg-slate-50 p-8 dark:border-white/[0.06] dark:bg-white/[0.02]">
278 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
279 + Stay with useSend if
280 + </p>
281 + <ul className="mt-6 space-y-4 text-sm leading-7 text-slate-600 dark:text-slate-400">
282 + {usesendStillFits.map((item) => (
283 + <li key={item} className="flex gap-3">
284 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-slate-400" />
285 + <span>{item}</span>
286 + </li>
287 + ))}
288 + </ul>
289 + </div>
290 + </div>
291 + </section>
292 +
293 + <section className="border-t border-slate-200 px-6 py-24 dark:border-white/[0.06] lg:px-8">
294 + <div className="mx-auto max-w-5xl grid gap-8 lg:grid-cols-[0.95fr_1.05fr]">
295 + <div>
296 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
297 + Best fit
298 + </p>
299 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
300 + A good fit if mail should stay managed and boring.
301 + </h2>
302 + </div>
303 + <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">
304 + {bestFor.map((item) => (
305 + <li
306 + key={item}
307 + 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]"
308 + >
309 + <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-indigo-500" />
310 + <span>{item}</span>
311 + </li>
312 + ))}
313 + </ul>
314 + </div>
315 + </section>
316 +
317 + <section className="px-6 pb-24 lg:px-8">
318 + <div className="mx-auto max-w-3xl">
319 + <div className="mb-10">
320 + <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
321 + FAQ
322 + </p>
323 + <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
324 + Common questions
325 + </h2>
326 + </div>
327 + <div className="space-y-4">
328 + {faqs.map((faq) => (
329 + <div
330 + key={faq.question}
331 + className="rounded-2xl border border-slate-200 bg-white p-6 dark:border-white/[0.06] dark:bg-white/[0.02]"
332 + >
333 + <h3 className="text-lg font-semibold text-slate-900 dark:text-white">
334 + {faq.question}
335 + </h3>
336 + <p className="mt-3 text-sm leading-7 text-slate-600 dark:text-slate-400">
337 + {faq.answer}
338 + </p>
339 + </div>
340 + ))}
341 + </div>
342 + </div>
343 + </section>
344 +
345 + <section className="px-6 pb-20 lg:px-8">
346 + <div className="mx-auto max-w-3xl">
347 + <div className="relative overflow-hidden rounded-2xl bg-indigo-600 px-8 py-14 text-center shadow-2xl shadow-indigo-500/20">
348 + <div className="pointer-events-none absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(255,255,255,0.1),transparent)]" />
349 + <h2 className="relative text-3xl font-bold tracking-tight text-white">
350 + If the inbox matters more than the stack, try smbCloud Mail.
351 + </h2>
352 + <p className="relative mt-4 text-indigo-200">
353 + Get a free @smbcloud.xyz inbox and see if managed mail feels better than owning another email system.
354 + </p>
355 + <div className="relative mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row">
356 + <Link
357 + href="https://console.smbcloud.xyz/signup-mailx"
358 + target="_blank"
359 + rel="noopener noreferrer"
360 + 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"
361 + >
362 + Get a free inbox
363 + </Link>
364 + <Link
365 + href="/resend-alternative"
366 + 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"
367 + >
368 + Compare Resend alternative
369 + </Link>
370 + </div>
371 + </div>
372 + </div>
373 + </section>
374 + </div>
375 + );
376 +}
next-env.d.ts
+1 -1
@@ -1,6 +1,6 @@
1 /// <reference types="next" />
2 /// <reference types="next/image-types/global" />
3 -import "./.next/dev/types/routes.d.ts";
3 +import "./.next/types/routes.d.ts";
4
5 // NOTE: This file should not be edited
6 // see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
public/llms.txt
+3
@@ -18,6 +18,9 @@ GitHub: https://github.com/smbcloudXYZ
18 - About: https://smbcloud.xyz/about
19 - Heroku alternative: https://smbcloud.xyz/heroku-alternative
20 - Railway alternative: https://smbcloud.xyz/railway-alternative
21 +- Resend alternative: https://smbcloud.xyz/resend-alternative
22 +- useSend alternative: https://smbcloud.xyz/usesend-alternative
23 +- SendGrid alternative: https://smbcloud.xyz/sendgrid-alternative
24 - KTI glossary: https://smbcloud.xyz/kti
25
26 ## Core topics