diff --git a/.gitignore b/.gitignore
index a4db0a6..ced49da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,4 +17,6 @@
 .vscode/
 .hugo_build.lock
 dist
-node_modules
\ No newline at end of file
+node_modules
+prisma
+*.db
\ No newline at end of file
diff --git a/apps/canvas/back/index.js b/apps/canvas/back/index.js
index c5ffd89..425285c 100644
--- a/apps/canvas/back/index.js
+++ b/apps/canvas/back/index.js
@@ -98,7 +98,6 @@
         else {
             resp.status(200);
             resp.header("content-type", "application/json");
-            console.log(r);
             if (r.draft == null) {
                 if (r.state == null) {
                     resp.send({
@@ -108,11 +107,11 @@
                     });
                 }
                 else {
-                    resp.send(JSON.parse(r.state.toString()));
+                    resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
                 }
             }
             else {
-                resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
+                resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
             }
         }
     }
@@ -126,30 +125,70 @@
 });
 const handleDeploy = (req, resp) => __awaiter(void 0, void 0, void 0, function* () {
     try {
-        console.log(req.params);
+        const projectId = Number(req.params["projectId"]);
         const state = Buffer.from(JSON.stringify(req.body.state));
+        const p = yield db.project.findUnique({
+            where: {
+                id: projectId,
+            },
+            select: {
+                instanceId: true,
+            }
+        });
+        if (p === null) {
+            resp.status(404);
+            return;
+        }
         yield db.project.update({
             where: {
-                id: Number(req.params["projectId"]),
+                id: projectId,
             },
             data: {
                 draft: state,
             },
         });
-        const r = yield axios_1.default.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
-        if (r.status === 200) {
-            const d = r.data;
-            yield db.project.update({
-                where: {
-                    id: Number(req.params["projectId"]),
-                },
+        let r;
+        if (p.instanceId == null) {
+            r = yield axios_1.default.request({
+                url: "http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app",
+                method: "post",
                 data: {
-                    state,
-                    draft: null,
-                    instanceId: d.id,
-                    deployKey: d.deployKey,
-                },
+                    config: req.body.config,
+                }
             });
+            if (r.status === 200) {
+                yield db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                        instanceId: r.data.id,
+                        deployKey: r.data.deployKey,
+                    },
+                });
+            }
+        }
+        else {
+            r = yield axios_1.default.request({
+                url: `http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app/${p.instanceId}`,
+                method: "put",
+                data: {
+                    config: req.body.config,
+                }
+            });
+            if (r.status === 200) {
+                yield db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                    },
+                });
+            }
         }
     }
     catch (e) {
diff --git a/apps/canvas/back/index.ts b/apps/canvas/back/index.ts
index b103756..6193a90 100644
--- a/apps/canvas/back/index.ts
+++ b/apps/canvas/back/index.ts
@@ -82,19 +82,18 @@
         } else {
             resp.status(200);
             resp.header("content-type", "application/json");
-            console.log(r);
             if (r.draft == null) {
                 if (r.state == null) {
                     resp.send({
-                        nodes: [], 
+                        nodes: [],
                         edges: [],
-                        viewport: { x: 0, y: 0, zoom: 1},
-                    });    
+                        viewport: { x: 0, y: 0, zoom: 1 },
+                    });
                 } else {
-                    resp.send(JSON.parse(r.state.toString()));
+                    resp.send(JSON.parse(Buffer.from(r.state).toString("utf8")));
                 }
             } else {
-                resp.send(JSON.parse(Buffer.from(r.state!).toString("utf8")));
+                resp.send(JSON.parse(Buffer.from(r.draft).toString("utf8")));
             }
         }
     } catch (e) {
@@ -107,30 +106,69 @@
 
 const handleDeploy: express.Handler = async (req, resp) => {
     try {
-        console.log(req.params);
+        const projectId = Number(req.params["projectId"]);
         const state = Buffer.from(JSON.stringify(req.body.state));
+        const p = await db.project.findUnique({
+            where: {
+                id: projectId,
+            },
+            select: {
+                instanceId: true,
+            }
+        });
+        if (p === null) {
+            resp.status(404);
+            return;
+        }
         await db.project.update({
             where: {
-                id: Number(req.params["projectId"]),
+                id: projectId,
             },
             data: {
                 draft: state,
             },
         });
-        const r = await axios.post("http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app", { config: req.body.config });
-        if (r.status === 200) {
-            const d = r.data as { id: string, deployKey: string };
-            await db.project.update({
-                where: {
-                    id: Number(req.params["projectId"]),
-                },
+        let r: { status: number, data: { id: string, deployKey: string } };
+        if (p.instanceId == null) {
+            r = await axios.request({
+                url: "http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app",
+                method: "post",
                 data: {
-                    state,
-                    draft: null,
-                    instanceId: d.id,
-                    deployKey: d.deployKey,
-                },
+                    config: req.body.config,
+                }
             });
+            if (r.status === 200) {
+                await db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                        instanceId: r.data.id,
+                        deployKey: r.data.deployKey,
+                    },
+                });
+            }
+        } else {
+            r = await axios.request({
+                url: `http://appmanager.hgrz-appmanager.svc.cluster.local/api/dodo-app/${p.instanceId}`,
+                method: "put",
+                data: {
+                    config: req.body.config,
+                }
+            });
+            if (r.status === 200) {
+                await db.project.update({
+                    where: {
+                        id: projectId,
+                    },
+                    data: {
+                        state,
+                        draft: null,
+                    },
+                });
+            }
         }
     } catch (e) {
         console.log(e);
diff --git a/apps/canvas/back/prisma/dodo.db b/apps/canvas/back/prisma/dodo.db
index 452bd48..3bd29ba 100644
--- a/apps/canvas/back/prisma/dodo.db
+++ b/apps/canvas/back/prisma/dodo.db
Binary files differ
