diff --git a/device_manager/config/desktop.py b/device_manager/config/desktop.py
new file mode 100644
index 0000000..efc1425
--- /dev/null
+++ b/device_manager/config/desktop.py
@@ -0,0 +1,13 @@
+from frappe import _
+
+
+def get_data():
+ return [
+ {
+ "module_name": "Device Manager",
+ "color": "teal",
+ "icon": "octicon octicon-shield-check",
+ "type": "module",
+ "label": _("Device Manager"),
+ }
+ ]
diff --git a/device_manager/desktop_icon/device_manager.json b/device_manager/desktop_icon/device_manager.json
new file mode 100644
index 0000000..ed1f21d
--- /dev/null
+++ b/device_manager/desktop_icon/device_manager.json
@@ -0,0 +1,22 @@
+{
+ "app": "device_manager",
+ "bg_color": "#BA0C2F",
+ "creation": "2026-06-17 00:00:00.000000",
+ "docstatus": 0,
+ "doctype": "Desktop Icon",
+ "hidden": 0,
+ "icon_type": "Link",
+ "idx": 0,
+ "label": "Device Manager",
+ "link_to": "Device Manager",
+ "link_type": "Workspace Sidebar",
+ "logo_url": "/assets/device_manager/images/icon.svg",
+ "modified": "2026-06-17 00:00:00.000000",
+ "modified_by": "Administrator",
+ "name": "Device Manager",
+ "owner": "Administrator",
+ "restrict_removal": 0,
+ "roles": [],
+ "sidebar": "Device Manager",
+ "standard": 1
+}
diff --git a/device_manager/device_manager/workspace/__init__.py b/device_manager/device_manager/workspace/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/device_manager/device_manager/workspace/__init__.py
@@ -0,0 +1 @@
+
diff --git a/device_manager/device_manager/workspace/device_manager/__init__.py b/device_manager/device_manager/workspace/device_manager/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/device_manager/device_manager/workspace/device_manager/__init__.py
@@ -0,0 +1 @@
+
diff --git a/device_manager/device_manager/workspace/device_manager/device_manager.json b/device_manager/device_manager/workspace/device_manager/device_manager.json
new file mode 100644
index 0000000..d31df90
--- /dev/null
+++ b/device_manager/device_manager/workspace/device_manager/device_manager.json
@@ -0,0 +1,188 @@
+{
+ "app": "device_manager",
+ "charts": [],
+ "content": "[{\"id\":\"dm_header_overview\",\"type\":\"header\",\"data\":{\"text\":\"Device Manager\",\"col\":12}},{\"id\":\"dm_card_lifecycle\",\"type\":\"card\",\"data\":{\"card_name\":\"Device Lifecycle\",\"col\":3}},{\"id\":\"dm_card_access\",\"type\":\"card\",\"data\":{\"card_name\":\"Access Control\",\"col\":3}},{\"id\":\"dm_card_radius\",\"type\":\"card\",\"data\":{\"card_name\":\"RADIUS Evidence\",\"col\":3}},{\"id\":\"dm_card_audit\",\"type\":\"card\",\"data\":{\"card_name\":\"Audit & Dataset Use\",\"col\":3}}]",
+ "creation": "2026-06-17 00:00:00.000000",
+ "custom_blocks": [],
+ "docstatus": 0,
+ "doctype": "Workspace",
+ "for_user": "",
+ "hide_custom": 0,
+ "icon": "shield-check",
+ "idx": 0,
+ "is_hidden": 0,
+ "label": "Device Manager",
+ "links": [
+ {
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "Device Lifecycle",
+ "link_count": 0,
+ "onboard": 0,
+ "type": "Card Break"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Device",
+ "link_count": 0,
+ "link_to": "DM Device",
+ "link_type": "DocType",
+ "onboard": 1,
+ "type": "Link"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Device Registration",
+ "link_count": 0,
+ "link_to": "DM Device Registration",
+ "link_type": "DocType",
+ "onboard": 1,
+ "type": "Link"
+ },
+ {
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "Access Control",
+ "link_count": 0,
+ "onboard": 0,
+ "type": "Card Break"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Network Segment",
+ "link_count": 0,
+ "link_to": "DM Network Segment",
+ "link_type": "DocType",
+ "onboard": 1,
+ "type": "Link"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Access Policy",
+ "link_count": 0,
+ "link_to": "DM Access Policy",
+ "link_type": "DocType",
+ "onboard": 1,
+ "type": "Link"
+ },
+ {
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "RADIUS Evidence",
+ "link_count": 0,
+ "onboard": 0,
+ "type": "Card Break"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Radius Auth Event",
+ "link_count": 0,
+ "link_to": "DM Radius Auth Event",
+ "link_type": "DocType",
+ "onboard": 0,
+ "type": "Link"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Access Decision",
+ "link_count": 0,
+ "link_to": "DM Access Decision",
+ "link_type": "DocType",
+ "onboard": 0,
+ "type": "Link"
+ },
+ {
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "Audit & Dataset Use",
+ "link_count": 0,
+ "onboard": 0,
+ "type": "Card Break"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Dataset Authorization",
+ "link_count": 0,
+ "link_to": "DM Dataset Authorization",
+ "link_type": "DocType",
+ "onboard": 1,
+ "type": "Link"
+ },
+ {
+ "dependencies": "",
+ "hidden": 0,
+ "is_query_report": 0,
+ "label": "DM Device Audit Event",
+ "link_count": 0,
+ "link_to": "DM Device Audit Event",
+ "link_type": "DocType",
+ "onboard": 0,
+ "type": "Link"
+ }
+ ],
+ "modified": "2026-06-17 00:00:00.000000",
+ "modified_by": "Administrator",
+ "module": "Device Manager",
+ "name": "Device Manager",
+ "number_cards": [],
+ "owner": "Administrator",
+ "parent_page": "",
+ "public": 1,
+ "quick_lists": [],
+ "restrict_to_domain": "",
+ "roles": [
+ {
+ "role": "System Manager"
+ }
+ ],
+ "sequence_id": 1.0,
+ "shortcuts": [
+ {
+ "color": "Blue",
+ "format": "{} Devices",
+ "label": "DM Device",
+ "link_to": "DM Device",
+ "stats_filter": "{}",
+ "type": "DocType"
+ },
+ {
+ "color": "Orange",
+ "format": "{} Registrations",
+ "label": "DM Device Registration",
+ "link_to": "DM Device Registration",
+ "stats_filter": "{}",
+ "type": "DocType"
+ },
+ {
+ "color": "Green",
+ "format": "{} Policies",
+ "label": "DM Access Policy",
+ "link_to": "DM Access Policy",
+ "stats_filter": "{}",
+ "type": "DocType"
+ },
+ {
+ "color": "Purple",
+ "format": "{} Decisions",
+ "label": "DM Access Decision",
+ "link_to": "DM Access Decision",
+ "stats_filter": "{}",
+ "type": "DocType"
+ }
+ ],
+ "title": "Device Manager"
+}
diff --git a/device_manager/public/images/icon.svg b/device_manager/public/images/icon.svg
new file mode 100644
index 0000000..a7daa42
--- /dev/null
+++ b/device_manager/public/images/icon.svg
@@ -0,0 +1,12 @@
+
diff --git a/device_manager/workspace_sidebar/device_manager.json b/device_manager/workspace_sidebar/device_manager.json
new file mode 100644
index 0000000..b581f1b
--- /dev/null
+++ b/device_manager/workspace_sidebar/device_manager.json
@@ -0,0 +1,152 @@
+{
+ "app": "device_manager",
+ "docstatus": 0,
+ "doctype": "Workspace Sidebar",
+ "header_icon": "shield-check",
+ "items": [
+ {
+ "child": 0,
+ "collapsible": 1,
+ "icon": "layout-dashboard",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Home",
+ "link_to": "Device Manager",
+ "link_type": "Workspace",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "collapsible": 1,
+ "icon": "monitor",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Device Lifecycle",
+ "type": "Section Break"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "monitor",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Devices",
+ "link_to": "DM Device",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "clipboard-list",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Registrations",
+ "link_to": "DM Device Registration",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "collapsible": 1,
+ "icon": "network",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Access Control",
+ "type": "Section Break"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "route",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Network Segments",
+ "link_to": "DM Network Segment",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "shield-check",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Access Policies",
+ "link_to": "DM Access Policy",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "collapsible": 1,
+ "icon": "radio-tower",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "RADIUS Evidence",
+ "type": "Section Break"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "radio-tower",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Auth Events",
+ "link_to": "DM Radius Auth Event",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "list-checks",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Access Decisions",
+ "link_to": "DM Access Decision",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "collapsible": 1,
+ "icon": "database",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Audit & Dataset Use",
+ "type": "Section Break"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "database",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Dataset Authorizations",
+ "link_to": "DM Dataset Authorization",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ },
+ {
+ "child": 1,
+ "collapsible": 1,
+ "icon": "history",
+ "indent": 0,
+ "keep_closed": 0,
+ "label": "Audit Events",
+ "link_to": "DM Device Audit Event",
+ "link_type": "DocType",
+ "show_arrow": 0,
+ "type": "Link"
+ }
+ ],
+ "module": "Device Manager",
+ "name": "Device Manager",
+ "standard": 1,
+ "title": "Device Manager"
+}