- apps/web: redesigned landing (Hero/Scanner/HowItWorks/Features/Footer), honest live-vs-coming-soon badges, same-origin /api/scan, ember theme. - ecosystem.config.cjs: runnable — pyre-api/worker via `node --import tsx`, pyre-web via `next start`, fork mode, env wired. pm2 web+api verified online (api /health 200, scan 200, web 200). - infra/nginx/feedthepyre.com.conf: app at / (proxy :3000), API at /api (proxy :4000, prefix preserved), dev tracker at /status (static). - scripts/deploy-web.sh: sudo cutover (install vhost, nginx -t, reload, certbot --nginx --keep-until-expiring). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
"use client";
|
|
|
|
import { WalletMultiButton } from "@solana/wallet-adapter-react-ui";
|
|
|
|
/**
|
|
* Landing hero: wordmark, tagline, value prop, trust line, and the primary
|
|
* wallet call-to-action. Wording rules apply — this is a scan/preview only.
|
|
*/
|
|
export function Hero({ connected }: { connected: boolean }) {
|
|
return (
|
|
<header className="hero">
|
|
<div className="hero__glow" aria-hidden="true" />
|
|
<p className="hero__eyebrow">Solana wallet cleanup ritual</p>
|
|
<h1 className="hero__title">PYRE</h1>
|
|
<p className="hero__tagline">
|
|
Burn the dead. Feed the PYRE. Claim the Spawn.
|
|
</p>
|
|
<p className="hero__value">
|
|
Clean dead Solana token accounts and reclaim the SOL rent trapped in
|
|
them.
|
|
</p>
|
|
<p className="hero__trust">
|
|
PYRE returns your rent. The scraps feed the fire.
|
|
</p>
|
|
|
|
<div className="hero__cta">
|
|
<WalletMultiButton />
|
|
<a className="hero__secondary" href="#scanner">
|
|
{connected ? "Go to scanner" : "See how it works"}
|
|
</a>
|
|
</div>
|
|
|
|
<p className="hero__note">
|
|
Read-only scan. Nothing is signed — you stay in control of your wallet.
|
|
</p>
|
|
</header>
|
|
);
|
|
}
|