diff --git a/app/components/ui/cathode-tv.svelte b/app/components/ui/cathode-tv.svelte
new file mode 100644
index 000000000..59f982dce
--- /dev/null
+++ b/app/components/ui/cathode-tv.svelte
@@ -0,0 +1,456 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/main.ts b/app/main.ts
index 40452917d..b20642840 100644
--- a/app/main.ts
+++ b/app/main.ts
@@ -70,6 +70,7 @@ export * from './components/ui/scroll-show.svelte';
export * from './components/ui/discord-count.svelte';
export * from './components/ui/scroll-up.svelte';
export * from './components/ui/hi-mom.svelte';
+export * from './components/ui/cathode-tv.svelte';
// Search
export * from './components/search/algolia-search.svelte';
diff --git a/layouts/home.html b/layouts/home.html
index 48da49d09..c262172d2 100644
--- a/layouts/home.html
+++ b/layouts/home.html
@@ -22,19 +22,7 @@
Start Here
-
+
@@ -116,7 +104,7 @@ L
-
+
diff --git a/package-lock.json b/package-lock.json
index 412fdbc59..2974bf699 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,6 +12,7 @@
"@sveltejs/vite-plugin-svelte": "^1.0.1",
"@tailwindcss/typography": "^0.5.4",
"@tsconfig/svelte": "^2.0.1",
+ "@types/three": "^0.161.0",
"@types/vimeo__player": "^2.16.3",
"@types/youtube-player": "^5.5.6",
"@typescript-eslint/eslint-plugin": "^5.36.2",
@@ -32,6 +33,7 @@
"svelte-check": "^2.2.7",
"svelte-preprocess": "^4.10.7",
"tailwindcss": "^3.1.8",
+ "three": "^0.161.0",
"tslib": "^2.3.1",
"typescript": "^4.5.4",
"vite": "^3.0.5",
@@ -2978,12 +2980,36 @@
"@types/node": "*"
}
},
+ "node_modules/@types/stats.js": {
+ "version": "0.17.3",
+ "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz",
+ "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==",
+ "dev": true
+ },
+ "node_modules/@types/three": {
+ "version": "0.161.2",
+ "resolved": "https://registry.npmjs.org/@types/three/-/three-0.161.2.tgz",
+ "integrity": "sha512-DazpZ+cIfBzbW/p0zm6G8CS03HBMd748A3R1ZOXHpqaXZLv2I5zNgQUrRG//UfJ6zYFp2cUoCQaOLaz8ubH07w==",
+ "dev": true,
+ "dependencies": {
+ "@types/stats.js": "*",
+ "@types/webxr": "*",
+ "fflate": "~0.6.10",
+ "meshoptimizer": "~0.18.1"
+ }
+ },
"node_modules/@types/vimeo__player": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/@types/vimeo__player/-/vimeo__player-2.16.3.tgz",
"integrity": "sha512-hsOe6CZFTNyfjRjQUrNHBF4LDmjvjcU2yQIPWp5AglKeGxt11JYGToQhKUPM876gBXggqR6rMQ0/sNI06ec2Rg==",
"dev": true
},
+ "node_modules/@types/webxr": {
+ "version": "0.5.14",
+ "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.14.tgz",
+ "integrity": "sha512-UEMMm/Xn3DtEa+gpzUrOcDj+SJS1tk5YodjwOxcqStNhCfPcwgyC5Srg2ToVKyg2Fhq16Ffpb0UWUQHqoT9AMA==",
+ "dev": true
+ },
"node_modules/@types/youtube-player": {
"version": "5.5.6",
"resolved": "https://registry.npmjs.org/@types/youtube-player/-/youtube-player-5.5.6.tgz",
@@ -4769,6 +4795,12 @@
"node": ">=0.8.0"
}
},
+ "node_modules/fflate": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz",
+ "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==",
+ "dev": true
+ },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -13344,6 +13376,12 @@
"node": ">= 8"
}
},
+ "node_modules/meshoptimizer": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
+ "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==",
+ "dev": true
+ },
"node_modules/micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -14560,6 +14598,12 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "node_modules/three": {
+ "version": "0.161.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.161.0.tgz",
+ "integrity": "sha512-LC28VFtjbOyEu5b93K0bNRLw1rQlMJ85lilKsYj6dgTu+7i17W+JCCEbvrpmNHF1F3NAUqDSWq50UD7w9H2xQw==",
+ "dev": true
+ },
"node_modules/through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -17293,12 +17337,36 @@
"@types/node": "*"
}
},
+ "@types/stats.js": {
+ "version": "0.17.3",
+ "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.3.tgz",
+ "integrity": "sha512-pXNfAD3KHOdif9EQXZ9deK82HVNaXP5ZIF5RP2QG6OQFNTaY2YIetfrE9t528vEreGQvEPRDDc8muaoYeK0SxQ==",
+ "dev": true
+ },
+ "@types/three": {
+ "version": "0.161.2",
+ "resolved": "https://registry.npmjs.org/@types/three/-/three-0.161.2.tgz",
+ "integrity": "sha512-DazpZ+cIfBzbW/p0zm6G8CS03HBMd748A3R1ZOXHpqaXZLv2I5zNgQUrRG//UfJ6zYFp2cUoCQaOLaz8ubH07w==",
+ "dev": true,
+ "requires": {
+ "@types/stats.js": "*",
+ "@types/webxr": "*",
+ "fflate": "~0.6.10",
+ "meshoptimizer": "~0.18.1"
+ }
+ },
"@types/vimeo__player": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/@types/vimeo__player/-/vimeo__player-2.16.3.tgz",
"integrity": "sha512-hsOe6CZFTNyfjRjQUrNHBF4LDmjvjcU2yQIPWp5AglKeGxt11JYGToQhKUPM876gBXggqR6rMQ0/sNI06ec2Rg==",
"dev": true
},
+ "@types/webxr": {
+ "version": "0.5.14",
+ "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.14.tgz",
+ "integrity": "sha512-UEMMm/Xn3DtEa+gpzUrOcDj+SJS1tk5YodjwOxcqStNhCfPcwgyC5Srg2ToVKyg2Fhq16Ffpb0UWUQHqoT9AMA==",
+ "dev": true
+ },
"@types/youtube-player": {
"version": "5.5.6",
"resolved": "https://registry.npmjs.org/@types/youtube-player/-/youtube-player-5.5.6.tgz",
@@ -18498,6 +18566,12 @@
"websocket-driver": ">=0.5.1"
}
},
+ "fflate": {
+ "version": "0.6.10",
+ "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz",
+ "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==",
+ "dev": true
+ },
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -25372,6 +25446,12 @@
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true
},
+ "meshoptimizer": {
+ "version": "0.18.1",
+ "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz",
+ "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==",
+ "dev": true
+ },
"micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -26208,6 +26288,12 @@
"integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
+ "three": {
+ "version": "0.161.0",
+ "resolved": "https://registry.npmjs.org/three/-/three-0.161.0.tgz",
+ "integrity": "sha512-LC28VFtjbOyEu5b93K0bNRLw1rQlMJ85lilKsYj6dgTu+7i17W+JCCEbvrpmNHF1F3NAUqDSWq50UD7w9H2xQw==",
+ "dev": true
+ },
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
diff --git a/package.json b/package.json
index af6ec5ffc..b6183591b 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"@sveltejs/vite-plugin-svelte": "^1.0.1",
"@tailwindcss/typography": "^0.5.4",
"@tsconfig/svelte": "^2.0.1",
+ "@types/three": "^0.161.0",
"@types/vimeo__player": "^2.16.3",
"@types/youtube-player": "^5.5.6",
"@typescript-eslint/eslint-plugin": "^5.36.2",
@@ -42,6 +43,7 @@
"svelte-check": "^2.2.7",
"svelte-preprocess": "^4.10.7",
"tailwindcss": "^3.1.8",
+ "three": "^0.161.0",
"tslib": "^2.3.1",
"typescript": "^4.5.4",
"vite": "^3.0.5",
diff --git a/static/3d/tv.glb b/static/3d/tv.glb
new file mode 100644
index 000000000..1fa7add6d
Binary files /dev/null and b/static/3d/tv.glb differ