- Waitlist signup form on the home page (between Projects and Tools), cross-posting to the landing site's /api/waitlist (CORS + OPTIONS added there, gated by WAITLIST_ALLOWED_ORIGINS). - Version badge gains a pcbjam.com landing-page link (VITE_LANDING_URL). - Optional Plausible analytics from VITE_PLAUSIBLE_DOMAIN (off by default); wired into build-demo + both deploy workflows via vars.PLAUSIBLE_DOMAIN. - Opening a read-only gallery project auto-"moves to local": it forks into a writable browser-local project at the same slug, shadowing the gallery row. - Project + local-folder views use the same iconed tool launcher (ToolGrid) and a navigable directory FileTree instead of a flat file list. - Boot overlay shows real wasm download progress (Module.instantiateWasm + streaming byte counter) and a "taking too long" state after 60s. - Home Libraries section lists the active libs source (the read-only R2/CDN set in the demo) with a name filter; useLibs now reads libsSourceConfig. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TPJYx4urFVhdMjEmYfMCMD
26 lines
1,008 B
TypeScript
26 lines
1,008 B
TypeScript
import ReactDOM from "react-dom/client";
|
||
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
||
import { BrowserRouter } from "react-router-dom";
|
||
import App from "./App";
|
||
import { initAnalytics } from "./lib/analytics";
|
||
import "./index.css";
|
||
|
||
// Privacy-friendly analytics (Plausible), only when VITE_PLAUSIBLE_DOMAIN is set.
|
||
initAnalytics();
|
||
|
||
const queryClient = new QueryClient({
|
||
defaultOptions: { queries: { retry: false } },
|
||
});
|
||
|
||
// NOTE: deliberately NOT wrapped in <React.StrictMode>. StrictMode double-mounts
|
||
// components in dev, which would re-run WasmTool's boot effect and try to
|
||
// instantiate a 175–338 MB KiCad wasm twice — enough to OOM the tab (and the
|
||
// runtime is process-global anyway; see src/wasm/boot.ts). The tool view must
|
||
// instantiate exactly once per navigation.
|
||
ReactDOM.createRoot(document.getElementById("root")!).render(
|
||
<QueryClientProvider client={queryClient}>
|
||
<BrowserRouter>
|
||
<App />
|
||
</BrowserRouter>
|
||
</QueryClientProvider>,
|
||
);
|