diff --git a/apps/canvas/front/src/lib/state.ts b/apps/canvas/front/src/lib/state.ts
index fb461c2..428ae17 100644
--- a/apps/canvas/front/src/lib/state.ts
+++ b/apps/canvas/front/src/lib/state.ts
@@ -418,11 +418,24 @@
 
 export const useStateStore = create<AppState>((set, get): AppState => {
 	const setN = (nodes: AppNode[]) => {
-		set((state) => ({
-			...state,
+		if (nodes.length == 0) {
+			console.trace("setN", nodes);
+		}
+		set({
 			nodes,
 			messages: v(nodes),
-		}));
+		});
+	};
+
+	const restoreSaved = async () => {
+		const resp = await fetch(`/api/project/${get().projectId}/saved`, {
+			method: "GET",
+		});
+		const inst = await resp.json();
+		// const { x = 0, y = 0, zoom = 1 } = inst.viewport;
+		setN(inst.nodes || []);
+		get().setEdges(inst.edges || []);
+		// instance.setViewport({ x, y, zoom });
 	};
 
 	function updateNodeData<T extends NodeType>(id: string, data: NodeDataUpdate<T>): void {
@@ -688,11 +701,14 @@
 			} catch (error) {
 				console.error("Failed to fetch integrations:", error);
 			} finally {
-				set({ env: env });
-				if (env.integrations.github) {
-					set({ githubService: new GitHubServiceImpl(projectId!) });
-				} else {
-					set({ githubService: null });
+				if (JSON.stringify(get().env) !== JSON.stringify(env)) {
+					set({ env });
+
+					if (env.integrations.github) {
+						set({ githubService: new GitHubServiceImpl(projectId!) });
+					} else {
+						set({ githubService: null });
+					}
 				}
 			}
 		},
@@ -702,6 +718,12 @@
 			});
 			if (projectId) {
 				get().refreshEnv();
+				restoreSaved();
+			} else {
+				set({
+					nodes: [],
+					edges: [],
+				});
 			}
 		},
 	};
