/* global React, Wordmark, Money, Sparkline, Donut, BarChart, AreaChart, Progress, Avatar, Icon */
const { useState, useEffect, useRef } = React;
/* ============================================================
MARKETING PAGE
Three visual directions, all share the same content + structure.
The wrapper sets data-theme; CSS tokens swap colors / fonts.
============================================================ */
function MarketingPage({ goTo, theme, setTheme, wordmark, setWordmark }) {
return (
);
}
/* ----- NAV ----- */
function Nav({ goTo, wordmark }) {
const [scrolled, setScrolled] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 8);
window.addEventListener("scroll", onScroll);
return () => window.removeEventListener("scroll", onScroll);
}, []);
return (
);
}
/* ----- HERO ----- */
function Hero({ theme, goTo }) {
return (
改
{/* LEFT — editorial copy */}
No. 001 · The Kaizen Quarterly
Money,
quietly
compounding.
An automated budget, an index portfolio that rebalances itself, and a goal tracker
that feels like a diary. Small, daily improvements, for the next forty years.
goTo("onboarding")}>Open an account
goTo("dashboard")}>Watch the 90-second tour ↗
{/* RIGHT — single dominant artefact */}
Net worth · Year to date
$284,732
.18
12.3%
Index portfolio
$196,420
+12.4%
Cash · 4.5% APY
$64,321
+4.1%
Goal reserves
$23,989
+8.7%
{/* Trust mark */}
SIPC · FDIC · SOC 2 Type II
);
}
/* ----- MANIFESTO STRIP ----- */
function ManifestoStrip() {
const items = ["Compound, don't gamble", "Plan, don't predict", "Automate, don't agonize", "Save, don't suffer", "Compound, don't gamble"];
return (
{items.concat(items).map((t, i) => (
✦ {t}
))}
);
}
/* ----- PRODUCT PREVIEW (the actual app, in-page) ----- */
function ProductPreview({ goTo, theme }) {
const [tab, setTab] = useState("dashboard");
return (
The product
One ledger.
Every dollar accounted for.
Budgeting, goals, investing, and a tax-aware engine. One quiet interface that
reads like a financial diary, not a casino floor.
{[
["dashboard","Overview"],
["budget","Budget"],
["goals","Goals"],
["invest","Invest"],
["transactions","Activity"],
].map(([k, l]) => (
setTab(k)}>{l}
))}
goTo(tab === "dashboard" ? "dashboard" : tab)}>
Open live
);
}
function PreviewMock({ tab }) {
if (tab === "dashboard") {
return (
Net worth · today
$284,732.18
↑ $1,284 today · +12.3% YTD
);
}
if (tab === "budget") {
const cats = [
{ name: "Rent", v: 1850, max: 1850, color: "var(--ink)" },
{ name: "Groceries", v: 412, max: 600, color: "var(--accent)" },
{ name: "Transit", v: 88, max: 150, color: "var(--accent-2)" },
{ name: "Dining", v: 246, max: 300, color: "#c47a08" },
{ name: "Subscriptions", v: 92, max: 100, color: "var(--ink-2)" },
{ name: "Discretionary", v: 318, max: 500, color: "var(--negative)" },
];
return (
May, week 2 of 4
$3,006 of $3,500
14 days left · pace −$120/day
{cats.map((c, i) => (
{c.name}
${c.v} / ${c.max}
))}
Insight
Dining is trending +18% vs your six-week average. Want to cap it at $250 next month?
Cap at $250
);
}
if (tab === "goals") {
return (
{[
{ name: "Tokyo trip", icon: "plane", saved: 4280, target: 6000, eta: "Oct 2026", color: "var(--accent)" },
{ name: "Down payment", icon: "house", saved: 18420, target: 60000, eta: "Mar 2028", color: "var(--accent-2)" },
{ name: "New bike", icon: "car", saved: 1240, target: 2200, eta: "Aug 2026", color: "#c47a08" },
{ name: "Emergency fund", icon: "shield", saved: 9600, target: 12000, eta: "On schedule", color: "var(--ink)" },
].map((g, i) => (
of ${g.target.toLocaleString()}
))}
);
}
if (tab === "invest") {
return (
Index portfolio · 80/20
$196,420.91
↑ +$24,103 (+14.0%) all-time
{[
["1M","+2.1%"],["1Y","+12.4%"],["All","+14.0%"],
].map(([l, v], i) => (
))}
Allocation
{[
{ name: "Total US Stock (VTI)", v: 56, color: "var(--accent)" },
{ name: "Total Intl Stock (VXUS)", v: 24, color: "var(--accent-2)" },
{ name: "Total Bond (BND)", v: 16, color: "#c47a08" },
{ name: "Cash", v: 4, color: "var(--ink-3)" },
].map((a, i) => (
))}
Tax-loss harvesting
$1,284 saved
This year, automatic. We swap losers for similar funds, you keep the loss.
);
}
// transactions
const tx = [
{ name: "Trader Joe's", cat: "Groceries", v: -42.18, d: "Today", icon: "cart" },
{ name: "Auto-invest deposit", cat: "Invest", v: -300, d: "Today", icon: "seed" },
{ name: "Stripe: Salary", cat: "Income", v: 5840, d: "Yesterday", icon: "arrowDown" },
{ name: "Verve Coffee", cat: "Dining", v: -7.25, d: "Yesterday", icon: "coffee" },
{ name: "Uber", cat: "Transit", v: -18.40, d: "Mon", icon: "car" },
{ name: "Vacation goal", cat: "Goal", v: -120, d: "Mon", icon: "plane" },
{ name: "Whole Foods", cat: "Groceries", v: -88.40, d: "Sat", icon: "cart" },
];
return (
Activity · last 7 days
All accounts
Filter
{tx.map((t, i) => (
{t.d}
0 ? "var(--positive)" : "var(--ink)" }}>
{t.v > 0 ? "+" : "−"}${Math.abs(t.v).toFixed(2)}
))}
);
}
function PmockCard({ label, value, sub, tone }) {
return (
);
}
/* ----- FEATURE GRID ----- */
function FeatureGrid({ theme }) {
return (
Everything you need
No ten-tab dashboards. No hidden fees.Just clarity.
);
}
function FeatureCard({ n, title, body, icon, big }) {
return (
);
}
/* ----- NUMBERS BAND ----- */
function NumbersBand() {
return (
{[
["$2.5B+", "Managed for members"],
["150K+", "Active accounts"],
["12.8%", "Avg. annual return"],
["0.25%", "All-in fee"],
["4.8 ★", "App store rating"],
].map(([n, l], i) => (
))}
);
}
/* ----- PRICING ----- */
function PricingBlock() {
return (
Pricing
One fee. That's it.
0.25%
Annual, on assets managed
All features included from day one
Auto-invest, budgeting, goals, alerts
Tax-loss harvesting, no extra charge
Move out anytime, no exit fee
Cash savings yields 4.5% APY
);
}
function Compare({ label, v, highlight }) {
return (
{label}
{v}
);
}
/* ----- SECURITY ----- */
function SecurityBlock() {
return (
Custody & security
Your money is safe. Bank-level. No exceptions.
);
}
function SecCard({ icon, title, body }) {
return (
);
}
/* ----- TESTIMONIALS ----- */
function TestimonialsRow() {
const items = [
{ q: "Finally understood where my money goes. The auto-invest feature means I'm building wealth without thinking about it.", n: "Sarah Chen", r: "Software Engineer" },
{ q: "Less tabs, more clarity. The fact that I can see budget, goals and invest in one ledger is the actual product.", n: "Marcus J.", r: "Marketing Manager" },
{ q: "As a freelancer with irregular income, Kaizen helps me budget, set aside taxes, and still invest for the future.", n: "Emily R.", r: "Freelance Designer" },
{ q: "The 0.25% fee is the lowest I've seen and the platform feels less spammy than every other app.", n: "Daniel K.", r: "Mechanical Eng" },
];
return (
From members
Loved by thousands .
★ 4.8 / 5 from 12k reviews
{items.map((t, i) => (
"{t.q}"
))}
);
}
/* ----- FAQ ----- */
function FAQ() {
const items = [
["How do I connect my bank?", "Plaid integration. Works with 12,000+ US banks and most European institutions. Setup in under 60 seconds."],
["Can I use Kaizen without investing?", "Yes. Budgeting and goals are free for the first year. The 0.25% fee only kicks in on managed assets."],
["What if I want to stop?", "Withdraw any time. No exit fees, no withdrawal limits. You own your portfolio."],
["Is my money insured?", "Cash up to $250K (FDIC). Investments up to $500K (SIPC). We hold custody at Apex Clearing."],
["Tax docs?", "Auto-generated 1099s in February. Loss harvesting summary downloadable any time."],
];
const [open, setOpen] = useState(0);
return (
Common questions
Things people ask.
{items.map(([q, a], i) => (
setOpen(open === i ? -1 : i)}>
{q}
{a}
))}
);
}
/* ----- CTA ----- */
function CTA({ goTo }) {
return (
Start in four minutes.
Connect a bank, pick a goal, set your weekly auto-invest. We take it from there.
goTo("onboarding")}>Open an account →
goTo("dashboard")}>See the product
No credit card · Free forever for budgeting
);
}
/* ----- FOOTER ----- */
function Footer({ wordmark }) {
return (
);
}
function FtCol({ h, links }) {
return (
{h}
{links.map((l, i) => {l} )}
);
}
/* Export */
Object.assign(window, { MarketingPage });