Files
SnapOtter/apps/landing/src/components/TrustSignals.astro
T
SnapOtterandGitHub af011d5538 feat: reposition to self-hosted file-processing infrastructure (#469)
Leads public copy with self-hosted file-processing infrastructure and demotes tool count to a proof point across README, docs, llms.txt, DockerHub, and the landing site. Adds a /self-hosted hub plus 7 job-intent SEO pages with a build-time validator, deepens the flagship /alternatives pages, adds a remove.bg page, three shared components, and landing e2e coverage.
2026-07-10 13:26:41 +08:00

53 lines
1.4 KiB
Plaintext

---
// biome-ignore-all lint/correctness/noUnusedVariables: Astro template consumes frontmatter values.
import { formatCompact, getImagePulls, getStarCount } from "@/lib/stats";
// Fetched at build time; refreshed by the scheduled landing rebuild.
const starCount = await getStarCount();
const { display: pullsDisplay } = await getImagePulls();
const stats = [
{
value: formatCompact(starCount),
label: "GitHub Stars",
sublabel: "Open-source & growing",
},
{
value: pullsDisplay,
label: "Image Pulls",
sublabel: "Deployed worldwide",
},
{
value: "200+",
label: "Processing Tools",
sublabel: "Across 5 file modalities",
},
{
value: "20+",
label: "Languages",
sublabel: "Speaks your language",
},
];
---
<div class="relative mx-auto mt-6 max-w-5xl">
<!-- Stats grid -->
<div class="reveal grid grid-cols-2 gap-10 sm:gap-12 lg:grid-cols-4">
{stats.map((stat) => {
const inner = (
<div class="text-center">
<p class="font-display text-5xl font-extrabold tracking-tight text-primary md:text-6xl">
{stat.value}
</p>
<p class="mt-2 text-sm font-semibold text-foreground">{stat.label}</p>
<p class="mt-0.5 text-xs text-muted">{stat.sublabel}</p>
</div>
);
return <div class="p-3">{inner}</div>;
})}
</div>
</div>