/* Standalone pages: GetStarted, SignIn, Privacy. Adds to window.HPPages. */ const { Button, Input, Icon, Logo, Checkbox, Badge } = window.HudsonPayDesignSystem_198a48; function MiniDashboard() { const rows = [ ["31 Jan", "Cristian W.", "Deposit", "$86.00", "Received", "var(--success-600)", "var(--success-100)"], ["31 Jan", "Cristina C.", "Withdrawal", "$48.00", "Processing", "var(--warning-600)", "var(--warning-100)"], ["29 Jan", "Martin F. B.", "Exchange", "$125.50", "Sent", "var(--blue-600)", "var(--blue-100)"], ["27 Jan", "Jason M. L.", "Deposit", "$1,240.00", "Processing", "var(--warning-600)", "var(--warning-100)"], ["25 Jan", "Leonardo D.", "Deposit", "$173.00", "Received", "var(--success-600)", "var(--success-100)"], ["24 Jan", "Sebastian B.", "Withdrawal", "$945.00", "Sent", "var(--blue-600)", "var(--blue-100)"], ]; return (
Recent transactions See all
{rows.map((r, i) => (
{r[0]} {r[1]} {r[3]}
))}
{/* floating balance card */}
Est. Balance USDT
532.50
Transfer Money
); } function AuthShell({ children, onPage }) { const { useIsMobile } = window.HPSite; const mobile = useIsMobile(); return (
{/* left content */}
{children}
{/* right gradient welcome panel */} {!mobile && (

Welcome
to Hudson Pay

Globalize your business with seamless, institutional-grade international payments.

)}
); } /* -------- GET STARTED -------- */ function GetStarted({ onPage }) { const [step, setStep] = React.useState(1); const [company, setCompany] = React.useState("Financial Institution"); const [volume, setVolume] = React.useState("$1M – $10M / mo"); const [services, setServices] = React.useState(["Global Payments"]); const types = ["Financial Institution", "Payment Provider", "Trading Firm", "Enterprise", "Fintech", "Crypto Business"]; const volumes = ["< $1M / mo", "$1M – $10M / mo", "$10M – $100M / mo", "$100M+ / mo"]; const allServices = ["Global Payments", "OTC Trading", "Multi-Currency Accounts", "Stablecoin Settlement", "Corporate Cards", "Treasury"]; const toggle = (s) => setServices(v => v.includes(s) ? v.filter(x => x !== s) : [...v, s]); return (
{[1, 2, 3].map(n => ( = n ? "var(--accent)" : "var(--ink-100)", color: step >= n ? "#fff" : "var(--text-faint)" }}>{n} {n < 3 && n ? "var(--accent)" : "var(--ink-150)" }} />} ))}

{step === 1 ? "Tell us about your business" : step === 2 ? "Your volume & needs" : "How can we reach you?"}

{step === 1 ? "We tailor onboarding to your institution type." : step === 2 ? "This helps us route you to the right desk." : "A specialist will reach out within one business day."}

{step === 1 && (
Company type
{types.map(t => ( ))}
)} {step === 2 && (
Estimated monthly volume
{volumes.map(t => ( ))}
Services needed
{allServices.map(s => ( ))}
)} {step === 3 && (
)}

Already have an account? onPage("signin")} style={{ cursor: "pointer", fontWeight: 600 }}>Sign in

); } /* -------- SIGN IN -------- */ function SignIn({ onPage }) { const [stage, setStage] = React.useState("creds"); // creds | 2fa const [code, setCode] = React.useState(["", "", "", "", "", ""]); const refs = React.useRef([]); const setDigit = (i, v) => { if (!/^\d?$/.test(v)) return; const next = [...code]; next[i] = v; setCode(next); if (v && i < 5) refs.current[i + 1] && refs.current[i + 1].focus(); }; return ( {stage === "creds" ? (

Welcome back

Sign in to your Hudson Pay account.

or

New to Hudson Pay? onPage("getstarted")} style={{ cursor: "pointer", fontWeight: 600 }}>Get started

) : (

Two-factor authentication

Enter the 6-digit code from your authenticator app.

{code.map((d, i) => ( refs.current[i] = el} value={d} onChange={e => setDigit(i, e.target.value)} maxLength={1} inputMode="numeric" style={{ width: "clamp(42px,13.5vw,52px)", height: 60, textAlign: "center", fontSize: 24, fontFamily: "var(--font-mono)", fontWeight: 600, color: "var(--text-strong)", border: `1.5px solid ${d ? "var(--blue-500)" : "var(--border-default)"}`, borderRadius: "var(--radius-md)", outline: "none", background: "var(--paper)" }} /> ))}

Didn't get a code? Resend

)}
); } /* -------- PRIVACY POLICY -------- */ function Privacy({ onPage }) { const { Container } = window.HPSite; const sections = [ ["Information we collect", "We collect information you provide directly — such as business details, identity documentation for KYC/KYB, and contact information — as well as transaction metadata required to operate payment and settlement services."], ["How we use information", "Information is used to provide and secure our services, comply with regulatory obligations including AML and sanctions screening, prevent fraud, and communicate with you about your account."], ["Data protection", "All data is encrypted in transit (TLS 1.3) and at rest (AES-256). We maintain SOC 2 Type II, PCI-DSS Level 1 and ISO 27001 controls, with regional data residency where required."], ["Sharing & disclosure", "We share information only with banking and infrastructure partners necessary to deliver services, and with regulators where legally required. We never sell personal data."], ["Your rights", "Subject to applicable law, you may request access, correction, deletion or portability of your personal data by contacting compliance@hudsonpay.io."], ["Contact", "Questions about this policy can be directed to our Data Protection Officer at compliance@hudsonpay.io."], ]; return (
Last updated · June 2026

Privacy Policy

Hudson Pay is committed to protecting the privacy and security of the businesses and individuals we serve. This policy explains what we collect and how we use it.

{sections.map(([t, b], i) => (

{String(i + 1).padStart(2, "0")}{t}

{b}

))}
); } Object.assign(window, { HPPages: { GetStarted, SignIn, Privacy } });