diff --git a/docs/.vitepress/theme/Layout.vue b/docs/.vitepress/theme/Layout.vue
new file mode 100644
index 000000000..29873bda5
--- /dev/null
+++ b/docs/.vitepress/theme/Layout.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+ Dashboard 2.0 Workshop: Join us for a free workshop
+ on how to use Dashboard 2.0 in Node-RED on July 2nd - Register Now
+
+
+
+
\ No newline at end of file
diff --git a/docs/.vitepress/theme/dashboard.css b/docs/.vitepress/theme/dashboard.css
index 1cc5b1fad..d296241cd 100644
--- a/docs/.vitepress/theme/dashboard.css
+++ b/docs/.vitepress/theme/dashboard.css
@@ -32,4 +32,8 @@ img + em {
.vp-doc h3 {
margin-bottom: 16px;
+}
+
+.underline {
+ text-decoration: underline;
}
\ No newline at end of file
diff --git a/docs/.vitepress/theme/index.js b/docs/.vitepress/theme/index.js
index a1f0906c8..5fa56c6a9 100644
--- a/docs/.vitepress/theme/index.js
+++ b/docs/.vitepress/theme/index.js
@@ -2,6 +2,9 @@ import DefaultTheme from 'vitepress/theme'
import { onMounted, watch, nextTick } from 'vue';
import { useRoute } from 'vitepress';
import mediumZoom from 'medium-zoom';
+
+import Layout from './Layout.vue'
+
// override options: https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
import './dashboard.css'
import './overlay.css'
@@ -12,7 +15,7 @@ import DynamicPropsTable from '../../components/DynamicPropsTable.vue'
import ControlsTable from '../../components/ControlsTable.vue'
export default {
- extends: DefaultTheme,
+ Layout,
setup() {
const route = useRoute();
const initZoom = () => {
diff --git a/docs/components/AdvertBanner.vue b/docs/components/AdvertBanner.vue
new file mode 100644
index 000000000..6127becc2
--- /dev/null
+++ b/docs/components/AdvertBanner.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+