diff --git a/dashboard/oidc_device_confirm.html b/dashboard/oidc_device_confirm.html
index 093699b42..d0e53021a 100644
--- a/dashboard/oidc_device_confirm.html
+++ b/dashboard/oidc_device_confirm.html
@@ -1,37 +1,16 @@
-
-
- Confirm Device
-
-
-
-
-
-
Confirm Device
-
- <%= clientName %>
-
- The following code should be displayed on your device
- <%= userCode %>
-
- If you did not initiate this action or the code does not match, please close this window or click abort.
-
- <%- form %>
-
-
-
-
-
-
+
+ <%= name %> OpenID Device Confirm
+
+
+
+
+
+
+
+
+
diff --git a/dashboard/oidc_device_input.html b/dashboard/oidc_device_input.html
index 83f4ba0c8..b4ab238c3 100644
--- a/dashboard/oidc_device_input.html
+++ b/dashboard/oidc_device_input.html
@@ -1,27 +1,16 @@
-
-
- Sign-in
-
-
-
-
-
-
Sign-in
- <%- message %>
- <%- form %>
-
-
-
+
+ <%= name %> OpenID Device Sign-in
+
+
+
+
+
+
+
+
+
diff --git a/dashboard/oidc_device_success.html b/dashboard/oidc_device_success.html
index a089734a6..993a34aba 100644
--- a/dashboard/oidc_device_success.html
+++ b/dashboard/oidc_device_success.html
@@ -1,20 +1,16 @@
-
-
- Success
-
-
-
-
-
-
Success
-
Your device has been authorized. You can close this window.
-
-
+
+ <%= name %> OpenID Device Success
+
+
+
+
+
+
+
+
+
diff --git a/dashboard/oidc_error.html b/dashboard/oidc_error.html
index e3aca6106..5c64ece18 100644
--- a/dashboard/oidc_error.html
+++ b/dashboard/oidc_error.html
@@ -4,13 +4,7 @@
<%= name %> OpenID Error
diff --git a/dashboard/src/oidcdeviceconfirm.js b/dashboard/src/oidcdeviceconfirm.js
new file mode 100644
index 000000000..b3de997c1
--- /dev/null
+++ b/dashboard/src/oidcdeviceconfirm.js
@@ -0,0 +1,16 @@
+import { createApp } from 'vue';
+
+import '@fontsource/inter';
+
+import i18n from './i18n.js';
+import OidcDeviceConfirmView from './views/OidcDeviceConfirmView.vue';
+
+import './style.css';
+
+(async function init() {
+ const app = createApp(OidcDeviceConfirmView);
+
+ app.use(await i18n());
+
+ app.mount('#app');
+})();
diff --git a/dashboard/src/oidcdeviceinput.js b/dashboard/src/oidcdeviceinput.js
new file mode 100644
index 000000000..d09a196e2
--- /dev/null
+++ b/dashboard/src/oidcdeviceinput.js
@@ -0,0 +1,16 @@
+import { createApp } from 'vue';
+
+import '@fontsource/inter';
+
+import i18n from './i18n.js';
+import OidcDeviceInputView from './views/OidcDeviceInputView.vue';
+
+import './style.css';
+
+(async function init() {
+ const app = createApp(OidcDeviceInputView);
+
+ app.use(await i18n());
+
+ app.mount('#app');
+})();
diff --git a/dashboard/src/oidcdevicesuccess.js b/dashboard/src/oidcdevicesuccess.js
new file mode 100644
index 000000000..02898c824
--- /dev/null
+++ b/dashboard/src/oidcdevicesuccess.js
@@ -0,0 +1,16 @@
+import { createApp } from 'vue';
+
+import '@fontsource/inter';
+
+import i18n from './i18n.js';
+import OidcDeviceSuccessView from './views/OidcDeviceSuccessView.vue';
+
+import './style.css';
+
+(async function init() {
+ const app = createApp(OidcDeviceSuccessView);
+
+ app.use(await i18n());
+
+ app.mount('#app');
+})();
diff --git a/dashboard/src/views/OidcDeviceConfirmView.vue b/dashboard/src/views/OidcDeviceConfirmView.vue
new file mode 100644
index 000000000..d9f5548e3
--- /dev/null
+++ b/dashboard/src/views/OidcDeviceConfirmView.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
Confirm Device
+
+ {{ clientName }}
+
+ The following code should be displayed on your device
+ {{ userCode }}
+
+ If you did not initiate this action or the code does not match, please close this window or click abort.
+
+
+
+
+
+
+
+
+
+
+
diff --git a/dashboard/src/views/OidcDeviceInputView.vue b/dashboard/src/views/OidcDeviceInputView.vue
new file mode 100644
index 000000000..5820ad957
--- /dev/null
+++ b/dashboard/src/views/OidcDeviceInputView.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
Sign-in
+
+
+
+
+
+
+
+
diff --git a/dashboard/src/views/OidcDeviceSuccessView.vue b/dashboard/src/views/OidcDeviceSuccessView.vue
new file mode 100644
index 000000000..85ec74ec2
--- /dev/null
+++ b/dashboard/src/views/OidcDeviceSuccessView.vue
@@ -0,0 +1,19 @@
+
+
+
+
+
+
Success
+
Your device has been authorized. You can close this window.
+
+
+