diff --git a/base-bin.svelte b/base-bin.svelte
new file mode 100644
index 0000000..e69de29
diff --git a/src/lib/models/base-bin-2x1.svelte b/src/lib/models/base-bin-2x1.svelte
new file mode 100644
index 0000000..d6afe15
--- /dev/null
+++ b/src/lib/models/base-bin-2x1.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/base-bin-3u.svelte b/src/lib/models/base-bin-3u.svelte
new file mode 100644
index 0000000..cda97c3
--- /dev/null
+++ b/src/lib/models/base-bin-3u.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/base-bin.svelte b/src/lib/models/base-bin.svelte
new file mode 100644
index 0000000..7a235eb
--- /dev/null
+++ b/src/lib/models/base-bin.svelte
@@ -0,0 +1,58 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+
+
+
+
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/baseplate.svelte b/src/lib/models/baseplate.svelte
new file mode 100644
index 0000000..b985d46
--- /dev/null
+++ b/src/lib/models/baseplate.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/bin-esp32.svelte b/src/lib/models/bin-esp32.svelte
new file mode 100644
index 0000000..d3174a8
--- /dev/null
+++ b/src/lib/models/bin-esp32.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/buttplug.svelte b/src/lib/models/buttplug.svelte
new file mode 100644
index 0000000..1083a09
--- /dev/null
+++ b/src/lib/models/buttplug.svelte
@@ -0,0 +1,53 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/cap-mx-switch-15x15.svelte b/src/lib/models/cap-mx-switch-15x15.svelte
new file mode 100644
index 0000000..fcaccfe
--- /dev/null
+++ b/src/lib/models/cap-mx-switch-15x15.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/cap-mx-switch-15x33.svelte b/src/lib/models/cap-mx-switch-15x33.svelte
new file mode 100644
index 0000000..cec4dea
--- /dev/null
+++ b/src/lib/models/cap-mx-switch-15x33.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/cap-rotary-encoder.svelte b/src/lib/models/cap-rotary-encoder.svelte
new file mode 100644
index 0000000..a736513
--- /dev/null
+++ b/src/lib/models/cap-rotary-encoder.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/cap-slider.svelte b/src/lib/models/cap-slider.svelte
new file mode 100644
index 0000000..a242dbb
--- /dev/null
+++ b/src/lib/models/cap-slider.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/cherry-mx.svelte b/src/lib/models/cherry-mx.svelte
new file mode 100644
index 0000000..77169ec
--- /dev/null
+++ b/src/lib/models/cherry-mx.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/lid-2-mx-switches.svelte b/src/lib/models/lid-2-mx-switches.svelte
new file mode 100644
index 0000000..06ee75c
--- /dev/null
+++ b/src/lib/models/lid-2-mx-switches.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/lid-4-mx-switches.svelte b/src/lib/models/lid-4-mx-switches.svelte
new file mode 100644
index 0000000..e67fc36
--- /dev/null
+++ b/src/lib/models/lid-4-mx-switches.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/lid-rotary-encoder.svelte b/src/lib/models/lid-rotary-encoder.svelte
new file mode 100644
index 0000000..3ed154f
--- /dev/null
+++ b/src/lib/models/lid-rotary-encoder.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/lib/models/lid-slider.svelte b/src/lib/models/lid-slider.svelte
new file mode 100644
index 0000000..7464478
--- /dev/null
+++ b/src/lib/models/lid-slider.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+
+ {#await gltf}
+ {@render fallback?.()}
+ {:then gltf}
+
+ {:catch err}
+ {@render error?.({ error: err })}
+ {/await}
+
+ {@render children?.({ ref })}
+
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 8498225..84e5b35 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -7,6 +7,47 @@
import { dev } from '$app/environment';
+
+
+ Buttfinity
+
+
+
+ Buttons + Gridfinity
+
+
+
+
+
-
+
+
+ Macropad
+
+
- Control your computer.
+
+
+
+
-
+
+
+ Smart home
+
+
- Automate your home.
+
+
+
+
-
+
+
+ Music
+
+
- Use as a MIDI controller.
+
+
+
+