Skip to content

Commit 577a5e0

Browse files
committed
Simpler landing page, new Polar pricing link
Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
1 parent 3364dbf commit 577a5e0

4 files changed

Lines changed: 11 additions & 205 deletions

File tree

src/app/page.tsx

Lines changed: 0 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -619,152 +619,6 @@ RUN usermod -aG docker ubuntu`}
619619
</div>
620620
</section>
621621

622-
{/* What teams use Slicer for */}
623-
<section className="border-b border-border/50">
624-
<div className="mx-auto max-w-7xl px-4 py-8 sm:py-14 sm:px-6 lg:px-8">
625-
<div className="grid gap-8 lg:grid-cols-2 lg:gap-16 items-center">
626-
<div>
627-
<h2 className="text-2xl sm:text-3xl lg:text-4xl font-semibold tracking-tight text-balance mb-3">
628-
How teams use Slicer every day
629-
</h2>
630-
<p className="text-base sm:text-lg leading-relaxed text-muted-foreground mb-6">
631-
From customer support to product testing to full Kubernetes
632-
clusters — real workflows on real Linux, not cloud simulations.
633-
</p>
634-
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6 sm:gap-4 mb-6">
635-
<div className="flex items-start gap-3">
636-
<div className="rounded-lg bg-primary/10 p-2 border border-primary/20">
637-
<Zap className="h-4 w-4 text-primary" />
638-
</div>
639-
<div>
640-
<h3 className="font-semibold mb-1">
641-
Customer support in seconds
642-
</h3>
643-
<p className="text-sm text-muted-foreground">
644-
Reproduce a customer&apos;s issue on their exact OS. Boot
645-
a fresh Ubuntu or Rocky environment, debug, ship the fix —
646-
all in minutes.
647-
</p>
648-
</div>
649-
</div>
650-
<div className="flex items-start gap-3">
651-
<div className="rounded-lg bg-primary/10 p-2 border border-primary/20">
652-
<Play className="h-4 w-4 text-primary" />
653-
</div>
654-
<div>
655-
<h3 className="font-semibold mb-1">Fast local iteration</h3>
656-
<p className="text-sm text-muted-foreground">
657-
Build, test, and iterate locally with VSOCK I/O — no
658-
pushing to a remote server. Tear down and rebuild in under
659-
a second.
660-
</p>
661-
</div>
662-
</div>
663-
<div className="flex items-start gap-3">
664-
<div className="rounded-lg bg-primary/10 p-2 border border-primary/20">
665-
<Layers className="h-4 w-4 text-primary" />
666-
</div>
667-
<div>
668-
<h3 className="font-semibold mb-1">
669-
HA Kubernetes clusters
670-
</h3>
671-
<p className="text-sm text-muted-foreground">
672-
Spin up{" "}
673-
<a
674-
href="https://docs.slicervm.com/examples/ha-k3s/"
675-
target="_blank"
676-
rel="noopener noreferrer"
677-
className="text-muted-foreground hover:text-foreground underline underline-offset-2 font-medium transition-colors"
678-
>
679-
multi-node clusters
680-
</a>{" "}
681-
with real networking and{" "}
682-
<a
683-
href="https://docs.slicervm.com/examples/autoscaling-k3s/"
684-
target="_blank"
685-
rel="noopener noreferrer"
686-
className="text-muted-foreground hover:text-foreground underline underline-offset-2 font-medium transition-colors"
687-
>
688-
autoscaling nodes
689-
</a>
690-
. Simulate real cloud infrastructure on a single
691-
bare-metal host.
692-
</p>
693-
</div>
694-
</div>
695-
<div className="flex items-start gap-3">
696-
<div className="rounded-lg bg-primary/10 p-2 border border-primary/20">
697-
<Shield className="h-4 w-4 text-primary" />
698-
</div>
699-
<div>
700-
<h3 className="font-semibold mb-1">
701-
Enterprise &amp; airgap OS coverage
702-
</h3>
703-
<p className="text-sm text-muted-foreground">
704-
Test against{" "}
705-
<a
706-
href="https://docs.slicervm.com/reference/images/"
707-
target="_blank"
708-
rel="noopener noreferrer"
709-
className="text-muted-foreground hover:text-foreground underline underline-offset-2 font-medium transition-colors"
710-
>
711-
Ubuntu LTS and Rocky Linux
712-
</a>{" "}
713-
(RHEL-compatible) on x86_64 and arm64. Ship with
714-
confidence to enterprise and airgapped environments.
715-
</p>
716-
</div>
717-
</div>
718-
</div>
719-
</div>
720-
<div className="relative hidden sm:block">
721-
<Card className="py-0 border-primary/20 bg-card shadow-lg shadow-primary/5">
722-
<CardContent className="p-6">
723-
<div className="flex items-center gap-2 mb-3">
724-
<div className="w-3 h-3 rounded-full bg-red-500"></div>
725-
<div className="w-3 h-3 rounded-full bg-yellow-500"></div>
726-
<div className="w-3 h-3 rounded-full bg-green-500"></div>
727-
<span className="ml-2 text-xs font-mono text-muted-foreground">
728-
Ask your AI Agent to reproduce support tickets
729-
</span>
730-
</div>
731-
<pre className="overflow-x-auto text-sm font-mono whitespace-pre-wrap">
732-
<code>
733-
<span className="text-muted-foreground">{`## AGENTS.md
734-
735-
# Customer support environment
736-
737-
## Setup`}</span>
738-
{`
739-
$ slicer new support \\
740-
--image ghcr.io/openfaasltd/\\
741-
slicer-systemd-rocky9:\\
742-
5.10.240-x86_64-latest \\
743-
> support.yaml
744-
$ slicer up ./support.yaml
745-
$ slicer vm exec support-1 -- \\
746-
bash -c "curl -sLS \\
747-
https://get.docker.com | bash"
748-
$ slicer vm exec support-1 -- \\
749-
usermod -aG docker slicer
750-
$ slicer vm exec support-1 -- \\
751-
bash -c "curl -sLSf \\
752-
https://cli.openfaas.com | bash"`}
753-
<span className="text-muted-foreground">{`
754-
755-
## Prompt`}</span>
756-
{`
757-
Use AGENTS.md to investigate case #4821.
758-
Customer says Python template fails to
759-
build on OpenFaaS CE with Rocky 9.`}
760-
</code>
761-
</pre>
762-
</CardContent>
763-
</Card>
764-
</div>
765-
</div>
766-
</div>
767-
</section>
768622

769623
{/* Social Proof */}
770624
<section className="border-b border-border/50">

src/app/pricing/page.tsx

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ export default function Pricing() {
181181
</span>
182182
</span>
183183
</li>
184+
{/* TODO: re-enable when Polar subscription includes Superterm
184185
<li className="flex items-start gap-3">
185186
<img
186187
src="https://superterm.dev/icon.svg"
@@ -200,48 +201,17 @@ export default function Pricing() {
200201
</Link>
201202
, the AI-native terminal
202203
</span>
203-
<span className="relative ml-1 inline-flex align-middle group">
204-
<Info className="h-3.5 w-3.5 text-muted-foreground cursor-help" />
205-
<span className="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 w-80 p-2 text-xs text-muted-foreground bg-popover border rounded shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all z-50">
206-
Superterm is the terminal for the agentic era. Built
207-
from the ground up with visual feedback for long-running
208-
CLI sessions.
209-
<span className="absolute top-full left-1/2 -translate-x-1/2 -mt-1 border-4 border-transparent border-t-popover"></span>
210-
</span>
211-
</span>
212204
</span>
213205
</li>
206+
*/}
214207
<li className="flex items-start gap-3">
215208
<Check className="h-5 w-5 text-primary shrink-0 mt-0.5" />
216209
<span className="text-sm">Community support via Discord</span>
217210
</li>
218211
<li className="flex items-start gap-3">
219212
<Check className="h-5 w-5 text-primary shrink-0 mt-0.5" />
220213
<span className="text-sm">
221-
<span>Paid via GitHub Sponsors</span>
222-
<span className="relative ml-1 inline-flex align-middle group">
223-
<Info className="h-3.5 w-3.5 text-muted-foreground cursor-help" />
224-
<span className="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 w-72 p-2 text-xs text-muted-foreground bg-popover border rounded shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all z-50">
225-
The Individual tier is intended to be paid for by the
226-
user.
227-
<span className="absolute top-full left-1/2 -translate-x-1/2 -mt-1 border-4 border-transparent border-t-popover"></span>
228-
</span>
229-
</span>
230-
</span>
231-
</li>
232-
<li className="flex items-start gap-3">
233-
<Info className="h-5 w-5 text-muted-foreground shrink-0 mt-0.5" />
234-
<span className="text-sm">
235-
<span>Optional: Upgrade to 5x Slicer daemons</span>
236-
<span className="relative ml-1 inline-flex align-middle group">
237-
<Info className="h-3.5 w-3.5 text-muted-foreground cursor-help" />
238-
<span className="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 w-72 p-2 text-xs text-muted-foreground bg-popover border rounded shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all z-50">
239-
Select 50 USD / mo tier on GitHub Sponsors to run an
240-
additional 3 Slicer daemons -- still unlimited VMs on
241-
each.
242-
<span className="absolute top-full left-1/2 -translate-x-1/2 -mt-1 border-4 border-transparent border-t-popover"></span>
243-
</span>
244-
</span>
214+
Billed monthly, cancel anytime
245215
</span>
246216
</li>
247217
<li className="flex items-start gap-3">
@@ -346,6 +316,7 @@ export default function Pricing() {
346316
, and CLI
347317
</span>
348318
</li>
319+
{/* TODO: re-enable when Polar subscription includes Superterm
349320
<li className="flex items-start gap-3">
350321
<img
351322
src="https://superterm.dev/icon.svg"
@@ -365,17 +336,9 @@ export default function Pricing() {
365336
</Link>
366337
, the AI-native terminal
367338
</span>
368-
<span className="relative ml-1 inline-flex align-middle group">
369-
<Info className="h-3.5 w-3.5 text-muted-foreground cursor-help" />
370-
<span className="absolute bottom-full left-1/2 -translate-x-1/2 mb-2 w-80 p-2 text-xs text-muted-foreground bg-popover border rounded shadow-lg opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all z-50">
371-
Superterm is the terminal for the agentic era. Built
372-
from the ground up with visual feedback for long-running
373-
CLI sessions.
374-
<span className="absolute top-full left-1/2 -translate-x-1/2 -mt-1 border-4 border-transparent border-t-popover"></span>
375-
</span>
376-
</span>
377339
</span>
378340
</li>
341+
*/}
379342
<li className="flex items-start gap-3">
380343
<Check className="h-5 w-5 text-primary shrink-0 mt-0.5" />
381344
<span className="text-sm">Community support via Discord</span>

src/components/IndividualModal.tsx

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ interface IndividualModalProps {
1818
onClose: () => void;
1919
}
2020

21-
type Tier = 25 | 50 | "trial";
21+
type Tier = 25 | "trial";
2222

23-
const SPONSOR_URL = "https://github.com/sponsors/alexellis";
23+
const CHECKOUT_URL = "https://buy.polar.sh/polar_cl_b3bvlhv3WVYOgUbzk0XN7Su3taGaOmCijLpSa0RqDn0";
2424
const INSTALL_URL = "https://docs.slicervm.com/getting-started/install/";
2525

2626
export default function IndividualModal({
@@ -51,7 +51,7 @@ export default function IndividualModal({
5151
};
5252

5353
const isTrial = tier === "trial";
54-
const daemons = tier === 50 ? 5 : tier === 25 ? 2 : 1;
54+
const daemons = tier === 25 ? 2 : 1;
5555

5656
return (
5757
<>
@@ -69,7 +69,7 @@ export default function IndividualModal({
6969
</DialogDescription>
7070
</DialogHeader>
7171

72-
{/* 3-way toggle */}
72+
{/* toggle */}
7373
<div className="mt-2 inline-flex items-center gap-1 rounded-lg border border-border/60 bg-background p-1 w-full">
7474
<Button
7575
type="button"
@@ -80,15 +80,6 @@ export default function IndividualModal({
8080
>
8181
$25/mo
8282
</Button>
83-
<Button
84-
type="button"
85-
size="sm"
86-
variant={tier === 50 ? "default" : "ghost"}
87-
className="font-mono flex-1 text-sm h-8"
88-
onClick={() => handleTierChange(50)}
89-
>
90-
$50/mo
91-
</Button>
9283
<Button
9384
type="button"
9485
size="sm"
@@ -167,11 +158,11 @@ export default function IndividualModal({
167158
<div className="mt-4 grid sm:grid-cols-2 gap-2">
168159
<Button className="font-mono" asChild>
169160
<Link
170-
href={SPONSOR_URL}
161+
href={CHECKOUT_URL}
171162
target="_blank"
172163
rel="noopener noreferrer"
173164
>
174-
Sponsor on GitHub
165+
Subscribe
175166
<ArrowRight className="h-4 w-4" />
176167
</Link>
177168
</Button>

src/components/navigation.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ export function Navigation() {
1313
const closeMenu = () => setIsOpen(false);
1414

1515
const navigationLinks = [
16-
{ href: "/", label: "Home" },
17-
{ href: "/microvms", label: "microVMs" },
1816
{ href: "/pricing", label: "Pricing" },
1917
{ href: "/blog", label: "Blog" },
2018
];

0 commit comments

Comments
 (0)