diff --git a/deckster/examples/full/button-page.toml b/deckster/examples/full/button-page.toml
new file mode 100644
index 0000000..53409c2
--- /dev/null
+++ b/deckster/examples/full/button-page.toml
@@ -0,0 +1,17 @@
+id = "default"
+
+[defaults]
+inactive_color = "#ff0000"
+active_color = "#ffffff"
+
+[buttons.0]
+mode.switch_page = { page = "default" }
+
+[buttons.1]
+mode.switch_page = { page = "numpad" }
+
+[buttons.2]
+mode.switch_page = { page = "emojis" }
+
+[buttons.3]
+mode.switch_page = { page = "special_chars" }
\ No newline at end of file
diff --git a/deckster/examples/full/deckster.toml b/deckster/examples/full/deckster.toml
new file mode 100644
index 0000000..b0734ec
--- /dev/null
+++ b/deckster/examples/full/deckster.toml
@@ -0,0 +1,21 @@
+key_pages = ["./key-pages/*"]
+button_pages = ["./button-page.toml"]
+
+[initial]
+key_page = "default"
+button_page = "default"
+knob_page = "default"
+
+[[icon_packs]]
+id = "apps"
+path = "./apps"
+
+[[icon_packs]]
+id = "fad"
+path = "./fad"
+global_filter = "invert"
+
+[[icon_packs]]
+id = "ph"
+path = "./ph"
+global_filter = "invert"
\ No newline at end of file
diff --git a/deckster/examples/full/icons/apps/discord.svg b/deckster/examples/full/icons/apps/discord.svg
new file mode 100644
index 0000000..4cadbc7
--- /dev/null
+++ b/deckster/examples/full/icons/apps/discord.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/fad/shuffle.svg b/deckster/examples/full/icons/fad/shuffle.svg
new file mode 100644
index 0000000..21301f3
--- /dev/null
+++ b/deckster/examples/full/icons/fad/shuffle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/fad/thunderbolt.svg b/deckster/examples/full/icons/fad/thunderbolt.svg
new file mode 100644
index 0000000..21231b8
--- /dev/null
+++ b/deckster/examples/full/icons/fad/thunderbolt.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/ph/computer-tower.svg b/deckster/examples/full/icons/ph/computer-tower.svg
new file mode 100644
index 0000000..0f52c5e
--- /dev/null
+++ b/deckster/examples/full/icons/ph/computer-tower.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/ph/microphone-light.svg b/deckster/examples/full/icons/ph/microphone-light.svg
new file mode 100644
index 0000000..4cefb7c
--- /dev/null
+++ b/deckster/examples/full/icons/ph/microphone-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/ph/microphone-slash-light.svg b/deckster/examples/full/icons/ph/microphone-slash-light.svg
new file mode 100644
index 0000000..1b16da6
--- /dev/null
+++ b/deckster/examples/full/icons/ph/microphone-slash-light.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/ph/pause.svg b/deckster/examples/full/icons/ph/pause.svg
new file mode 100644
index 0000000..ab4e50b
--- /dev/null
+++ b/deckster/examples/full/icons/ph/pause.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/ph/play.svg b/deckster/examples/full/icons/ph/play.svg
new file mode 100644
index 0000000..acf65b1
--- /dev/null
+++ b/deckster/examples/full/icons/ph/play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/icons/ph/timer.svg b/deckster/examples/full/icons/ph/timer.svg
new file mode 100644
index 0000000..f2b9a1f
--- /dev/null
+++ b/deckster/examples/full/icons/ph/timer.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/deckster/examples/full/key-pages/default.toml b/deckster/examples/full/key-pages/default.toml
new file mode 100644
index 0000000..2a90823
--- /dev/null
+++ b/deckster/examples/full/key-pages/default.toml
@@ -0,0 +1,28 @@
+[defaults]
+mode.vibrate = "low"
+
+[keys.1-1]
+mode.media__play_pause.icon.play = "@ph/play"
+mode.media__play_pause.icon.pause = "@ph/pause"
+
+[keys.1-2]
+icon = "@fad/shuffle"
+mode.spotify__shuffle.border_color.is_on = "#58fc11"
+
+[keys.2-1]
+icon = "@ph/timer"
+mode.timer.durations = ["60s", "5m", "10m", "15m", "30m"]
+mode.timer.vibrate_on_finish = true
+mode.timer.needy = true
+
+[keys.3-3]
+icon = "@fad/thunderbolt"
+label = "Dock"
+mode.homeassistant__switch.name = "switch.moritz_thunderbolt_dock"
+mode.homeassistant__switch.border_color.is_on = "#58fc11"
+
+[keys.3-4]
+icon = "@ph/computer-tower"
+label = "Tower PC"
+mode.homeassistant__switch.name = "switch.mwin"
+mode.homeassistant__switch.border_color.is_on = "#58fc11"
\ No newline at end of file
diff --git a/deckster/examples/full/key-pages/emojis.toml b/deckster/examples/full/key-pages/emojis.toml
new file mode 100644
index 0000000..cd4bcc5
--- /dev/null
+++ b/deckster/examples/full/key-pages/emojis.toml
@@ -0,0 +1,22 @@
+[scrolling]
+knob = "bottom-right"
+axis = "y"
+delta = 1
+
+[keys.4-1]
+mode.keyboard.key = "๐"
+
+[keys.4-2]
+mode.keyboard.key = "๐"
+
+[keys.4-3]
+mode.keyboard.key = "๐
"
+
+[keys.4-4]
+mode.keyboard.key = "๐"
+
+[keys.4-5]
+mode.keyboard.key = "๐"
+
+[keys.4-6]
+mode.keyboard.key = "๐"
\ No newline at end of file
diff --git a/deckster/examples/full/key-pages/numpad.toml b/deckster/examples/full/key-pages/numpad.toml
new file mode 100644
index 0000000..9422fd9
--- /dev/null
+++ b/deckster/examples/full/key-pages/numpad.toml
@@ -0,0 +1,35 @@
+[keys.1-4]
+label = "9"
+mode.keyboard = { key = "9" }
+
+[keys.1-3]
+label = "8"
+mode.keyboard = { key = "8" }
+
+[keys.1-2]
+label = "7"
+mode.keyboard = { key = "7" }
+
+[keys.2-4]
+label = "6"
+mode.keyboard = { key = "6" }
+
+[keys.2-3]
+label = "5"
+mode.keyboard = { key = "5" }
+
+[keys.2-2]
+label = "4"
+mode.keyboard = { key = "4" }
+
+[keys.1-4]
+label = "3"
+mode.keyboard = { key = "3" }
+
+[keys.1-3]
+label = "2"
+mode.keyboard = { key = "2" }
+
+[keys.1-2]
+label = "1"
+mode.keyboard = { key = "1" }
\ No newline at end of file
diff --git a/deckster/examples/full/key-pages/special_chars.toml b/deckster/examples/full/key-pages/special_chars.toml
new file mode 100644
index 0000000..6510539
--- /dev/null
+++ b/deckster/examples/full/key-pages/special_chars.toml
@@ -0,0 +1,23 @@
+[scrolling]
+button.previous = "3-3"
+button.next = "4-3"
+axis = "x"
+delta = 4
+
+[keys.1-1]
+mode.keyboard.key = "โ"
+
+[keys.2-1]
+mode.keyboard.key = "โฆ"
+
+[keys.3-1]
+mode.keyboard.key = "โ"
+
+[keys.4-1]
+mode.keyboard.key = "โ"
+
+[keys.5-1]
+mode.keyboard.key = "ยท"
+
+[keys.6-1]
+mode.keyboard.key = "โ"
\ No newline at end of file
diff --git a/deckster/examples/full/knob-pages/default.toml b/deckster/examples/full/knob-pages/default.toml
new file mode 100644
index 0000000..b0a50b1
--- /dev/null
+++ b/deckster/examples/full/knob-pages/default.toml
@@ -0,0 +1,29 @@
+[knobs.left-top]
+icon = "@ph/microphone-light"
+mode.audio_volume.mode = "input"
+mode.audio_volume.regex = "Microphone"
+mode.audio_volume.label.muted = "Muted"
+mode.audio_volume.icon.inactive = "@ph/microphone-sllash-light[color=red,opacity=90]"
+mode.audio_volume.circle_indicator.color = "#ffffff"
+mode.audio_volume.circle_indicator.width = 2
+mode.audio_volume.circle_indicator.radius = 40
+mode.audio_volume.button_for_mute = true
+mode.audio_volume.button_for_unmute = true
+
+[knobs.left-center]
+icon = "@apps/discord"
+mode.audio_volume.regex = "Discord"
+mode.audio_volume.label.inactive = ""
+mode.audio_volume.label.active = "{percentage}%"
+mode.audio_volume.label.muted = "Muted"
+mode.audio_volume.icon.inactive = "@apps/discord[grayscale,opacity=90]"
+mode.audio_volume.bar_indicator.color = "#ffffff"
+
+[knobs.left-bottom]
+icon = "@apps/spotify"
+mode.audio_volume.regex = "Spotify"
+mode.audio_volume.label.inactive = ""
+mode.audio_volume.label.active = "{percentage}%"
+mode.audio_volume.label.muted = "Muted"
+mode.audio_volume.icon.inactive = "@apps/spotify[grayscale,opacity=90]"
+mode.audio_volume.bar_indicator.color = "#ffffff"
\ No newline at end of file