Add smbCloud Mail landing page and update navigation links
keypair34 committed
May 13, 2026 at 17:10 UTC
0ed2db0464e271df99f0810023641cacfe682ec6
5 files changed
+487
-1
app/mail/page.tsx
new
+467
@@ -0,0 +1,467 @@
1
+import type { Metadata } from "next";
2
+import Link from "next/link";
3
+import { FaApple, FaCheckCircle, FaGlobe, FaInbox, FaShieldAlt } from "react-icons/fa";
4
+import { StructuredData } from "@/components/structured-data";
5
+import { absoluteUrl, genPageMetadata } from "../seo";
6
+
7
+const FREE_SIGNUP_URL = "https://console.smbcloud.xyz/signup-mailx";
8
+const BUSINESS_SIGNUP_URL =
9
+ "https://console.smbcloud.xyz/signup-mailx?business=true";
10
+const MAILX_WEB_URL = "https://console.smbcloud.xyz/mail/x";
11
+const TESTFLIGHT_URL = "https://testflight.apple.com/join/pMq7WKRG";
12
+
13
+const offerings = [
14
+ {
15
+ name: "Free hosted email",
16
+ eyebrow: "@smbcloud.xyz",
17
+ description:
18
+ "A hosted inbox on the shared smbCloud Mail domain. Good if you want to try the product, keep things simple, and live in MailX.",
19
+ bullets: [
20
+ "Hosted @smbcloud.xyz inbox",
21
+ "MailX on web, iOS, macOS, Android, Linux, and Windows",
22
+ "Best fit for early access and personal use",
23
+ ],
24
+ cta: "Get a free inbox",
25
+ href: FREE_SIGNUP_URL,
26
+ highlighted: false,
27
+ },
28
+ {
29
+ name: "smbCloud Mail Business",
30
+ eyebrow: "Your own domain",
31
+ description:
32
+ "Business email with your own domain. Your quotes, invoices, and replies come from @yourcompany.com, not a Gmail address.",
33
+ bullets: [
34
+ "Custom domain email",
35
+ "Deliverability score and outbound controls",
36
+ "MailX for the whole team",
37
+ ],
38
+ cta: "Start business setup",
39
+ href: BUSINESS_SIGNUP_URL,
40
+ highlighted: true,
41
+ },
42
+];
43
+
44
+const plans = [
45
+ {
46
+ name: "Starter",
47
+ price: "$15",
48
+ period: "/mo",
49
+ description:
50
+ "For the local shop, the consultant, or the team that needs to stop looking tiny.",
51
+ bullets: [
52
+ "Up to 5 team members",
53
+ "Custom domain email",
54
+ "MailX app access",
55
+ "Deliverability score",
56
+ ],
57
+ highlighted: false,
58
+ },
59
+ {
60
+ name: "Business",
61
+ price: "$49",
62
+ period: "/mo",
63
+ description:
64
+ "For teams that send newsletters, handle sales replies, and need one inbox story that makes sense.",
65
+ bullets: [
66
+ "Unlimited team members",
67
+ "Newsletter sends",
68
+ "Priority Inbox for client replies",
69
+ "Basic automation",
70
+ ],
71
+ highlighted: true,
72
+ },
73
+ {
74
+ name: "Premium",
75
+ price: "$99",
76
+ period: "/mo",
77
+ description:
78
+ "For higher volume sending, tighter security, and a human who can actually help when something goes sideways.",
79
+ bullets: [
80
+ "Everything in Business",
81
+ "High-volume sending",
82
+ "Advanced encryption",
83
+ "Personal Account Assistant",
84
+ ],
85
+ highlighted: false,
86
+ },
87
+];
88
+
89
+const proofCards = [
90
+ {
91
+ title: "Look like a real business",
92
+ description:
93
+ "Clients notice the sender line first. you@yourcompany.com lands better than another Gmail address.",
94
+ icon: FaInbox,
95
+ },
96
+ {
97
+ title: "Keep spam anxiety down",
98
+ description:
99
+ "smbCloud Mail watches deliverability, so you are not guessing whether your invoice disappeared into Junk.",
100
+ icon: FaShieldAlt,
101
+ },
102
+ {
103
+ title: "Use one app everywhere",
104
+ description:
105
+ "MailX is how people actually use the service. Web, desktop, phone. Same product, same inbox.",
106
+ icon: FaGlobe,
107
+ },
108
+];
109
+
110
+export const metadata: Metadata = {
111
+ ...genPageMetadata({
112
+ title: "smbCloud Mail",
113
+ description:
114
+ "Free hosted @smbcloud.xyz inboxes and business email with your own domain. Use smbCloud Mail through the MailX app on web, desktop, and mobile.",
115
+ path: "/mail",
116
+ keywords: [
117
+ "smbCloud Mail",
118
+ "business email hosting",
119
+ "custom domain email",
120
+ "hosted @smbcloud.xyz inbox",
121
+ "MailX app",
122
+ "email for small business",
123
+ ],
124
+ }),
125
+};
126
+
127
+export default function MailPage() {
128
+ const structuredData = {
129
+ "@context": "https://schema.org",
130
+ "@graph": [
131
+ {
132
+ "@type": "WebPage",
133
+ "@id": absoluteUrl("/mail#webpage"),
134
+ url: absoluteUrl("/mail"),
135
+ name: "smbCloud Mail",
136
+ description:
137
+ "Free hosted @smbcloud.xyz inboxes and business email with your own domain.",
138
+ isPartOf: {
139
+ "@id": absoluteUrl("/#website"),
140
+ },
141
+ },
142
+ {
143
+ "@type": "Service",
144
+ name: "smbCloud Mail",
145
+ serviceType: "Hosted email service",
146
+ areaServed: "Worldwide",
147
+ url: absoluteUrl("/mail"),
148
+ offers: [
149
+ {
150
+ "@type": "Offer",
151
+ name: "smbCloud Mail Starter",
152
+ price: "15",
153
+ priceCurrency: "USD",
154
+ url: BUSINESS_SIGNUP_URL,
155
+ },
156
+ {
157
+ "@type": "Offer",
158
+ name: "smbCloud Mail Business",
159
+ price: "49",
160
+ priceCurrency: "USD",
161
+ url: BUSINESS_SIGNUP_URL,
162
+ },
163
+ {
164
+ "@type": "Offer",
165
+ name: "smbCloud Mail Premium",
166
+ price: "99",
167
+ priceCurrency: "USD",
168
+ url: BUSINESS_SIGNUP_URL,
169
+ },
170
+ ],
171
+ },
172
+ ],
173
+ };
174
+
175
+ return (
176
+ <div>
177
+ <StructuredData data={structuredData} />
178
+
179
+ <section className="relative overflow-hidden px-6 pt-24 pb-16 sm:pt-32 sm:pb-20 lg:px-8">
180
+ <div className="pointer-events-none absolute inset-x-0 top-0 -z-10 h-[560px] bg-[radial-gradient(ellipse_75%_50%_at_50%_0%,rgba(249,115,22,0.22),transparent)] dark:bg-[radial-gradient(ellipse_75%_50%_at_50%_0%,rgba(249,115,22,0.16),transparent)]" />
181
+
182
+ <div className="mx-auto max-w-5xl">
183
+ <div className="mb-6 inline-flex items-center gap-2 rounded-full border border-orange-200 bg-orange-50 px-4 py-1.5 dark:border-orange-500/30 dark:bg-orange-500/10">
184
+ <span className="h-1.5 w-1.5 rounded-full bg-orange-500" />
185
+ <span className="text-xs font-semibold uppercase tracking-widest text-orange-700 dark:text-orange-300">
186
+ smbCloud Mail
187
+ </span>
188
+ </div>
189
+
190
+ <div className="grid gap-12 lg:grid-cols-[1.1fr_0.9fr] lg:items-start">
191
+ <div>
192
+ <h1 className="max-w-3xl text-4xl font-bold tracking-tight text-slate-900 dark:text-white sm:text-6xl leading-[1.05]">
193
+ Email that does not make your business look small.
194
+ </h1>
195
+
196
+ <p className="mt-6 max-w-2xl text-lg leading-8 text-slate-600 dark:text-slate-400">
197
+ smbCloud Mail gives you two ways in. Start with a free hosted
198
+ inbox on <span className="font-semibold">@smbcloud.xyz</span>,
199
+ or set up <span className="font-semibold">smbCloud Mail Business</span>
200
+ {' '}with your own domain. Either way, you use MailX to read,
201
+ reply, and keep moving.
202
+ </p>
203
+
204
+ <div className="mt-8 flex flex-col gap-4 sm:flex-row">
205
+ <a
206
+ href={BUSINESS_SIGNUP_URL}
207
+ className="inline-flex items-center justify-center rounded-lg bg-orange-500 px-8 py-3.5 text-sm font-semibold text-white shadow-lg shadow-orange-500/20 transition-all hover:bg-orange-400 hover:shadow-orange-500/30 active:scale-[0.98]"
208
+ >
209
+ Start business setup
210
+ </a>
211
+ <a
212
+ href={FREE_SIGNUP_URL}
213
+ 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]"
214
+ >
215
+ Get a free inbox
216
+ </a>
217
+ </div>
218
+
219
+ <p className="mt-4 text-sm text-slate-500 dark:text-slate-500">
220
+ Free personal inboxes live on @smbcloud.xyz. Business inboxes use
221
+ your own domain.
222
+ </p>
223
+ </div>
224
+
225
+ <div className="rounded-2xl border border-slate-200 bg-white p-6 shadow-sm dark:border-white/[0.06] dark:bg-white/[0.02]">
226
+ <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
227
+ MailX
228
+ </p>
229
+ <h2 className="mt-3 text-2xl font-semibold tracking-tight text-slate-900 dark:text-white">
230
+ One client app. All your inboxes.
231
+ </h2>
232
+ <p className="mt-4 text-base leading-7 text-slate-600 dark:text-slate-400">
233
+ smbCloud Mail is the service. MailX is the app people use to
234
+ actually get work done. Web console, desktop, phone. Same inbox.
235
+ </p>
236
+
237
+ <ul className="mt-6 space-y-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
238
+ <li className="flex gap-3">
239
+ <FaCheckCircle className="mt-1 h-4 w-4 shrink-0 text-orange-500" />
240
+ <span>Web at console.smbcloud.xyz/mail/x</span>
241
+ </li>
242
+ <li className="flex gap-3">
243
+ <FaApple className="mt-1 h-4 w-4 shrink-0 text-orange-500" />
244
+ <span>iOS and macOS through App Store and TestFlight</span>
245
+ </li>
246
+ <li className="flex gap-3">
247
+ <FaGlobe className="mt-1 h-4 w-4 shrink-0 text-orange-500" />
248
+ <span>Android, Linux, and Windows through the Tauri client family</span>
249
+ </li>
250
+ </ul>
251
+
252
+ <div className="mt-6 flex flex-col gap-3 sm:flex-row">
253
+ <a
254
+ href={MAILX_WEB_URL}
255
+ className="inline-flex items-center justify-center rounded-lg bg-slate-900 px-5 py-3 text-sm font-semibold text-white transition-colors hover:bg-slate-700 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-100"
256
+ >
257
+ Open MailX web
258
+ </a>
259
+ <a
260
+ href={TESTFLIGHT_URL}
261
+ target="_blank"
262
+ rel="noopener noreferrer"
263
+ className="inline-flex items-center justify-center rounded-lg border border-slate-300 px-5 py-3 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]"
264
+ >
265
+ Join TestFlight
266
+ </a>
267
+ </div>
268
+ </div>
269
+ </div>
270
+ </div>
271
+ </section>
272
+
273
+ <section className="px-6 pb-10 lg:px-8">
274
+ <div className="mx-auto grid max-w-5xl gap-6 md:grid-cols-2">
275
+ {offerings.map((offering) => (
276
+ <div
277
+ key={offering.name}
278
+ className={`rounded-2xl border p-6 sm:p-8 ${
279
+ offering.highlighted
280
+ ? "border-orange-200 bg-orange-50/70 dark:border-orange-500/25 dark:bg-orange-500/10"
281
+ : "border-slate-200 bg-white dark:border-white/[0.06] dark:bg-white/[0.02]"
282
+ }`}
283
+ >
284
+ <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
285
+ {offering.eyebrow}
286
+ </p>
287
+ <h2 className="mt-3 text-2xl font-semibold tracking-tight text-slate-900 dark:text-white">
288
+ {offering.name}
289
+ </h2>
290
+ <p className="mt-4 text-base leading-7 text-slate-600 dark:text-slate-400">
291
+ {offering.description}
292
+ </p>
293
+ <ul className="mt-5 space-y-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
294
+ {offering.bullets.map((bullet) => (
295
+ <li key={bullet} className="flex gap-3">
296
+ <span className="mt-2 h-1.5 w-1.5 shrink-0 rounded-full bg-orange-500" />
297
+ <span>{bullet}</span>
298
+ </li>
299
+ ))}
300
+ </ul>
301
+ <a
302
+ href={offering.href}
303
+ className={`mt-6 inline-flex items-center gap-2 rounded-lg px-5 py-3 text-sm font-semibold transition-colors ${
304
+ offering.highlighted
305
+ ? "bg-orange-500 text-white hover:bg-orange-400"
306
+ : "bg-slate-900 text-white hover:bg-slate-700 dark:bg-white dark:text-slate-900 dark:hover:bg-slate-100"
307
+ }`}
308
+ >
309
+ {offering.cta}
310
+ </a>
311
+ </div>
312
+ ))}
313
+ </div>
314
+ </section>
315
+
316
+ <section className="px-6 py-16 lg:px-8">
317
+ <div className="mx-auto max-w-5xl">
318
+ <div className="max-w-3xl">
319
+ <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
320
+ Why people pick smbCloud Mail
321
+ </p>
322
+ <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
323
+ Because email is still where trust gets won or lost.
324
+ </h2>
325
+ <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
326
+ If your quote lands in spam, it does not matter how good the quote
327
+ was. If your invoice comes from a random Gmail address, you start
328
+ the conversation one step behind. smbCloud Mail fixes that part.
329
+ </p>
330
+ </div>
331
+
332
+ <div className="mt-10 grid gap-6 md:grid-cols-3">
333
+ {proofCards.map((card) => {
334
+ const Icon = card.icon;
335
+ return (
336
+ <div
337
+ key={card.title}
338
+ className="rounded-2xl border border-slate-200 bg-white p-6 dark:border-white/[0.06] dark:bg-white/[0.02]"
339
+ >
340
+ <div className="inline-flex rounded-xl bg-orange-50 p-3 text-orange-500 dark:bg-orange-500/10">
341
+ <Icon className="h-5 w-5" />
342
+ </div>
343
+ <h3 className="mt-4 text-lg font-semibold text-slate-900 dark:text-white">
344
+ {card.title}
345
+ </h3>
346
+ <p className="mt-3 text-sm leading-7 text-slate-600 dark:text-slate-400">
347
+ {card.description}
348
+ </p>
349
+ </div>
350
+ );
351
+ })}
352
+ </div>
353
+ </div>
354
+ </section>
355
+
356
+ <section className="border-y border-slate-200 px-6 py-20 dark:border-white/[0.06] lg:px-8">
357
+ <div className="mx-auto max-w-5xl">
358
+ <div className="max-w-3xl">
359
+ <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
360
+ smbCloud Mail Business pricing
361
+ </p>
362
+ <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
363
+ Flat monthly pricing. No weird surprises.
364
+ </h2>
365
+ <p className="mt-5 text-base leading-8 text-slate-600 dark:text-slate-400">
366
+ Small businesses hate mystery bills. Fair enough. These plans are
367
+ simple on purpose.
368
+ </p>
369
+ </div>
370
+
371
+ <div className="mt-10 grid gap-6 md:grid-cols-3">
372
+ {plans.map((plan) => (
373
+ <div
374
+ key={plan.name}
375
+ className={`rounded-2xl border p-6 ${
376
+ plan.highlighted
377
+ ? "border-orange-200 bg-orange-50/70 shadow-sm dark:border-orange-500/25 dark:bg-orange-500/10"
378
+ : "border-slate-200 bg-white dark:border-white/[0.06] dark:bg-white/[0.02]"
379
+ }`}
380
+ >
381
+ <div className="flex items-start justify-between gap-4">
382
+ <div>
383
+ <h3 className="text-xl font-semibold text-slate-900 dark:text-white">
384
+ {plan.name}
385
+ </h3>
386
+ <p className="mt-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
387
+ {plan.description}
388
+ </p>
389
+ </div>
390
+ {plan.highlighted ? (
391
+ <span className="rounded-full bg-orange-500 px-2.5 py-1 text-[11px] font-semibold text-white">
392
+ Popular
393
+ </span>
394
+ ) : null}
395
+ </div>
396
+
397
+ <div className="mt-6 flex items-end gap-1">
398
+ <span className="text-4xl font-bold tracking-tight text-slate-900 dark:text-white">
399
+ {plan.price}
400
+ </span>
401
+ <span className="pb-1 text-sm text-slate-500 dark:text-slate-500">
402
+ {plan.period}
403
+ </span>
404
+ </div>
405
+
406
+ <ul className="mt-6 space-y-3 text-sm leading-6 text-slate-600 dark:text-slate-400">
407
+ {plan.bullets.map((bullet) => (
408
+ <li key={bullet} className="flex gap-3">
409
+ <FaCheckCircle className="mt-1 h-4 w-4 shrink-0 text-orange-500" />
410
+ <span>{bullet}</span>
411
+ </li>
412
+ ))}
413
+ </ul>
414
+
415
+ <a
416
+ href={BUSINESS_SIGNUP_URL}
417
+ className={`mt-8 inline-flex w-full items-center justify-center rounded-lg px-5 py-3 text-sm font-semibold transition-colors ${
418
+ plan.highlighted
419
+ ? "bg-orange-500 text-white hover:bg-orange-400"
420
+ : "border border-slate-300 text-slate-700 hover:bg-slate-50 dark:border-white/[0.12] dark:text-slate-200 dark:hover:bg-white/[0.04]"
421
+ }`}
422
+ >
423
+ Choose {plan.name}
424
+ </a>
425
+ </div>
426
+ ))}
427
+ </div>
428
+ </div>
429
+ </section>
430
+
431
+ <section className="px-6 py-20 lg:px-8">
432
+ <div className="mx-auto max-w-5xl rounded-3xl border border-slate-200 bg-slate-50 p-8 sm:p-10 dark:border-white/[0.06] dark:bg-white/[0.02]">
433
+ <div className="grid gap-8 lg:grid-cols-[1.1fr_0.9fr] lg:items-center">
434
+ <div>
435
+ <p className="text-xs font-bold uppercase tracking-[0.2em] text-slate-400 dark:text-slate-600">
436
+ The first win
437
+ </p>
438
+ <h2 className="mt-4 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
439
+ Your client sees your domain and takes you seriously.
440
+ </h2>
441
+ <p className="mt-5 max-w-2xl text-base leading-8 text-slate-600 dark:text-slate-400">
442
+ That is the moment that matters. The sender line looks right.
443
+ The reply comes back to the right place. The business feels more
444
+ real because it is more real.
445
+ </p>
446
+ </div>
447
+
448
+ <div className="flex flex-col gap-4 lg:items-end">
449
+ <a
450
+ href={BUSINESS_SIGNUP_URL}
451
+ className="inline-flex items-center justify-center rounded-lg bg-orange-500 px-8 py-3.5 text-sm font-semibold text-white shadow-lg shadow-orange-500/20 transition-all hover:bg-orange-400 hover:shadow-orange-500/30 active:scale-[0.98]"
452
+ >
453
+ Start smbCloud Mail Business
454
+ </a>
455
+ <Link
456
+ href="/services"
457
+ 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]"
458
+ >
459
+ Back to services
460
+ </Link>
461
+ </div>
462
+ </div>
463
+ </div>
464
+ </section>
465
+ </div>
466
+ );
467
+}
app/sitemap.ts
+5
@@ -16,6 +16,11 @@ export default function sitemap(): MetadataRoute.Sitemap {
16
changeFrequency: "weekly",
17
priority: 0.9,
18
},
19
+ {
20
+ url: absoluteUrl("/mail"),
21
+ changeFrequency: "weekly",
22
+ priority: 0.9,
23
+ },
24
{
25
url: absoluteUrl("/posts"),
26
changeFrequency: "weekly",
components/footer.tsx
+1
@@ -4,6 +4,7 @@ import { FaGithub } from "react-icons/fa";
4
const companyLinks = [
5
{ href: "/about", label: "About" },
6
{ href: "/services", label: "Services" },
7
+ { href: "/mail", label: "Mail" },
8
{ href: "/contact", label: "Contact" },
9
{ href: "/privacy-policy", label: "Privacy" },
10
{ href: "/term-of-use", label: "Terms" },
components/header.tsx
+13
@@ -52,6 +52,12 @@ export default function Header() {
52
>
53
Services
54
</Link>
55
+ <Link
56
+ href="/mail"
57
+ className="hover:text-slate-900 dark:hover:text-white transition-colors"
58
+ >
59
+ Mail
60
+ </Link>
61
</nav>
62
63
{/* Right side */}
@@ -135,6 +141,13 @@ export default function Header() {
141
>
142
Services
143
</Link>
144
+ <Link
145
+ href="/mail"
146
+ onClick={() => setMenuOpen(false)}
147
+ className="flex items-center rounded-md px-3 py-2.5 text-sm font-medium text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-white/10 hover:text-slate-900 dark:hover:text-white transition-colors"
148
+ >
149
+ Mail
150
+ </Link>
151
<div className="pt-2 pb-1">
152
<Link
153
href="https://console.smbcloud.xyz"
package.json
+1
-1
@@ -1,6 +1,6 @@
1
{
2
"name": "smbcloud-web",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
"private": true,
5
"scripts": {
6
"dev": "next dev",