diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index 0a35dfe..c934a9b 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -9,6 +9,7 @@
 
 // Map to store worker addresses by project ID
 const workers = new Map<number, string[]>();
+const logs = new Map<number, Map<string, string>>();
 
 const handleProjectCreate: express.Handler = async (req, resp) => {
 	try {
@@ -347,6 +348,9 @@
 			return;
 		}
 
+		const projectLogs = logs.get(projectId) || new Map();
+		const services = Array.from(projectLogs.keys());
+
 		resp.status(200);
 		resp.write(
 			JSON.stringify({
@@ -366,6 +370,7 @@
 						domain: "p.v1.dodo.cloud",
 					},
 				],
+				services,
 			}),
 		);
 	} catch (error) {
@@ -377,8 +382,40 @@
 	}
 };
 
+const handleServiceLogs: express.Handler = async (req, resp) => {
+	try {
+		const projectId = Number(req.params["projectId"]);
+		const service = req.params["service"];
+
+		const projectLogs = logs.get(projectId);
+		if (!projectLogs) {
+			resp.status(404);
+			resp.write(JSON.stringify({ error: "No logs found for this project" }));
+			return;
+		}
+
+		const serviceLog = projectLogs.get(service);
+		if (!serviceLog) {
+			resp.status(404);
+			resp.write(JSON.stringify({ error: "No logs found for this service" }));
+			return;
+		}
+
+		resp.status(200);
+		resp.write(JSON.stringify({ logs: serviceLog }));
+	} catch (e) {
+		console.log(e);
+		resp.status(500);
+		resp.write(JSON.stringify({ error: "Failed to get service logs" }));
+	} finally {
+		resp.end();
+	}
+};
+
 const WorkerSchema = z.object({
+	service: z.string(),
 	address: z.string().url(),
+	logs: z.optional(z.string()),
 });
 
 const handleRegisterWorker: express.Handler = async (req, resp) => {
@@ -386,7 +423,6 @@
 		const projectId = Number(req.params["projectId"]);
 
 		const result = WorkerSchema.safeParse(req.body);
-		console.log(result);
 		if (!result.success) {
 			resp.status(400);
 			resp.write(
@@ -398,7 +434,8 @@
 			return;
 		}
 
-		const { address } = result.data;
+		console.log(result);
+		const { service, address, logs: log } = result.data;
 
 		// Get existing workers or initialize empty array
 		const projectWorkers = workers.get(projectId) || [];
@@ -409,12 +446,15 @@
 		}
 
 		workers.set(projectId, projectWorkers);
-
+		if (log) {
+			const svcLogs: Map<string, string> = logs.get(projectId) || new Map();
+			svcLogs.set(service, log);
+			logs.set(projectId, svcLogs);
+		}
 		resp.status(200);
 		resp.write(
 			JSON.stringify({
 				success: true,
-				workers: projectWorkers,
 			}),
 		);
 	} catch (e) {
@@ -475,6 +515,7 @@
 	app.get("/api/project/:projectId/env", handleEnv);
 	app.post("/api/project/:projectId/workers", handleRegisterWorker);
 	app.post("/api/project/:projectId/reload", handleReload);
+	app.get("/api/project/:projectId/logs/:service", handleServiceLogs);
 	app.use("/", express.static("../front/dist"));
 	app.listen(env.DODO_PORT_WEB, () => {
 		console.log("started");
