diff --git a/Makefile b/Makefile
index 79a5ac5..493533d 100644
--- a/Makefile
+++ b/Makefile
@@ -62,5 +62,7 @@ all:
 	$(MAKE) visualize
 
 visualize:
-	./visualize.py | d2 - infrastructure.svg
+	./scripts/visualize.py | d2 - infrastructure.svg
 
+new_role:
+	./scripts/new_role.sh
diff --git a/scripts/new_role.sh b/scripts/new_role.sh
new file mode 100755
index 0000000..bad2558
--- /dev/null
+++ b/scripts/new_role.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env bash
+
+roles_dir="./playbooks/roles"
+
+read -p "Enter the new role name: " new_role
+
+if [ -z "$new_role" ]; then
+  echo "Usage: $0 <role_name>"
+  exit 1
+fi
+
+if [ -d "$roles_dir/$new_role" ]; then
+  echo "Role $new_role already exists."
+  exit 1
+fi
+
+cp -r "$roles_dir/_TEMPLATE" "$roles_dir/$new_role"
+
+sed -i "s/NAME_/${new_role}_/g" "$roles_dir/$new_role"/**/*.yml
diff --git a/visualize.py b/scripts/visualize.py
similarity index 100%
rename from visualize.py
rename to scripts/visualize.py