// Monifest.ai homepage — two variations const { useState, useMemo } = React; const I = window.MonifestIcons; const APPS = window.MonifestApps; // ----------------------------- shared bits ----------------------------- function ThemeToggle({ dark, onToggle, accent = "#00C46A" }) { return ( ); } function SearchPill({ placeholder = "Search tools" }) { return (
{placeholder} ⌘K
); } function StatusBadge({ status, variant = "luxe", accent }) { const live = status === "live"; if (variant === "luxe") { return ( {live ? "Live" : "Coming soon"} ); } // playful pill return ( {live ? "Live" : "Coming soon"} ); } // ----------- Flamingo button (2 variants) ------------ function openFlamingo() { const password = window.prompt("Enter Flamingo password"); if (password === "etoro2026") { window.location.href = "https://im5.flamingo.fm/"; } else if (password !== null) { window.alert("Wrong password"); } } function FlamingoButton({ variant = "pink", compact = false }) { if (variant === "pink") { const pink = "#FF8FB1"; return ( ); } // gold / champagne const gold = "#D9B872"; return ( ); } function IconFlamingoLocal({ size = 14, stroke = 1.5, color = "currentColor" }) { return ( ); } // ----------- Team line (small uppercase label + names + tooltips) ----------- function TeamLine({ team, muted, dim, fg, compact = false }) { if (!team || team.length === 0) return null; return (
Team {team.map((p, i) => ( {i > 0 && ·} {p.name} ))}
); } // ----------- Utilities strip -------------------------------------------- function UtilitiesStrip({ fg, dim, hair, dark, accent, compact = false }) { const UTIL = window.MonifestUtilities || []; const tint = dark ? "rgba(255,255,255,0.025)" : "rgba(0,0,0,0.025)"; return (
Team utilities internal docs
Swipe
{UTIL.map((u) => { if (u.status === "placeholder") { return (
Coming soon
); } const IconCmp = I[u.icon] || I.Roadmap; return (
u.url && (window.location.href = u.url)} role={u.url ? "link" : undefined} tabIndex={u.url ? 0 : undefined} onKeyDown={(e) => { if (u.url && (e.key === "Enter" || e.key === " ")) window.location.href = u.url; }} style={{ background: tint, border: `1px solid ${hair}`, borderRadius: 12, padding: "12px 14px", display: "flex", gap: 12, minHeight: 78, cursor: "pointer", alignItems: "flex-start", }} >
{u.short ? ( <> {u.name.replace(` (${u.short})`, "").replace(u.short, "").trim()}{" "} ({u.short}) ) : ( u.name )}
{u.desc}
{u.team && (
Team {u.team.map((p, i) => ( {i > 0 && " · "} {p.name} ))}
)}
); })}
); } window.FlamingoButton = FlamingoButton; // ===================================================================== // VARIATION A — LUXE (2 cols, editorial, hairline) // ===================================================================== function MonifestLuxe({ initialDark = true, flamingo = "pink" }) { const [dark, setDark] = useState(initialDark); const accent = "#00C46A"; const bg = dark ? "#0B0E10" : "#F4F1EC"; const fg = dark ? "#E8E4DC" : "#13171A"; const dim = dark ? "#8C8780" : "#6A6760"; const hair = dark ? "#1F2326" : "#D9D3C8"; const cardBg = dark ? "#0F1316" : "#FBF9F5"; return (
{/* Header */}
Monifest .ai
setDark((d) => !d)} accent={accent} />
{/* Welcome */}
  CryptoMoney · internal

Money, manifested.

AI tools by the CryptoMoney team at eToro.

{/* Section header */}
The library {APPS.filter((a) => a.status === "live").length} live · {APPS.filter((a) => a.status === "soon").length} coming
All Live Upcoming
{/* Card grid */}
{APPS.map((app, i) => { const IconCmp = I[app.icon]; const muted = app.status !== "live"; return (
app.url && (window.location.href = app.url)} role={app.url ? "link" : undefined} tabIndex={app.url ? 0 : undefined} onKeyDown={(e) => { if (app.url && (e.key === "Enter" || e.key === " ")) window.location.href = app.url; }} style={{ position: "relative", padding: "26px 30px 26px", borderRight: `1px solid ${hair}`, borderBottom: `1px solid ${hair}`, background: cardBg, display: "flex", gap: 22, minHeight: 132, cursor: app.url ? "pointer" : "default", transition: "background 0.2s", }} >

{app.name}

{app.desc}

{app.status === "live" && (
)}
); })}
{/* Footer */}
What’s new — Round-up is now live. Next up: Goal Investor enters internal testing.
Built by CryptoMoney · Guy Gabel  ·  v0.4
); } // ===================================================================== // VARIATION B — PLAYFUL (3 cols, tonal cards, more rhythm) // ===================================================================== function MonifestPlayful({ initialDark = true, flamingo = "pink" }) { const [dark, setDark] = useState(initialDark); const accent = "#00C46A"; const bg = dark ? "#0C0F11" : "#F2EFE9"; const fg = dark ? "#EEEAE2" : "#15191C"; const dim = dark ? "#8E8980" : "#65625B"; const hair = dark ? "#1E2225" : "#DBD5CA"; // Per-app tonal accent in OKLCH neighborhood — same chroma, varied hue const palettes = dark ? { club: { tint: "oklch(0.22 0.04 80)", ink: "oklch(0.86 0.08 80)" }, // amber roundup: { tint: "oklch(0.22 0.04 150)", ink: "oklch(0.86 0.10 150)" }, // green nium: { tint: "oklch(0.22 0.04 220)", ink: "oklch(0.86 0.08 220)" }, // blue goal: { tint: "oklch(0.22 0.04 30)", ink: "oklch(0.86 0.08 30)" }, // coral "fam-invest":{ tint: "oklch(0.22 0.04 110)", ink: "oklch(0.86 0.08 110)" }, // lime "fam-bank": { tint: "oklch(0.22 0.04 320)", ink: "oklch(0.86 0.08 320)" }, // pink jpm: { tint: "oklch(0.22 0.04 260)", ink: "oklch(0.86 0.08 260)" }, // violet zengo: { tint: "oklch(0.22 0.04 190)", ink: "oklch(0.86 0.08 190)" }, // teal } : { club: { tint: "oklch(0.94 0.04 80)", ink: "oklch(0.30 0.10 80)" }, roundup: { tint: "oklch(0.94 0.04 150)", ink: "oklch(0.30 0.10 150)" }, nium: { tint: "oklch(0.94 0.04 220)", ink: "oklch(0.30 0.10 220)" }, goal: { tint: "oklch(0.94 0.04 30)", ink: "oklch(0.30 0.10 30)" }, "fam-invest":{ tint: "oklch(0.94 0.04 110)", ink: "oklch(0.30 0.10 110)" }, "fam-bank": { tint: "oklch(0.94 0.04 320)", ink: "oklch(0.30 0.10 320)" }, jpm: { tint: "oklch(0.94 0.04 260)", ink: "oklch(0.30 0.10 260)" }, zengo: { tint: "oklch(0.94 0.04 190)", ink: "oklch(0.30 0.10 190)" }, }; return (
{/* Header */}
Monifest .ai
setDark((d) => !d)} accent={accent} />
{/* Welcome — playful split */}
Welcome back

Money,{" "} manifested.

AI tools by the CryptoMoney team at eToro. Pick one and get to work.

3 live 5 coming
{/* Team utilities */} {/* Card grid 3-col */}
{APPS.map((app) => { const IconCmp = I[app.icon]; const muted = app.status !== "live"; const pal = palettes[app.id]; return (
app.url && (window.location.href = app.url)} role={app.url ? "link" : undefined} tabIndex={app.url ? 0 : undefined} onKeyDown={(e) => { if (app.url && (e.key === "Enter" || e.key === " ")) window.location.href = app.url; }} style={{ position: "relative", background: pal.tint, color: fg, borderRadius: 14, padding: "18px 18px 16px", display: "flex", flexDirection: "column", gap: 14, minHeight: 168, cursor: app.url ? "pointer" : "default", border: `1px solid ${hair}`, opacity: muted ? 0.92 : 1, transition: "transform 0.2s", }} >

{app.name}

{app.desc}

); })}
{/* Footer */}
What’s new Round-up is now live. Next up: Goal Investor enters internal testing.
Built by CryptoMoney · Guy Gabel
); } // ===================================================================== // VARIATION B — MOBILE (single-column, tonal cards) // ===================================================================== function MonifestPlayfulMobile({ initialDark = true, flamingo = "pink" }) { const [dark, setDark] = useState(initialDark); const accent = "#00C46A"; const bg = dark ? "#0C0F11" : "#F2EFE9"; const fg = dark ? "#EEEAE2" : "#15191C"; const dim = dark ? "#8E8980" : "#65625B"; const hair = dark ? "#1E2225" : "#DBD5CA"; const palettes = dark ? { club: { tint: "oklch(0.22 0.04 80)", ink: "oklch(0.86 0.08 80)" }, roundup: { tint: "oklch(0.22 0.04 150)", ink: "oklch(0.86 0.10 150)" }, nium: { tint: "oklch(0.22 0.04 220)", ink: "oklch(0.86 0.08 220)" }, goal: { tint: "oklch(0.22 0.04 30)", ink: "oklch(0.86 0.08 30)" }, "fam-invest":{ tint: "oklch(0.22 0.04 110)", ink: "oklch(0.86 0.08 110)" }, "fam-bank": { tint: "oklch(0.22 0.04 320)", ink: "oklch(0.86 0.08 320)" }, jpm: { tint: "oklch(0.22 0.04 260)", ink: "oklch(0.86 0.08 260)" }, zengo: { tint: "oklch(0.22 0.04 190)", ink: "oklch(0.86 0.08 190)" }, } : { club: { tint: "oklch(0.94 0.04 80)", ink: "oklch(0.30 0.10 80)" }, roundup: { tint: "oklch(0.94 0.04 150)", ink: "oklch(0.30 0.10 150)" }, nium: { tint: "oklch(0.94 0.04 220)", ink: "oklch(0.30 0.10 220)" }, goal: { tint: "oklch(0.94 0.04 30)", ink: "oklch(0.30 0.10 30)" }, "fam-invest":{ tint: "oklch(0.94 0.04 110)", ink: "oklch(0.30 0.10 110)" }, "fam-bank": { tint: "oklch(0.94 0.04 320)", ink: "oklch(0.30 0.10 320)" }, jpm: { tint: "oklch(0.94 0.04 260)", ink: "oklch(0.30 0.10 260)" }, zengo: { tint: "oklch(0.94 0.04 190)", ink: "oklch(0.30 0.10 190)" }, }; const live = APPS.filter((a) => a.status === "live"); const soon = APPS.filter((a) => a.status === "soon"); return (
{/* Header */}
Monifest .ai
setDark((d) => !d)} accent={accent} />
{/* Welcome */}
Welcome back

Money, manifested.

AI tools by the CryptoMoney team at eToro.

{/* count chips */}
{live.length} live {soon.length} coming
{/* Team utilities */} {/* Live section label */}
Live now
{live.map((app) => ( ))}
Coming soon
{soon.map((app) => ( ))}
{/* Footer */}
What’s new Round-up is now live. Next up: Goal Investor enters internal testing.
Built by CryptoMoney · Guy Gabel
); } function MobileCard({ app, palette, fg, dim, hair, dark, accent }) { const IconCmp = I[app.icon]; const muted = app.status !== "live"; return (
app.url && (window.location.href = app.url)} role={app.url ? "link" : undefined} tabIndex={app.url ? 0 : undefined} onKeyDown={(e) => { if (app.url && (e.key === "Enter" || e.key === " ")) window.location.href = app.url; }} style={{ background: palette.tint, color: fg, borderRadius: 14, padding: "14px 14px 14px", display: "flex", gap: 14, border: `1px solid ${hair}`, opacity: muted ? 0.95 : 1, cursor: app.url ? "pointer" : "default", }} >

{app.name}

{app.desc}

); } window.MonifestLuxe = MonifestLuxe; window.MonifestPlayful = MonifestPlayful; window.MonifestPlayfulMobile = MonifestPlayfulMobile;