diff --git a/apps/canvas/front/src/Integrations.tsx b/apps/canvas/front/src/Integrations.tsx
index 55acf1a..185a884 100644
--- a/apps/canvas/front/src/Integrations.tsx
+++ b/apps/canvas/front/src/Integrations.tsx
@@ -85,10 +85,26 @@
 
 				{(!githubService || isEditing) && (
 					<div className="flex flex-row items-center gap-1 text-sm">
-						<div>Follow the link to generate new PAT:</div>
-						<a href="https://github.com/settings/personal-access-tokens" target="_blank">
-							https://github.com/settings/personal-access-tokens
-						</a>
+						<div>
+							Follow the link to generate new PAT:{" "}
+							<a href="https://github.com/settings/personal-access-tokens" target="_blank">
+								https://github.com/settings/personal-access-tokens
+							</a>
+							<br />
+							Grant following <b>Repository</b> permissions:
+							<ul>
+								<li>
+									<b>Contents</b> - Read-only access so dodo can clone the repository
+								</li>
+								<li>
+									<b>Metadata</b> - Read-only access so dodo can search for repositories
+								</li>
+								<li>
+									<b>Administration</b> - Read and write access so dodo automatically add deploy keys
+									to repositories
+								</li>
+							</ul>
+						</div>
 					</div>
 				)}
 				{(!githubService || isEditing) && (
diff --git a/apps/canvas/front/src/Messages.tsx b/apps/canvas/front/src/Messages.tsx
index 8cd6652..0701afb 100644
--- a/apps/canvas/front/src/Messages.tsx
+++ b/apps/canvas/front/src/Messages.tsx
@@ -1,5 +1,5 @@
 import { Button } from "./components/ui/button";
-import { AppNode, AppState, Message, nodeLabel, useMessages } from "./lib/state";
+import { AppNode, AppState, Message, nodeLabel, useMessages, useProjectId } from "./lib/state";
 import { useCallback, useEffect, useState } from "react";
 import { useNodes } from "@xyflow/react";
 import { Accordion, AccordionContent, AccordionItem, AccordionTrigger } from "./components/ui/accordion";
@@ -8,6 +8,7 @@
 
 export function Messages() {
 	const nodes = useNodes<AppNode>();
+	const projectId = useProjectId();
 	const [nodeMap, setNodeMap] = useState<Map<string, AppNode>>(new Map());
 	useEffect(() => {
 		setNodeMap(new Map(nodes.map((n) => [n.id, n])));
@@ -24,14 +25,25 @@
 	const [grouped, setGrouped] = useState<Map<string, Message[]>>(new Map());
 	useEffect(() => {
 		const g = new Map<string, Message[]>();
-		messages.forEach((m) => {
-			const id = m.nodeId || "global";
-			const existing: Message[] = g.get(id) || [];
-			existing.push(m);
-			g.set(id, existing);
-		});
+		if (projectId == null) {
+			g.set("global", [
+				{
+					id: "global",
+					nodeId: undefined,
+					message: "Create a new project or select existing one to get started",
+					type: "FATAL",
+				},
+			]);
+		} else {
+			messages.forEach((m) => {
+				const id = m.nodeId || "global";
+				const existing: Message[] = g.get(id) || [];
+				existing.push(m);
+				g.set(id, existing);
+			});
+		}
 		setGrouped(g);
-	}, [messages, setGrouped]);
+	}, [projectId, messages, setGrouped]);
 	const [open, setOpen] = useState<string[]>([...grouped.keys()]);
 	useEffect(() => {
 		// TODO(gio): do not reopen closed ones
diff --git a/apps/canvas/front/src/components/actions.tsx b/apps/canvas/front/src/components/actions.tsx
index c7481c1..b8771b3 100644
--- a/apps/canvas/front/src/components/actions.tsx
+++ b/apps/canvas/front/src/components/actions.tsx
@@ -164,6 +164,9 @@
 		if (projectId == null) {
 			return;
 		}
+		if (!confirm("Are you sure you want to delete this project? This action cannot be undone.")) {
+			return;
+		}
 		const resp = await fetch(`/api/project/${projectId}`, {
 			method: "DELETE",
 		});
diff --git a/apps/canvas/front/src/components/resources.tsx b/apps/canvas/front/src/components/resources.tsx
index ddb68ac..1fd631a 100644
--- a/apps/canvas/front/src/components/resources.tsx
+++ b/apps/canvas/front/src/components/resources.tsx
@@ -3,7 +3,7 @@
 import { useCallback, useState } from "react";
 import { Accordion, AccordionTrigger } from "./ui/accordion";
 import { AccordionContent, AccordionItem } from "@radix-ui/react-accordion";
-import { AppState, NodeType, useCategories, useStateStore } from "@/lib/state";
+import { AppState, NodeType, useCategories, useMode, useProjectId, useStateStore } from "@/lib/state";
 import { CategoryItem } from "@/lib/categories";
 import { Icon } from "./icon";
 
@@ -25,7 +25,8 @@
 export function Resources() {
 	const store = useStateStore();
 	const categories = useCategories();
-
+	const projectId = useProjectId();
+	const mode = useMode();
 	const onResourceAdd = useCallback(
 		(item: CategoryItem<NodeType>) => {
 			return () => addResource(item, store);
@@ -48,6 +49,7 @@
 										key={item.title}
 										onClick={onResourceAdd(item)}
 										style={{ justifyContent: "flex-start" }}
+										disabled={projectId == null || mode !== "edit"}
 									>
 										<Icon type={item.type} />
 										{item.title}
diff --git a/apps/canvas/front/src/lib/config.ts b/apps/canvas/front/src/lib/config.ts
index 63f6642..572fc78 100644
--- a/apps/canvas/front/src/lib/config.ts
+++ b/apps/canvas/front/src/lib/config.ts
@@ -449,7 +449,7 @@
 					id: `${n.id}-${p.id}-no-ingress`,
 					type: "WARNING",
 					nodeId: n.id,
-					message: `Connect to ingress: ${p.name} - ${p.value}`,
+					message: `Connect to gateway: ${p.name} - ${p.value}`,
 					onHighlight: (store) => {
 						store.updateNode(n.id, { selected: true });
 						store.setHighlightCategory("gateways", true);
diff --git a/apps/canvas/front/src/lib/state.ts b/apps/canvas/front/src/lib/state.ts
index 9d74d5b..aae7600 100644
--- a/apps/canvas/front/src/lib/state.ts
+++ b/apps/canvas/front/src/lib/state.ts
@@ -85,7 +85,7 @@
 	"hugo:latest",
 	"php:8.2-apache",
 	"nextjs:deno-2.0.0",
-	"node-23.1.0",
+	"nodejs:23.1.0",
 ] as const;
 export type ServiceType = (typeof ServiceTypes)[number];
 
