"use client"; import Link from "next/link"; import { useMemo, useState } from "react"; import ThemedLayout from "@/components/layouts/ThemedLayout"; import { useAccount } from "@/contexts/AccountContext"; import { useWallet } from "@/contexts/WalletContext"; type MixLog = { id: string; text: string }; function rid() { return Math.random().toString(16).slice(2, 10).toUpperCase(); } export default function MixerPage() { const { user, hydrated } = useAccount(); const { luxCredits, spendLuxCredits, setVaultFlag, addVaultReceipt } = useWallet(); const [amount, setAmount] = useState(500); const [hops, setHops] = useState(3); const [noise, setNoise] = useState(65); const [log, setLog] = useState([]); const relayReady = Boolean(hydrated && user); const fee = useMemo(() => { const base = Math.floor(amount * 0.04); const hopFee = hops * 25; const noiseFee = Math.floor(noise * 2); return base + hopFee + noiseFee; }, [amount, hops, noise]); const total = amount + fee; const push = (text: string) => setLog((l) => [{ id: rid(), text }, ...l].slice(0, 10)); return (

COIN BLENDER

Terminal theatre: dramatic hops, noise, and logs — while LUX debits for real on your handle.

No outbound chain traffic from this page. Spending Bitcoin-backed USD happens at{" "} Add funds {" "} and{" "} Checkout .

available
{luxCredits.toLocaleString()} LUX
{relayReady ? ( Relay: @{user!.username} ) : ( Sign in {" "} to burn LUX )}
Amount (LUX)
setAmount(parseInt(e.target.value, 10))} className="w-full" disabled={!relayReady} />
{amount.toLocaleString()} LUX
Route hops
{[1, 2, 3, 4, 5].map((n) => ( ))}
Plausible deniability noise
setNoise(parseInt(e.target.value, 10))} className="w-full" disabled={!relayReady} />
{noise}% nonsense
Receipt
Blend amount {amount.toLocaleString()} LUX
Obfuscation fee {fee.toLocaleString()} LUX
Total burn {total.toLocaleString()} LUX
LUX is loyalty currency tied to your account (earn some on completed checkouts). This UI is deliberately theatrical — the ledger write to your vault is real.
Console
{log.length === 0 ? (
No sessions yet.
) : ( log.map((e) => (
{e.text}
)) )}
); }