/* sema ikutoke Collections — main App */ const { useState: useStateA, useEffect: useEffectA } = React; function App() { const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS); const [view, setView] = useStateA("landing"); const [page, setPage] = useStateA(window.DEFAULT_PAGE); const [checkoutOpen, setCheckoutOpen] = useStateA(false); const goto = (v) => { if (v === "checkout") { // For drawer/modal variants, open overlay over storefront. if (tweaks.checkout !== "page") { setView("store"); setCheckoutOpen(true); return; } } setCheckoutOpen(false); setView(v); window.scrollTo({ top: 0, behavior: "instant" }); }; // Apply palette + pair via data attrs on root useEffectA(() => { document.documentElement.setAttribute("data-palette", tweaks.palette); document.documentElement.setAttribute("data-pair", tweaks.pair); }, [tweaks.palette, tweaks.pair]); const item = { name: page.find((b) => b.type === "hero")?.data.title || "Field Notes Vol. 03", price: page.find((b) => b.type === "buybar")?.data.price || "1,200", }; const onBuy = () => { if (tweaks.checkout === "page") setView("checkout"); else setCheckoutOpen(true); }; const closeCheckout = () => setCheckoutOpen(false); const onCheckoutSuccess = () => { setCheckoutOpen(false); setTimeout(() => setView("dashboard"), 200); }; return (
{view === "landing" && } {view === "signup" && } {view === "templates" && } {view === "channels" && } {view === "dashboard" && } {view === "builder" && ( )} {view === "store" && ( )} {view === "checkout" && tweaks.checkout === "page" && ( )} {checkoutOpen && tweaks.checkout === "drawer" && ( )} {checkoutOpen && tweaks.checkout === "modal" && ( )} setTweak("palette", v)} /> setTweak("pair", v)} /> setTweak("hero", v)} /> setTweak("pricing", v)} /> setTweak("checkout", v)} /> { setView("store"); setTimeout(onBuy, 100); }} /> setTweak("canvas", v)} />
); } /* Custom palette swatch row (since our palettes use named keys, not raw colors) */ const PALETTE_PREVIEWS = { cream: ["#F1E8D1", "#161210", "#E14118"], ink: ["#14110D", "#F2EAD2", "#F1582E"], moss: ["#E8E5D7", "#1B2618", "#C2421A"], blush: ["#F4DCD2", "#2A1813", "#5D2BD0"], }; function PaletteSwatches({ value, onChange }) { return (
{Object.entries(PALETTE_PREVIEWS).map(([k, colors]) => ( ))}
); } function TypePreview({ pair }) { const pairs = { editorial: { serif: "Instrument Serif", sans: "Geist" }, modern: { serif: "Newsreader", sans: "Manrope" }, classic: { serif: "DM Serif Display", sans: "Space Grotesk" }, }; const p = pairs[pair]; return (
Field Notes
{p.serif} · {p.sans}
); } ReactDOM.createRoot(document.getElementById("root")).render();