diff --git a/apps/canvas/front/src/components/actions.tsx b/apps/canvas/front/src/components/actions.tsx
index 1442b9a..5ea2920 100644
--- a/apps/canvas/front/src/components/actions.tsx
+++ b/apps/canvas/front/src/components/actions.tsx
@@ -11,8 +11,10 @@
 	DropdownMenuContent,
 	DropdownMenuTrigger,
 } from "./ui/dropdown-menu";
-import { Ellipsis, LoaderCircle } from "lucide-react";
+import { Ellipsis, LoaderCircle, Plus } from "lucide-react";
 import { ImportModal } from "./import-modal";
+import { Dialog, DialogContent, DialogHeader, DialogTitle } from "./ui/dialog";
+import { Resources } from "./resources";
 
 function toNodeType(t: string): string {
 	if (t === "ingress") {
@@ -24,7 +26,11 @@
 	}
 }
 
-export function Actions() {
+interface ActionsProps {
+	isOverview?: boolean;
+}
+
+export function Actions({ isOverview = false }: ActionsProps) {
 	const { toast } = useToast();
 	const store = useStateStore();
 	const projectId = useProjectId();
@@ -36,6 +42,7 @@
 	const [loading, setLoading] = useState(false);
 	const [reloading, setReloading] = useState(false);
 	const [showImportModal, setShowImportModal] = useState(false);
+	const [showResourcesModal, setShowResourcesModal] = useState(false);
 	const info = useCallback(
 		(title: string, description?: string, duration?: number) => {
 			return toast({
@@ -313,6 +320,12 @@
 		return (
 			<>
 				<div className="flex flex-row gap-1 items-center">
+					{isOverview && (
+						<Button onClick={() => setShowResourcesModal(true)}>
+							<Plus className="w-4 h-4 mr-1" />
+							Add
+						</Button>
+					)}
 					<Button onClick={deploy} {...deployProps}>
 						{deployProps.loading ? (
 							<>
@@ -355,6 +368,16 @@
 					</DropdownMenu>
 				</div>
 				<ImportModal open={showImportModal} onOpenChange={setShowImportModal} />
+				<Dialog open={showResourcesModal} onOpenChange={setShowResourcesModal}>
+					<DialogContent className="sm:max-w-md">
+						<DialogHeader>
+							<DialogTitle>Add Resources</DialogTitle>
+						</DialogHeader>
+						<div className="py-4">
+							<Resources onResourceAdded={() => setShowResourcesModal(false)} />
+						</div>
+					</DialogContent>
+				</Dialog>
 			</>
 		);
 	}
diff --git a/apps/canvas/front/src/components/resources.tsx b/apps/canvas/front/src/components/resources.tsx
index cdd58c5..cd17ac6 100644
--- a/apps/canvas/front/src/components/resources.tsx
+++ b/apps/canvas/front/src/components/resources.tsx
@@ -9,7 +9,7 @@
 import { Icon } from "./icon";
 import { AppNode, NodeType } from "config";
 
-function addResource(i: CategoryItem<NodeType>, store: AppState) {
+function addResource(i: CategoryItem<NodeType>, store: AppState, onResourceAdded?: () => void) {
 	const deselected = store.nodes.map((n) => ({
 		...n,
 		selected: false,
@@ -22,18 +22,25 @@
 		selected: true,
 		connectable: true,
 	} as any); // eslint-disable-line @typescript-eslint/no-explicit-any
+	if (onResourceAdded) {
+		onResourceAdded();
+	}
 }
 
-export function Resources() {
+interface ResourcesProps {
+	onResourceAdded?: () => void;
+}
+
+export function Resources({ onResourceAdded }: ResourcesProps = {}) {
 	const store = useStateStore();
 	const categories = useCategories();
 	const projectId = useProjectId();
 	const mode = useMode();
 	const onResourceAdd = useCallback(
 		(item: CategoryItem<NodeType>) => {
-			return () => addResource(item, store);
+			return () => addResource(item, store, onResourceAdded);
 		},
-		[store],
+		[store, onResourceAdded],
 	);
 
 	const [open, setOpen] = useState<string[]>(categories.map((c) => c.title));
