diff --git a/gso/utils/forms.py b/gso/utils/forms.py
new file mode 100644
index 0000000000000000000000000000000000000000..5cb6c9d247ab91bf87aa1ec97fbd95ec67eab15b
--- /dev/null
+++ b/gso/utils/forms.py
@@ -0,0 +1,25 @@
+"""Components to use in workflow forms."""
+from orchestrator.forms import FormPage
+from orchestrator.forms.validators import Choice
+from orchestrator.types import UUIDstr
+from pydantic import validator
+
+from gso.utils.helpers import validate_router_in_netbox
+
+
+class SelectRouterSide(FormPage):
+    """Selector for a router on a side."""
+
+    class Config:
+        """Setup title."""
+
+        title: str
+
+    side_node_id: Choice
+    config: Config
+
+
+    @validator("side_node_id", allow_reuse=True)
+    def validate_device_exists_in_netbox(cls, side_node_id: UUIDstr) -> str | None:
+        """Validate side node id."""
+        return validate_router_in_netbox(side_node_id)