+ Point your camera at their Cubid QR or paste the JSON payload directly. Once both sides sign the temporary challenge,
+ we’ll surface the overlap from EAS.
+
+ Generate a Cubid QR only after authenticating. That way, every handshake originates from a trusted session.
+
+
+
+ Sign in to continue
+
+
+ );
+ }
+
+ return (
+
+
+ My QR
+
Let your peer scan this Cubid handshake
+
+ Every payload embeds your Cubid ID and a fresh timestamp. Share it face to face, or send it through a trusted channel
+ and ask your peer to scan it before it expires.
+
+
+
+
+
+
+
+
+
+ Need onboarding? Make sure your profile carries a Cubid ID so peers can
+ locate you instantly.
+
+
+
• Confirm the face in front of you matches the profile before sharing.
+
• Remind them the challenge expires after ninety seconds to keep the loop private.
+
• If your Cubid ID updates, refresh this page to issue a brand-new QR.
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx
index 17e4306..4c1bb9a 100644
--- a/frontend/src/app/page.tsx
+++ b/frontend/src/app/page.tsx
@@ -1,34 +1,155 @@
+"use client";
+
import Link from "next/link";
-const LINKS = [
- { href: "/signin", label: "1. Sign in" },
- { href: "/new-user", label: "2. Onboard" },
- { href: "/circle", label: "3. My circle" },
- { href: "/profile", label: "4. Profile" },
- { href: "/vouch", label: "5. Vouch" },
- { href: "/scan", label: "6. Scan" },
- { href: "/results", label: "7. Results" },
+import { useUserStore } from "../lib/store";
+
+const HIGHLIGHTS = [
+ {
+ title: "Prove people are known, not anonymous",
+ description:
+ "Peer Mapper connects Supabase auth, Cubid IDs, and Ethereum attestations so you can verify that the human in front of you is vouched for by people you already trust.",
+ },
+ {
+ title: "QR handshakes in under a minute",
+ description:
+ "Trade a time-limited QR code, exchange wallet-backed challenges, and reveal only the mutual contacts you both rely on—nothing more.",
+ },
+ {
+ title: "Built on Moonbeam for real-world intros",
+ description:
+ "Attestations flow through FeeGate and EAS, letting you issue two complimentary proofs before paying a lifetime fee for heavier use.",
+ },
+];
+
+const JOURNEY_STEPS = [
+ {
+ label: "1. Sign in",
+ description: "Request a Supabase magic link and create your trusted profile in moments.",
+ },
+ {
+ label: "2. Vouch",
+ description: "Record who you trust, the strength of that trust, and why the relationship matters.",
+ },
+ {
+ label: "3. Verify",
+ description: "Scan a peer’s code, co-sign a challenge, and see overlaps without leaking your full contact list.",
+ },
];
+const QUICK_ACTIONS = [
+ {
+ href: "/scan/my-qr",
+ title: "Share your QR",
+ description: "Let a peer scan your Cubid ID. Handshakes expire fast, so they stay private by design.",
+ },
+ {
+ href: "/scan/camera",
+ title: "Open camera",
+ description: "Capture their QR, collect wallet signatures, and verify your mutual trusted contacts.",
+ },
+ {
+ href: "/circle",
+ title: "Review my circle",
+ description: "See who vouched for you, who you vouched for, and whether trust needs refreshing.",
+ },
+ {
+ href: "/vouch",
+ title: "Issue a new attestation",
+ description: "Record a fresh connection with trust level, circle tag, and expiry in one flow.",
+ },
+];
+
+const ctaClassName =
+ "inline-flex items-center justify-center rounded-full border border-sky-400/40 bg-sky-500/20 px-6 py-3 text-sm font-semibold uppercase tracking-[0.3em] text-sky-100 shadow-lg shadow-sky-500/20 transition hover:border-sky-300 hover:bg-sky-500/30";
+
export default function Home() {
+ const session = useUserStore((state) => state.session);
+ const profile = useUserStore((state) => state.user);
+
+ if (!session) {
+ return (
+
+
+
+ Peer Mapper
+
+ Trust people faster with verifiable overlaps
+
+
+ We help communities prove they truly know one another. Cubid IDs, wallet signatures, and Moonbeam attestations combine to reveal mutual trusted contacts—only when both sides agree.
+
+
+
+
+ Start verifying now
+
+
+ No passwords. Just a magic link and your trusted network.
+
+
+
+
+
+ {HIGHLIGHTS.map((highlight) => (
+
+
{highlight.title}
+
{highlight.description}
+
+ ))}
+
+
+
+
How a verification unfolds
+
+ {JOURNEY_STEPS.map((step) => (
+
+ {step.label}
+
{step.description}
+
+ ))}
+
+
+
+ Start verifying now
+
+
+
+
+ );
+ }
+
return (
-
-
-
Peer Mapper
-
QR-powered trust overlaps on Moonbeam
-
- Follow the five step demo path to issue attestations, scan a peer's QR, and reveal mutual trust.
+
+
+ Welcome back
+
+ Your Supabase session stays warm so you can bounce between flows without friction. Dive straight into a QR handshake or update your circle whenever you need.