import { useEffect, useState } from "react"; import TitleBar from "./components/TitleBar"; import { getWorkspaceMeta, updateWorkspaceMeta } from "./db"; import { applyTheme, useUi } from "./store/ui"; export default function App() { const { theme, sidebarWidth, sidebarCollapsed } = useUi(); const [dbStatus, setDbStatus] = useState("connecting…"); // Theme handling (system-aware) useEffect(() => { applyTheme(theme); const mq = window.matchMedia("(prefers-color-scheme: dark)"); const onChange = () => applyTheme(theme); mq.addEventListener("change", onChange); return () => mq.removeEventListener("change", onChange); }, [theme]); // M0 smoke test: SQLite round-trip through the migration-created table useEffect(() => { (async () => { try { const meta = await getWorkspaceMeta(); await updateWorkspaceMeta({ name: meta.name }); // write round-trip setDbStatus( `SQLite OK — workspace “${meta.name}”, onboarded=${meta.onboarded}`, ); } catch (e) { setDbStatus(`SQLite ERROR: ${String(e)}`); } })(); }, []); return (
{/* Sidebar (placeholder — page tree lands in Milestone 1) */} {!sidebarCollapsed && ( )} {/* Content area */}

Notara

Milestone 0 shell — Tauri v2 · React · SQLite · Notion tokens.

{dbStatus}

); }