diff --git a/apps/canvas/front/src/components/actions.tsx b/apps/canvas/front/src/components/actions.tsx
index eb89b8a..509b51c 100644
--- a/apps/canvas/front/src/components/actions.tsx
+++ b/apps/canvas/front/src/components/actions.tsx
@@ -25,6 +25,7 @@
 	const instance = useReactFlow();
 	const [ok, setOk] = useState(false);
 	const [loading, setLoading] = useState(false);
+	const [reloading, setReloading] = useState(false);
 	useEffect(() => {
 		setOk(!messages.some((m) => m.type === "FATAL"));
 	}, [messages, setOk]);
@@ -64,7 +65,7 @@
 		}
 		setLoading(true);
 		try {
-			const config = generateDodoConfig(nodes, env);
+			const config = generateDodoConfig(projectId, nodes, env);
 			if (config == null) {
 				throw new Error("MUST NOT REACH!");
 			}
@@ -163,21 +164,64 @@
 			});
 		}
 	}, [store, clear, projectId, toast]);
-	const [props, setProps] = useState({});
+	const reload = useCallback(async () => {
+		if (projectId == null) {
+			return;
+		}
+		setReloading(true);
+		try {
+			const resp = await fetch(`/api/project/${projectId}/reload`, {
+				method: "POST",
+				headers: {
+					"Content-Type": "application/json",
+				},
+			});
+			if (resp.ok) {
+				toast({
+					title: "Reload triggered successfully",
+				});
+			} else {
+				toast({
+					variant: "destructive",
+					title: "Reload failed",
+					description: await resp.text(),
+				});
+			}
+		} catch (e) {
+			console.log(e);
+			toast({
+				variant: "destructive",
+				title: "Reload failed",
+			});
+		} finally {
+			setReloading(false);
+		}
+	}, [projectId, toast]);
+	const [deployProps, setDeployProps] = useState({});
+	const [reloadProps, setReloadProps] = useState({});
 	useEffect(() => {
 		if (loading) {
-			setProps({ loading: true });
+			setDeployProps({ loading: true });
 		} else if (ok) {
-			setProps({ disabled: false });
+			setDeployProps({ disabled: false });
 		} else {
-			setProps({ disabled: true });
+			setDeployProps({ disabled: true });
 		}
-	}, [ok, loading, setProps]);
+
+		if (reloading) {
+			setReloadProps({ loading: true });
+		} else {
+			setReloadProps({ disabled: projectId === undefined });
+		}
+	}, [ok, loading, reloading, projectId]);
 	return (
 		<>
-			<Button onClick={deploy} {...props}>
+			<Button onClick={deploy} {...deployProps}>
 				Deploy
 			</Button>
+			<Button onClick={reload} {...reloadProps}>
+				Reload
+			</Button>
 			<Button onClick={save}>Save</Button>
 			<Button onClick={restoreSaved}>Restore</Button>
 			<Button onClick={clear} variant="destructive">
