const TWEAKS_DEFAULTS = /*EDITMODE-BEGIN*/{
"accentPreset": "blue",
"accent": "#3b82f6",
"accentLight": "#60a5fa",
"primary": "#0a0a0a",
"headingFont": "Inter",
"monoFont": "JetBrains Mono",
"imageTreatment": "default",
"density": "comfortable",
"marquee": true,
"cursorGlow": true,
"showPartners": true,
"showStats": true,
"showServices": true,
"showTech": true,
"showOnSet": true,
"ctaLabel": "View Projects"
}/*EDITMODE-END*/;
const FONT_OPTIONS = ["Inter","Manrope","Space Grotesk","DM Sans","Outfit","Plus Jakarta Sans","IBM Plex Sans","Geist","Fraunces"];
const MONO_OPTIONS = ["JetBrains Mono","IBM Plex Mono","Space Mono","Roboto Mono","Fira Code","Geist Mono"];
const ACCENT_PRESETS = {
blue: { accent:"#3b82f6", accentLight:"#60a5fa", label:"Blue" },
ember: { accent:"#e25822", accentLight:"#f3895a", label:"Ember" },
amber: { accent:"#f59e0b", accentLight:"#fbbf24", label:"Amber" },
ruby: { accent:"#dc2626", accentLight:"#f87171", label:"Ruby" },
mono: { accent:"#e5e5e5", accentLight:"#ffffff", label:"Mono" },
};
function loadFont(family) {
const id = "wd-font-" + family.replace(/\s/g,"-");
if (document.getElementById(id)) return;
const l = document.createElement("link");
l.id = id; l.rel = "stylesheet";
l.href = `https://fonts.googleapis.com/css2?family=${family.replace(/\s/g,"+")}:wght@300;400;500;600;700&display=swap`;
document.head.appendChild(l);
}
function App() {
const [tweaks, setTweak] = useTweaks(TWEAKS_DEFAULTS);
const [openSlug, setOpenSlug] = React.useState(() => {
const m = location.hash.match(/#\/projects\/([\w-]+)/);
return m ? m[1] : null;
});
React.useEffect(() => {
if (openSlug) location.hash = `#/projects/${openSlug}`;
else if (location.hash.startsWith("#/projects/")) location.hash = "";
}, [openSlug]);
React.useEffect(() => {
loadFont(tweaks.headingFont);
loadFont(tweaks.monoFont);
const r = document.documentElement.style;
r.setProperty("--color-accent", tweaks.accent);
r.setProperty("--color-accent-light", tweaks.accentLight);
r.setProperty("--color-primary", tweaks.primary);
r.setProperty("--font-inter", `"${tweaks.headingFont}"`);
r.setProperty("--font-mono-stack", `"${tweaks.monoFont}"`);
}, [tweaks]);
// Image treatment via class on body
React.useEffect(() => {
document.body.dataset.imgTreat = tweaks.imageTreatment;
document.body.dataset.density = tweaks.density;
}, [tweaks.imageTreatment, tweaks.density]);
const onAccentPreset = (key) => {
const p = ACCENT_PRESETS[key];
if (!p) return;
setTweak({ accentPreset: key, accent: p.accent, accentLight: p.accentLight });
};
return (
{tweaks.cursorGlow && }
{tweaks.showPartners && }
{tweaks.showStats && }
{tweaks.showServices && }
{tweaks.showTech && }
{tweaks.showOnSet && }
{openSlug && setOpenSlug(null)} onOpen={setOpenSlug}/>}
({value:k, label:v.label}))}
onChange={onAccentPreset} />
setTweak("accent", v)} />
setTweak("accentLight", v)} />
setTweak("primary", v)} />
setTweak("headingFont", v)} />
setTweak("monoFont", v)} />
setTweak("marquee", v)} />
setTweak("cursorGlow", v)} />
setTweak("density", v)} />
setTweak("imageTreatment", v)} />
setTweak("showPartners", v)} />
setTweak("showStats", v)} />
setTweak("showServices", v)} />
setTweak("showTech", v)} />
setTweak("showOnSet", v)} />
setTweak("ctaLabel", v)} />
);
}
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render();