// Interior Lab — main App + state routing.
function App() {
const [route, setRoute] = React.useState({ name: 'home' });
// Hash-based routing for shareable URLs
React.useEffect(() => {
const fromHash = () => {
const h = window.location.hash.replace(/^#\/?/, '');
if (!h) { setRoute({ name: 'home' }); return; }
const [name, slug] = h.split('/');
if (name === 'project' && slug) setRoute({ name: 'project', slug });
else if (['portfolio', 'studio', 'services', 'journal', 'contact', 'home'].includes(name))
setRoute({ name });
else setRoute({ name: 'home' });
};
fromHash();
window.addEventListener('hashchange', fromHash);
return () => window.removeEventListener('hashchange', fromHash);
}, []);
const go = (r) => {
setRoute(r);
const hash = r.name === 'home'
? '#/'
: r.name === 'project'
? `#/project/${r.slug}`
: `#/${r.name}`;
if (window.location.hash !== hash) window.location.hash = hash;
window.scrollTo({ top: 0, behavior: 'auto' });
};
let page;
switch (route.name) {
case 'portfolio': page =