// V4 — "Desk" / Sticky-notes — bold editorial-meets-developer aesthetic.
// Warm paper background, monospace hero, sticky-note features, brutalist shadows.
// Same content as V1/V2/V3, completely different vibe.
const V4_WORDS = [
{ word: 'seat', ipa: '[siːt]', translation: 'сиденье', meta: 'cars · A2' },
{ word: 'dashboard', ipa: '[ˈdæʃbɔːd]', translation: 'приборная панель', meta: 'cars · A2' },
{ word: 'fuel', ipa: '[fjuːəl]', translation: 'топливо', meta: 'cars · A2' },
];
const V4_PAPER = '#F2EDE2';
const V4_PAPER_2 = '#E8E1D2';
const V4_INK = '#1A1814';
const V4_INK_2 = '#3A342A';
const V4_MUTE = '#6C6455';
const V4_RULE = '#D6CCB6';
const V4_BLUE = '#2F4BD9';
const V4_YELLOW = '#F5D547';
const V4_GREEN = '#5C8A3A';
const V4_PINK = '#E8A4A4';
// V4 accent is driven by the Tweaks --accent variable so the design
// responds to user accent changes. Fallback matches brick-orange default.
const V4_ACCENT_VAR = 'var(--accent, #D94A18)';
const V4_FONT_MONO = "'JetBrains Mono', ui-monospace, monospace";
const V4_FONT_SANS = "'Inter', sans-serif";
const V4_FONT_SERIF = "'Fraunces', serif";
/* ==================== Helpers ==================== */
function V4Tag({ children, color = V4_INK, bg = V4_PAPER_2 }) {
return (
{children}
);
}
function V4BrutalCard({ children, rotate = 0, color = 'white', style = {} }) {
return (
{children}
);
}
/* ==================== Nav ==================== */
function V4Nav({ copy, lang, onLang }) {
return (
);
}
/* ==================== Hero ==================== */
function V4CodeBlock() {
const G = (c) => ({ color: c });
return (
{'// while you work'}
const{' '}
word = wordy.pop(
"cars", "A2"
);
await word.show();
→ popped on your screen. learned in context. ✓
);
}
function V4Hero({ copy }) {
return (
{/* ruled-paper horizontal lines */}
{/* red margin line */}
● v3.0 · {copy.hero.badge}
/etc/wordytrainer/readme.md
Learn words
while you
actually work
.
{copy.hero.sub}
✓ macOS 12+ · free forever plan · 48 MB
✓ 50,000+ learners · rated 4.8/5 · ★★★★★
✓ no credit card · no ads · no telemetry
{/* sticky note pinned over code */}
seat [siːt]
сиденье
cars · A2 · pop #14
{/* red pin */}
);
}
/* ==================== Pains ==================== */
function V4Pains({ copy }) {
return (
The diagnostic
{copy.pains.title_v2}
{copy.pains.items.map((it, i) => (
ERR.0{i+1}
“{it.pain}”
→ FIX
{it.answer}
{it.detail}
))}
);
}
/* ==================== How (receipt / terminal log) ==================== */
function V4How({ copy }) {
return (
How it works
Four steps.
That's it.
From opening the app to learning your first word in under two minutes. No tutorials, no onboarding wizards.
{/* receipt top perforation */}
$ wordy init --user=you
{copy.how.steps.map((s, i) => (
))}
→ ready. 50,000+ learners already running.
);
}
/* ==================== Features (corkboard of sticky notes) ==================== */
function V4Features({ copy }) {
const stickyColors = [V4_YELLOW, V4_PINK, '#A8D8A8', '#A8C8E8', V4_YELLOW, '#E8C8A8'];
const rotations = [-2, 1.5, -1, 2, -1.5, 1];
return (
{/* corkboard texture */}
What's inside
Six features, zero fluff.
{copy.features.items.map((f, i) => (
{/* tape */}
№ 0{i+1}
{f.t}
{f.d}
))}
);
}
/* ==================== AI (typewriter prompt + output) ==================== */
function V4AI({ copy }) {
return (
Powered by AI
Any topic. Instant list.
{copy.ai.sub}
$ wordy generate
--topic{' '}
"{copy.ai.example_prompt}"
--level{' '}
{copy.ai.example_level}
--count{' '}
{copy.ai.example_count}
✓ list generated in 0.8s · 25 words · ready to learn
wordy — a2 — cars
);
}
/* ==================== Testimonials (hand-written / pull-quote) ==================== */
function V4Testimonials({ copy }) {
return (
Who uses it
People who actually learn.
{copy.testimonials.items.map((t, i) => (
"
{t.q}
— {t.name}
{t.role}
))}
);
}
/* ==================== Pricing (envelopes) ==================== */
function V4Pricing({ copy }) {
return (
Pricing
Pick your plan. No lock-in.
{copy.pricing.plans.map((p, i) => (
{p.tag && (
{p.tag}
)}
{p.name}
{p.features.map((f, j) => (
-
→
{f}
))}
$ {p.cta}
))}
);
}
/* ==================== FAQ ==================== */
function V4FAQ({ copy }) {
const [open, setOpen] = useState(0);
return (
FAQ
Questions we keep getting.
{copy.faq.items.map((f, i) => (
{open === i && (
{f.a}
)}
))}
);
}
/* ==================== Final CTA + Footer ==================== */
function V4Final({ copy }) {
return (
Ship it
Start learning words
today.
{copy.final.sub}. Free forever plan. Two minutes to your first word.
);
}
function V4Footer({ copy }) {
return (
);
}
function V4Landing({ copy, lang, onLang }) {
return (
);
}
window.V4Landing = V4Landing;