diff --git a/site/components.d.ts b/site/components.d.ts
new file mode 100644
index 0000000..038c980
--- /dev/null
+++ b/site/components.d.ts
@@ -0,0 +1,13 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+export {}
+
+declare module 'vue' {
+ export interface GlobalComponents {
+ HelloWorld: typeof import('./src/components/HelloWorld.vue')['default']
+ TheLanding: typeof import('./src/components/TheLanding.vue')['default']
+ }
+}
diff --git a/site/package-lock.json b/site/package-lock.json
index d4a0576..ed15fb1 100644
--- a/site/package-lock.json
+++ b/site/package-lock.json
@@ -9,6 +9,7 @@
"version": "0.0.0",
"dependencies": {
"@mdi/font": "7.0.96",
+ "@vueuse/core": "^10.7.2",
"roboto-fontface": "*",
"vue": "^3.3.0",
"vuetify": "^3.0.0"
@@ -661,6 +662,11 @@
"undici-types": "~5.26.4"
}
},
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.20",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
+ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
+ },
"node_modules/@vitejs/plugin-vue": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz",
@@ -830,6 +836,89 @@
"vuetify": "^3.0.0"
}
},
+ "node_modules/@vueuse/core": {
+ "version": "10.7.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.2.tgz",
+ "integrity": "sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==",
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.20",
+ "@vueuse/metadata": "10.7.2",
+ "@vueuse/shared": "10.7.2",
+ "vue-demi": ">=0.14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/core/node_modules/vue-demi": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
+ "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "10.7.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.2.tgz",
+ "integrity": "sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==",
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "10.7.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.2.tgz",
+ "integrity": "sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==",
+ "dependencies": {
+ "vue-demi": ">=0.14.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared/node_modules/vue-demi": {
+ "version": "0.14.6",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz",
+ "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==",
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
"node_modules/acorn": {
"version": "8.11.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
diff --git a/site/package.json b/site/package.json
index 93062d8..23afe51 100644
--- a/site/package.json
+++ b/site/package.json
@@ -8,6 +8,7 @@
},
"dependencies": {
"@mdi/font": "7.0.96",
+ "@vueuse/core": "^10.7.2",
"roboto-fontface": "*",
"vue": "^3.3.0",
"vuetify": "^3.0.0"
diff --git a/site/src/App.vue b/site/src/App.vue
index 6f5c110..06b06ce 100644
--- a/site/src/App.vue
+++ b/site/src/App.vue
@@ -1,11 +1,20 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/site/src/components/HelloWorld.vue b/site/src/components/HelloWorld.vue
deleted file mode 100644
index 6775d4d..0000000
--- a/site/src/components/HelloWorld.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
- Welcome to
-
- Vuetify
-
-
-
-
-
-
-
-
- Components
-
-
-
-
-
-
-
- Get Started
-
-
-
-
-
-
-
- Community
-
-
-
-
-
-
-
-
diff --git a/site/src/components/TheLanding.vue b/site/src/components/TheLanding.vue
new file mode 100644
index 0000000..294f778
--- /dev/null
+++ b/site/src/components/TheLanding.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+ This is an experimental PvP reimplementation of Buckshot Roulette, a computer game by Mike Klubnika.
+ Please play here only if you've bought and played the original.
+
+
+
+
+
+
+ There are no niceties in this implementation:
+
+ - No user accounts. Functionality is tied to your IP address for now, and things will probably
+ break if there are multiple players on the same local network.
+ - No MMR. Matching is done purely on a first-come, first-served basis.
+ - No saves. If you disconnect, or the server goes down for any reason, everything is gone.
+ - No pretty. Buckshot Roulette is an incredibly stylish and atmospheric game; this version is not.
+
+
+
+
+
+
+
+
+ Similarly, this server is not intended to be robust.
+ It runs on a hand-me-down PC sitting on the floor of my living room, the same computer that runs RobotIsBroken.
+ Please don't DoS me. It won't be a challenge, and all it will do is rob people of fun.
+
+
+
+
+
+
+
+
+ In order to provide the functionality of this service, I must collect and process your IP
+ address,
+ which is identifying information.
+ I do not permanently store it, and I do not use it for any other purpose.
+ However, I still feel it is appropriate to explicitly require your consent to use it.
+ Clicking this button saves a cookie on your device which tells the server it's ok to handle your
+ information as necessary to provide the service.
+
+
+
+
+
+ TODO(zeph): actually implement this
+
+
+
+
+
+
+
+
+
+ Play
+
+
+
+
+
\ No newline at end of file