chore(apps): drop "AI-powered", sort the list reverse alphabetically

Suchoice's tagline was "AI-powered decision making", which named the
implementation instead of the thing you get. It now reads "Six ways to decide,
from a coin flip to 3D dice", which is what the product page already says and
is concrete enough to tell you whether you want it.

Order is now derived, not hand-maintained: sortedApps sorts on name descending
at render. Hand-ordering the array works right up until someone adds an app to
the end and the page is quietly wrong, which is the same class of problem as a
hand-maintained timing constant.

Reverse alphabetical gives Vegan IQ, Suchoice, Such Moon Launch, Hash Bags,
Bloomword, Bauhaus Echo. Note Suchoice sorts above Such Moon Launch: the
comparison is locale-aware, so the space in "Such Moon" does not simply win on
byte order the way it would with a raw string compare.
This commit is contained in:
jwinterm
2026-08-18 10:23:47 -04:00
parent 9d2b7a1c53
commit dccf26e603
+6 -2
View File
@@ -71,7 +71,7 @@ const apps = [
},
{
name: "Suchoice",
tagline: "AI-powered decision making",
tagline: "Six ways to decide, from a coin flip to 3D dice",
icon: "/images/products/suchoice.png",
color: "text-pink-600 dark:text-pink-400",
borderColor: "border-pink-500/20",
@@ -95,6 +95,10 @@ const apps = [
},
];
// Reverse alphabetical for now. Derived rather than hand-ordered, so adding an app
// cannot leave the page in an order someone has to remember to fix.
const sortedApps = [...apps].sort((a, b) => b.name.localeCompare(a.name));
export default function LinksPage() {
return (
<main className="relative min-h-screen flex flex-col items-center bg-background text-foreground">
@@ -104,7 +108,7 @@ export default function LinksPage() {
<p className="text-muted-foreground text-center mb-10">Our apps</p>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
{apps.map((app, i) => (
{sortedApps.map((app, i) => (
<ScrollReveal key={app.name} delay={(i % 2) * 0.08}>
<div className={`h-full rounded-xl border ${app.borderColor} bg-card p-6`}>
<div className="flex items-center gap-4 mb-3">