diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..20da6cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.glitchdotcom.json +.node-gyp +node_modules \ No newline at end of file diff --git a/.glitch-assets b/.glitch-assets new file mode 100644 index 0000000..7ca4d19 --- /dev/null +++ b/.glitch-assets @@ -0,0 +1,2 @@ +{"name":"illustration.svg","date":"2021-04-12T02:54:29.568Z","url":"https://cdn.glitch.com/c62efef6-1e75-45cf-b248-afeccdda9477%2Fillustration.svg","type":"image/svg+xml","size":17429,"imageWidth":620,"imageHeight":587,"thumbnail":"https://cdn.glitch.com/c62efef6-1e75-45cf-b248-afeccdda9477%2Fthumbnails%2Fillustration.svg","thumbnailWidth":330,"thumbnailHeight":313,"uuid":"T5MUea9IPDI0uFCw"} +{"name":"timwaltzfixedyourbicycle.png","date":"2024-08-08T21:30:47.672Z","url":"https://cdn.glitch.global/caa249ff-6ba5-4a91-901e-9d343ae05bc9/timwaltzfixedyourbicycle.png","type":"image/png","size":9678,"imageWidth":1200,"imageHeight":630,"thumbnail":"https://cdn.glitch.global/caa249ff-6ba5-4a91-901e-9d343ae05bc9/thumbnails%2Ftimwaltzfixedyourbicycle.png","thumbnailWidth":330,"thumbnailHeight":174,"uuid":"UDqVXu2Ob4hE0sXr"} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..60d4042 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jason Cosper + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e2b800d --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# Tim Walz Fixed Your Bicycle + +This was *heavily* influenced by Mat Honan's "[Barack Obama Is Your New Bicycle](https://barackobamaisyournewbicycle.com)". + +Let's bring back some of that '08 optimism and energy! + +## About the Author + +[Jason Cosper](https://jason.cosper.me) made this alongside a bunch of pals suggesting very funny and uplifting things in the group chat. ♥️ + +If you need someone to do some WordPress work, you can pay Jason to do that for you at [Little Room](https://littleroom.studio). He can make your site fast. + +## About the Code + +If you're looking at this and are a professional JS developer, *please* don't tell anyone how I live. 😬 + +## Contact the Author + +Fun nerd? Member of the media? Just wanna chat? + +I've had the username "boogah" over on Gmail for like 20 years now. Drop me a line there. Unless you're some sort of far right weirdo, that is. + +I primarily use the fediverse (see: Mastodon) so you could also say hi [there](https://simian.rodeo/@boogah). + +Want to make your own version of this site? [Remix it](https://glitch.com/edit/#!/tim-walz-fixed-your-bicycle) on Glitch! + +Finally, after getting several million visits in a matter of days, I *would not* be mad if you wanted to help me cover the (eventual) costs of running this thing. + +You can do so by [buying a t-shirt](https://cottonbureau.com/people/tim-walz-fixed-your-bicycle) or sending along a couple bucks: + +* https://venmo.com/u/boogah +* https://cash.app/$boogah +* https://paypal.me/boogah \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..73c5240 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,497 @@ +{ + "name": "tim-walz-fixed-your-bicycle", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..5a1f4cd --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "tim-walz-fixed-your-bicycle", + "version": "1.0.0", + "description": "Tim Walz Fixed Your Bicycle", + "main": "server.js", + "scripts": { + "start": "node server.js" + }, + "dependencies": { + "express": "^4.17.1" + }, + "engines": { + "node": "18.x" + } +} diff --git a/public/style.css b/public/style.css new file mode 100644 index 0000000..bad55d0 --- /dev/null +++ b/public/style.css @@ -0,0 +1,67 @@ +body { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + min-height: 100svh; + font-family: 'Cooper Black', 'Caprasimo', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + background-color: #f5a7a3; /* Be more pink */ + color: #0a0b0b; + margin: 0; + text-align: center; +} +.main { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + flex-grow: 1; + padding: 0; +} +.container { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; +} +.sentence { + font-size: clamp(2rem, 5vw + 1rem, 8rem); + font-family: 'Cooper Black', 'Caprasimo', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + background-color: transparent; + border: none; + padding: 0; + max-width: 25ch; + color: #0a0b0b; + cursor: pointer; + padding: 0 clamp(1rem, .875em, 10rem); + width: 100%; + text-wrap: balance; +} +.link { + margin-top: 50px; + margin-bottom: 0px; + font-size: 1.25rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-weight: 900; + color: #0a0b0b; + background-color: #f5a7a3; + text-decoration: none; + padding: .5em .75em; +} +.link:hover { + text-decoration: none; +} +.disclaimer { + background-color: #0a0b0b; + font-size: 1rem; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-weight: 600; + color: #f5a7a3; + padding: .75em 1em; + text-align: center; + text-wrap: balance; + width: 100%; + letter-spacing: .025ch; +} diff --git a/sentences.js b/sentences.js new file mode 100644 index 0000000..66d064b --- /dev/null +++ b/sentences.js @@ -0,0 +1,237 @@ +const sentences = [ + "Tim Walz fixed your bicycle.", + "Tim Walz sends birthday texts to everyone he’s ever served with.", + "Tim Walz clipped you a coupon for that thing you’ve been wanting.", + "Tim Walz knew exactly when your printer was going to run out of ink.", + "Tim Walz has a spare one of those out in the shed.", + "Tim Walz spends saturday mornings at the laundromat with a bag of quarters just in case you’re short.", + "Tim Walz understands the Infield Fly Rule.", + "Tim Walz has some jumper cables, just give him a minute.", + "Tim Walz just shoveled your walk.", + "Tim Walz made you a plate and none of the food was touching.", + "Tim Walz hands out full-sized candy bars on Halloween.", + "Tim Walz hugged you when you came out and said “I love you so much.”", + "Tim Walz thinks you’re doing a fine job.", + "Tim Walz is over here if you ever need a hand.", + "Tim Walz will drive you and your friends to the bead store.", + "Tim Walz is always ready to pick you up early from your sleepover.", + "Tim Walz won you a toy from the claw machine.", + "Tim Walz brought enough for everybody.", + "Tim Walz isn’t afraid to ask the clerk which aisle the tampons are on.", + "Tim Walz brought some hotdish.", + "Tim Walz has an extra Springsteen ticket, if you’re interested.", + "Tim Walz already has the grill fired up.", + "Tim Walz brought ice.", + "Tim Walz is happy to break down the cardboard.", + "Tim Walz will lend you his drill. No rush to get it back.", + "Tim Walz doesn’t mind rewatching that show you really want to see.", + "Tim Walz doesn’t mind rewatching that movie you really want to see.", + "Tim Walz doesn’t care if it’s less or fewer, he knows what you mean.", + "Tim Walz will teach you how to parallel park.", + "Tim Walz sends you New Yorker cartoons you might like and doesn’t mind if you don’t reply.", + "Tim Walz will go record shopping with you.", + "Tim Walz says hello to everyone in the post office.", + "Tim Walz gets the couch joke.", + "Tim Walz will keep an eye on your kids when you’re running late for school pickup.", + "Tim Walz will give you back your stapler.", + "Tim Walz is happy to check over that job application for you.", + "Tim Walz knows that you should just buy that one Brother printer.", + "Tim Walz will let you borrow his glasses so you can read the menu.", + "Tim Walz is glad to give you a hand with your stroller down those stairs.", + "Tim Walz will give your phone a call when you can’t find yours.", + "Tim Walz will let you have the window seat.", + "Tim Walz saw $20 on the ground and left it there.", + "Tim Walz always texts you back.", + "Tim Walz loves that you show love, and will spend hours talking with you about it.", + "Tim Walz would never leave you on read.", + "Tim Walz will go to your drag show, sit in the front row, and cheer you on.", + "Tim Walz wants to buy ten tickets for your raffle.", + "Tim Walz has a scrap of maple from another project that you can use to fix that wobbly shelf.", + "Tim Walz wants to know if he can pet your dog.", + "Tim Walz noticed that your rear driver’s side tire is a little low.", + "Tim Walz carries a spare ice scraper “for situations like this.”", + "Tim Walz won’t tell your boss you’re unionizing.", + "Tim Walz always rings your doorbell when he gets to your house.", + "Tim Walz knows what Minnesota nice is, and he’s not afraid to use it.", + "Tim Walz remembers where you parked your car.", + "Tim Walz asks anyone taller than him “How’s the weather up there?”", + "Tim Walz Venmo’d you for pizza even though he only had a slice.", + "Tim Walz just shot you finger guns and a smile.", + "Tim Walz says “right tighty, lefty loosey” every time.", + "Tim Walz knows how to properly strap down lumber in the back of an old truck.", + "Tim Walz will point a stud finder at himself and say “Looks like it works.” Every. Single. Time.", + "Tim Walz is gonna take you and your friends to the Olive Garden. His treat.", + "Tim Walz will cover your shift so you don’t have to miss the party.", + "Tim Walz always returns it with a full tank of gas.", + "Tim Walz only needs one trip to the hardware store.", + "Tim Walz measures twice. Cuts once.", + "Tim Walz remembers how you like your steak.", + "Tim Walz is kind, rewinds.", + "Tim Walz remembers your kids’ birthdays.", + "Tim Walz slipped gas money in your pocket without you noticing.", + "Tim Walz has some advice on how to pack down the minivan for your road trip, if you wanna hear it.", + "Tim Walz topped off your wiper fluid before you hit the road.", + "Tim Walz can explain the 3-4 defense and knows when to blitz.", + "Tim Walz will say “Nice to meet you, hungry,” if he hears you say “I’m hungry.”", + "Tim Walz can give you a ride to the airport.", + "Tim Walz doesn’t get a haircut. He gets ALL OF THEM cut.", + "Tim Walz pulls the car around when it’s raining.", + "Tim Walz is wondering if you need a hand with that.", + "Tim Walz keeps a couple cans of your favorite soda in his fridge.", + "Tim Walz noticed your sink was draining a little slow and took care of it.", + "Tim Walz fixed your flat.", + "Tim Walz always has room for a little slice of pie.", + "Tim Walz remembers whether you like pumpkin or pecan.", + "Tim Walz invites you around to his friendsgiving.", + "Tim Walz would be happy to show you how to tie a tie.", + "Tim Walz left you a note saying he’s looking after that delivery you were waiting for.", + "Tim Walz watered your plants.", + "Tim Walz can help you mount your new TV, if you need a hand.", + "Tim Walz is fine with either pronunciation of pecan, and yes he would love a slice. Please and thank you.", + "Tim Walz will have what she’s having.", + "Tim Walz doesn’t mind if you like mayo on your hot dog.", + "Tim Walz says what bathroom you use is none of his damn business.", + "Tim Walz doesn’t mind waiting up. He’ll come get you when you need him to.", + "Tim Walz left you some, it’s in the fridge.", + "Tim Walz bought those plums and put them in your icebox.", + "Tim Walz knows that “Die Hard” is a Christmas movie.", + "Tim Walz would’ve listened to Ripley.", + "Tim Walz knows when to leave well enough alone.", + "Tim Walz will help you tidy up afterwards.", + "Tim Walz will leave the party well before anyone has to ask.", + "Tim Walz shows up early to help you set up.", + "Tim Walz sees you struggling with that tent and can definitely hold that in place just for a sec.", + "Tim Walz will be your dad at graduation, if you want.", + "Tim Walz knows where you hide the cookies, but would never dream of taking one.", + "Tim Walz can teach you how to drive stick.", + "Tim Walz will drive you to your doctor’s appointment if you’re scared of going alone.", + "Tim Walz isn’t upset with you, he knows everyone makes mistakes.", + "Tim Walz doesn’t care what color your text bubbles are.", + "Tim Walz knows you’re doing your best.", + "Tim Walz cries at the end of “It’s a Wonderful Life.”", + "Tim Walz has an elegant solution for your technical debt.", + "Tim Walz holds the door. Even if you are a little too far away.", + "Tim Walz will never have “more of a comment than a question, really.”", + "Tim Walz isn’t going to finish his fries. Go ahead and have some.", + "Tim Walz reported that reply guy for you.", + "Tim Walz doesn’t read the comments. Doesn’t need to.", + "Tim Walz knows that wasn’t as easy as you made it look.", + "Tim Walz knows you tried your best and he’s proud of you.", + "Tim Walz doesn’t mind if you beat him at Wordle.", + "Tim Walz knows all the prices on “The Price Is Right.”", + "Tim Walz wants you to put down the phone and hold the other end of the tape measure.", + "Tim Walz knows Monopoly isn’t a great board game but will definitely play it with you.", + "Tim Walz knows how to steer into the skid.", + "Tim Walz got that reference you made.", + "Tim Walz will take you back-to-school shopping.", + "Tim Walz doesn’t care if you jump into the pile of leaves he just raked.", + "Tim Walz doesn’t mind being corrected, he loves to learn new things.", + "Tim Walz is happy to lend a hand.", + "Tim Walz can definitely go with to pick up that Craigslist thing you just bought.", + "Tim Walz can fax that thing for you.", + "Tim Walz will count your stitches and won’t say anything when you drop one.", + "Tim Walz wishes you weren’t still on Facebook, but he gets it.", + "Tim Walz calls his Sweetwater sales rep to check in on him.", + "Tim Walz just came over to mow your lawn because he knows you’ve been feeling poorly lately.", + "Tim Walz says he’s happy to keep an eye on the grill while you get the sides ready.", + "Tim Walz said your chili was the some of the best he's ever had even though you know you added too much salt.", + "Tim Walz is the fantasy football commissioner every year. He keeps the trash talk from getting TOO rough.", + "Tim Walz is happy to learn your pronouns.", + "Tim Walz says, “You just can’t predict the weather. Why don't you take a sweater with you? Just in case.”", + "Tim Walz thinks you look amazing just as you are.", + "Tim Walz ordered fries for the table.", + "Tim Walz lifts with his legs, not his back.", + "Tim Walz mutes himself on Zoom when he’s not talking.", + "Tim Walz keeps an extra toboggan in his Scout.", + "Tim Walz remembers how you like your coffee.", + "Tim Walz noticed your new haircut.", + "Tim Walz says “It’s okay to feel hope.”", + "Tim Walz would be honored to take a spare key and check in on your place while you’re away.", + "Tim Walz would go get a mani-pedi with you.", + "Tim Walz will return the cup of sugar he borrowed.", + "Tim Walz tips extra, ’cause he knows you’re working hard.", + "Tim Walz knows the right way to hang a roll of toilet paper.", + "Tim Walz knows where to rent a tractor, and can help with that stump.", + "Tim Walz will definitely let you have a turn on his ride-on mower.", + "Tim Walz believes you.", + "Tim Walz knows that even Tim Walz is just doing his best.", + "Tim Walz will let (almost) anybody crash on his couch.", + "Tim Walz would like to remind you to hydrate.", + "Tim Walz can show you how to tighten that nut properly.", + "Tim Walz knows he’s campaigning for us, not him.", + "Tim Walz waited in line with you to get a Wii.", + "Tim Walz is no doubt embarrassed and humbled by this website.", + "Tim Walz is very excited about the Nintendo 64 you got.", + "Tim Walz will hold your place in line while you run back to pick up tampons.", + "Tim Walz knows his way around a state fair.", + "Tim Walz loves when people are excited about their lightsaber technique.", + "Tim Walz pinned your mittens to your sleeve.", + "Tim Walz sings “Born to Run” while doing the laundry.", + "Tim Walz is glad to watch Netflix, fold, and put away laundry with you.", + "Tim Walz knows which laundry belongs to which person in his family.", + "Tim Walz does his own research first before asking.", + "Tim Walz cleaned your gutters for you.", + "Tim Walz is fine with it if your socks don’t match.", + "Tim Walz checked the weather and hands you an umbrella as you walk out the door.", + "Tim Walz will come over if you need help uncluttering. No judgment. He knows how it gets.", + "Tim Walz uses humane rat traps.", + "Tim Walz knows which wrench you need and will lend it to you right then and there.", + "Tim Walz has a spare mask you can have.", + "Tim Walz is there for you when it’s time for your pet to go.", + "Tim Walz cheered during the Mona Lisa Vito testimony.", + "Tim Walz knows it’s complicated. He’s just here to listen.", + "Tim Walz will happily sit next to you in silence.", + "Tim Walz ran to catch the ice cream truck for you.", + "Tim Walz lends you his car while yours is in the shop.", + "Tim Walz picked up your mail while you were on vacation.", + "Tim Walz knows when to leave things well enough alone.", + "Tim Walz carried the diaper bag without being asked.", + "Tim Walz will put you on his shoulders so you can see the firetrucks.", + "Tim Walz appreciates the value of a post-dentist lollipop.", + "Tim Walz has a reserve of extra, pre-sharpened number two pencils.", + "Tim Walz would never call dibs on a parking spot in February, even though he did spend two hours shoveling it out.", + "Tim Walz brought homemade cookies, even after being told “No, just bring yourself.”", + "Tim Walz knows Han shot first.", + "Tim Walz can help you get that carry-on down from the overhead bin.", + "Tim Walz insists that you go before him in the checkout line. You’ve only got a couple items.", + "Tim Walz just wants you to text when you get there.", + "Tim Walz is happy to see you here and wonders how your family is doing.", + "Tim Walz will hold your place in line.", + "Tim Walz takes the pretty way home.", + "Tim Walz says “We really needed this.” when it rains.", + "Tim Walz knows they’re not your preferred pronouns, they’re *your* pronouns.", + "Tim Walz does the edges of the jigsaw puzzle first, and lets you put in the last piece.", + "Tim Walz will find and fill out that form on LEGO’s website to get that missing piece.", + "Tim Walz will take the training wheels off your bike.", + "Tim Walz saved that one email and will re-forward it to you.", + "Tim Walz returned your Tupperware with some fresh cookies inside.", + "Tim Walz made sure there were enough hot dog buns at the cookout.", + "Tim Walz just wants everyone to have joy.", + "Tim Walz ends phone calls with, “Good to hear your voice!”", + "Tim Walz says “Ope! Excuse me!” when he accidentally bumps someone.", + "Tim Walz is proud of that repair you did all by yourself.", + "Tim Walz can show you how to tie a fish hook, if you’d like to know an easier way.", + "Tim Walz wrote a LinkedIn Recommendation that made you tear up.", + "Tim Walz doesn’t brag about donations, he just makes them. They’re no one’s business.", + "Tim Walz knows how to fold a map.", + "Tim Walz has never needed GPS in his life.", + "Tim Walz is undefeated in Soulcalibur.", + "Tim Walz would never call the salad that you brought to the potluck dessert.", + "Tim Walz stopped by just to chit-chat when you got stuck doing graveyard watch.", + "Tim Walz brought orange slices.", + "Tim Walz prints out articles from the internet to mail to you later.", + "Tim Walz will patiently explain to your relatives that schools don’t have litter boxes for kids.", + "Tim Walz was going that way anyway. Hop in.", + "Tim Walz would love to hear about your Neocities fansite.", + "Tim Walz keeps both types of phone charger in his car.", + "Tim Walz saw you sneak an extra scoop of ice cream, but won’t tell. He knows we all need that sometimes.", + "Tim Walz thinks your baseball card collection looks great.", + "Tim Walz doesn’t believe in guilty pleasures. Enjoy your silly show.", + "Tim Walz puts the recipe at the top of the post.", + "Tim Walz always checks for bike riders before he opens the car door.", + "Tim Walz doesn’t park in the bike lane.", + "Tim Walz never met a pool that didn’t get his famous cannonball.", + "Tim Walz can start a lawnmower every time.", +]; + +module.exports = sentences; \ No newline at end of file diff --git a/server.js b/server.js new file mode 100644 index 0000000..bc54574 --- /dev/null +++ b/server.js @@ -0,0 +1,92 @@ +const express = require("express"); +const app = express(); +const PORT = process.env.PORT || 3000; + +// Import sentences from sentences.js +const sentences = require("./sentences"); + +// Serve static files from the "public" directory +app.use(express.static("public")); + +app.get("/", (req, res) => { + const randomSentence = sentences[Math.floor(Math.random() * sentences.length)]; + res.send(` + <!DOCTYPE html> + <html lang="en"> + <head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Tim Walz Fixed Your Bicycle</title> + + <link rel="preconnect" href="https://fonts.googleapis.com"> + <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> + + <meta name="description" content="Tim Walz fixed your bicycle? What a nice fella!"> + + <!-- Facebook Meta Tags --> + <meta property="og:url" content="https://timwalzfixedyourbicycle.com/"> + <meta property="og:type" content="website"> + <meta property="og:title" content="Tim Walz Fixed Your Bicycle"> + <meta property="og:description" content="Tim Walz fixed your bicycle? What a nice fella!"> + <meta property="og:image" content="https://cdn.glitch.global/caa249ff-6ba5-4a91-901e-9d343ae05bc9/timwaltzfixedyourbicycle.png?v=1723152647672"> + + <!-- Twitter Meta Tags --> + <meta name="twitter:card" content="summary_large_image"> + <meta property="twitter:domain" content="timwalzfixedyourbicycle.com"> + <meta property="twitter:url" content="https://timwalzfixedyourbicycle.com/"> + <meta name="twitter:title" content="Tim Walz Fixed Your Bicycle"> + <meta name="twitter:description" content="Tim Walz fixed your bicycle? What a nice fella!"> + <meta name="twitter:image" content="https://cdn.glitch.global/caa249ff-6ba5-4a91-901e-9d343ae05bc9/timwaltzfixedyourbicycle.png?v=1723152647672"> + <!-- Elon Musk can go eat a dry white dog turd. --> + + <link href="https://fonts.googleapis.com/css2?family=Caprasimo&display=swap" rel="stylesheet"> + + <style> + body {display: flex;flex-direction: column;justify-content: center;align-items: center;min-height: 100svh;font-family: 'Cooper Black', 'Caprasimo', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";padding: 0;background-color: #f5a7a3;color: #0a0b0b;margin: 0;text-align: center;}.main {display: flex;flex-direction: column;justify-content: center;align-items: center;flex-grow: 1;padding: 0;}.container {display: flex;flex-direction: column;justify-content: center;align-items: center;width: 100%;}.sentence {font-size: clamp(2rem, 5vw + 1rem, 8rem);font-family: 'Cooper Black', 'Caprasimo', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";background-color: transparent;border: none;padding: 0;max-width: 25ch;color: #0a0b0b;cursor: pointer;padding: 0 clamp(1rem, .875em, 10rem);width: 100%;text-wrap: balance;}.link {margin-top: 50px;margin-bottom: 0px;font-size: 1.25rem;font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-weight: 900;color: #0a0b0b;background-color: #f5a7a3;text-decoration: none;padding: .5em .75em;}.link:hover {text-decoration: none;}.disclaimer {background-color: #0a0b0b;font-size: 1rem;font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";font-weight: 600;color: #f5a7a3;padding: .75em 1em;text-align: center;text-wrap: balance;width: 100%;letter-spacing: .025ch;} + </style> + + <script defer src="https://nebulous-lyrebird.pikapod.net/script.js" data-website-id="591e18f9-b70c-41ab-a172-e70b04b27882"></script> + <script> + if (window.location.hostname !== 'timwalzfixedyourbicycle.com') { + window.location.href = 'https://timwalzfixedyourbicycle.com'; + } + </script> + </head> + <body> + <div class="main"> + <button class="sentence" onclick="window.location.reload()">${randomSentence}</button> + <a class="link" href="https://secure.actblue.com/donate/web-hfp-waltz-august-2024">Donate to Harris/Walz 2024</a> + <a class="link" href="https://cottonbureau.com/people/tim-walz-fixed-your-bicycle">Get a shirt</a> + </div> + <div class="disclaimer">Not paid for by any candidate or candidates’ committee.</div> + + <!-- + Fun nerd? Member of the media? Just wanna chat? I've had the username "boogah" over on + Gmail for like 20 years now. Drop me a line there. Unless you're some sort of far right + weirdo, that is. + + I primarily use the fediverse (see: Mastodon) so you could also say hi there: + + https://simian.rodeo/@boogah + + Want to make your own version of this site? Remix it on Glitch: + + https://glitch.com/edit/#!/tim-walz-fixed-your-bicycle + + Finally, I *would not* be mad if you wanted to help me cover the costs of running this + thing. You can do so by buying a t-shirt or sending along a couple bucks. + + https://cottonbureau.com/people/tim-walz-fixed-your-bicycle + https://venmo.com/u/boogah + https://cash.app/$boogah + https://paypal.me/boogah + --> + + </body> + </html> + `); +}); + +app.listen(PORT, () => { + console.log(`Server is running on port ${PORT}`); +}); diff --git a/shrinkwrap.yaml b/shrinkwrap.yaml new file mode 100644 index 0000000..59a1693 --- /dev/null +++ b/shrinkwrap.yaml @@ -0,0 +1,634 @@ +dependencies: + fastify: 3.28.0 + fastify-formbody: 5.2.0 + fastify-static: 4.6.1 + handlebars: 4.7.7 + point-of-view: 5.2.0 +packages: + /@fastify/ajv-compiler/1.1.0: + dependencies: + ajv: 6.12.6 + dev: false + resolution: + integrity: sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg== + /abstract-logging/2.0.1: + dev: false + resolution: + integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== + /ajv/6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: false + resolution: + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + /ajv/8.11.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false + resolution: + integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg== + /archy/1.0.0: + dev: false + resolution: + integrity: sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + /atomic-sleep/1.0.0: + dev: false + engines: + node: '>=8.0.0' + resolution: + integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + /avvio/7.2.5: + dependencies: + archy: 1.0.0 + debug: 4.3.4 + fastq: 1.13.0 + queue-microtask: 1.2.3 + dev: false + resolution: + integrity: sha512-AOhBxyLVdpOad3TujtC9kL/9r3HnTkxwQ5ggOsYrvvZP1cCFvzHWJd5XxZDFuTn+IN8vkKSG5SEJrd27vCSbeA== + /balanced-match/1.0.2: + dev: false + resolution: + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + /brace-expansion/1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: false + resolution: + integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + /concat-map/0.0.1: + dev: false + resolution: + integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + /content-disposition/0.5.4: + dependencies: + safe-buffer: 5.2.1 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + /cookie/0.4.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + /debug/2.6.9: + dependencies: + ms: 2.0.0 + dev: false + resolution: + integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + /debug/4.3.4: + dependencies: + ms: 2.1.2 + dev: false + engines: + node: '>=6.0' + resolution: + integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + /deepmerge/4.2.2: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + /depd/1.1.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + /destroy/1.0.4: + dev: false + resolution: + integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + /ee-first/1.1.1: + dev: false + resolution: + integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + /encodeurl/1.0.2: + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + /encoding-negotiator/2.0.1: + dev: false + engines: + node: '>=10.13.0' + resolution: + integrity: sha512-GSK7qphNR4iPcejfAlZxKDoz3xMhnspwImK+Af5WhePS9jUpK/Oh7rUdyENWu+9rgDflOCTmAojBsgsvM8neAQ== + /escape-html/1.0.3: + dev: false + resolution: + integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + /etag/1.8.1: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + /fast-decode-uri-component/1.0.1: + dev: false + resolution: + integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + /fast-deep-equal/3.1.3: + dev: false + resolution: + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + /fast-json-stable-stringify/2.1.0: + dev: false + resolution: + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + /fast-json-stringify/2.7.13: + dependencies: + ajv: 6.12.6 + deepmerge: 4.2.2 + rfdc: 1.3.0 + string-similarity: 4.0.4 + dev: false + engines: + node: '>= 10.0.0' + resolution: + integrity: sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA== + /fast-redact/3.1.1: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A== + /fast-safe-stringify/2.1.1: + dev: false + resolution: + integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + /fastify-error/0.3.1: + dev: false + resolution: + integrity: sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ== + /fastify-formbody/5.2.0: + dependencies: + fastify-plugin: 3.0.0 + dev: false + resolution: + integrity: sha512-d8Y5hCL82akPyoFiXh2wYOm3es0pV9jqoPo3pO9OV2cNF0cQx39J5WAVXzCh4MSt9Z2qF4Fy5gHlvlyESwjtvg== + /fastify-plugin/3.0.0: + dev: false + resolution: + integrity: sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w== + /fastify-plugin/3.0.1: + dev: false + resolution: + integrity: sha512-qKcDXmuZadJqdTm6vlCqioEbyewF60b/0LOFCcYN1B6BIZGlYJumWWOYs70SFYLDAH4YqdE1cxH/RKMG7rFxgA== + /fastify-static/4.6.1: + dependencies: + content-disposition: 0.5.4 + encoding-negotiator: 2.0.1 + fastify-plugin: 3.0.1 + glob: 7.2.0 + p-limit: 3.1.0 + readable-stream: 3.6.0 + send: 0.17.2 + dev: false + resolution: + integrity: sha512-vy7N28U4AMhuOim12ZZWHulEE6OQKtzZbHgiB8Zj4llUuUQXPka0WHAQI3njm1jTCx4W6fixUHfpITxweMtAIA== + /fastify/3.28.0: + dependencies: + '@fastify/ajv-compiler': 1.1.0 + abstract-logging: 2.0.1 + avvio: 7.2.5 + fast-json-stringify: 2.7.13 + fastify-error: 0.3.1 + find-my-way: 4.5.1 + flatstr: 1.0.12 + light-my-request: 4.9.0 + pino: 6.14.0 + process-warning: 1.0.0 + proxy-addr: 2.0.7 + rfdc: 1.3.0 + secure-json-parse: 2.4.0 + semver: 7.3.7 + tiny-lru: 8.0.2 + dev: false + resolution: + integrity: sha512-LAQtGllpkRe8L6Tpf3zdbvXzXFOrgaWV3Tbvp3xMv9ngcr9zht9U2/mo5zq9qp9kplSiBJ0w43aVAMqv6PBMbw== + /fastq/1.13.0: + dependencies: + reusify: 1.0.4 + dev: false + resolution: + integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + /find-my-way/4.5.1: + dependencies: + fast-decode-uri-component: 1.0.1 + fast-deep-equal: 3.1.3 + safe-regex2: 2.0.0 + semver-store: 0.3.0 + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-kE0u7sGoUFbMXcOG/xpkmz4sRLCklERnBcg7Ftuu1iAxsfEt2S46RLJ3Sq7vshsEy2wJT2hZxE58XZK27qa8kg== + /flatstr/1.0.12: + dev: false + resolution: + integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== + /forwarded/0.2.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + /fresh/0.5.2: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + /fs.realpath/1.0.0: + dev: false + resolution: + integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + /glob/7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: false + resolution: + integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + /handlebars/4.7.7: + dependencies: + minimist: 1.2.5 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + dev: false + engines: + node: '>=0.4.7' + hasBin: true + optionalDependencies: + uglify-js: 3.13.3 + resolution: + integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== + /hashlru/2.3.0: + dev: false + resolution: + integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== + /http-errors/1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + /inflight/1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: false + resolution: + integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + /inherits/2.0.4: + dev: false + resolution: + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + /ipaddr.js/1.9.1: + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + /json-schema-traverse/0.4.1: + dev: false + resolution: + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + /json-schema-traverse/1.0.0: + dev: false + resolution: + integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + /light-my-request/4.9.0: + dependencies: + ajv: 8.11.0 + cookie: 0.4.2 + process-warning: 1.0.0 + set-cookie-parser: 2.4.8 + dev: false + resolution: + integrity: sha512-b1U3z4OVPoO/KanT14NRkXMr9rRtXAiq0ORqNrqhDyb5bGkZjAdEc6GRN1GWCfgaLBG+aq73qkCLDNeB3c2sLw== + /lru-cache/6.0.0: + dependencies: + yallist: 4.0.0 + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + /mime/1.6.0: + dev: false + engines: + node: '>=4' + hasBin: true + resolution: + integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + /minimatch/3.1.2: + dependencies: + brace-expansion: 1.1.11 + dev: false + resolution: + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + /minimist/1.2.5: + dev: false + resolution: + integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + /ms/2.0.0: + dev: false + resolution: + integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + /ms/2.1.2: + dev: false + resolution: + integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + /ms/2.1.3: + dev: false + resolution: + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + /neo-async/2.6.2: + dev: false + resolution: + integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + /on-finished/2.3.0: + dependencies: + ee-first: 1.1.1 + dev: false + engines: + node: '>= 0.8' + resolution: + integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + /once/1.4.0: + dependencies: + wrappy: 1.0.2 + dev: false + resolution: + integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + /p-limit/3.1.0: + dependencies: + yocto-queue: 0.1.0 + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + /path-is-absolute/1.0.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + /pino-std-serializers/3.2.0: + dev: false + resolution: + integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== + /pino/6.14.0: + dependencies: + fast-redact: 3.1.1 + fast-safe-stringify: 2.1.1 + flatstr: 1.0.12 + pino-std-serializers: 3.2.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + sonic-boom: 1.4.1 + dev: false + hasBin: true + resolution: + integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg== + /point-of-view/5.2.0: + dependencies: + fastify-plugin: 3.0.1 + hashlru: 2.3.0 + dev: false + resolution: + integrity: sha512-PYoeqEunutxZTmNih6NXXoz8xZZopzw2MWgBoKPLcofOJNagEoXVpzbHT30AkK/9ArKjJYrvV6iU8JAg87+VMw== + /process-warning/1.0.0: + dev: false + resolution: + integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== + /proxy-addr/2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: false + engines: + node: '>= 0.10' + resolution: + integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + /punycode/2.1.1: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + /queue-microtask/1.2.3: + dev: false + resolution: + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + /quick-format-unescaped/4.0.4: + dev: false + resolution: + integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + /range-parser/1.2.1: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + /readable-stream/3.6.0: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + engines: + node: '>= 6' + resolution: + integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + /require-from-string/2.0.2: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + /ret/0.2.2: + dev: false + engines: + node: '>=4' + resolution: + integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== + /reusify/1.0.4: + dev: false + engines: + iojs: '>=1.0.0' + node: '>=0.10.0' + resolution: + integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + /rfdc/1.3.0: + dev: false + resolution: + integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + /safe-buffer/5.2.1: + dev: false + resolution: + integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + /safe-regex2/2.0.0: + dependencies: + ret: 0.2.2 + dev: false + resolution: + integrity: sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== + /secure-json-parse/2.4.0: + dev: false + resolution: + integrity: sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg== + /semver-store/0.3.0: + dev: false + resolution: + integrity: sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg== + /semver/7.3.7: + dependencies: + lru-cache: 6.0.0 + dev: false + engines: + node: '>=10' + hasBin: true + resolution: + integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + /send/0.17.2: + dependencies: + debug: 2.6.9 + depd: 1.1.2 + destroy: 1.0.4 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 1.8.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: false + engines: + node: '>= 0.8.0' + resolution: + integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== + /set-cookie-parser/2.4.8: + dev: false + resolution: + integrity: sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== + /setprototypeof/1.2.0: + dev: false + resolution: + integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + /sonic-boom/1.4.1: + dependencies: + atomic-sleep: 1.0.0 + flatstr: 1.0.12 + dev: false + resolution: + integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== + /source-map/0.6.1: + dev: false + engines: + node: '>=0.10.0' + resolution: + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + /statuses/1.5.0: + dev: false + engines: + node: '>= 0.6' + resolution: + integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + /string-similarity/4.0.4: + dev: false + resolution: + integrity: sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== + /string_decoder/1.3.0: + dependencies: + safe-buffer: 5.2.1 + dev: false + resolution: + integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + /tiny-lru/8.0.2: + dev: false + engines: + node: '>=6' + resolution: + integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg== + /toidentifier/1.0.1: + dev: false + engines: + node: '>=0.6' + resolution: + integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + /uglify-js/3.13.3: + dev: false + engines: + node: '>=0.8.0' + hasBin: true + optional: true + resolution: + integrity: sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig== + /uri-js/4.4.1: + dependencies: + punycode: 2.1.1 + dev: false + resolution: + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + /util-deprecate/1.0.2: + dev: false + resolution: + integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + /wordwrap/1.0.0: + dev: false + resolution: + integrity: sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= + /wrappy/1.0.2: + dev: false + resolution: + integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + /yallist/4.0.0: + dev: false + resolution: + integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + /yocto-queue/0.1.0: + dev: false + engines: + node: '>=10' + resolution: + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +registry: 'https://registry.npmjs.org/' +shrinkwrapMinorVersion: 9 +shrinkwrapVersion: 3 +specifiers: + fastify: ^3.28.0 + fastify-formbody: ^5.2.0 + fastify-static: ^4.6.1 + handlebars: ^4.7.7 + point-of-view: ^5.2.0 diff --git a/tmp b/tmp deleted file mode 100644 index 8b13789..0000000 --- a/tmp +++ /dev/null @@ -1 +0,0 @@ -