diff --git a/.jules/bolt.md b/.jules/bolt.md
new file mode 100644
index 0000000..89d7f05
--- /dev/null
+++ b/.jules/bolt.md
@@ -0,0 +1,4 @@
+## 2024-06-25 - Excalidraw Memoization
+
+**Learning:** The `@excalidraw/excalidraw` package's `Excalidraw` component is exceptionally expensive to re-render. Even though `EditorCanvas` was wrapped in `React.memo`, passing an inline arrow function to `onExcalidrawAPI` in the parent `App` broke memoization, causing severe input lag when typing in completely independent UI elements like the codeblock editor sidebar due to the entire canvas re-rendering.
+**Action:** When passing callbacks to heavy third-party components like Excalidraw, always wrap them in `useCallback` hook to preserve their prop stability and maintain `React.memo` benefits, preventing disastrous performance regressions on typing/input.
diff --git a/src/client/App.tsx b/src/client/App.tsx
index 33ddb41..2035bde 100644
--- a/src/client/App.tsx
+++ b/src/client/App.tsx
@@ -307,6 +307,10 @@ function PrivateApp() {
[],
);
+ const handleExcalidrawAPI = useCallback((api: ExcalidrawImperativeAPI) => {
+ excalidrawApiRef.current = api;
+ }, []);
+
return (