AS FEATURED IN
diff --git a/website/components/GitHubStarButton.tsx b/website/components/GitHubStarButton.tsx
index 971aa340..36171d82 100644
--- a/website/components/GitHubStarButton.tsx
+++ b/website/components/GitHubStarButton.tsx
@@ -5,6 +5,12 @@ import styles from "./GitHubStarButton.module.css";
interface Props {
repo: string;
+ // SSR-fed initial count from Nav's server-side fetch. When present
+ // the badge renders the number on first paint; the client-side
+ // refetch below is a best-effort refresh that only fires if it
+ // succeeds (unauthenticated github.com api is rate-limited to
+ // ~60/hr/IP, which is why the count was invisible before).
+ initialStars?: number;
}
function formatStars(n: number): string {
@@ -15,8 +21,10 @@ function formatStars(n: number): string {
return String(n);
}
-export function GitHubStarButton({ repo }: Props) {
- const [stars, setStars] = useState
(null);
+export function GitHubStarButton({ repo, initialStars }: Props) {
+ const [stars, setStars] = useState(
+ typeof initialStars === "number" ? initialStars : null,
+ );
useEffect(() => {
let cancelled = false;
@@ -52,7 +60,7 @@ export function GitHubStarButton({ repo }: Props) {
}
}
} catch {
- /* offline / blocked — keep cached or null */
+ /* offline / blocked — keep SSR / cached / null */
}
})();
return () => {
@@ -66,7 +74,7 @@ export function GitHubStarButton({ repo }: Props) {
target="_blank"
rel="noopener noreferrer"
className={`btn btn--ghost ${styles.starBtn}`}
- aria-label={`Star ${repo} on GitHub`}
+ aria-label={`Star ${repo} on GitHub${stars !== null ? ` — ${stars.toLocaleString()} stars` : ""}`}
>
);
diff --git a/website/components/HeroNpxCommand.module.css b/website/components/HeroNpxCommand.module.css
new file mode 100644
index 00000000..06081a0b
--- /dev/null
+++ b/website/components/HeroNpxCommand.module.css
@@ -0,0 +1,69 @@
+.cmd {
+ display: inline-grid;
+ grid-template-columns: auto 1fr auto;
+ align-items: center;
+ gap: 14px;
+ padding: 16px 22px;
+ min-width: 460px;
+ max-width: 100%;
+ background: var(--iron);
+ border: 1px solid var(--gold);
+ color: var(--white);
+ font-family: var(--font-mono);
+ font-size: 16px;
+ letter-spacing: 0.02em;
+ cursor: pointer;
+ transition: background 0.12s ease, transform 0.12s ease, border-color 0.12s ease;
+ text-align: left;
+}
+.cmd:hover {
+ background: #1a1a1f;
+ transform: translateY(-1px);
+}
+.cmd:focus-visible {
+ outline: 2px solid var(--gold);
+ outline-offset: 3px;
+}
+.copied {
+ background: var(--gold);
+ color: var(--ink);
+ border-color: var(--gold);
+}
+.copied .hint {
+ color: var(--ink);
+}
+.prompt {
+ color: var(--gold);
+ font-weight: 700;
+}
+.copied .prompt {
+ color: var(--ink);
+}
+.text {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+.hint {
+ font-size: 10px;
+ letter-spacing: 1.4px;
+ color: var(--ash);
+ text-transform: uppercase;
+ padding-left: 12px;
+ border-left: 1px solid var(--charcoal);
+}
+.copied .hint {
+ border-left-color: rgba(0, 0, 0, 0.2);
+}
+@media (max-width: 640px) {
+ .cmd {
+ min-width: 0;
+ width: 100%;
+ font-size: 13px;
+ padding: 14px 16px;
+ gap: 10px;
+ }
+ .hint {
+ display: none;
+ }
+}
diff --git a/website/components/HeroNpxCommand.tsx b/website/components/HeroNpxCommand.tsx
new file mode 100644
index 00000000..ff57ba87
--- /dev/null
+++ b/website/components/HeroNpxCommand.tsx
@@ -0,0 +1,33 @@
+"use client";
+
+import { useState } from "react";
+import styles from "./HeroNpxCommand.module.css";
+
+const CMD = "npx @agentmemory/agentmemory";
+
+export function HeroNpxCommand() {
+ const [copied, setCopied] = useState(false);
+
+ const onCopy = async () => {
+ try {
+ await navigator.clipboard.writeText(CMD);
+ setCopied(true);
+ window.setTimeout(() => setCopied(false), 1600);
+ } catch {
+ /* clipboard blocked — keep button visible */
+ }
+ };
+
+ return (
+
+ );
+}
diff --git a/website/lib/generated-meta.json b/website/lib/generated-meta.json
index e4af0ebd..98048d8f 100644
--- a/website/lib/generated-meta.json
+++ b/website/lib/generated-meta.json
@@ -1,8 +1,8 @@
{
- "version": "0.9.15",
+ "version": "0.9.16",
"mcpTools": 51,
"hooks": 12,
"restEndpoints": 121,
"testsPassing": 975,
- "generatedAt": "2026-05-15T18:11:06.382Z"
+ "generatedAt": "2026-05-16T09:00:42.889Z"
}