diff --git a/bun.lock b/bun.lock index 615ac43..a76e259 100644 --- a/bun.lock +++ b/bun.lock @@ -13,6 +13,7 @@ "gsap": "^3.13.0", "leaflet": "^1.9.4", "lenis": "^1.3.4", + "shiki": "^3.8.1", "winston": "^3.17.0", }, "devDependencies": { @@ -152,6 +153,20 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.44.2", "", { "os": "win32", "cpu": "x64" }, "sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA=="], + "@shikijs/core": ["@shikijs/core@3.8.1", "", { "dependencies": { "@shikijs/types": "3.8.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "sha512-uTSXzUBQ/IgFcUa6gmGShCHr4tMdR3pxUiiWKDm8pd42UKJdYhkAYsAmHX5mTwybQ5VyGDgTjW4qKSsRvGSang=="], + + "@shikijs/engine-javascript": ["@shikijs/engine-javascript@3.8.1", "", { "dependencies": { "@shikijs/types": "3.8.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.3" } }, "sha512-rZRp3BM1llrHkuBPAdYAzjlF7OqlM0rm/7EWASeCcY7cRYZIrOnGIHE9qsLz5TCjGefxBFnwgIECzBs2vmOyKA=="], + + "@shikijs/engine-oniguruma": ["@shikijs/engine-oniguruma@3.8.1", "", { "dependencies": { "@shikijs/types": "3.8.1", "@shikijs/vscode-textmate": "^10.0.2" } }, "sha512-KGQJZHlNY7c656qPFEQpIoqOuC4LrxjyNndRdzk5WKB/Ie87+NJCF1xo9KkOUxwxylk7rT6nhlZyTGTC4fCe1g=="], + + "@shikijs/langs": ["@shikijs/langs@3.8.1", "", { "dependencies": { "@shikijs/types": "3.8.1" } }, "sha512-TjOFg2Wp1w07oKnXjs0AUMb4kJvujML+fJ1C5cmEj45lhjbUXtziT1x2bPQb9Db6kmPhkG5NI2tgYW1/DzhUuQ=="], + + "@shikijs/themes": ["@shikijs/themes@3.8.1", "", { "dependencies": { "@shikijs/types": "3.8.1" } }, "sha512-Vu3t3BBLifc0GB0UPg2Pox1naTemrrvyZv2lkiSw3QayVV60me1ujFQwPZGgUTmwXl1yhCPW8Lieesm0CYruLQ=="], + + "@shikijs/types": ["@shikijs/types@3.8.1", "", { "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-5C39Q8/8r1I26suLh+5TPk1DTrbY/kn3IdWA5HdizR0FhlhD05zx5nKCqhzSfDHH3p4S0ZefxWd77DLV+8FhGg=="], + + "@shikijs/vscode-textmate": ["@shikijs/vscode-textmate@10.0.2", "", {}, "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg=="], + "@sveltejs/acorn-typescript": ["@sveltejs/acorn-typescript@1.0.5", "", { "peerDependencies": { "acorn": "^8.9.0" } }, "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ=="], "@sveltejs/adapter-auto": ["@sveltejs/adapter-auto@6.0.1", "", { "peerDependencies": { "@sveltejs/kit": "^2.0.0" } }, "sha512-mcWud3pYGPWM2Pphdj8G9Qiq24nZ8L4LB7coCUckUEy5Y7wOWGJ/enaZ4AtJTcSm5dNK1rIkBRoqt+ae4zlxcQ=="], @@ -204,6 +219,8 @@ "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@types/leaflet": ["@types/leaflet@1.9.20", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-rooalPMlk61LCaLOvBF2VIf9M47HgMQqi5xQ9QRi7c8PkdIe0WrIi5IxXUXQjAdL0c+vcQ01mYWbthzmp9GHWw=="], "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], @@ -216,6 +233,8 @@ "@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="], "abortcontroller-polyfill": ["abortcontroller-polyfill@1.7.8", "", {}, "sha512-9f1iZ2uWh92VcrU9Y8x+LdM4DLj75VE0MJB8zuF1iUnroEptStw+DQ8EQPMUdfe5k+PkB1uUfDQfWbhstH8LrQ=="], @@ -230,6 +249,12 @@ "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], + "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], + + "character-entities-html4": ["character-entities-html4@2.1.0", "", {}, "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA=="], + + "character-entities-legacy": ["character-entities-legacy@3.0.0", "", {}, "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ=="], + "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], @@ -246,6 +271,8 @@ "colorspace": ["colorspace@1.1.4", "", { "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" } }, "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w=="], + "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "commondir": ["commondir@1.0.1", "", {}, "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg=="], "cookie": ["cookie@0.6.0", "", {}, "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw=="], @@ -256,10 +283,14 @@ "deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "detect-libc": ["detect-libc@2.0.4", "", {}, "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA=="], "devalue": ["devalue@5.1.1", "", {}, "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw=="], + "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], + "enabled": ["enabled@2.0.0", "", {}, "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="], "enhanced-resolve": ["enhanced-resolve@5.18.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ=="], @@ -290,6 +321,12 @@ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hast-util-to-html": ["hast-util-to-html@9.0.5", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "ccount": "^2.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-whitespace": "^3.0.0", "html-void-elements": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", "stringify-entities": "^4.0.0", "zwitch": "^2.0.4" } }, "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw=="], + + "hast-util-whitespace": ["hast-util-whitespace@3.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw=="], + + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + "inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="], "is-arrayish": ["is-arrayish@0.3.2", "", {}, "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="], @@ -348,8 +385,20 @@ "magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="], + "mdast-util-to-hast": ["mdast-util-to-hast@13.2.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "@ungap/structured-clone": "^1.0.0", "devlop": "^1.0.0", "micromark-util-sanitize-uri": "^2.0.0", "trim-lines": "^3.0.0", "unist-util-position": "^5.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" } }, "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA=="], + "mdsvex": ["mdsvex@0.12.6", "", { "dependencies": { "@types/mdast": "^4.0.4", "@types/unist": "^2.0.3", "prism-svelte": "^0.4.7", "prismjs": "^1.17.1", "unist-util-visit": "^2.0.1", "vfile-message": "^2.0.4" }, "peerDependencies": { "svelte": "^3.56.0 || ^4.0.0 || ^5.0.0-next.120" } }, "sha512-pupx2gzWh3hDtm/iDW4WuCpljmyHbHi34r7ktOqpPGvyiM4MyfNgdJ3qMizXdgCErmvYC9Nn/qyjePy+4ss9Wg=="], + "micromark-util-character": ["micromark-util-character@2.1.1", "", { "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" } }, "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q=="], + + "micromark-util-encode": ["micromark-util-encode@2.0.1", "", {}, "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw=="], + + "micromark-util-sanitize-uri": ["micromark-util-sanitize-uri@2.0.1", "", { "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", "micromark-util-symbol": "^2.0.0" } }, "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ=="], + + "micromark-util-symbol": ["micromark-util-symbol@2.0.1", "", {}, "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q=="], + + "micromark-util-types": ["micromark-util-types@2.0.2", "", {}, "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA=="], + "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], @@ -368,6 +417,10 @@ "one-time": ["one-time@1.0.0", "", { "dependencies": { "fn.name": "1.x.x" } }, "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g=="], + "oniguruma-parser": ["oniguruma-parser@0.12.1", "", {}, "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w=="], + + "oniguruma-to-es": ["oniguruma-to-es@4.3.3", "", { "dependencies": { "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } }, "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg=="], + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], @@ -386,10 +439,18 @@ "prismjs": ["prismjs@1.30.0", "", {}, "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw=="], + "property-information": ["property-information@7.1.0", "", {}, "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ=="], + "readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], + "regex": ["regex@6.0.1", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA=="], + + "regex-recursion": ["regex-recursion@6.0.2", "", { "dependencies": { "regex-utilities": "^2.3.0" } }, "sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg=="], + + "regex-utilities": ["regex-utilities@2.3.0", "", {}, "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng=="], + "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="], "rollup": ["rollup@4.44.2", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.44.2", "@rollup/rollup-android-arm64": "4.44.2", "@rollup/rollup-darwin-arm64": "4.44.2", "@rollup/rollup-darwin-x64": "4.44.2", "@rollup/rollup-freebsd-arm64": "4.44.2", "@rollup/rollup-freebsd-x64": "4.44.2", "@rollup/rollup-linux-arm-gnueabihf": "4.44.2", "@rollup/rollup-linux-arm-musleabihf": "4.44.2", "@rollup/rollup-linux-arm64-gnu": "4.44.2", "@rollup/rollup-linux-arm64-musl": "4.44.2", "@rollup/rollup-linux-loongarch64-gnu": "4.44.2", "@rollup/rollup-linux-powerpc64le-gnu": "4.44.2", "@rollup/rollup-linux-riscv64-gnu": "4.44.2", "@rollup/rollup-linux-riscv64-musl": "4.44.2", "@rollup/rollup-linux-s390x-gnu": "4.44.2", "@rollup/rollup-linux-x64-gnu": "4.44.2", "@rollup/rollup-linux-x64-musl": "4.44.2", "@rollup/rollup-win32-arm64-msvc": "4.44.2", "@rollup/rollup-win32-ia32-msvc": "4.44.2", "@rollup/rollup-win32-x64-msvc": "4.44.2", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg=="], @@ -402,16 +463,22 @@ "set-cookie-parser": ["set-cookie-parser@2.7.1", "", {}, "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ=="], + "shiki": ["shiki@3.8.1", "", { "dependencies": { "@shikijs/core": "3.8.1", "@shikijs/engine-javascript": "3.8.1", "@shikijs/engine-oniguruma": "3.8.1", "@shikijs/langs": "3.8.1", "@shikijs/themes": "3.8.1", "@shikijs/types": "3.8.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } }, "sha512-+MYIyjwGPCaegbpBeFN9+oOifI8CKiKG3awI/6h3JeT85c//H2wDW/xCJEGuQ5jPqtbboKNqNy+JyX9PYpGwNg=="], + "simple-swizzle": ["simple-swizzle@0.2.2", "", { "dependencies": { "is-arrayish": "^0.3.1" } }, "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg=="], "sirv": ["sirv@3.0.1", "", { "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A=="], "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], + "space-separated-tokens": ["space-separated-tokens@2.0.2", "", {}, "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q=="], + "stack-trace": ["stack-trace@0.0.10", "", {}, "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg=="], "string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="], + "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], "svelte": ["svelte@5.35.6", "", { "dependencies": { "@ampproject/remapping": "^2.3.0", "@jridgewell/sourcemap-codec": "^1.5.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/estree": "^1.0.5", "acorn": "^8.12.1", "aria-query": "^5.3.1", "axobject-query": "^4.1.0", "clsx": "^2.1.1", "esm-env": "^1.2.1", "esrap": "^2.1.0", "is-reference": "^3.0.3", "locate-character": "^3.0.0", "magic-string": "^0.30.11", "zimmerframe": "^1.1.2" } }, "sha512-p7PVLQYrvCxJuxzGfOv/l71hVuHC6EZk5UDjbt/bndMYaBcUV5sFjDsj+PSIYvz1vcfbG6inX83/xIUeik1xGA=="], @@ -432,12 +499,16 @@ "tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], + "triple-beam": ["triple-beam@1.4.1", "", {}, "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg=="], "typescript": ["typescript@5.8.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ=="], "unist-util-is": ["unist-util-is@4.1.0", "", {}, "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg=="], + "unist-util-position": ["unist-util-position@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA=="], + "unist-util-stringify-position": ["unist-util-stringify-position@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.2" } }, "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g=="], "unist-util-visit": ["unist-util-visit@2.0.3", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" } }, "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q=="], @@ -446,6 +517,8 @@ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "vfile-message": "^4.0.0" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], + "vfile-message": ["vfile-message@2.0.4", "", { "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" } }, "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ=="], "vite": ["vite@7.0.4", "", { "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", "picomatch": "^4.0.2", "postcss": "^8.5.6", "rollup": "^4.40.0", "tinyglobby": "^0.2.14" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", "less": "^4.0.0", "lightningcss": "^1.21.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA=="], @@ -464,6 +537,8 @@ "zimmerframe": ["zimmerframe@1.1.2", "", {}, "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w=="], + "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@rollup/plugin-commonjs/is-reference": ["is-reference@1.2.1", "", { "dependencies": { "@types/estree": "*" } }, "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ=="], "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.4.4", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.3", "tslib": "^2.4.0" }, "bundled": true }, "sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g=="], @@ -478,6 +553,24 @@ "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "hast-util-to-html/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "mdast-util-to-hast/unist-util-visit": ["unist-util-visit@5.0.0", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0", "unist-util-visit-parents": "^6.0.0" } }, "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg=="], + + "unist-util-position/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "vfile/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "vfile/vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-stringify-position": "^4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime/@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="], + + "mdast-util-to-hast/unist-util-visit/@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], + + "mdast-util-to-hast/unist-util-visit/unist-util-is": ["unist-util-is@6.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw=="], + + "mdast-util-to-hast/unist-util-visit/unist-util-visit-parents": ["unist-util-visit-parents@6.0.1", "", { "dependencies": { "@types/unist": "^3.0.0", "unist-util-is": "^6.0.0" } }, "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw=="], + + "vfile/vfile-message/unist-util-stringify-position": ["unist-util-stringify-position@4.0.0", "", { "dependencies": { "@types/unist": "^3.0.0" } }, "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ=="], } } diff --git a/package.json b/package.json index afdad59..b2b6215 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "gsap": "^3.13.0", "leaflet": "^1.9.4", "lenis": "^1.3.4", + "shiki": "^3.8.1", "winston": "^3.17.0" } } diff --git a/src/app.css b/src/app.css index e557217..594549d 100644 --- a/src/app.css +++ b/src/app.css @@ -28,19 +28,61 @@ --color-light: #FCF7C4; --color-pink: #E472AB; --color-pink-dark: #A65A80; + --color-pink-strong: #e64596; } .prose { --tw-prose-body: #15314a; --tw-prose-headings: #214769; - --tw-prose-links: var(--color-pink); + --prose-border: rgba(47, 94, 136, 0.5); + --tw-prose-links: var(--color-pink-strong); --tw-prose-bold: var(--tw-prose-body); - --tw-prose-td-borders: rgba(47, 94, 136, 0.5); - --tw-prose-th-borders: rgba(47, 94, 136, 0.5); + --tw-prose-td-borders: var(--prose-border); + --tw-prose-th-borders: var(--prose-border); --tw-prose-bullets: var(--color-pink) } .prose h1 { color: #2f5e88; + position: relative; + width: max-content; +} +.prose h1::after { + content: ""; + position: absolute; + bottom: 0; + left: -5%; + right: -5%; + background: url(/underline.svg) no-repeat center; + background-size: cover; + height: 8px; + z-index: -1; +} +.prose code::before, .prose code::after { + display: none +} +.prose :not(.shiki) code { + font-weight: normal; + font-size: 0.89rem; + background: #ffffff; + padding: 0.5em 0.6rem; + border-radius: 0.375rem; + white-space: nowrap; +} +.prose blockquote p::before, .prose blockquote p::after { + display: none; +} +.prose blockquote { + font-style: normal; + opacity: 0.7; + border-color: var(--prose-border); +} + +/* for the guide */ + +.notebook { + @apply bg-white bg-clip-padding p-8 mt-8; + border-top: 64px solid transparent; + border-image: url('/guide/notebook-border.png') 72 round; } @keyframes hover { diff --git a/src/lib/components/CloudImage.svelte b/src/lib/components/CloudImage.svelte index 5a7a420..6dc6812 100644 --- a/src/lib/components/CloudImage.svelte +++ b/src/lib/components/CloudImage.svelte @@ -3,7 +3,7 @@ export let alt: string = ''; -
+
@@ -96,11 +96,13 @@ mask-type: luminance; mask-mode: luminance; mask-composite: exclude, add, add, add, add, add, add, add, add; + height: 100%; } img { max-width: 100%; - height: auto; + height: 100%; + object-fit: contain; display: block; margin: 0; } diff --git a/src/lib/components/MouseTrailer.svelte b/src/lib/components/MouseTrailer.svelte new file mode 100644 index 0000000..0963106 --- /dev/null +++ b/src/lib/components/MouseTrailer.svelte @@ -0,0 +1,213 @@ + + + + + + + + + + + diff --git a/src/lib/components/Tooltip.svelte b/src/lib/components/Tooltip.svelte new file mode 100644 index 0000000..e2e3d89 --- /dev/null +++ b/src/lib/components/Tooltip.svelte @@ -0,0 +1,44 @@ + + +
+ + + + + + +
+
+ {@html content} +
+ +
+
diff --git a/src/routes/guide/+layout.svelte b/src/routes/guide/+layout.svelte index 3eefc95..36692a4 100644 --- a/src/routes/guide/+layout.svelte +++ b/src/routes/guide/+layout.svelte @@ -33,11 +33,11 @@
-
-
+
+
-
+
diff --git a/src/routes/guide/+page.svx b/src/routes/guide/+page.svx index 436d5a7..4e0c3c6 100644 --- a/src/routes/guide/+page.svx +++ b/src/routes/guide/+page.svx @@ -1,7 +1,11 @@ + + Welcome to Daydream 🫶 @@ -14,11 +18,13 @@ There’s no “perfect, by-the-book” way of organizing a hackathon. But there This guide is, and will always be, a work-in-progress. Despite popular belief, I, Deven Jadhav, am not an omnipotent Hackathon Deity™. I’m drawing from caffeinated hours spent staring at screens, lessons learned from organizing “great” hackathons (Scrapyard, Counterspell, etc), and my countless mistakes. -DM the Daydream Team if you have any ideas to improve this guide\! +DM the Daydream Team if you have any ideas to improve this guide\! ### **QUICKSTART GUIDE (very important\!\!)** -People ask me about hackathons a lot. They say *"Dev, how do I get started with running hackathons*" and I say *"hmmmmmmmm."* And then they say, "The f\*\*\* do you mean, Dev?" and then I say *"uhhhhhhhhhhhhh."* +People ask me about hackathons a lot. They say *"Dev, how do I run a hackathon?"* and I say *"hmmmmmmmm."* And then they say, *"The f\*\*\* you mean, Dev?"* and then I say *"uhhhhhhhhhhhhh."* + + So… this is an attempt to write down my thoughts on how to get started. @@ -28,46 +34,49 @@ From the perspective of attendees, these are the things that make hackathons inc * Adventures you go on (technical, physical, and emotional) * The projects you build (what ties everything together) + + However, there are some key tasks you need to complete before your hackathon: # **PART ONE: SETTING UP** -### **1\) Join [\#daydream](https://hackclub.slack.com/archives/C094GLLH2RX) channel on Slack:** +### **1\) [JOIN THE HACK CLUB SLACK\!\!](https://join.slack.com/t/hackclub/shared_invite/zt-39038sx6p-Xoaw5C~bOqQCUGs2hC6KHA) And the [\#daydream](https://hackclub.slack.com/archives/C094GLLH2RX) channel:** -SUPER IMPORTANT\!\! Slack is how we communicate with organizers. Make a -channel for your city’s *Daydream* if it doesn’t exist already. +SUPER IMPORTANT\!\! Slack is how we communicate with organizers. If your city doesn’t have a Daydream channel yet, make one\! -### - -### + ### **2\) Assemble… a team of 3-6 organizers\!** -Reach out to people you enjoy working with\! Start with a slack channel and a shared to-do list (including steps in this guide\!). Delegate tasks based on what people want to do. +
+ +
+ +Reach out to people you enjoy working with\! Start with a Slack channel and a shared to-do list (including steps in this guide\!). Delegate tasks based on what people want to do. | YES ✅ | AVOID ❌ | | :---- | :---- | -| Diverse set of skills (ex: Sponsorship, Web Dev, Marketing, Game Dev for workshops) Good vibes and willing to put 100x enthusiasm for the day-of | Creating a large team (inefficient, clunky) Too small of a team (NOT 1 person) Trying to organize everything with fancy project management tools (dumb) | +| Diverse set of skills (ex: Sponsorship, Web Dev, Marketing, Game Dev for workshops) Good vibes and willing to put 100x enthusiasm for the day-of | Creating a large team (inefficient) Too small of a team (NOT 1 person) Trying to organize everything with fancy project management tools | -### **3\) Create an HCB account:** +I’d HIGHLY suggest meeting your team in-person to get to know everyone. Good vibes = happy team = fun organizing. +### **3\) Create a Hack Club Bank (HCB) account:** + +
+
HCB is our very own money-handling platform. It gives you a 501(c)(3) nonprofit status *and* a bank account. That way, you can receive donations and get debit cards to spend money\! We have partnered with HCB to offer you Daydream accounts—with no extra fees. -The PoC will receive a link to an HCB org for your Daydream event, and there’ll be an onboarding video so you can get started. +The PoC will get a link to your Daydream event’s HCB org, and an onboarding video to help you get started\! +
+
+
+ +
+
+
-### - -### - -### - -### - -### - -### ### **4\) Get a custom email** @@ -75,40 +84,11 @@ Want a [city@daydream.hackclub.com](mailto:city@daydream.hackclub.com) email? Fi (also, it’s kind of awesome) + + ### **5\) Setup YOUR Daydream website:** -You can either choose to make your own design with custom art, etc or clone our standard template. - -#### Wanna Use Our Template? Here’s How: - -First, fork the repository: - -1. Go to [https://github.com/hackclub/daydream](https://github.com/hackclub/daydream) -2. Click “Fork” in the top right -3. Create the fork in your account - -Then, clone your fork. In a terminal, run: -git clone [https://github.com/YOUR\_USERNAME/daydream.git](https://github.com/YOUR_USERNAME/daydream.git) -cd daydream - -Once you have a local copy of the site, you need to duplicate the example site. In the src/routes folder, copy the folder called example, and rename the copy to whatever you want your URL to be. For example, if you want your site to be at [daydream.hackclub.com/vermont](http://daydream.hackclub.com/vermont), name the folder vermont. - -Next, you need to configure your event. Open src/routes/yourcity/+page.svelte in a text editor, and look at the top. Change all the fields to the information for your event\! - -*\[codeblock here\]* - -Lastly, submit your site\! Use Git to push your changes: - -git add . -git commit \-m "Add \[Your City\] event page" -git push - -Then, go back to your repository, click "Contribute" → "Open pull request," and follow the instructions\! - -#### Wanna make your own site? - -If you want to make your own site, it needs to be another page on [daydream.hackclub.com](http://daydream.hackclub.com). The site is written in SvelteKit, but you can do anything else within those bounds\! -Note: If you choose to make your own site, it needs to be mobile responsive and high quality (vibecoded AI slop is not allowed). +You can either choose to make your own design with custom art, etc or clone our [standard template.](/guide/website) ### **6\) Make a Budget (template [here](https://docs.google.com/spreadsheets/d/1udOaDK_OYa_b8Y8myCHOrXVHrf6H45vZqmqqbhkiUBA/edit?usp=sharing))** @@ -122,27 +102,39 @@ A good hackathon budget generally only needs three things: But a *great* hackathon needs: -* Good Food (Chipotle, CAVA, Bagels, etc. and snacks) -* Supplies (power strips, surprises, etc.) +* Good Food (Chipotle, CAVA, bagels, etc. and snacks) +* Supplies (power strips, tablecloths, surprises, etc.) * Merch * Decorations * Prizes +Track your cost **PER ATTENDEE**. This will help prevent you from spending too much\! +Well-planned budgets have: + +* “Cost per Attendee” column for each item. +* Must be done by **SEPTEMBER 13, 2025.** (but ideally finished AT LEAST two weeks earlier) + +Estimate your attendees as **50% of total signups**. It might seem unintuitive, but from all our experience: half of the people who sign up show up\! + +You will get $7.50 per sign-up from HQ (this number will depend on where you’re running your event) to spend on food. Spend wisely\! + # **PART TWO: Lock-In** ### **1\) Finding a home… (Venue)** -Your hackathon cannot happen if you don’t have a venue. You could have a million dollars in sponsors but none of it matters if you have nowhere to host your participants. Finding a venue is arguably the most important part of hosting a hackathon. **Lock in**. +Your hackathon cannot happen if you don’t have a venue. You could have a million dollars in sponsors but none of it matters if you have nowhere to host your participants. Finding a venue is arguably the most important part of hosting a hackathon. **Lock in**. + +**This should be your first priority.** Reach out to cafes, makerspaces, libraries, and even your school if you’re in a pinch. What makes an awesome venue: * It’s free\!\! Don’t drop $5000 on a venue that’s 2 rooms and a couch. -* Roomy (Minimum: One main space, two sleeping quarters, washrooms, please AV) +* Roomy (Minimum: One main space, two sleeping quarters, washrooms, TV/projector, speakers/PA) * 24 hours space (Slumber party-esque\!) -Check out our [Venue Tab](?tab=t.2yya5jkyl23m) for more info. +Check out our [Venue Guide](/venue) for more info. ### **2\) Get Money** @@ -158,7 +150,7 @@ PLEASE check out our sponsorship guide. ### **3\) Outreach** -Outreach is an ESSENTIAL part of hackathons. No participants → No game jam. But how do you reach the ✨right people?✨ +Outreach is an ESSENTIAL part of hackathons. No participants → No game jam. But how do you reach the *✨right people*?✨ * Email CS teachers: Make a video with your team and ask them to CC their students or post on Google Classroom\! Check out JPEG’s video ([**here)**](https://www.youtube.com/watch?v=DVTepenFeCI). @@ -189,9 +181,9 @@ Key rules for organizers (Please read OUT LOUD with your team\!): * If you’ve made it this far, DM [@renran sun](https://hackclub.slack.com/archives/D096V6RDJ9E) for a custom sticker * **No phones allowed\!** DO NOT use your phone in front of participants – no matter what. Go to the washrooms, organizers’ room, HQ’s basement… * **EVERYONE has to ship** - \-If you have 10 teams at your hackathon, *all* 10 must have a project that’s visitable by anyone uploaded to [itch.io](http://itch.io). - \-If a team doesn’t “ship” a game (meaning Podium doesn’t approve it), then they can’t get ANY merch. No t-shirt, no hoodie, no beanie, no squishmallow (whatever you end up doing). Locking swag behind shipping is the best way to run an actual, successful event. - \-We are aiming for 100% ship rates. If your event has a ship rate less than 70%, you ran a subpar event and that reflects on you, the point of contact. We chose you because we trusted you to run a good event. + * If you have 10 teams at your hackathon, *all* 10 must have a project that’s visitable by anyone uploaded to [itch.io](http://itch.io). + * If a team doesn’t “ship” a game (meaning Podium doesn’t approve it), then they can’t get ANY merch. No t-shirt, no hoodie, no beanie, no squishmallow (whatever you end up doing). Locking swag behind shipping is the best way to run an actual, successful event. + * We are aiming for 100% ship rates. If your event has a ship rate less than 70%, you ran a subpar event and that reflects on you, the point of contact. We chose you because we trusted you to run a good event. ### **Resources \+ Support** @@ -201,13 +193,16 @@ That being said, Hack Club HQ is not organizing this event directly. We will do | Contact method | Expected response time | When to use? | | :---- | :---- | :---- | -| \#daydream-help in the Hack Club Slack | 24 hours or sooner | Any general questions\! Especially helpful for things that other organizers can answer for you. | +| [\#daydream](https://hackclub.slack.com/archives/C094GLLH2RX) in the Hack Club Slack | 24 hours or sooner | Any general questions\! Especially helpful for things that other organizers can answer for you. | | Email [daydream@hackclub.com](mailto:daydream@hackclub.com) | 48 hours (Guaranteed response) | Anything that is high priority, involves personal information, or cannot be discussed publicly | | Request a 30 minute call with a Daydream mentor (maximum of two calls a month) | You can usually book a call 3-4 days in advance\! | For more complicated situations that need context, or when you need advice from someone experienced in different situations\! | +### **I need help.** + +And we’re here to give it to you. Reserve a 10 minute call with Meghana, RenRan, or Augie to talk about your event and any help you need\! + ### **What’s next?** You’re not just building a hackathon. You’re building a space where someone might code their very first game. Meet their best friend. Find their love ♥️ (for tech). -That’s our daydream. And we’re so, so excited to see what you’ll build. - +That’s our daydream. And we’re so, so excited to see what you’ll build. \ No newline at end of file diff --git a/src/routes/guide/branding/+page.svx b/src/routes/guide/branding/+page.svx index c196ff2..7f5c222 100644 --- a/src/routes/guide/branding/+page.svx +++ b/src/routes/guide/branding/+page.svx @@ -1,16 +1,10 @@ -# Branding - -[**Official Branding Guide**](https://www.figma.com/design/49QFs4NuXcnwAQ27FJdkhv/Daydream-Official-Branding-Guide?node-id=0-1&t=ZGH4Kviw2wL2tj1h-1) - -([https://www.figma.com/design/49QFs4NuXcnwAQ27FJdkhv/Daydream-Official-Branding-Guide?node-id=0-1\&t=ZGH4Kviw2wL2tj1h-1](https://www.figma.com/design/49QFs4NuXcnwAQ27FJdkhv/Daydream-Official-Branding-Guide?node-id=0-1&t=ZGH4Kviw2wL2tj1h-1)) - -![][image1] + Aesthetics are important. Very. -Especially if your city doesn’t have a bunch of coders (like Columbus), you need to make sure your branding and colors are good so that people will say “wow that looks super put-together and cool, maybe I should go to a hackathon even though I’ve never been to one before so I can get this kick-ass t-shirt.” - -You can always use the assets on the Daydream template site (or the main one, it’s [open source](https://github.com/hackclub/daydream)\!) +Especially if your city doesn’t have a bunch of coders, you need to make sure your branding and colors are good so that people will say “wow that looks super cool, maybe I should go even though I’ve never been before so I can get this kick-ass t-shirt.” Use the branding guide for: @@ -18,4 +12,54 @@ Use the branding guide for: * Posters * Your city’s custom merch -[image1]: \ No newline at end of file +[**Official Branding Guide Link**](https://www.figma.com/design/49QFs4NuXcnwAQ27FJdkhv/Daydream-Official-Branding-Guide?node-id=0-1&t=ZGH4Kviw2wL2tj1h-1) (CLICK [**HERE**](https://www.figma.com/design/49QFs4NuXcnwAQ27FJdkhv/Daydream-Official-Branding-Guide?node-id=0-1&t=ZGH4Kviw2wL2tj1h-1)) + + + +HQ will be sending each Daydream event ✨amazing✨ t-shirts, postcards, and stickers. + +But… Beyond that, merch is all on you. Find cheap places to get printed badges and lanyards (if you raise enough money, maybe you can make a simple PCB badge). [Order Hack Club posters](https://forms.hackclub.com/t/uzgyhTqvsFus) and put them up around your venue. + +**Note: ALWAYS prioritize participants’ merch above organizers’. DO NOT blow $500 on cool organizers’ merch when you could have gotten merch for participants.** + +Merch is what gets people to be excited at your event and what keeps them excited to keep attending *more* events. It’s free advertising whenever they go out and wear it. Imagine 100 different billboards walking about in your city after the event. + +Be creative: maybe you do stick-on patches, or bandanas, or custom bucket hats. The t-shirts are nice, but it adds a little pizazz to come up with something unique to your event. + +These were the Badges for Counterspell Ottawa (Printed paper in lanyard): +
+ Badge 1 + Badge 2 + Badge 3 + Badge 4 +
+ +These were the badges for Scrapyard Columbus: +
+ Badge 5 + Badge 6 +
+ +Use the assets given by the team and scrounge something up\! + +Expense is important, and it’s *incredibly* easy to go overboard with merch costs. Keep it reasonable. Make sure you’re buying the appropriate amount before you purchase any bulk order. + +If you’re printing something and it gives you the option to review the render before printing, ALWAYS review it. You DO NOT want to blow $500 on bandanas that are fluorescent yellow (from personal experience). + +Here’s a classic list of Hack Club Merch: + +* T-Shirts +* Stickers +* Postcards / Prints +* Name Badges +* Lanyards + +More fancy ones: + +* Pins +* Hoodies +* Something custom\! + +Note: HCB currently offers a $500 grant for jukebox ([jukebox.com](http://jukebox.com)) if your account has 10+ organizers/people who follows it. + +Jukebox is a custom sticker/postcard/prints shop\! \ No newline at end of file diff --git a/src/routes/guide/day-of/+page.svx b/src/routes/guide/day-of/+page.svx index c8e5b69..ec4cce0 100644 --- a/src/routes/guide/day-of/+page.svx +++ b/src/routes/guide/day-of/+page.svx @@ -1,19 +1,30 @@ -# Day-Of +## And… Action! 🎬 -## Step \#1: Run of Show +Congrats\! Hours staring at screens, late nights answering emails, worsening dark circles… You’ve now made it. -A run of show is a fleshed-out schedule *for organizers* that detail everything that’s happening before, during, and after the hackathon in each room. You can check out the run of show for Assemble [here](https://docs.google.com/spreadsheets/d/1yzOWtqHE9J9zVvyj6X0cs0AGMFE4TH2jPIh_np9LWRg/edit?usp=sharing) and for Scrapyard Columbus [here](https://docs.google.com/spreadsheets/d/1Lvtz6dF1KCmgVFp2D4B9jL6W1okyHak4ZEsGKH81lu4/edit?usp=sharing). +But… To make your Daydream the best event possible, here are THE THREE LAWS for Organizers™. -## Step \#2: Submit Projects\! +### **Law \#1: Be 100x your usual friendliness. 😄** -PLEASE make this clear at the OPENING CEREMONY +We all know that one barista or server. Or ridiculously extroverted person. Today, YOU are *them*. -All teams need a SHIPPED project. But… What is a “Shipped” Project? +Put their needs above yours. Get to know at least 10 new people. Constantly ask for their progress. -| YES ✅ | NO ❌ | -| :---- | :---- | -| 1\. Published on [itch.io](http://itch.io) 2\. Playable on someone else’s computer | Youtube Video Link A private game (not public) Google Drive Link (yes, this happens) Website Local host link | +You may ask: “How would I start a convo without being weird?” Don’t worry, I *gotchu*. ✨ Here are some ideas: -i.e. The games are NOT youtube videos. They shouldn’t need Java Development Kits (JDK). +* Ask to take a polaroid/photo of the team +* Ask about their project → To film them later. +* Ask if they want to brainstorm / need help / how they like it so far -It is on **you** as the point of contact if people do not ship. We chose you to run a good event, and this is how we measure if you do a good job. We want to see incredible projects from all over the world, and this is your chance to make that happen. +### **Law \#2: NO phone in front of participants.** +You know that awkward moment when someone you want to talk to is glued to their phone? + +Yes. Exactly. Participants need to feel like you’re approachable. So… DO NOT use your phone in front of them. Or any electronics (laptops, Ipad, etc.) It makes you look busy or unavailable or worse– uninterested. + +Run to the washrooms. Hide behind a table. I don’t care. PHONES in POCKETS. Always. + +### **Law \#3: Take Breaks** + +You’re human. You will burn out. Take 10 min breaks in the organizer’s room, sleep 4-8 hours if it’s a 24 hour event. + +The event depends on you running smoothly. But no one’s Superman. We need you rested and ready. Your teammates have your back. diff --git a/src/routes/guide/logistics/+page.svx b/src/routes/guide/logistics/+page.svx new file mode 100644 index 0000000..951c4af --- /dev/null +++ b/src/routes/guide/logistics/+page.svx @@ -0,0 +1,64 @@ +# **It’s All in the Details… (Logistics) 🌱** + +## **Step \#1: Run of Show** + +A run of show is a fleshed-out schedule *for organizers* that detail everything that’s happening before, during, and after the hackathon in each room. You can check out the run of shows for Assemble [here](https://docs.google.com/spreadsheets/d/1yzOWtqHE9J9zVvyj6X0cs0AGMFE4TH2jPIh_np9LWRg/edit?usp=sharing) and for Scrapyard Columbus [here](https://docs.google.com/spreadsheets/d/1Lvtz6dF1KCmgVFp2D4B9jL6W1okyHak4ZEsGKH81lu4/edit?usp=sharing). + +People you need the day of (please ask them early\!): + +* Someone with a car to run errands (Two preferably, one stays overnight) +* Mentors with Game Dev or hackathon experience +* Adult supervisors (One for every \~35 attendees) +* Person trained in first-aid + +## **Step \#2: All teams need a SHIPPED project** + +PLEASE make this clear at the OPENING CEREMONY + +What is a “Shipped” Project? + +| YES ✅ | NO ❌ | +| :---- | :---- | +| 1\. Published on [itch.io](http://itch.io) 2\. Playable on someone else’s computer | Youtube Video Link A private game (not public) Google Drive Link (yes, this happens) Website Local host link | + +i.e. The games are NOT youtube videos. They shouldn’t need Java Development Kits. + +It is on **you**, Point of Contact, if people do not ship. We chose you to run a good event. This is how we measure if you do a good job. + +The purpose of hackathons – and what makes it *great* for participants – is building awesome projects. And we want the world to see it. + +So… Make it happen\! + +## **Step \#3: Voting** + +Submissions WILL be pushed back by 30 minutes (historically accurate fact). So take that into account. + +Otherwise, voting is to be done through [podium.hackclub.com](http://podium.hackclub.com). Submitting their projects through podium automatically ensures their project is ✨shippable✨ (aka playable on another device). + +Podium will check if someone’s link works and is viable, and once they’re approved you can give attendees’ their t-shirts\! + +Podium allows peer-voting. We encourage you to set up a booth-like space and for participants to circulate and vote their favorite on Podium. Expo/science fair style. People will walk around to see demos of others’ projects and, once everyone has gone around, open voting on your event and let people choose their favorites\! + +Meghana’s verified Best Way to Vote is like this: +Each team is given either A or B (write it on people’s hands), and when demos start all the As will stay behind and show other people their project while the Bs go out and see everyone else’s project. After 10 minutes, all the Bs will come back to their booth and show everyone their project while As go out and see other people’s. After all that, open voting and see who tops the leaderboard\! + +## **Step \#4: Prizes** +Say it out loud: The point of a hackathon is not the prize. + +I’ve been to nation-wide university hackathons with $500+ worth of prize. It was cool, sure, but 1\) not winning crushes other people’s spirit and 2\) it encourages competition instead of cooperation. + +We want a helpful, encouraging environment. Not a competitive, Banking-esque one. + +The prize for each person on the winning team should be less than $30 USD. + +Giving a prize for the top 3 is usually the deal, but this can change depending on your event (and budget). Also, most events have “special categories” like Funniest or Best Design. These are organizer’s-pick, so that’ll have more logistics (organizers will have to gather in a room and talk, etc). + +## **Step \#5: Getting Waivers Signed** + +**Use the parent emails in the sign-up form**. Email all parents 3 weeks before the hackathon to remind them the event is happening, email them a week before the hackathon to remind them to sign their child’s waiver, and ask them to tell *other* parents so you can spread the word. + +They’re parents, so they have sympathy towards kids (especially since they’re a parent of teenagers). Use it. + + + + diff --git a/src/routes/guide/outreach/+page.svx b/src/routes/guide/outreach/+page.svx index 38b6000..88f7976 100644 --- a/src/routes/guide/outreach/+page.svx +++ b/src/routes/guide/outreach/+page.svx @@ -1,30 +1,73 @@ -# Outreach + + +# **The 5 Steps to *Outreach*** 📪 Outreach is an IMPORTANT part of hackathons. No participants → No game jam. But how do you reach the ✨right people? ✨ -**NOTE:** Only \~50-55% of sign-ups show up. The amount of people who sign the waiver will be closer to your actual attendance number. Be sure to send out waivers and waiver reminders often (and like 3 times the day before the event) +**NOTE:** Only \~50% of sign-ups show up. The amount of people who sign the waiver will be closer to your actual attendance number. Be sure to send out waivers and waiver reminders often (and like 3 times the day before the event)! ## STEP \#1: Email teachers -1) Use google maps to find schools within a 30 mile radius and then visit their websites. -2) Search for a staff/faculty directory and email literally all of them (or all tech teachers\!). -3) Make the email applicable (for them). +1. Find schools within a 30 mile radius (through Google Maps) and visit their websites. +2. Search for a staff/faculty directory and email all STEM teachers / homerooms. +3. Make the email applicable (for them). Ex: Talk about game physics\! -*Ex: Math teachers – game physics and vectors. Art teachers – designing sprites in [aseprite](https://www.aseprite.org/).* GUIDANCE COUNSELORS can be great\! - -Tip: Try to use “hackathon” instead of “game jam.” Most people know what a hackathon is but have NO idea what a game jam is. +Tip: Try to use “hackathon” instead of “game jam.” Most people know what a hackathon is but not a game jam. Here’s an email template\! -| Hi Susanne, I’m RenRan, a 17-year-old OCDSB student. I’m also organizing Ottawa’s first all-girls hackathon\! July 5-6th, we’re organizing JPEG, a 25-hour high school hackathon for 70+ girls at Carleton University. JPEG is affiliated with Hack Club, a global nonprofit supported by Dell and GitHub. Learning to code through hackathons helped me make some of my best memories—and friends. But, there are very few opportunities for high schoolers in Ottawa, let alone girls. That’s why we’re reaching out. You’re my friend’s favorite physics teacher at Nepean HS\! Would you be open to helping us reach more students by posting a quick classroom post with our website ([jpeg.hackclub.com](http://jpeg.hackclub.com)) and/or showing [this video](https://drive.google.com/file/d/1Vbwb6L_aXmthB7Q3Jhid-NV00fSxb3PC/view?usp=sharing) to your classes? I've attached our Parent Guide and Poster below for more info\! RenRan [renran@hackclub.com](mailto:renran@hackclub.com) | -| :---- | +
+Hi Susanne, + +I’m RenRan, a 17-year-old OCDSB student. I’m also organizing Ottawa’s first all-girls hackathon! + +July 5-6th, we’re organizing JPEG, a 25-hour high school hackathon for 70+ girls at Carleton University. JPEG is affiliated with Hack Club, a global nonprofit supported by Dell and GitHub. + +Learning to code through hackathons helped me make some of my best memories—and friends. But, there are very few opportunities for high schoolers in Ottawa, let alone girls. That’s why we’re reaching out. + +You’re my friend’s favorite physics teacher at Nepean HS! Would you be open to helping us reach more students by posting a quick classroom post with our website (jpeg.hackclub.com) and/or showing this video to your classes? + +I've attached our Parent Guide and Poster below for more info! + + +renran@hackclub.com +
+[Phone Number] +
+
No video? Here’s another one\! -| Subject: High school hackathon in Boston – Interested? Hi \[First Name of Teacher\] I’m Sofia, a junior at \[high school\], and I’m running a 24-hour hackathon on November 23\. Learning to code through hackathons *literally* changed my life. I’ve made some of my best memories and friends, and I want to change students' lives in Boston too. I'd love for your students at \[school\] to attend. Would you be open to forwarding the following email to them? Hey Coders and Artists\! I’m Sofia, a junior in high school. This year, I’m running a hackathon called Counterspell Boston. November 23-24, at the Microsoft NERD Center, you’ll have 24 hours to create a game from scratch. Check out [this video](https://youtu.be/3J1Rz-3N1WQ?si=gHZdM9WiMi4R1pVj) from another game jam\! Everything is free, including food, merch, and lodging. No prior experience needed. We would love for you to [sign up](https://forms.hackclub.com/t/sdMpoL7wK9us?city=rec0fAxwvWTwRv5M3)\! Check out [our website](https://counterspell.hackclub.com/boston/) for more info. See you there, The Counterspell Boston Team ![][image1] | -| :---- | +
+Subject: High school hackathon in Boston – Interested? -EXTRA TIP: If your Director of Education has an email blast, ask them to include your event\! JPEG was included in our DOE’s monthly newsletter. +Hi [First Name of Teacher] + +I’m Sofia, a junior at [high school], and I’m running a 24-hour hackathon on November 23. + +Learning to code through hackathons literally changed my life. I’ve made some of my best memories and friends, and I want to change students' lives in Boston too. + +I'd love for your students at [school] to attend. Would you be open to forwarding the following email to them? + +Hey Coders and Artists! + +I’m Sofia, a junior in high school. This year, I’m running a hackathon called Counterspell Boston. + +November 23-24, at the Microsoft NERD Center, you’ll have 24 hours to create a game from scratch. Check out this video from another game jam! + +Everything is free, including food, merch, and lodging. No prior experience needed. + +We would love for you to sign up! Check out our website for more info. + +See you there, +The Counterspell Boston Team + +Hack Club +
+ +EXTRA TIP: If your Director of Education has an email blast, ask them to include your event\! JPEG was included in his monthly newsletter. ## Step \#2: Email Local Organizations @@ -40,56 +83,68 @@ For example: * Student Council * Local libraries / Community Centers -… Or any youth groups\! +… Or any youth groups\! (Cadets, Boys and Girls Club, DECA) ## Step \#3: Instagram / Discord / Social Media It is a truth universally acknowledged that Gen Z (and Gen Alpha) are glued to their screens. Use that to your advantage. -1. Make a 1st post. Here’s an example from Counterspell Ottawa\! +1. Make a 1st post. Here’s an example from Counterspell Ottawa\! + + 2. Follow people. - 1. Go to schools, robotics teams, CS clubs, etc’s instagrams - 2. Follow their followers. - 3. Rinse, repeat. + * Go to schools, robotics teams, CS clubs, etc’s instagrams + * Follow their followers. + * Rinse, repeat. -3. Post regularly. Ex: - 1. What to bring - 2. FAQ - 3. Is it beginner-friendly? (Yes, it is) - 4. Teams of three +3. Post regularly. Ideas for posts: + * What to bring + * FAQ + * Is it beginner-friendly? (Yes, it is) + * Teams of three Use Canva or Figma to make posts (it doesn’t matter – just post regularly)\! -## Step \#4: Parent Groups +## Step \#4: Reach the Parents -“Mom, can I go to an overnight event?” sounds like you’re going to rob a bank. But if it’s your parents’ idea… It goes from A Bad Influence to the Bestest Educational Idea Ever ™ +“Mom, can I go to an overnight event?” sounds like you’re about to rob a bank. But if it’s your parents’ idea… It goes from A Bad Influence to the Bestest Educational Idea Ever ™ Doing this step right will get you 30% to 40% of your sign-ups (ESPECIALLY if your city hasn’t had many hackathons before). -**Use the parent emails in the sign-up form**. Email all parents 3 weeks before the hackathon to remind them the event is happening, email them a week before the hackathon to remind them to sign their child’s waiver, and ask them to tell *other* parents so you can spread the word. - -They’re parents, so they have sympathy towards kids (especially since they’re a parent of teenagers). Use it. - You may ask: “Dev, how do I do this?” And the answer is: “I’m not your dad.” -Because this is where parents can help. A LOT. - -1. Ask your parents if they can post a short bit in Facebook Groups / WeChat / Whatsapp / etc. +Because this is where parents can help. A LOT. Ask your parents if they can post a short bit in Facebook Groups / WeChat / Whatsapp / etc. Example post: -| Your child interested in coding? July 5-6th, we're organizing a 25hrs ALL-GIRLS high school coding event for 70+ teens at Carleton University. The event is open to teens 14-18y old. They'll get to: Get into teams of three and create a game from scratch overnight. Have fun\! Everything is free, including meals, snacks, drinks, T-Shirts and more. Learn to code: developers there to help out\! For more information and sign up: [https://jpeg.hackclub.com/](https://jpeg.hackclub.com/?fbclid=IwZXh0bgNhZW0CMTAAYnJpZBExNFVaTFZnUWVnSnNYUklGaAEe5awJMsuG_ACRnFEvdD8WewAGe_ZLEj60V6kG1zuhUvC4Fq5IiXCAGTu9Aac_aem_7FQsjqEsCGOvpgdqYJneMg) Your child doesn't need any previous experience; all they'll need to bring is a laptop, a charger, toiletries, and a sleeping bag. | -| :---- | +
+
+Your child interested in coding? July 5-6th, we're organizing a 25hrs ALL-GIRLS high school coding event for 70+ teens at Carleton University. -2. If they say no, post it yourself\! +The event is open to teens 14-18y old. They'll get to: +• Get into teams of three and create a game from scratch overnight. +• Have fun! Everything is free, including meals, snacks, drinks, T-Shirts and more. +• Learn to code: developers there to help out! + +For more information and sign up: https://jpeg.hackclub.com/ + +Your child doesn't need any previous experience; all they'll need to bring is a laptop, a charger, toiletries, and a sleeping bag. +
+
+ +
+
+ +1. If they say no, post it yourself\! Join Facebook Parent Groups, Private Groups, etc. ## Step \#5: Physical Poster Finally: yes, people still touch grass. They do go outside. -Put physical posters up in schools (ask your friends). Put them on poles (with permission). Put them in gyms. +Put physical posters up in schools (ask your friends). Put them on poles (with permission). Put them in gyms. Here are some examples: -Customize this template\! - -[image1]: \ No newline at end of file +
+Poster example 1 +Poster example 2 +
diff --git a/src/routes/guide/sponsors/+page.svx b/src/routes/guide/sponsors/+page.svx index e552a72..1a3ced8 100644 --- a/src/routes/guide/sponsors/+page.svx +++ b/src/routes/guide/sponsors/+page.svx @@ -1,16 +1,17 @@ -# Sponsorship +# **Getting Money** 💸 Welcome to the trenches of sponsorship. You’ll likely send a ridiculous number of emails over the next two months. No worries\! We got your back. -*Note: This resource heavily draws upon Karthik’s resource here. We highly recommend you check it out\!* +> *Note: This resource heavily draws upon Karthik’s resource [here](https://drive.google.com/file/d/1zjhcMq9gk8KOxpQVgQzLSCMUKRv-biJw/view?usp=sharing). We highly recommend you check it out\!* More ✨Awesome✨resources: -1) Everything you need in one video: [Meginar: Learn how to secure high school hackathon sponsorship\!](https://www.youtube.com/watch?v=tOmXzA4reTY) It’s two hours but definitely worth your time. +1. Everything you need in one video: [Meginar: Learn how to secure high school hackathon sponsorship\!](https://www.youtube.com/watch?v=tOmXzA4reTY) It’s two hours but definitely worth your time. +2. A short segment from Hack Club's old hackathon organizing guide: [💸 Raising Money 💸](https://hackclub.com/how-to-organize-a-hackathon/#raising-money) If you’re too lazy… -## OVERALL TIPS (applicable for everything): +## ✏️ OVERALL TIPS (applicable for everything): The one secret to emailing ANYONE you’ll need: **be concise**. @@ -20,24 +21,29 @@ This is NOT an English Essay. Shorter → Better. *DON’T BE TOO LINKEDIN-PILLED\!\!* Be put together and presentable, but not *too* professional. If they support teens, they’ll want to see your energy & enthusiasm. -## Before: Making a budget +## 💲Before: Making a budget [This](https://docs.google.com/spreadsheets/d/1udOaDK_OYa_b8Y8myCHOrXVHrf6H45vZqmqqbhkiUBA/edit?usp=sharing) is a template budget you can make a copy of and use for your Daydream event (everyone thank Afonso). Keep track of *every single* item you plan to buy for your event, and make sure you update it after you make purchases (especially if taxes raise the cost). -Search up snack prices on Walmart and Costco (the example Costco list on the sheets has good examples of what and what not to buy), and make sure the price per person doesn’t get too high (buying VitaminWater for every partcipant is probably not the best use of Hack Club’s emergency funding). +Search up snack prices on Walmart and Costco, make sure the price per person doesn’t get too high. -Keep track of how much you’re spending per unit and per person. If a 36-pack of chips costs $50, each bag of chip costs \~$1.4, which is pretty good. This unit price helps keep things in perspective—and helps you decide what to keep and what to nix. +Keep track of how much you’re spending per unit and per person. If a 36-pack of chips costs $50, each bag of chips costs \~$1.4. This unit price helps keep things in perspective—and helps you decide what to keep and what to nix. -## Step \#1: Finding Companies +## 🏣 Step \#1: Finding Companies -Start small. One of the biggest mistakes first-time hackathon organizers make is to cold email the biggest companies they can think of (intel, microsoft, etc). This won’t work 99% of the time *unless* you have a good contact. +Start small. One of the BIGGEST mistakes first-time hackathon organizers make is to cold email the biggest companies they can think of (intel, microsoft, etc). This won’t work 99% of the time *unless* you have a good contact. -Chances are, there are a ton of local companies you’ve never heard of that would be more than happy to sponsor and have a surprising amount of money to spare. It also doesn’t just have to be tech companies\! Reach out to restaurants, small businesses, bakeries, and community-oriented businesses (though they are more likely to give you an in-kind sponsorship like food or groceries). +Chances are, there are a ton of local companies you’ve never heard of that would be more than happy to sponsor and have a surprising amount of money to spare. It also doesn’t just have to be tech companies\! Reach out to restaurants, small businesses, bakeries, and community-oriented businesses. -1. Companies you have connections to \- Start here\! (Parents’ work, your job, your friends’ work, etc. Every adult you know works at a company, use it.) -2. Companies that align with your mission \- If your event is about coding education, find edtech companies -3. Companies in your area \- Don't be scared\! CEOs are people too. You’ll have a better chance with decently-higher up people, so maybe don’t contact all the CEOs in San Francisco. Linkedin is great for finding names for the mid-range of important people. -4. Previous sponsors of similar events \- Look at Devpost, MLH, and even something like your school boosters +Where to start? + +Companies you have + +| CONNECTIONS TO âœ¨ | Start here\! (Parents’ work, your job, your friends’ work, etc. Every adult you know works at a company, use it.) | +| :---- | :---- | +| **ALIGN WITH YOUR MISSION** | If your event is about coding education, find edtech companies | +| **IN YOUR AREA đŸŒł** | Don't be scared\! CEOs are people too. You’ll have a better chance with decently-higher up people, so maybe don’t contact all the CEOs in San Francisco. Linkedin is great for finding names for the mid-range of important people. | +| **SPONSORED SIMILAR EVENTS** | Look at Devpost, MLH, and even something like your school boosters | ## Step \#2: Write your Prospectus @@ -64,12 +70,37 @@ DM [@renran sun](https://hackclub.slack.com/archives/D096V6RDJ9E) if you’d lik ## Step \#4: Write an email template. -| Subject: 100+ Teenage Hackers in City? Hi \[First Name of Employee from company\], I’m First Name, a 17-year-old student from City. I’m also organizing City’s \[what makes your Daydream special, ex: first 24 hour\] hackathon. September 27-28, we’re organizing [Daydream](https://daydream.hackclub.com/) \[City\], a 24-hour high school hackathon for 100 teens at \[Venue\]. Daydream is dreamed up by Hack Club, a global coding nonprofit supported by Dell and GitHub. Learning to code through hackathons helped me make some of my best memories—and friends. It changed my life, and I want to bring that experience to more students\! \[Company\] is incredible. \[IMPORTANT\! Why are you emailing this company? Be personal but 1-2 sentences. Ex: Your \[product\] changed the way we use xyz.\] I'd love to send you more information or schedule a call if you're interested. Let me know what you need and what time, and I'll make it happen\! [Renran Sun](mailto:renran@hackclub.com) \[phone number\] P-S: If you are the wrong person to reach out to, I apologize. It’d be great if you could direct me to the right department/person\! | -| :---- | +
+Subject: 100+ Teenage Hackers in [City]? + +Hi [First Name of Employee from company], + +I’m [First Name], a 17-year-old student from [City]. I’m also organizing [City’s] \[what makes your Daydream special, ex: first 24 hour] hackathon. + +September 27-28, we’re organizing Daydream [City], a 24-hour high school hackathon for 100 teens at [Venue]. Daydream is dreamed up by Hack Club, a global coding nonprofit supported by Dell and GitHub. + +Learning to code through hackathons helped me make some of my best memories—and friends. It changed my life, and I want to bring that experience to more students\! + +[Company] is incredible. [IMPORTANT\! Why are you emailing this company? Be personal but 1-2 sentences. Ex: Your [product] changed the way we use xyz.] + +I'd love to send you more information or schedule a call if you're interested. Let me know what you need and what time, and I'll make it happen\! + +RenRan Sun + + +renran@hackclub.com +
+[Phone Number] +
+ +PS: If you are the wrong person to reach out to, I apologize. It’d be great if you could direct me to the right department/person\! +
## Step \#5: Email\! -Send the prospectus/sponsorship package for the 2nd email\! +Send the prospectus/sponsorship package for the 2nd email\! REPLY QUICKLY. DO NOT leave them for more than three hours, reply WITHIN THE DAY. + +Don’t overwhelm them with information. Try to jump on a call or meet them in person to explain everything. Emails are easy to refuse, but a puppy-eyed teen? Not as much. ## Step \#6: Follow-Up @@ -77,17 +108,20 @@ It is pretty common to get ghosted but being persistent can help a lot\! Keep it Reply to the original email thread OR send a new email. Here’s an example. -| Hi Kyle, Just saw the podcast at Fullscript with Youth Ottawa and wanted to quickly follow up\! Please let me know if you have any questions. I'd love to jump in a call and discuss details/constraints\! If Fullscript can't host us, no worries. Thank you again for your consideration, RenRan | -| :---- | +
+Hi Kyle, + +Just saw the podcast at Fullscript with Youth Ottawa and wanted to quickly follow up\! + +Please let me know if you have any questions. I'd love to jump in a call and discuss details/constraints\! If Fullscript can't host us, no worries. + +Thank you again, + +RenRan +
## Step \#7: Repeat ## Extra: Tips & Advice -Make the highest tier up to half of your budget. **The lowest tier should be a significant contribution.** - -FOLLOW-UP QUICKLY - -Generally, do not take useless in-kinds that sound fancy but are useless and spammy in reality (“we’ll give you $50,000 in coupons to LawnMowingUltraPlus if you put our logo on everything”). WE WANT COLD HARD CASH\!\!\!\! - -## \ No newline at end of file +Make the highest tier more than half of your budget. **The lowest tier should also be a significant contribution.** For example: if your budget is $8k, make $5k your highest tier and $1.5k your lowest tier. \ No newline at end of file diff --git a/src/routes/guide/venue/+page.svx b/src/routes/guide/venue/+page.svx index c5adca4..0460290 100644 --- a/src/routes/guide/venue/+page.svx +++ b/src/routes/guide/venue/+page.svx @@ -1,32 +1,37 @@ -# Venue +# **Venues: The Gathering 🪴** Without a venue, you don’t have a hackathon. You *need* a venue. Lock in. -## Part One: Making a List +## 📋 Part One: Making The List™ -Make a long, long list of potential venues. You’ll need to reach out to twenty venues to find one that says yes, but if you want to run the best hackathon you can, I’d recommend challenging yourself to reach out to as many as possible\! A dream venue is: +Make a LONG list of potential venues. **You** **need to reach out to 20 venues to find ONE that says yes**. -- **Roomy** \- Whatever space you find should be big enough to host attendees\! This might seem pretty apparent, but don’t forget: food is messy, so you might want a separate space for meals; if you’re hosting an overnight event you need *at least* two sleeping areas for gender separation; and if people are going to sleep, they’ll need enough space to lie down in a place where the lights can turn off\! -- **Welcoming** \- \[they should be excited to support all the teenagers, mention anecdote of google wanting 1:2 chaperone ratio\] -- **Overnight** \[find a better one-word here\] -- **Cool** \[maybe a better word for having the right vibe\] +If you want to run the best hackathon you can: reach out to AS MANY as you can. With personalized emails each. It will be rough but a great venue makes an amazing hackathon. -Here are a bunch of good ideas you can add to your list – use Google Maps to find nearby options within a 30-minute to 1-hour radius\! +A basic venue needs: -- **Makerspaces** \- Makerspaces are amazing sites for hackathons. They’re almost always welcoming, they often have multiple rooms, and they can sometimes even provide hardware or marketing for your event. -- **Startup Spaces** \- These fall into a similar bucket as makerspaces. They’re usually supportive of the mission and much less risk-averse than larger corporations. Startups also often have fancier offices with multiple comfortable rooms. -- **Corporate Offices** -- **Public Libraries** -- **Schools & Universities** \- be careful, these initially sound like a good option but schools have more restrictions around having minors overnight. If you get lucky, you might find a university that would be willing to provide a space overnight for free, though\! +* Audio/Visual (TV or projector, speakers, etc) +* Power strips +* Open space for sleeping, working, etc +* 2 separate *gender-separated* sleeping rooms -**Venue requirements:** +The best venue is: -- Audio/Visual (TV or projector, speakers, etc) -- Power strips -- Open space for sleeping, working, etc -- 2 separate *gender separated* sleeping rooms +| A BIG SPACE đŸ  | Whatever space you find should be BIG\! Not a school-gym crammed. They’re spending the next 24 hours there – give them room to breathe. | +| :---: | :---- | +| **WELCOMING đŸŤ‚** | Should be *exciting* for teens\! Github, Shopify, Figma. An awesome workspace â†’ more ideas\! Big windows, couches, rolling chairs. | +| **OVERNIGHT đŸ’¤** | 24-hour events are where the *✨magic✨* happens. People are too locked in for 12-hour events. We want them to have fun\! Try your best to find an overnight one. | -## Part Two: Reaching Out +Here are a bunch of good ideas you can add to your list – use Google Maps to find nearby options\! + +| Makerspace | AMAZING space for hackathons. They often have multiple rooms, and can sometimes provide hardware/marketing for your event | +| :---- | :---- | +| **Startup** | More supportive of nonprofits and hackathons\! They’re less risk-averse than larger corporations. Sometimes, they have fancier offices too. | +| **Corporate Office** | Please avoid cubicles (isolates participants from one another, hard to reach), but a good space if they’re willing to do overnight\! | +| **Library/University** | Good spaces if they have big windows and good funding\! Not that great if it’s boring, classroom-like, with lecture halls. Try not to isolate participants\! | +| **Schools** | Avoid unless it’s a fancy, private school or well-funded. We don’t want to remind participants of an academic setting\! | + +## ✉️ Part Two: Emailing… Once you have your mega-list of spaces, you need to reach out to them. This step can make or break your chances, so here’s how to do it right: @@ -37,12 +42,14 @@ Try not to use generic email addresses (ex: info@xyz). Find employees / COOs / p Tools to find emails: 1. [LinkedIn](http://linkedin.com): Use this to find people\! -2. [Apollo.io](http://Apollo.io) : Find email addresses of the people you find on LinkedIn\! -3. [rocketreach.co](http://rocketreach.co): Another tool to find emails +2. [Apollo](http://Apollo.io) : Find email addresses of the people you find on LinkedIn\! +3. [RocketReach](http://rocketreach.co): Another tool to find emails just from a name. + +> *Remember: free trials might be temporary, but temporary emails are infinite ;)* ## Step \#2: Writing the Email -🛑**DO NOT:** +🛑 **DO NOT:** * **USE CHATGPT** (to write the WHOLE thing. Maybe use it to correct grammar) @@ -50,7 +57,7 @@ Tools to find emails: * **MASS EMAIL.** It will get you NOWHERE. People can tell when it’s a mass email and you don’t care. You will send 1000+ emails (like I did) with NO answer. Ten customized emails is a million times better than a thousand mass emails. -✅**DO:** +✅ **DO:** * **KILL YOUR WORDS**. Be concise. Everything can be shorter, I promise you. * Everyone hates reading. Even the CEO of LinkedIn. The greatest email advice you’ll ever get is this: **GET TO THE POINT.** @@ -59,30 +66,50 @@ Tools to find emails: * **Do they care?** * **CUSTOMIZE\!\!** To the EXACT recipient (research *who* you’re emailing). Customize the prospectus. Customize the email. -\> If you can, you should go to a workshop about writing effective emails & get feedback on your email before sending it\! We’ll hold a couple to get you guys started. +> If you can, you should go to a workshop about writing effective emails & get feedback on your email before sending it\! We’ll hold a couple to get you guys started. -Example: +Example: -| Hi \[contact name\], I’m RenRan, a 17-year-old high school student from Ottawa. This \[month\], I’m organizing Ottawa’s first all-girls high school hackathon\! July 5-6, we're running JPEG, a 25hr coding event for 70+ teens. JPEG is affiliated with Hack Club, the "world's largest open source community of teenagers who love to code and build stuff". Learning to code through hackathons helped me make some of my best memories—and friends. But there are very few opportunities for high schoolers in Ottawa, let alone girls, to attend these social coding events. Impact Hub is incredible. Especially your Compassionate Community program and the Cartier Women's initiative in recognizing women entrepreneurs. Our event has everything—but a venue. We’re wondering if Impact Hub Ottawa could donate your space to us overnight July 5-6? I’d love to jump on a call to answer any questions or iron out details\! Warmly, RenRan Sun (she/her) renran@hackclub.com 613-710-4270 | -| :---- | +
+Hi [contact name], + +I’m RenRan, a 17-year-old high school student from Ottawa. This [month], I’m organizing Ottawa’s first all-girls high school hackathon\! + +July 5-6, we're running JPEG, a 25hr coding event for 70+ teens. JPEG is affiliated with Hack Club, the "world's largest open source community of teenagers who love to code and build stuff". + +Learning to code through hackathons helped me make some of my best memories—and friends. But there are very few opportunities for high schoolers in Ottawa, let alone girls, to attend these social coding events. + +Impact Hub is incredible. Especially your Compassionate Community program and the Cartier Women's initiative in recognizing women entrepreneurs. + +Our event has everything—but a venue. We’re wondering if Impact Hub Ottawa could donate your space to us overnight July 5-6? + +I’d love to jump on a call to answer any questions or iron out details\! + +Warmly, +RenRan Sun (she/her) + + +renran@hackclub.com +
+[Phone Number] +
+
## Step \#4: Choose-your-adventure -### If you get a “yes\!” …Now what? +### **If you get a “yes\!” …Now what?** Be nice to them, maybe they’ll host another event in the future\! -### If you get a “sorry we can’t…” +### **If you get a “sorry, we can’t…”** Ask for monetary donations, food, supplies, or mentors. They answered, which means congrats\! They care\! ### If you get ghosted: **Follow. Up.** -Follow-up every 3-5 business days\! Reach out to another employee\! Call them\! - -Email their \*shivers\* general email. - -Being relentless is what gets you a good venue. +* Follow-up every 3-5 business days\! Reach out to another employee\! Call them\! +* Email their \*shivers\* general email. +* Being relentless is what gets you a good venue. BUT **do not** SPAM THEM or Hack Club might end up blacklisted. \ No newline at end of file diff --git a/src/routes/guide/website/+page.svx b/src/routes/guide/website/+page.svx new file mode 100644 index 0000000..09622fa --- /dev/null +++ b/src/routes/guide/website/+page.svx @@ -0,0 +1,91 @@ +# **Your Daydream Website ☀️** + +Your daydream needs its own website. This might be one of the only technical aspects you’ll need when organizing your hackathon – and day-of mentoring. + +Now… on to how to make your site\! + +First, fork the repository: + +1. Go to [https://github.com/hackclub/daydream](https://github.com/hackclub/daydream) +2. Click “Fork” in the top right +3. Create the fork in your account + +Then, clone your fork. In a terminal, run: + +```bash +git clone https://github.com/YOUR_USERNAME/daydream.git +cd daydream +``` + +Once you have a local copy of the site, you need to duplicate the example site. In the `src/routes` folder, copy the folder called `example`, and rename the copy to whatever you want your URL to be. + +For example, if you want your site to be at [daydream.hackclub.com/vermont](http://daydream.hackclub.com/vermont), name the folder `vermont`. + +Next, you need to configure your event. Open `src/routes/yourcity/+page.svelte` in a text editor, and look at the top. Change all the fields to the information for your event\! + +```js +// Configuration - Put your information here! +const eventName = "Example"; +const eventLocation = "Example City"; +const eventAddress = "1600 Pennsylvania Avenue, Washington, DC 20500"; +// These two are optional +const directionsURL = "https://www.google.com/maps/search/1600+pennsylvania+avenue+washington+dc/" +const contactLink = "mailto:example@daydream.hackclub.com" + +// Sponsors Configuration +const sponsorsEnabled = true; // Set to false to hide the entire sponsors section +const sponsors = [ + { image: "/example/logo1.png", name: "Sponsor 1", url: "https://example1.com" }, + { image: "/example/logo2.png", name: "Sponsor 2", url: "https://example2.com" }, + { image: "/example/logo3.png", name: "Sponsor 3", url: "https://example3.com" }, + { image: "/example/logo4.png", name: "Sponsor 4", url: "https://example4.com" }, + { image: "/example/logo5.png", name: "Sponsor 5", url: "https://example5.com" }, + { image: "/example/logo6.png", name: "Sponsor 6", url: "https://example6.com" }, + { image: "/example/logo7.png", name: "Sponsor 7", url: "https://example7.com" } +]; + +// Schedule Configuration - You don't need to use this schedule, this is just an example! +const scheduleData = { + saturday: { + title: "Saturday, September 27th", + items: [ + { event: "Doors open", time: "11:00 AM" }, + { event: "Opening ceremony", time: "12:00 PM" }, + { event: "Lunch", time: "12:30 PM" }, + { event: "Start working on your project!", time: "1:00 PM" }, + { event: "Workshop 1", time: "2:00 PM" }, + { event: "Activity 1", time: "4:00 PM" }, + { event: "Workshop 2", time: "4:00 PM" }, + { event: "Dinner", time: "6:00 PM" }, + { event: "Lightning talks", time: "8:00 PM" }, + { event: "Midnight surprise", time: "12:00 AM" } + ] + }, + sunday: { + title: "Sunday, September 28th", + items: [ + { event: "Breakfast", time: "8:00 AM" }, + { event: "Demos!", time: "10:30 AM" }, + { event: "Closing ceremony", time: "12:00 PM" } + ] + } +}; +``` + +Lastly, submit your site\! Use Git to push your changes: + +```bash +git add . +git commit \-m "Add \[Your City\] event page" +git push +``` + +Then, go back to your repository, click "Contribute" → "Open pull request," and follow the instructions\! + +> Are you adding custom images, like sponsor logos? Make a new folder in the `static` folder with your city name, then place them in there\! After that you can access the images at `/cityname/imagename.png`. + +#### Wanna make your own site? + +If you want to make your own site, it needs to be another page on [daydream.hackclub.com](http://daydream.hackclub.com). The site is written in SvelteKit, but you can do anything else within those bounds\! + +> *Note: If you choose to make your own site, it needs to be mobile responsive and high quality (vibecoded AI slop is not allowed).* \ No newline at end of file diff --git a/static/guide/avengers.png b/static/guide/avengers.png new file mode 100644 index 0000000..ed5807e Binary files /dev/null and b/static/guide/avengers.png differ diff --git a/static/guide/badge1.png b/static/guide/badge1.png new file mode 100644 index 0000000..fcad295 Binary files /dev/null and b/static/guide/badge1.png differ diff --git a/static/guide/badge2.png b/static/guide/badge2.png new file mode 100644 index 0000000..bbbc31e Binary files /dev/null and b/static/guide/badge2.png differ diff --git a/static/guide/badge3.png b/static/guide/badge3.png new file mode 100644 index 0000000..289447b Binary files /dev/null and b/static/guide/badge3.png differ diff --git a/static/guide/badge4.png b/static/guide/badge4.png new file mode 100644 index 0000000..0105c76 Binary files /dev/null and b/static/guide/badge4.png differ diff --git a/static/guide/badge5.png b/static/guide/badge5.png new file mode 100644 index 0000000..2824c7d Binary files /dev/null and b/static/guide/badge5.png differ diff --git a/static/guide/badge6.png b/static/guide/badge6.png new file mode 100644 index 0000000..1ea4de6 Binary files /dev/null and b/static/guide/badge6.png differ diff --git a/static/guide/branding.png b/static/guide/branding.png new file mode 100644 index 0000000..f187db6 Binary files /dev/null and b/static/guide/branding.png differ diff --git a/static/guide/counterspell-poster.png b/static/guide/counterspell-poster.png new file mode 100644 index 0000000..db3d104 Binary files /dev/null and b/static/guide/counterspell-poster.png differ diff --git a/static/guide/email.png b/static/guide/email.png new file mode 100644 index 0000000..04e86a2 Binary files /dev/null and b/static/guide/email.png differ diff --git a/static/guide/hack-club-flag.png b/static/guide/hack-club-flag.png new file mode 100644 index 0000000..63886ab Binary files /dev/null and b/static/guide/hack-club-flag.png differ diff --git a/static/guide/hcb.png b/static/guide/hcb.png new file mode 100644 index 0000000..840e1b1 Binary files /dev/null and b/static/guide/hcb.png differ diff --git a/static/guide/how.png b/static/guide/how.png new file mode 100644 index 0000000..f415657 Binary files /dev/null and b/static/guide/how.png differ diff --git a/static/guide/notebook-border.png b/static/guide/notebook-border.png new file mode 100644 index 0000000..9cfe8e6 Binary files /dev/null and b/static/guide/notebook-border.png differ diff --git a/static/guide/poster1.png b/static/guide/poster1.png new file mode 100644 index 0000000..edd5f31 Binary files /dev/null and b/static/guide/poster1.png differ diff --git a/static/guide/poster2.png b/static/guide/poster2.png new file mode 100644 index 0000000..f8ac166 Binary files /dev/null and b/static/guide/poster2.png differ diff --git a/static/guide/slack.png b/static/guide/slack.png new file mode 100644 index 0000000..4fa9c94 Binary files /dev/null and b/static/guide/slack.png differ diff --git a/static/guide/social-media-post.jpg b/static/guide/social-media-post.jpg new file mode 100644 index 0000000..4624501 Binary files /dev/null and b/static/guide/social-media-post.jpg differ diff --git a/static/guide/three-things.png b/static/guide/three-things.png new file mode 100644 index 0000000..b7d1d4d Binary files /dev/null and b/static/guide/three-things.png differ diff --git a/static/guide/vibes.png b/static/guide/vibes.png new file mode 100644 index 0000000..eee8f32 Binary files /dev/null and b/static/guide/vibes.png differ diff --git a/svelte.config.js b/svelte.config.js index 0d596ef..ce93c89 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,12 +1,30 @@ import adapter from '@sveltejs/adapter-node'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; -import { mdsvex } from 'mdsvex'; +import { mdsvex, escapeSvelte } from 'mdsvex'; +import { createHighlighter } from 'shiki'; + +// shiki config for the guide +const shikiTheme = "min-light" +const shikiHighlighter = await createHighlighter({ + themes: [shikiTheme], + langs: ["javascript", "bash"], +}) + +/** @type {import('mdsvex').MdsvexOptions} */ +const mdsvexOptions = { + highlight: { + highlighter: async (code, lang = 'text') => { + const html = escapeSvelte(shikiHighlighter.codeToHtml(code, { lang, theme: shikiTheme })); + return `{@html \`${html}\` }`; + } + }, +} /** @type {import('@sveltejs/kit').Config} */ const config = { // Consult https://svelte.dev/docs/kit/integrations // for more information about preprocessors - preprocess: [vitePreprocess(), mdsvex()], + preprocess: [vitePreprocess(), mdsvex(mdsvexOptions)], extensions: ['.svelte', '.svx'],