// $PNZI — simple landing page
const { useState, useEffect } = React;
const CA = "9hXCPbWZQ4pxFxgh55Ejz1iLZ6g6E1cT61u8urUvpump";
function useCountUp(target, duration = 1800) {
const [val, setVal] = useState(0);
useEffect(() => {
const t0 = performance.now();
let raf;
const tick = (t) => {
const p = Math.min(1, (t - t0) / duration);
const eased = 1 - Math.pow(1 - p, 3);
setVal(target * eased);
if (p < 1) raf = requestAnimationFrame(tick);
};
raf = requestAnimationFrame(tick);
return () => cancelAnimationFrame(raf);
}, [target, duration]);
return val;
}
function fmt(n, d = 0) {
if (n >= 1e9) return (n / 1e9).toFixed(d) + "B";
if (n >= 1e6) return (n / 1e6).toFixed(d) + "M";
if (n >= 1e3) return (n / 1e3).toFixed(d) + "K";
return n.toFixed(d);
}
// ============================================================
// MARQUEE
// ============================================================
function Marquee({ items, speed = 45 }) {
const content = [...items, ...items, ...items];
return (
{content.map((it, i) => (
{it} ◆
))}
);
}
// ============================================================
// NAV
// ============================================================
function Nav({ bg, onToggleBg }) {
const isNoir = bg === "noir";
return (
);
}
// ============================================================
// HERO
// ============================================================
function Hero() {
const [copied, setCopied] = useState(false);
const copyCA = () => {
navigator.clipboard?.writeText(CA);
setCopied(true);
setTimeout(() => setCopied(false), 1500);
};
return (
Reposted by Adam Back
Ponzi
Strategy₿
Alistair Milne boiled the "ponzi or genius?" argument around $STRC down
to one ticker. Adam Back reposted it. We put it on-chain.
CA
{CA}
{copied ? "copied" : "copy"}
₿
₿
₿
);
}
function Stat({ label, value }) {
return (
);
}
// ============================================================
// LORE (the narrative)
// ============================================================
function Lore() {
return (
§ THE LORE
Born from a real argument,
not a vibe.
↻ Adam Back reposted
Alistair Milne ✓
@alistairmilne
₿STRC× $102.72 ↗
MMSTR× $173.66 ↗
Dear @saylor, I am not sure there's
enough people screaming 'ponzi'.
My idea: a *cumulative* version of $STRC which
reinvests dividends into buying more $STRC
(v2: a cumulative version of $STRC which
reinvests dividends into buying $MSTR)
Ticker idea: PNZI
11:46 AM · Apr 21, 2026
·
10.1K Views
It didn't come from nowhere.
$STRC had quietly become the center of a live argument in Bitcoin
culture — "ponzi or genius?" — with Saylor at the middle of it.
Alistair compressed the whole debate down to four letters: PNZI.
Adam Back reposting it was the part that mattered. A quiet cosign from
someone who actually carries weight in Bitcoin. We took the hint and
shipped the ticker before anyone could talk us out of it.
Not financial advice. Not a security. A memecoin about recursion,
financial engineering, and how far the joke can be pushed.
);
}
// ============================================================
// HOW TO BUY
// ============================================================
function HowToBuy() {
const steps = [
{ n: "01", t: "Get a wallet", b: "Phantom, Solflare, whatever. You probably already have one." },
{ n: "02", t: "Fund it with SOL", b: "Send SOL to your wallet. Don't lose the seed phrase." },
{ n: "03", t: "Buy on pump.fun", b: "Paste the contract. Hit buy. Welcome aboard the joke." },
];
return (
§ HOW TO APE
Three steps.
None of them are hard.
);
}
// ============================================================
// FOOTER
// ============================================================
function Footer() {
return (
);
}
// ============================================================
// TWEAKS
// ============================================================
function Tweaks({ tweaks, setTweaks, visible }) {
if (!visible) return null;
const set = (k, v) => setTweaks({ ...tweaks, [k]: v });
return (
);
}
// ============================================================
// APP
// ============================================================
function App() {
const [tweaksOn, setTweaksOn] = useState(false);
const DEFAULTS = /*EDITMODE-BEGIN*/{
"hue": 35,
"bg": "cream",
"grain": true,
"marquee": true
}/*EDITMODE-END*/;
const [tweaks, setTweaks] = useState(DEFAULTS);
useEffect(() => {
const handler = (e) => {
if (!e.data) return;
if (e.data.type === "__activate_edit_mode") setTweaksOn(true);
if (e.data.type === "__deactivate_edit_mode") setTweaksOn(false);
};
window.addEventListener("message", handler);
window.parent.postMessage({ type: "__edit_mode_available" }, "*");
return () => window.removeEventListener("message", handler);
}, []);
useEffect(() => {
window.parent.postMessage({ type: "__edit_mode_set_keys", edits: tweaks }, "*");
}, [tweaks]);
const rootStyle = { "--hue": tweaks.hue };
const bgClass = `bg-${tweaks.bg}`;
const [transitioning, setTransitioning] = useState(false);
const toggleBg = () => {
if (transitioning) return;
const goingNoir = tweaks.bg !== "noir";
setTransitioning(true);
setTweaks({ ...tweaks, bg: goingNoir ? "noir" : "cream" });
setTimeout(() => setTransitioning(false), 320);
};
return (
);
}
ReactDOM.createRoot(document.getElementById("root")).render();