diff --git a/apps/canvas/front/src/components/actions.tsx b/apps/canvas/front/src/components/actions.tsx
index cc09a59..7d0afe7 100644
--- a/apps/canvas/front/src/components/actions.tsx
+++ b/apps/canvas/front/src/components/actions.tsx
@@ -1,4 +1,4 @@
-import { AppNode, useEnv, useMessages, useProjectId, useStateStore } from "@/lib/state";
+import { AppNode, nodeLabel, useEnv, useMessages, useProjectId, useStateStore } from "@/lib/state";
 import { Button } from "./ui/button";
 import { useCallback, useEffect, useState } from "react";
 import { generateDodoConfig } from "@/lib/config";
@@ -18,6 +18,31 @@
     useEffect(() => {
         setOk(!messages.some((m) => m.type === "FATAL"));
     }, [messages, setOk]);
+    const monitor = useCallback(async () => {
+        const m = async function() {
+            const resp = await fetch(`/api/project/${projectId}/status`, {
+                method: "GET",
+                headers: {
+                    "Content-Type": "application/json",
+                },
+            })
+            if (resp.status !== 200) {
+                return;
+            }
+            const data: { type: string, name: string, status: string }[] = await resp.json();
+            console.log(data);
+            for (const n of nodes) {
+                console.log(nodeLabel(n));
+                for (const d of data) {
+                    if (nodeLabel(n) === d.name) {
+                        store.updateNodeData(n.id, { state: d.status });
+                    }
+                }
+            }
+            setTimeout(m, 1000);
+        };
+        setTimeout(m, 100);
+    }, [projectId, nodes]);
     const deploy = useCallback(async () => {
         if (projectId == null) {
             return;
@@ -42,6 +67,7 @@
                 toast({
                     title: "Deployment succeeded",
                 });
+                monitor();
             } else {
                 toast({
                     variant: "destructive",
@@ -96,6 +122,10 @@
         store.setEdges(inst.edges || []);
         instance.setViewport({ x, y, zoom });
     }, [projectId, instance, st]);
+    const clear = useCallback(() => {
+        store.setEdges([]);
+        store.setNodes([]);
+    }, [store]);
     const [props, setProps] = useState({});
     useEffect(() => {
         if (loading) {
@@ -111,6 +141,7 @@
             <Button onClick={deploy} {...props}>Deploy</Button>
             <Button onClick={save}>Save</Button>
             <Button onClick={restoreSaved}>Restore</Button>
+            <Button onClick={clear}>Clear</Button>
         </>
     )
 }
\ No newline at end of file
diff --git a/apps/canvas/front/src/components/node-app.tsx b/apps/canvas/front/src/components/node-app.tsx
index a445c72..fcfe2a1 100644
--- a/apps/canvas/front/src/components/node-app.tsx
+++ b/apps/canvas/front/src/components/node-app.tsx
@@ -18,7 +18,7 @@
   const isConnectablePorts = useMemo(() => nodeIsConnectable(node, "ports"), [node]);
   const isConnectableRepository = useMemo(() => nodeIsConnectable(node, "repository"), [node]);
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       <div style={{ padding: '10px 20px' }}>
         {nodeLabel(node)}
         <Handle
diff --git a/apps/canvas/front/src/components/node-gateway-https.tsx b/apps/canvas/front/src/components/node-gateway-https.tsx
index be624a3..fdf710d 100644
--- a/apps/canvas/front/src/components/node-gateway-https.tsx
+++ b/apps/canvas/front/src/components/node-gateway-https.tsx
@@ -23,7 +23,7 @@
   const { id, selected } = node;
   const isConnectable = useMemo(() => nodeIsConnectable(node, "https"), [node]);
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       {nodeLabel(node)}
       <Handle
         type={"target"}
diff --git a/apps/canvas/front/src/components/node-gateway-tcp.tsx b/apps/canvas/front/src/components/node-gateway-tcp.tsx
index 8cfebff..aeca41e 100644
--- a/apps/canvas/front/src/components/node-gateway-tcp.tsx
+++ b/apps/canvas/front/src/components/node-gateway-tcp.tsx
@@ -25,7 +25,7 @@
   const { id, selected } = node;
   const isConnectable = useMemo(() => nodeIsConnectable(node, "tcp"), [node]);
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       {nodeLabel(node)}
       <Handle
         type={"target"}
diff --git a/apps/canvas/front/src/components/node-github.tsx b/apps/canvas/front/src/components/node-github.tsx
index 13b257b..aa48cd1 100644
--- a/apps/canvas/front/src/components/node-github.tsx
+++ b/apps/canvas/front/src/components/node-github.tsx
@@ -12,7 +12,7 @@
   const { id, selected } = node;
   const isConnectable = useMemo(() => nodeIsConnectable(node, "repository"), [node]);
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       <div style={{ padding: '10px 20px' }}>
         {nodeLabel(node)}
         <Handle
diff --git a/apps/canvas/front/src/components/node-mongodb.tsx b/apps/canvas/front/src/components/node-mongodb.tsx
index 89323b9..40c9748 100644
--- a/apps/canvas/front/src/components/node-mongodb.tsx
+++ b/apps/canvas/front/src/components/node-mongodb.tsx
@@ -11,7 +11,7 @@
 export function NodeMongoDB(node: MongoDBNode) {
   const { id, selected } = node;
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       <div style={{ padding: '10px 20px' }}>
         {nodeLabel(node)}
         <Handle
diff --git a/apps/canvas/front/src/components/node-postgresql.tsx b/apps/canvas/front/src/components/node-postgresql.tsx
index db7f067..4213645 100644
--- a/apps/canvas/front/src/components/node-postgresql.tsx
+++ b/apps/canvas/front/src/components/node-postgresql.tsx
@@ -11,7 +11,7 @@
 export function NodePostgreSQL(node: PostgreSQLNode) {
   const { id, selected } = node;
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       <div style={{ padding: '10px 20px' }}>
         {nodeLabel(node)}
         <Handle
diff --git a/apps/canvas/front/src/components/node-rect.tsx b/apps/canvas/front/src/components/node-rect.tsx
index 5164a13..ad0bee7 100644
--- a/apps/canvas/front/src/components/node-rect.tsx
+++ b/apps/canvas/front/src/components/node-rect.tsx
@@ -1,34 +1,43 @@
 import { NodeType, useNodeMessages } from "@/lib/state";
 import { Icon } from "./icon";
+import { useEffect, useState } from "react";
 
 export type Props = {
     id: string;
     selected?: boolean;
     children: any;
     type: NodeType;
+    state: string | null;
 };
 
 export function NodeRect(p: Props) {
-    const { id, selected, children } = p;
+    const { id, selected, children, state } = p;
     const messages = useNodeMessages(id);
     const hasFatal = messages.some((m) => m.type === "FATAL");
     const hasWarning = messages.some((m) => m.type === "WARNING");
-    const classes = ["px-4", "py-2", "rounded-md", "bg-white"];
-    if (hasFatal) {
-        classes.push("border-red-500");
-    } else if (hasWarning) {
-        classes.push("border-yellow-500");
-    } else {
-        classes.push("border-black");
-    }
-    if (selected) {
-        classes.push("border-2");
-    } else {
-        classes.push("border");
-    }
+    const [classes, setClasses] = useState<string[]>([]);
+    useEffect(() => {
+        const classes = ["px-4", "py-2", "rounded-md", "bg-white"];
+        if (hasFatal) {
+            classes.push("border-red-500");
+        } else if (hasWarning) {
+            classes.push("border-yellow-500");
+        } else {
+            classes.push("border-black");
+        }
+        if (selected) {
+            classes.push("border-2");
+        } else {
+            classes.push("border");
+        }
+        if (state === "running") {
+            classes.push("animate-pulse");
+        }
+        setClasses(classes);
+    }, [selected, hasFatal, hasWarning, state, setClasses]);
     return (
         <div className={classes.join(" ")}>
-            <div style={{ position: "absolute", top: "5px", left: "5px"}}>
+            <div style={{ position: "absolute", top: "5px", left: "5px" }}>
                 {Icon(p.type)}
             </div>
             {children}
diff --git a/apps/canvas/front/src/components/node-volume.tsx b/apps/canvas/front/src/components/node-volume.tsx
index 57c488d..430d1e9 100644
--- a/apps/canvas/front/src/components/node-volume.tsx
+++ b/apps/canvas/front/src/components/node-volume.tsx
@@ -13,7 +13,7 @@
   const { id, data, selected } = node;
   const isConnectable = useMemo(() => nodeIsConnectable(node, "volume"), [node]);
   return (
-    <NodeRect id={id} selected={selected} type={node.type}>
+    <NodeRect id={id} selected={selected} type={node.type} state={node.data.state}>
       <div style={{ padding: '10px 20px' }}>
         <div>{nodeLabel(node)}</div>
         <div>{data.type && `${data.type}`}</div>
