├── .gitignore
├── .idea
├── .gitignore
├── apohacks.iml
├── modules.xml
└── vcs.xml
├── .prettierrc
├── .vscode
├── extensions.json
├── launch.json
└── settings.json
├── README.md
├── astro.config.mjs
├── package-lock.json
├── package.json
├── public
├── apotitle.png
├── banner.png
├── event
│ └── infoQR.svg
├── favicon.png
├── fonts
│ ├── Geist-Black.woff2
│ ├── Geist-Bold.woff2
│ ├── Geist-Light.woff2
│ ├── Geist-Medium.woff2
│ ├── Geist-Regular.woff2
│ ├── Geist-SemiBold.woff2
│ ├── Geist-Thin.woff2
│ ├── Geist-UltraBlack.woff2
│ ├── Geist-UltraLight.woff2
│ ├── NeueBit-Bold.woff
│ ├── NeueBit-Bold.woff2
│ ├── NeueMontreal-Book.woff
│ └── NeueMontreal-Book.woff2
├── hctitle.png
├── hero
│ ├── parallax-1.svg
│ ├── parallax-2.svg
│ ├── parallax-3-cn.svg
│ ├── parallax-3.svg
│ ├── parallax-4.svg
│ ├── parallax-top-1.svg
│ ├── parallax-top-2.svg
│ ├── parallax-top-3.svg
│ └── parallax-top-4.svg
├── navbar
│ ├── faq.svg
│ ├── home.svg
│ ├── info.svg
│ └── letter.svg
├── ships
│ ├── a-r-m-s.jpg
│ ├── apoc-trading-centre.jpg
│ ├── apocaledger.jpg
│ ├── apocalift.png
│ ├── apocalypse-alley.jpg
│ ├── apocalypse-handbook.jpg
│ ├── apocalypse-the-game.jpg
│ ├── disaster-survival-senarios.jpg
│ ├── dual-zombie-defense-hq.jpg
│ ├── elephalert.jpg
│ ├── friendly-fire.jpg
│ ├── graggleblogfiggle.jpg
│ ├── informedead.jpg
│ ├── lyfe-saver.jpg
│ ├── memory-capsule.jpg
│ ├── moan-to-speech.jpg
│ ├── outpost.jpg
│ ├── practical-illumination.jpg
│ ├── stony.jpg
│ ├── survivorlog.jpg
│ ├── tartarus.jpg
│ ├── the-last-escape.jpg
│ ├── the-screamers.jpg
│ ├── undead-gambling.jpg
│ ├── uss-apocalypse.jpg
│ ├── wrapped.jpg
│ ├── your-apocalypse-tracker.jpg
│ ├── yummificator-5000.jpg
│ ├── zhield.jpg
│ ├── zinder.jpg
│ ├── zombae-2.jpg
│ ├── zombae.jpg
│ ├── zombie-apocalypse-simulator.jpg
│ ├── zombie-boxer.jpg
│ ├── zombie-cross.jpg
│ ├── zombie-home-defense-system.jpg
│ ├── zombie-hunger-games.png
│ ├── zombie-laser-tag.jpg
│ ├── zombie-translator.jpg
│ └── zomtrackto.jpg
├── skyline.svg
├── sponsors
│ └── Shopify-Logo.png
└── yippee_orph.png
├── src
├── components
│ ├── Banner.astro
│ ├── Bento.astro
│ ├── FAQ
│ │ ├── FAQ.astro
│ │ └── FAQCard.astro
│ ├── Footer.astro
│ ├── Hero.svelte
│ ├── Info
│ │ ├── Header.astro
│ │ ├── LinkCard.astro
│ │ ├── Links.astro
│ │ └── Schedule
│ │ │ ├── Calendar.svelte
│ │ │ └── Schedule.astro
│ ├── Letter.astro
│ ├── NavBar.astro
│ ├── Projects
│ │ ├── ProjectItem.astro
│ │ ├── ProjectItem.svelte
│ │ └── Projects.svelte
│ └── ShipCard.astro
├── env.d.ts
├── layouts
│ └── Layout.astro
└── pages
│ ├── 404.astro
│ ├── api
│ ├── lists
│ │ └── subscribe.ts
│ └── schedule.ts
│ ├── event.astro
│ ├── index.astro
│ └── ships.astro
├── tailwind.config.mjs
└── tsconfig.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # build output
2 | dist/
3 |
4 | # generated types
5 | .astro/
6 |
7 | # dependencies
8 | node_modules/
9 |
10 | # logs
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # environment variables
17 | .env
18 | .env.production
19 |
20 | # macOS-specific files
21 | .DS_Store
22 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 |
--------------------------------------------------------------------------------
/.idea/apohacks.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": [
3 | "prettier-plugin-astro",
4 | "prettier-plugin-tailwindcss",
5 | "prettier-plugin-svelte"
6 | ],
7 | "printWidth": 90,
8 | "_dev_notes": [
9 | "https://github.com/tailwindlabs/prettier-plugin-tailwindcss#compatibility-with-other-prettier-plugins"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["astro-build.astro-vscode"],
3 | "unwantedRecommendations": []
4 | }
5 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "command": "./node_modules/.bin/astro dev",
6 | "name": "Development server",
7 | "request": "launch",
8 | "type": "node-terminal"
9 | }
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.defaultFormatter": "esbenp.prettier-vscode",
3 | "[astro]": {
4 | "editor.defaultFormatter": "astro-build.astro-vscode"
5 | },
6 | "editor.formatOnSave": true,
7 | "comment-divider.languagesMap": {
8 | "astro": [""]
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Apocalypse
2 |
3 | It's 2034, and zombies have taken over! 🧟 But tech still operates. What would you build to survive?
4 |
5 | That's the premise of Apocalypse, a hackathon happening in downtown Toronto this May 17–19! If you're in high school, you should [sign up](https://join.apocalypse.hackclub.com) — we have travel stipends!
6 |
7 | In this repository, you can check out the source code for [our website](https://apocalypse.hackclub.com)! Soon, we'll be open-sourcing deeper peeks into Apocalypse, like:
8 |
9 | - Building the PCB hacker badge 🛠️
10 | - Developing our theme 🌈
11 | - Surprises from the organizing process 👀
12 |
--------------------------------------------------------------------------------
/astro.config.mjs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "astro/config";
2 |
3 | import vercel from "@astrojs/vercel/serverless";
4 | import tailwind from "@astrojs/tailwind";
5 | import svelte from "@astrojs/svelte";
6 |
7 | // https://astro.build/config
8 | export default defineConfig({
9 | integrations: [tailwind(), svelte()],
10 | redirects: {
11 | "/parents":
12 | "https://docs.google.com/document/d/1NQDChsJd9dK4r1EWsVglzjHr0EnR3iW0DV3xMHSUAZ0/edit",
13 | "/teachers":
14 | "https://docs.google.com/document/d/1NQDChsJd9dK4r1EWsVglzjHr0EnR3iW0DV3xMHSUAZ0/edit",
15 | "/travel":
16 | "https://docs.google.com/document/d/1oEQobHOqMcHUU5N7X5egDNo6Tfvqsx3bx5h--UBDpAs/edit",
17 | "/international":
18 | "https://docs.google.com/document/d/1LuZmVCTGeFPdXYAwqTYx2IHN2d7h4wjuAdhiWNuYJVI/edit?usp=sharing",
19 | "/id":
20 | "https://docs.google.com/document/d/1ro77tpRs1vpQK39YGgAP4IumkNhx3-6pc41BmvI0UzA/edit?usp=sharing",
21 | "/packing":
22 | "https://docs.google.com/document/d/1rGKr5Yn1uCT3fAUEEpQW2Hf3RzR6xymValoaBLmobHM/edit?usp=sharing",
23 | "/grants": "https://join.apocalypse.hackclub.com/grants",
24 | "/showers":
25 | "https://calendar.google.com/calendar/u/0/appointments/AcZssZ3ofoLo-abUmRCvR6_4hVMXJ3IcXXdJhcUlG94=",
26 | "/badge": "https://github.com/LimesKey/NameTagPCB",
27 | "/ship": "https://tally.so/r/wdYg6r"
28 | },
29 | output: "server",
30 | adapter: vercel({
31 | webAnalytics: {
32 | enabled: true,
33 | },
34 | }),
35 | });
36 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "apocalypse",
3 | "type": "module",
4 | "version": "0.0.1",
5 | "scripts": {
6 | "dev": "astro dev",
7 | "start": "astro dev",
8 | "build": "astro build",
9 | "preview": "astro preview",
10 | "astro": "astro",
11 | "format": "npx prettier --write ."
12 | },
13 | "dependencies": {
14 | "@astrojs/svelte": "^4.0.4",
15 | "@astrojs/tailwind": "^5.0.2",
16 | "@astrojs/vercel": "^5.2.0",
17 | "@supabase/supabase-js": "^2.42.5",
18 | "@vercel/analytics": "^1.1.1",
19 | "@vercel/speed-insights": "^1.0.2",
20 | "astro": "^3.5.5",
21 | "node-ical": "^0.18.0",
22 | "svelte": "^4.2.8",
23 | "tailwindcss": "^3.4.0"
24 | },
25 | "devDependencies": {
26 | "prettier": "^3.1.0",
27 | "prettier-plugin-astro": "^0.12.2",
28 | "prettier-plugin-svelte": "^3.1.2",
29 | "prettier-plugin-tailwindcss": "^0.5.7"
30 | },
31 | "engines": {
32 | "node": "18.x"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/public/apotitle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/apotitle.png
--------------------------------------------------------------------------------
/public/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/banner.png
--------------------------------------------------------------------------------
/public/event/infoQR.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/favicon.png
--------------------------------------------------------------------------------
/public/fonts/Geist-Black.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-Black.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-Bold.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-Light.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-Light.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-Medium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-Medium.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-Regular.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-SemiBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-SemiBold.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-Thin.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-Thin.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-UltraBlack.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-UltraBlack.woff2
--------------------------------------------------------------------------------
/public/fonts/Geist-UltraLight.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/Geist-UltraLight.woff2
--------------------------------------------------------------------------------
/public/fonts/NeueBit-Bold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/NeueBit-Bold.woff
--------------------------------------------------------------------------------
/public/fonts/NeueBit-Bold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/NeueBit-Bold.woff2
--------------------------------------------------------------------------------
/public/fonts/NeueMontreal-Book.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/NeueMontreal-Book.woff
--------------------------------------------------------------------------------
/public/fonts/NeueMontreal-Book.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/fonts/NeueMontreal-Book.woff2
--------------------------------------------------------------------------------
/public/hctitle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/hctitle.png
--------------------------------------------------------------------------------
/public/hero/parallax-1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/hero/parallax-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/public/hero/parallax-3-cn.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/public/hero/parallax-3.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/public/hero/parallax-4.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/public/hero/parallax-top-1.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/hero/parallax-top-2.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/public/hero/parallax-top-3.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
--------------------------------------------------------------------------------
/public/hero/parallax-top-4.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/public/navbar/faq.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/navbar/home.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/public/navbar/info.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/navbar/letter.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/public/ships/a-r-m-s.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/a-r-m-s.jpg
--------------------------------------------------------------------------------
/public/ships/apoc-trading-centre.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/apoc-trading-centre.jpg
--------------------------------------------------------------------------------
/public/ships/apocaledger.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/apocaledger.jpg
--------------------------------------------------------------------------------
/public/ships/apocalift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/apocalift.png
--------------------------------------------------------------------------------
/public/ships/apocalypse-alley.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/apocalypse-alley.jpg
--------------------------------------------------------------------------------
/public/ships/apocalypse-handbook.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/apocalypse-handbook.jpg
--------------------------------------------------------------------------------
/public/ships/apocalypse-the-game.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/apocalypse-the-game.jpg
--------------------------------------------------------------------------------
/public/ships/disaster-survival-senarios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/disaster-survival-senarios.jpg
--------------------------------------------------------------------------------
/public/ships/dual-zombie-defense-hq.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/dual-zombie-defense-hq.jpg
--------------------------------------------------------------------------------
/public/ships/elephalert.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/elephalert.jpg
--------------------------------------------------------------------------------
/public/ships/friendly-fire.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/friendly-fire.jpg
--------------------------------------------------------------------------------
/public/ships/graggleblogfiggle.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/graggleblogfiggle.jpg
--------------------------------------------------------------------------------
/public/ships/informedead.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/informedead.jpg
--------------------------------------------------------------------------------
/public/ships/lyfe-saver.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/lyfe-saver.jpg
--------------------------------------------------------------------------------
/public/ships/memory-capsule.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/memory-capsule.jpg
--------------------------------------------------------------------------------
/public/ships/moan-to-speech.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/moan-to-speech.jpg
--------------------------------------------------------------------------------
/public/ships/outpost.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/outpost.jpg
--------------------------------------------------------------------------------
/public/ships/practical-illumination.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/practical-illumination.jpg
--------------------------------------------------------------------------------
/public/ships/stony.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/stony.jpg
--------------------------------------------------------------------------------
/public/ships/survivorlog.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/survivorlog.jpg
--------------------------------------------------------------------------------
/public/ships/tartarus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/tartarus.jpg
--------------------------------------------------------------------------------
/public/ships/the-last-escape.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/the-last-escape.jpg
--------------------------------------------------------------------------------
/public/ships/the-screamers.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/the-screamers.jpg
--------------------------------------------------------------------------------
/public/ships/undead-gambling.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/undead-gambling.jpg
--------------------------------------------------------------------------------
/public/ships/uss-apocalypse.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/uss-apocalypse.jpg
--------------------------------------------------------------------------------
/public/ships/wrapped.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/wrapped.jpg
--------------------------------------------------------------------------------
/public/ships/your-apocalypse-tracker.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/your-apocalypse-tracker.jpg
--------------------------------------------------------------------------------
/public/ships/yummificator-5000.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/yummificator-5000.jpg
--------------------------------------------------------------------------------
/public/ships/zhield.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zhield.jpg
--------------------------------------------------------------------------------
/public/ships/zinder.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zinder.jpg
--------------------------------------------------------------------------------
/public/ships/zombae-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombae-2.jpg
--------------------------------------------------------------------------------
/public/ships/zombae.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombae.jpg
--------------------------------------------------------------------------------
/public/ships/zombie-apocalypse-simulator.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-apocalypse-simulator.jpg
--------------------------------------------------------------------------------
/public/ships/zombie-boxer.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-boxer.jpg
--------------------------------------------------------------------------------
/public/ships/zombie-cross.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-cross.jpg
--------------------------------------------------------------------------------
/public/ships/zombie-home-defense-system.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-home-defense-system.jpg
--------------------------------------------------------------------------------
/public/ships/zombie-hunger-games.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-hunger-games.png
--------------------------------------------------------------------------------
/public/ships/zombie-laser-tag.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-laser-tag.jpg
--------------------------------------------------------------------------------
/public/ships/zombie-translator.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zombie-translator.jpg
--------------------------------------------------------------------------------
/public/ships/zomtrackto.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/ships/zomtrackto.jpg
--------------------------------------------------------------------------------
/public/skyline.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/public/sponsors/Shopify-Logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/sponsors/Shopify-Logo.png
--------------------------------------------------------------------------------
/public/yippee_orph.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/public/yippee_orph.png
--------------------------------------------------------------------------------
/src/components/Banner.astro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/apocalypse/d15cad98e9dcb456346175782a20538aa5b32ec0/src/components/Banner.astro
--------------------------------------------------------------------------------
/src/components/Bento.astro:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
What’s a hackathon?
8 |
9 |
10 | A social coding marathon! Imagine a weekend where teenagers come together to
11 | code projects for fun—however goofy or janky—and share them with each other.
12 |
13 |
14 | You’ll have a goal to work towards, side quests to tackle, and new friends to
15 | hang out with. You don’t need coding experience—just an open mind.
16 |
17 |
18 |
19 |
20 |
VIDEO
26 |
27 |
28 |
29 |
33 |
34 |
37 |
Build what you love
38 |
39 |
40 | At Apocalypse, don’t worry about being realistic. Build the projects that’d
41 | never make sense IRL, but would be perfect for tackling the zombies—from
42 | post-apocalyptic food delivery to zombie-sized mousetraps.
43 |
44 |
45 | Worried about how you’ll do it all? Fear not; you can always receive 1:1 help
46 | from experienced mentors.
47 |
48 |
49 |
50 |
51 |
52 |
53 |
56 |
Share your knowledge
57 |
58 |
59 | Silly or serious, technical or not, Apocalypse is a space to share what you
60 | know and learn from others.
61 |
62 |
63 | What’s a skill you have? Run a workshop on it—we’ll pay for your supplies! And
64 | is there something you’d love to yap on? Do a lightning talk, like “why I hate
65 | caffeine (controversial)”.
66 |
67 |
68 |
69 |
70 |
74 |
75 |
76 |
77 |
81 |
82 |
85 |
Make new friends
86 |
87 |
88 | Hackathons aren’t just time to code! At Apocalypse, you’ll meet fun teenagers
89 | who love making as much as you do.
90 |
91 |
92 | From board games to karaoke nights, Apocalypse is one long social and a chance
93 | to befriend people you adore.
94 |
95 |
96 |
97 |
98 |
99 |
100 |
103 |
Loads of surprises
104 |
105 |
106 | Apocalypse is experimental at heart! Keep an eye
107 | on our Instagram for showcases of what we're cooking up. Unique swag, fun activities, and
112 | excursions are in the works 👀
113 |
114 |
Are you ready to spark a new age of survival? Registrations are open!
115 |
116 |
117 |
118 |
119 |
149 |
150 |
151 |
155 |
156 |
157 |
158 |
159 |
215 |
--------------------------------------------------------------------------------
/src/components/FAQ/FAQ.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import FAQCard from "./FAQCard.astro";
3 | ---
4 |
5 |
6 |
10 |
Rundown & FAQ
11 |
12 |
13 |
16 |
17 | Date & Time: Starts at 6:00pm on May 17 and ends at 2:00pm on May 19.
18 |
19 |
20 |
21 |
22 |
52 |
53 |
56 |
64 |
65 |
66 |
67 |
68 |
69 | Anyone 13–18 is welcome! If you're in middle school or a gap year student, check
70 | in with us at apocalypse@hackclub.com . Don't forget to bring an ID that includes a photo! Read our policy here .
78 |
79 |
80 |
81 |
82 | Apocalypse is for hackers across Canada and the world. If you need help paying
83 | for travel costs, you've got options!
84 |
85 |
86 | Travelling by car, bus, or train? The
87 | Hack Club Gas Fund can reimburse your costs. Learn more here .
92 |
93 | Flying in? We have a limited amount
94 | of grants available. Please indicate your interest on the registration form.
95 | Looking for the travel grant application? It's over here !
100 |
101 |
102 |
103 |
104 |
105 | Yep. Attending costs a grand total of $0. Zilch. Nada. Nothing. From meals to
106 | mini-events, Apocalypse is universally accessible.
107 |
108 |
109 |
110 | Apocalypse is for hackers of all skill levels. We’ll learn more together at
111 | workshops! If you want to start learning from home, YouTube and these workshops
116 | are awesome. If nothing else, you can learn surprisingly fast at a hackathon :)
117 |
118 |
119 |
120 | Not required, but highly encouraged! You can meet teammates at Apocalypse, too
121 | :) Teams are limited to 4 hackers.
122 |
123 |
124 |
125 | Please bring an official ID that includes a photo (read the full policy ), laptop ⚡ with its charger ⚡, sleeping bag,
129 | toiletries, water bottle, and imagination.
130 |
131 |
132 |
133 | Apocalypse will have 24/7 supervision by background-checked adults, with venue
134 | access limited to participants. Our parent's guide is available here . Please reach out to apocalypse@hackclub.com with any concerns.
143 |
144 |
145 |
146 | Apocalypse is organized by an eclectic group of teens who've worked on
147 | hackathons across the world! We're part of Hack Club, an 8-year old nonprofit
148 | organization whose mission is to foster a wholesome generation of coders,
149 | makers, founders and builders. Watch a recap of Outernet, Hack Club's summer
150 | 2023 hackathon, here .
154 |
155 |
156 |
157 |
158 |
159 |
164 |
165 |
--------------------------------------------------------------------------------
/src/components/FAQ/FAQCard.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { question, cardId } = Astro.props;
3 | ---
4 |
5 |
9 |
10 | {question}
11 |
12 |
13 |
14 |
15 |
16 |
17 |
27 |
28 |
53 |
--------------------------------------------------------------------------------
/src/components/Footer.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const organizers = [
3 | {
4 | name: "Acon Lin",
5 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/60.png",
6 | site: "https://aconlin.vercel.app/",
7 | },
8 | {
9 | name: "Arav Narula",
10 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/71.png",
11 | site: "https://www.radioblahaj.com/?ref=apocalypse",
12 | },
13 | {
14 | name: "Mutammim Sarkar",
15 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/92.png",
16 | site: "https://www.mutammim.com/",
17 | },
18 | {
19 | name: "Shayaan Azeem",
20 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/83.png",
21 | site: "https://www.shayaanazeem.co/",
22 | },
23 | {
24 | name: "Ryan Di Lorenzo",
25 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/04.png",
26 | site: "https://limeskey.com/",
27 | },
28 | {
29 | name: "Gregory Gu",
30 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/15.png",
31 | site: "https://www.linkedin.com/in/gregory-gu-b777212ba/ ",
32 | },
33 | {
34 | name: "Sam Liu",
35 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/26.png",
36 | site: "https://samliu.dev/",
37 | },
38 | {
39 | name: "Sarvesh Mohan Kumar",
40 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/37.png",
41 | site: "https://www.linkedin.com/in/sarvesh-mohan-kumar-a009ba268/",
42 | },
43 | {
44 | name: "Evelyn Wong",
45 | img: "https://cloud-8bqvtn5zz-hack-club-bot.vercel.app/08.png",
46 | site: "https://www.evelynw.ong/",
47 | },
48 | {
49 | name: "Vivian Yuan",
50 | img: "https://cloud-jy1p4tt69-hack-club-bot.vercel.app/59.png",
51 | site: "https://www.linkedin.com/in/vivian-yuan-240716284/", // TODO: Replace with personal site(?)
52 | },
53 | ];
54 | ---
55 |
56 |
57 |
60 |
61 | An event crafted with ♥ by students
64 |
65 |
Organizing Team
66 |
67 | {
68 | organizers.map((organizer, i) => (
69 |
75 |
80 |
81 | ))
82 | }
83 |
84 |
85 | Our website and finances are open and transparent
94 |
95 |
96 | Inquiries? Contact us at apocalypse@hackclub.com
102 |
103 |
104 |
105 |
106 |
121 |
--------------------------------------------------------------------------------
/src/components/Hero.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
15 |
16 |
21 |
26 |
27 |
28 |
29 | The high school hackathon where you build fun
30 | tech to survive the
31 | zombie apocalypse !
32 |
33 |
34 | May 17-19, 2024 @ Shopify Toronto
35 |
36 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
72 |
73 |
74 |
75 |
79 |
80 |
81 |
85 |
90 |
95 |
100 |
105 |
106 |
107 |
108 |
112 |
116 |
120 |
124 |
125 |
126 |
127 |
184 |
--------------------------------------------------------------------------------
/src/components/Info/Header.astro:
--------------------------------------------------------------------------------
1 | ---
2 | interface Props {
3 | videoWall: boolean;
4 | }
5 |
6 | const { videoWall = false } = Astro.props;
7 | ---
8 |
9 |
12 |
13 |
14 |
15 |
16 |
19 | Event Information
20 |
21 |
22 |
25 |
26 |
May 17, 6 PM - May 19, 2 PM • Shopify Toronto
27 |
28 | Need urgent help? Call +1 (855) 625-4225
31 |
32 | {
33 | videoWall && (
34 |
35 | Scan the QR code for event information & quick links{" "}
36 |
37 | )
38 | }
39 |
40 | {
41 | videoWall && (
42 |
47 | )
48 | }
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/src/components/Info/LinkCard.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { name, link } = Astro.props;
3 | ---
4 |
5 |
6 |
16 |
17 |
--------------------------------------------------------------------------------
/src/components/Info/Links.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import LinkCard from "./LinkCard.astro";
3 | ---
4 |
5 |
6 |
7 |
Quick Links
8 |
11 |
12 | All projects must be submitted before 9:00 am today
13 |
14 |
15 | Read our guide on travelling to Apocalypse.
16 |
17 |
18 | Make sure you have an accepted form of physical photo ID at entry.
19 |
20 |
21 | Check over this list to ensure you've brought everything you need!
22 |
23 |
24 | Learn more about how Apocalypse will be a safe experience for your child.
25 |
26 |
27 | Learn more about how your students can benefit from attending Apocalypse!
28 |
29 |
30 |
31 | Be respectful of the shower space and bring your own soap or body wash. Towels
32 | are provided.
33 |
34 |
35 |
36 |
37 |
38 |
39 |
44 |
--------------------------------------------------------------------------------
/src/components/Info/Schedule/Calendar.svelte:
--------------------------------------------------------------------------------
1 |
389 |
390 | {#if popup}
391 |
394 |
(popup = false)}
400 | >
401 |
402 |
{popupEvent.name}
403 |
(popup = false)}>
404 |
410 |
413 |
414 |
415 |
416 |
417 | {formatTime(popupEvent.start)} - {formatTime(
418 | popupEvent.end,
419 | )}{#if popupEvent.location}
420 | , {popupEvent.location}
421 | {/if}
422 |
423 |
424 | {#if popupEvent.description}
425 |
{popupEvent.description}
426 | {/if}
427 |
428 |
429 | {/if}
430 |
431 |
438 |
447 |
448 | {#each DATES as date, i}
449 |
450 |
454 |
455 |
456 | {date.toLocaleDateString("en-CA", {
457 | weekday: "long",
458 | month: "long",
459 | day: "numeric",
460 | timeZone: "UTC",
461 | })}
462 |
463 |
Day {i + 1}
464 |
465 |
466 |
467 |
468 |
474 |
475 | {#each Array(dayHours[i]) as _, j}
476 |
482 |
486 | {j + (i == 0 ? startHour : 0) == 0
487 | ? "12"
488 | : j + (i == 0 ? startHour : 0) > 12
489 | ? j + (i == 0 ? startHour : 0) - 12
490 | : j + (i == 0 ? startHour : 0)}
491 | {j + (i == 0 ? startHour : 0) >= 12 ? "PM" : "AM"}
492 |
493 | {/each}
494 |
495 | {/each}
496 |
497 | {#if !loading}
498 |
499 | {#each milestones as milestone}
500 |
506 |
507 | {formatTime(milestone.date)} - {milestone.name}
508 |
509 |
510 | {/each}
511 |
512 |
513 |
518 | {#each scheduleCols as eventCol, i}
519 | {#each eventCol as event, j}
520 |
{
524 | popupEvent = event;
525 | popup = true;
526 | }}
527 | >
528 |
544 | {#if (durationMinutes(event) > 15 && isSameDay(event.start, event.end)) || (!isSameDay(event.start, event.end) && minsToMidnight(event.start) >= 15)}
545 |
546 | {event.name}
547 |
548 |
549 | {formatTime(event.start)} - {formatTime(event.end)}{event.location
550 | ? ", " + event.location
551 | : ""}
552 |
553 | {:else if minsToMidnight(event.start) <= 15}
554 |
555 |
556 | {event.name} ,
557 | {formatTime(event.start)} - {formatTime(event.end)}{event.location
558 | ? ", " + event.location
559 | : ""}
560 |
561 | {:else}
562 |
563 |
564 | {event.name} ,
565 | {formatTime(event.start)} - {formatTime(event.end)}{event.location
566 | ? ", " + event.location
567 | : ""}
568 |
569 | {/if}
570 |
571 |
572 | {/each}
573 | {/each}
574 |
575 |
576 |
577 | {#if minsOutsideEvent(currentTime) <= 0}
578 |
579 |
586 |
592 | {formatTime(currentTime)}
593 |
594 |
595 | {#if !followTime}
596 |
599 |
603 | {
606 | followTime = true;
607 | updateFollowTime();
608 | }}
609 | >
610 | Go to current time
611 |
612 |
613 |
614 | {/if}
615 | {/if}
616 | {/if}
617 |
618 |
619 |
620 |
625 |
--------------------------------------------------------------------------------
/src/components/Info/Schedule/Schedule.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import { GET } from "../../../pages/api/schedule";
3 | import Calendar from "./Calendar.svelte";
4 |
5 | let resp;
6 |
7 | try {
8 | resp = await GET();
9 | } catch (e) {
10 | console.error(e);
11 | }
12 |
13 | interface Props {
14 | videoWall: boolean;
15 | }
16 |
17 | const { videoWall = false } = Astro.props;
18 | ---
19 |
20 |
23 |
24 |
34 |
35 |
36 |
44 |
45 |
46 |
Click on an event for more information
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/src/components/Letter.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Projects from "./Projects/Projects.svelte";
3 |
4 | const futureDate = new Date();
5 | futureDate.setFullYear(futureDate.getFullYear() + 10);
6 |
7 | // TODO: TO BE CONFIRMED
8 | const eventDate = new Date("2024-05-17T18:00:00-04:00");
9 | ---
10 |
11 |
12 |
16 |
17 |
18 |
19 | {
20 | futureDate.toLocaleDateString(undefined, {
21 | year: "numeric",
22 | month: "long",
23 | day: "numeric",
24 | })
25 | }
26 |
27 |
28 | {Math.round((eventDate.valueOf() - Date.now()) / (24 * 60 * 60 * 1000))} days
29 | until event
30 |
31 |
32 |
33 |
36 |
39 | Greetings, hacker.
40 |
41 |
42 | Just a few months ago, the world fell into a zombie apocalypse. It’s absurd how
43 | fast civilization has fallen to the virus.
44 |
45 |
46 | Cities have turned to battlefields. Subways and schools have grown infected with
47 | the fallen.
48 |
49 |
It's the beginning of the end.
50 |
51 | But one thing still stands: technology. WiFi is up, electricity runs, and hardware
52 | operates.
53 |
54 |
55 |
56 |
57 |
60 |
61 | Join 150 hackers
62 | like you for
63 | 44 hours at our safehouse.
64 |
65 |
66 | Build something, anything , to help us survive this
67 | apocalypse.
68 |
69 |
70 |
71 |
72 |
73 |
74 | So, what will you make? Humanity is counting on you. From the Apocalypse team...
75 |
76 |
80 |
81 |
82 |
83 |
84 |
90 |
--------------------------------------------------------------------------------
/src/components/NavBar.astro:
--------------------------------------------------------------------------------
1 |
2 |
6 |
9 |
10 |
19 |
20 |
LETTER
21 |
27 |
28 |
29 |
INFO
30 |
36 |
37 |
38 |
FAQ
39 |
45 |
46 |
47 |
48 |
49 |
50 |
76 |
77 |
107 |
--------------------------------------------------------------------------------
/src/components/Projects/ProjectItem.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { img, description, credit, creditLink } = Astro.props;
3 | ---
4 |
5 |
6 |
7 |
15 |
16 | Photo credit:
17 | {credit}
23 |
24 |
25 |
28 |
29 |
--------------------------------------------------------------------------------
/src/components/Projects/ProjectItem.svelte:
--------------------------------------------------------------------------------
1 |
51 |
52 |
53 |
dispatch("click")}>
54 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/src/components/Projects/Projects.svelte:
--------------------------------------------------------------------------------
1 |
110 |
111 |
112 |
113 | {#each shiftToProject(currentId) as project (project.id)}
114 |
121 | {/each}
122 |
123 |
124 |
129 | {projects[currentId].desc}
130 |
131 |
132 |
133 |
--------------------------------------------------------------------------------
/src/components/ShipCard.astro:
--------------------------------------------------------------------------------
1 | ---
2 | const { name, description, href, team, imgSrc } = Astro.props;
3 |
4 | let possibleRots = ["motion-safe:hover:rotate-1", "motion-safe:hover:-rotate-1"];
5 | let rot = possibleRots[Math.floor(Math.random() * possibleRots.length)];
6 |
7 | let parsedTeam = team.split(", ");
8 |
9 | let teamString = "";
10 | if (parsedTeam.length == 1) {
11 | teamString = parsedTeam[0];
12 | } else if (parsedTeam.length == 2) {
13 | teamString = `${parsedTeam[0]} and ${parsedTeam[1]}`;
14 | } else if (parsedTeam.length == 3) {
15 | teamString = `${parsedTeam.slice(0, -1).join(", ")}, and ${parsedTeam[2]}`;
16 | } else if (parsedTeam.length == 4) {
17 | teamString = `${parsedTeam.slice(0, 2).join(", ")}, ${parsedTeam[2]}, and ${
18 | parsedTeam[3]
19 | }`;
20 | }
21 | ---
22 |
23 | {href.length > 0 && (
24 |
25 |
28 |
35 |
39 |
40 |
43 |
44 |
45 |
46 |
50 |
51 |
55 |
56 |
60 |
61 |
65 |
66 |
67 |
70 |
71 |
72 |
73 |
74 | )}
75 |
76 | {href.length == 0 && (
77 |
80 |
87 |
91 |
92 |
95 |
96 |
97 |
98 |
102 |
103 |
107 |
108 |
112 |
113 |
117 |
118 |
119 |
122 |
123 |
124 |
125 |
126 | )}
127 |
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/src/layouts/Layout.astro:
--------------------------------------------------------------------------------
1 | ---
2 | interface Props {
3 | title: string;
4 | }
5 |
6 | const { title } = Astro.props;
7 | const description =
8 | "Apocalypse is Toronto's biggest in-person high school hackathon. For 44 hours, build fun tech with 150 other high school programmers & engineers to survive the zombie apocalypse!";
9 | const banner = "/banner.png";
10 |
11 | const { url } = Astro.request;
12 | let slug = new URL(url).pathname;
13 | if (slug == "/") slug = "";
14 |
15 | // import SpeedInsights from "@vercel/speed-insights/astro";
16 | ---
17 |
18 |
19 |
20 |
21 |
22 |
23 | {title}
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
152 |
153 |
--------------------------------------------------------------------------------
/src/pages/404.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Layout from "../layouts/Layout.astro";
3 | ---
4 |
5 |
6 |
7 |
8 |
11 |
404!
12 |
Umm... It seems like you're lost.
13 |
Go back home
18 |
19 |
20 |
21 |
22 |
23 |
29 |
--------------------------------------------------------------------------------
/src/pages/api/lists/subscribe.ts:
--------------------------------------------------------------------------------
1 | type SubscribeBody = {
2 | email: string;
3 | }
4 |
5 | export async function POST({ request }) {
6 | // Check for valid request body
7 | if (!request.body) {
8 | return new Response(
9 | JSON.stringify({ success: false }),
10 | { headers: { "Content-Type": "application/json", }, status: 400 }
11 | )
12 | }
13 | let body;
14 | try {
15 | body = await request.json();
16 | } catch {
17 | return new Response(
18 | JSON.stringify({ success: false }),
19 | { headers: { "Content-Type": "application/json", }, status: 400 }
20 | )
21 | }
22 | if (typeof body['email'] != "string") {
23 | return new Response(
24 | JSON.stringify({ success: false }),
25 | { headers: { "Content-Type": "application/json", }, status: 400 }
26 | )
27 | }
28 | body = body as SubscribeBody;
29 |
30 | // Timeout after 5 seconds
31 | setTimeout(() => {
32 | return new Response(
33 | JSON.stringify({ success: false }),
34 | { headers: { "Content-Type": "application/json", }, status: 500 },
35 | )
36 | }, 5000);
37 |
38 | let res: Response;
39 |
40 | try {
41 | res = await fetch("https://postal.hackclub.com/subscribe", {
42 | headers: {
43 | "content-type": "application/x-www-form-urlencoded",
44 | },
45 | body: `email=${encodeURIComponent(body.email)}&hp=&list=YAbJpY892wYYel892gyGNghouQ&subform=yes`,
46 | method: "POST"
47 | });
48 | } catch {
49 | return new Response(
50 | JSON.stringify({ success: false }),
51 | { headers: { "Content-Type": "application/json", }, status: 500 }
52 | )
53 | }
54 | if (res.redirected && (res.url == "https://www.apohacks.com/lists/success" || res.url == "https://www.apohacks.com/lists/prevsub")) {
55 | return new Response(
56 | JSON.stringify({ success: true }),
57 | { headers: { "Content-Type": "application/json", }, status: 200 }
58 | )
59 | } else {
60 | return new Response(
61 | JSON.stringify({ success: false }),
62 | { headers: { "Content-Type": "application/json", }, status: 500 }
63 | )
64 | }
65 | }
--------------------------------------------------------------------------------
/src/pages/api/schedule.ts:
--------------------------------------------------------------------------------
1 | import { createClient } from "@supabase/supabase-js";
2 | import ical, { type CalendarResponse, type VEvent } from "node-ical";
3 |
4 | // const supabase = createClient(import.meta.env.SUPABASE_URL, import.meta.env.SUPABASE_SECRET);
5 |
6 | type Event = {
7 | name: string,
8 | type?: string,
9 | location?: string,
10 | description?: string,
11 | start: Date,
12 | end: Date,
13 | fullDay: boolean,
14 | };
15 |
16 | type Milestone = {
17 | name: string,
18 | date: Date,
19 | };
20 |
21 | type EventResponse = EventsSuccess | EventError;
22 |
23 | type EventsSuccess = {
24 | ok: true,
25 | last_updated: Date,
26 | events: Event[],
27 | milestones: Milestone[],
28 | };
29 |
30 | type EventError = {
31 | ok: false,
32 | message: string,
33 | details?: string,
34 | };
35 |
36 | async function fetchEvents(): Promise {
37 | let schd: CalendarResponse;
38 |
39 | try {
40 | schd = await ical.async.fromURL(import.meta.env.ICAL_URL);
41 | } catch (e) {
42 | console.error(e);
43 | return {
44 | ok: false,
45 | message: "Failed to fetch calendar",
46 | details: e.message,
47 | }
48 | }
49 |
50 | let events = Object.values(schd).map((event) => {
51 | if (event.type !== "VEVENT") {
52 | return;
53 | }
54 | if (!event.start || !event.end || !event.summary) {
55 | return;
56 | }
57 |
58 | const splitted = event.summary.split("-")
59 | let type;
60 | let name = event.summary;
61 |
62 | if (splitted.length > 1) {
63 | type = splitted[0].trim().toLowerCase();
64 | name = splitted.slice(1).join("-").trim();
65 | }
66 |
67 | return {
68 | name,
69 | type,
70 | location: event.location,
71 | description: event.description,
72 | start: event.start,
73 | end: event.end,
74 | fullDay: event.datetype === "date",
75 | };
76 | }).filter(event => event);
77 |
78 | let milestones = events.filter(event => event.type === "milestone").map(event => {
79 | return {
80 | name: event.name,
81 | date: event.start,
82 | };
83 | });
84 |
85 | events = events.filter(event => event.type != "milestone");
86 |
87 | return {
88 | ok: true,
89 | last_updated: new Date(),
90 | events: events,
91 | milestones: milestones,
92 | };
93 | }
94 |
95 | export async function GET() {
96 |
97 | // const { data, error } = await supabase.from("events").select("*").eq("id", "cache");
98 | // if (error) {
99 | if (true) {
100 | // console.error("Failed to fetch from supabase, not using cache", error);
101 |
102 | const events = await fetchEvents();
103 | if (events.ok == false) {
104 | return new Response(
105 | JSON.stringify({
106 | ok: false,
107 | message: "Failed to fetch events",
108 | details: events.message,
109 | }),
110 | {
111 | status: 500,
112 | headers: {
113 | "Content-Type": "application/json",
114 | "Cache-Control": "no-cache, must-revalidate"
115 | },
116 | },
117 | );
118 | }
119 |
120 | const expires = new Date(events.last_updated);
121 | expires.setMinutes(expires.getMinutes() + 1);
122 |
123 | return new Response(
124 | JSON.stringify(events),
125 | {
126 | status: 200,
127 | headers: {
128 | "Content-Type": "application/json",
129 | "Last-Modified": events.last_updated.toUTCString(),
130 | "Cache-Control": "public, must-revalidate",
131 | "Expires": expires.toUTCString(),
132 | },
133 | },
134 | );
135 | }
136 |
137 | // if (data.length == 0) {
138 | // console.warn("No cache found in supabase, fetching events");
139 | // const events = await fetchEvents();
140 | // if (events.ok == false) {
141 | // return new Response(
142 | // JSON.stringify({
143 | // ok: false,
144 | // message: "Failed to fetch events",
145 | // details: events.message,
146 | // }),
147 | // {
148 | // status: 500,
149 | // headers: {
150 | // "Content-Type": "application/json",
151 | // "Cache-Control": "no-cache, must-revalidate"
152 | // },
153 | // },
154 | // );
155 | // }
156 |
157 | // await supabase.from("events").upsert({ id: "cache", last_updated: events.last_updated, events: events.events, milestones: events.milestones })
158 |
159 | // const expires = new Date(events.last_updated);
160 | // expires.setMinutes(expires.getMinutes() + 1);
161 |
162 | // return new Response(
163 | // JSON.stringify(events),
164 | // {
165 | // status: 200,
166 | // headers: {
167 | // "Content-Type": "application/json",
168 | // "Last-Modified": events.last_updated.toUTCString(),
169 | // "Cache-Control": "public, must-revalidate",
170 | // "Expires": expires.toUTCString(),
171 | // },
172 | // },
173 | // );
174 | // }
175 |
176 | // let events = {
177 | // ok: true,
178 | // last_updated: new Date(data[0].last_updated),
179 | // events: data[0].events,
180 | // milestones: data[0].milestones
181 | // } as EventsSuccess;
182 |
183 | // if (events.last_updated.getTime() + 60000 <= Date.now()) {
184 | // const newEvents = await fetchEvents();
185 | // if (newEvents.ok == false) {
186 | // return new Response(
187 | // JSON.stringify({
188 | // ok: false,
189 | // message: "Failed to fetch events",
190 | // details: newEvents.message,
191 | // }),
192 | // {
193 | // status: 500,
194 | // headers: {
195 | // "Content-Type": "application/json",
196 | // "Cache-Control": "no-cache, must-revalidate"
197 | // },
198 | // },
199 | // );
200 | // }
201 |
202 | // await supabase.from("events").upsert({ id: "cache", last_updated: newEvents.last_updated, events: newEvents.events, milestones: newEvents.milestones })
203 |
204 | // events = newEvents;
205 | // }
206 |
207 | // const expires = new Date(events.last_updated);
208 | // expires.setMinutes(expires.getMinutes() + 1);
209 |
210 | // return new Response(
211 | // JSON.stringify(events),
212 | // {
213 | // status: 200,
214 | // headers: {
215 | // "Content-Type": "application/json",
216 | // "Last-Modified": events.last_updated.toUTCString(),
217 | // "Cache-Control": "public, must-revalidate",
218 | // "Expires": expires.toUTCString(),
219 | // },
220 | // },
221 | // );
222 | }
223 |
--------------------------------------------------------------------------------
/src/pages/event.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Header from "../components/Info/Header.astro";
3 | import Links from "../components/Info/Links.astro";
4 | import Schedule from "../components/Info/Schedule/Schedule.astro";
5 | import Layout from "../layouts/Layout.astro";
6 |
7 | const videoWall = Boolean(Astro.url.searchParams.get("videowall")) || false;
8 | ---
9 |
10 |
11 |
12 |
13 |
14 |
15 | {!videoWall && }
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/pages/index.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Bento from "../components/Bento.astro";
3 | import FAQ from "../components/FAQ/FAQ.astro";
4 | import Hero from "../components/Hero.svelte";
5 | import Layout from "../layouts/Layout.astro";
6 | import Letter from "../components/Letter.astro";
7 | import Footer from "../components/Footer.astro";
8 | import NavBar from "../components/NavBar.astro";
9 | ---
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
22 |
23 |
--------------------------------------------------------------------------------
/src/pages/ships.astro:
--------------------------------------------------------------------------------
1 | ---
2 | import Footer from "../components/Footer.astro";
3 | import ShipCard from "../components/ShipCard.astro";
4 | import Layout from "../layouts/Layout.astro";
5 |
6 | let ships = [
7 | {
8 | name: "Zombie Translator",
9 | description: "Two way translator for Toronto slang and zombie.",
10 | href: "https://github.com/kvnyng/zombie-yute",
11 | imgSrc: "/ships/zombie-translator.jpg",
12 | team: "Rhys P, Kevin Y, Kyle L",
13 | },
14 | {
15 | name: "STONY",
16 | description: "A 3-in-1 zombie tortue device.",
17 | href: "https://github.com/KaranChawlaD/Apocalypse",
18 | imgSrc: "/ships/stony.jpg",
19 | team: "Karan C, Vicky C, Ryan S, Darren S",
20 | },
21 | {
22 | name: "wrapped",
23 | description: "wrapped wraps your and your friend's life stats in one place.",
24 | href: "https://github.com/RawPikachu/wrap",
25 | imgSrc: "/ships/wrapped.jpg",
26 | team: "Yiming C, Leo H, Yohance P, Casper C",
27 | },
28 | {
29 | name: "Zombie Boxer ",
30 | description: "This is a wearable glove that will help you with self-defense.",
31 | href: "",
32 | imgSrc: "/ships/zombie-boxer.jpg",
33 | team: "Kunshpreet",
34 | },
35 | {
36 | name: "Moan-to-Speech",
37 | description:
38 | "A translator app that translates between the Grrs and Grah's of zombie speech to english.",
39 | href: "https://github.com/Skilled5041/apohacks-frontend",
40 | imgSrc: "/ships/moan-to-speech.jpg",
41 | team: "James C, Emilio M, Danie P, Aaron W",
42 | },
43 | {
44 | name: "Zombie Home Defense System",
45 | description: "Zombie vs. Human detection system.",
46 | href: "https://github.com/ryan11yuan/Zombie-Home-Defense-System",
47 | imgSrc: "/ships/zombie-home-defense-system.jpg",
48 | team: "Ryan Y, Yugraj D, Nikhil M, Evan Y",
49 | },
50 | {
51 | name: "graggleblogfiggle",
52 | description: "A little pea trying to make it big in the world.",
53 | href: "https://github.com/Stwikeyy/graggleblogfiggle",
54 | imgSrc: "/ships/graggleblogfiggle.jpg",
55 | team: "Linqi L, Victoria W, Aleesha A, Prisca C",
56 | },
57 | {
58 | name: "Apocalypse Alley",
59 | description:
60 | "A website to revolutionize the marketplace for a zombie-infested world.",
61 | href: "https://github.com/B-Eddie/Website",
62 | imgSrc: "/ships/apocalypse-alley.jpg",
63 | team: "Ilya A J, Eddie B",
64 | },
65 | {
66 | name: "Outpost",
67 | description: "This is a trading/bidding application.",
68 | href: "https://github.com/ruqayahrr/outpost.git",
69 | imgSrc: "/ships/outpost.jpg",
70 | team: "Felix P, Ruqayah R, Brianna A, Jerry L",
71 | },
72 | {
73 | name: "Zombie Laser Tag",
74 | description: "Shoot at zombies with a laser gun to get points.",
75 | href: "",
76 | imgSrc: "/ships/zombie-laser-tag.jpg",
77 | team: "Anant B, Gavin M, Siddhartha T",
78 | },
79 | {
80 | name: "Apocalift",
81 | description:
82 | "Apocalift: Remote RC vehicle rentals for survivors to explore and monitor zombie-infested terrains.",
83 | href: "https://github.com/vichua2006/ApoclaypseHacks2024",
84 | imgSrc: "/ships/apocalift.png",
85 | team: "Victor H, Rohan K, Eric L, Jayden L",
86 | },
87 | {
88 | name: "ApocaLedger",
89 | description:
90 | "Our team's top worry during the apocalypse: how to pay taxes and keep the IRS thriving.",
91 | href: "https://github.com/jpt1729/irs-app",
92 | imgSrc: "/ships/apocaledger.jpg",
93 | team: "John T A, Zoya H, Alex N, Lena C A",
94 | },
95 | {
96 | name: "Zombie Apocalypse simulator",
97 | description:
98 | "A zombie apocalypse simulator to test your skills of the zombie hoarding outside.",
99 | href: "https://github.com/Aruyan23/FunnyDrabScan",
100 | imgSrc: "/ships/zombie-apocalypse-simulator.jpg",
101 | team: "Shreenay A",
102 | },
103 | {
104 | name: "Informedead",
105 | description:
106 | "Apocalyptic communicators with no reliance on cellular data or other infrastructure.",
107 | href: "https://github.com/EerierGosling/Informedead",
108 | imgSrc: "/ships/informedead.jpg",
109 | team: "Julian K, Evan G, Cassandra J, Sofia E",
110 | },
111 | {
112 | name: "zomBAE",
113 | description:
114 | "Find love during the apocalypse with zomBAE, find your aPOOKIElypse today!",
115 | href: "https://github.com/sophian098/apocalypse-website",
116 | imgSrc: "/ships/zombae.jpg",
117 | team: "Sophia N, Nuo Z W, Ching Lam L, Joyi X",
118 | },
119 | {
120 | name: "Zinder",
121 | description:
122 | "Humans can befriend zombies through this dating-like app, creating a connected apocalyptic society.",
123 | href: "https://x.thunkable.com/copy/20de6e54c59e2992e5e961c9746bed50",
124 | imgSrc: "/ships/zinder.jpg",
125 | team: "Daniella A, Bianca A, Zara K",
126 | },
127 | {
128 | name: "Zombie Hunger Games",
129 | description:
130 | "Many zombies compete in this text-based PvP game, but only one may enter the humans' bunker!",
131 | href: "https://github.com/MichaByte/apocalypse",
132 | imgSrc: "/ships/zombie-hunger-games.png",
133 | team: "Micha A",
134 | },
135 | {
136 | name: "USS Apocalypse",
137 | description:
138 | "We built a car with a drone pad, taser prongs, and speakers playing communist music to stop zombies.",
139 | href: "https://github.com/MarkDanishevsky/uss-apocalypse",
140 | imgSrc: "/ships/uss-apocalypse.jpg",
141 | team: "Ivan S, Shrey S, Mark D, Sharon B",
142 | },
143 | {
144 | name: "The Screamers",
145 | description:
146 | " basically our idea is to make an alarming system alerting all computers zombies are near.",
147 | href: "serenityux.github.io/ContentLuminousCodewarrior/",
148 | imgSrc: "/ships/the-screamers.jpg",
149 | team: "Thomas S, Hajrah S, Kieve J",
150 | },
151 | {
152 | name: "Memory Capsule",
153 | description: "A box holding the memories of the past.",
154 | href: "https://github.com/techpixel/apocalypse",
155 | imgSrc: "/ships/memory-capsule.jpg",
156 | team: "Manitej B, Alexander P",
157 | },
158 | {
159 | name: "SurvivorLog",
160 | description:
161 | "Help fighters record their daily killings of zombies to exchange for resources.",
162 | href: "https://github.com/bianca-8/SurvivorLog",
163 | imgSrc: "/ships/survivorlog.jpg",
164 | team: "Anya H, Brianna W, Bianca B",
165 | },
166 | {
167 | name: "Disaster Survival Senarios",
168 | description:
169 | "We have simulations on how to survive a disaster and a chat bot to gamble bottle caps.",
170 | href: "https://github.com/Vmaster1/Apocalypse-Hackathon-Project/tree/main",
171 | imgSrc: "/ships/disaster-survival-senarios.jpg",
172 | team: "Ved M, Devansh G, Saisrikara D, Aryan K",
173 | },
174 | {
175 | name: "Yummificator 5000",
176 | description:
177 | "This Minecraft mod allows users to cook + consume zombie flesh and craft a stew. Plus, flamethrower.",
178 | href: "https://github.com/awang-bot/Zompocalypse",
179 | imgSrc: "/ships/yummificator-5000.jpg",
180 | team: "Atisa W",
181 | },
182 | {
183 | name: "The Last Escape",
184 | description: "The project aims to enhance urban resilience and preparedness.",
185 | href: "https://github.com/sukhmani1313/thelastescape",
186 | imgSrc: "/ships/the-last-escape.jpg",
187 | team: "Anvi D, Sukhmani B, Ekveer C",
188 | },
189 | {
190 | name: "Elephalert",
191 | description:
192 | "Elephalert alerts humans to any zombie near a safe facility, disguised as a cute, squeaky elephant.",
193 | href: "https://github.com/andrearyang/Elephalert",
194 | imgSrc: "/ships/elephalert.jpg",
195 | team: "Savina J, Andrea Y",
196 | },
197 | {
198 | name: "ZomBae #2",
199 | description:
200 | "Zombae is the first dating platform designed for both humans AND zombies to find their new partner.",
201 | href: "https://abir-kh.github.io/2024-Apocalypse-Hackathon/",
202 | imgSrc: "/ships/zombae-2.jpg",
203 | team: "Abir K H, Dominic L, Samuel H, Isaac X",
204 | },
205 | {
206 | name: "Apocalypse Handbook",
207 | description:
208 | "Comprehensive handbook about everything known about plants and zombies during the apocalypse.",
209 | href: "https://github.com/Thewerdo/apohacks-handbook",
210 | imgSrc: "/ships/apocalypse-handbook.jpg",
211 | team: "Aiden W",
212 | },
213 | {
214 | name: "Dual Zombie Defense HQ",
215 | description:
216 | "This is the ultimate zombie defense system. It has a sonar, trapdoor, and a web dashboard.",
217 | href: "https://github.com/qcoral/apocalypse-project-2024",
218 | imgSrc: "/ships/dual-zombie-defense-hq.jpg",
219 | team: "Alex R, Jaehyeong P, Shanvanth A",
220 | },
221 | {
222 | name: "Friendly Fire",
223 | description: "Boogie bomb.",
224 | href: "https://github.com/possiblyselena/FriendlyFire",
225 | imgSrc: "/ships/friendly-fire.jpg",
226 | team: "Selena N, Ethan T, Chayanth S, Aneek M",
227 | },
228 | {
229 | name: "ZomTrackTO",
230 | description: "A Zombie Tracking Platform to Survive the Apocalypse in Toronto.",
231 | href: "https://github.com/alisohaila/ZomTrackTO",
232 | imgSrc: "/ships/zomtrackto.jpg",
233 | team: "Sohaila A, Falak A",
234 | },
235 | {
236 | name: "Practical Illumination",
237 | description: "4x4x4 LED cube.",
238 | href: "https://github.com/nosaboy/Apocalypse2024",
239 | imgSrc: "/ships/practical-illumination.jpg",
240 | team: "Kevin X, Zachary K, Kyna S",
241 | },
242 | {
243 | name: "Zhield",
244 | description: "Protect yourself during the looming apocalypse.",
245 | href: "https://github.com/Lynzzyr/Zhield",
246 | imgSrc: "/ships/zhield.jpg",
247 | team: "Arnnav K, Brandon N, Yohance P, Kevin Di",
248 | },
249 | {
250 | name: "A.R.M.S",
251 | description:
252 | "A calculated droid tele-operated by an IoT server which can perform various recon tasks.",
253 | href: "",
254 | imgSrc: "/ships/a-r-m-s.jpg",
255 | team: "Jeevan S, Yahya A, Rababb P, Edwin Z",
256 | },
257 | {
258 | name: "Your Apocalypse Tracker",
259 | description:
260 | "App with the functions to notify the user whenever the motion sensor detects motion.",
261 | href: "https://github.com/Richard342594736/yourapocalypsetracker",
262 | imgSrc: "/ships/your-apocalypse-tracker.jpg",
263 | team: "Richard L, Rosabel Z, Chris H",
264 | },
265 | {
266 | name: "Apocalypse: The Game",
267 | description:
268 | "Grab your phones and tag each other, scan beacons, and win in Apocalypse: The Game!",
269 | href: "https://github.com/recursiveforte/apo-zombie-app",
270 | imgSrc: "/ships/apocalypse-the-game.jpg",
271 | team: "JC, Cheru B, Mason M, Charlie W",
272 | },
273 | {
274 | name: "Zombie Cross",
275 | description: "A research team tank built to study zombies.",
276 | href: "https://github.com/Prabh2006/ZombieCross",
277 | imgSrc: "/ships/zombie-cross.jpg",
278 | team: "Krish P, Azhaf S, Tanvir S, Prabhgun B",
279 | },
280 | {
281 | name: "APOC Trading Centre",
282 | description: "Post-apocalyptic trading app that lets users trade amazing item!",
283 | href: "https://github.com/willcagas/APOC-Trade-Center",
284 | imgSrc: "/ships/apoc-trading-centre.jpg",
285 | team: "William C, Anthony G, Nicholas G, Mikael G",
286 | },
287 | {
288 | name: "Undead Gambling",
289 | description: "gambling with poker.",
290 | href: "https://github.com/WaterThePotatoes/undead-gambling",
291 | imgSrc: "/ships/undead-gambling.jpg",
292 | team: "Tony Y, Ivan J, Sean J, Aayan",
293 | },
294 | {
295 | name: "Tartarus",
296 | description: "The modern prison platform for paranormal creatures.",
297 | href: "https://github.com/northeastprince/tartarus",
298 | imgSrc: "/ships/tartarus.jpg",
299 | team: "Matt A",
300 | },
301 | {
302 | name: "Lyfe Saver",
303 | description: "A health tracker with an intelligible AI friend.",
304 | href: "https://github.com/LAKSHYAJAIN16/apocalypse-hackathon",
305 | imgSrc: "/ships/lyfe-saver.jpg",
306 | team: "Lakshya J, Junaid M, George F, Nathan P",
307 | },
308 | ];
309 |
310 | ships = ships.sort(() => Math.random() - 0.5);
311 | ---
312 |
313 |
314 |
315 |
318 |
319 |
327 |
331 |
332 |
333 |
334 |
335 |
336 | May 17 - 19, 2024; 44 hrs @ Shopify Toronto
337 |
338 |
341 | 150 teens built the wackiest projects to
344 | survive the zombie apocalypse .
345 |
346 |
347 |
348 |
353 |
354 |
355 |
356 |
359 | Here are the 40 projects they shipped!
360 |
361 |
362 |
365 | {
366 | ships.map((ship) => (
367 |
374 | ))
375 | }
376 |
377 |
378 |
381 |
382 |
383 |
409 |
410 |
--------------------------------------------------------------------------------
/tailwind.config.mjs:
--------------------------------------------------------------------------------
1 | const defaultTheme = require("tailwindcss/defaultTheme");
2 |
3 | /** @type {import('tailwindcss').Config} */
4 | export default {
5 | content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"],
6 | theme: {
7 | extend: {
8 | colors: {
9 | "primary-bg": "#401986",
10 | "secondary-bg": "#6B5FFE",
11 | "dark-bg": "#2B1B50",
12 | "darker-bg": "#110B20",
13 | "light-bg": "#EDDAF8",
14 | dark: "#A183B2",
15 | accent: "#79E2F0",
16 | accent2: "#FF5DA9",
17 | },
18 | fontFamily: {
19 | sans: ["Geist", ...defaultTheme.fontFamily.sans],
20 | main: ["NeueBit-Bold", ...defaultTheme.fontFamily.mono],
21 | },
22 | screens: {
23 | xs: "320px",
24 | "3xl": "1792px",
25 | },
26 | backgroundSize: {
27 | "75%": "75%",
28 | "300%": "300%",
29 | },
30 | backgroundPosition: {
31 | "pos-0": "0% 0%",
32 | "pos-100": "100% 100%",
33 | },
34 | },
35 | },
36 | };
37 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "astro/tsconfigs/base",
3 | "compilerOptions": {
4 | "types": ["vite/client"]
5 | }
6 | }
7 |
--------------------------------------------------------------------------------