├── .eslintrc.json
├── .gitignore
├── README.md
├── bun.lockb
├── components
├── About.js
├── AbuDhabi
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Alexandria
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Arlington
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Atlanta
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Auckland
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Austin
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Bengaluru
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Bergen
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Boston
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Bydgoszcz
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Calgary
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Cambridge
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Casablanca
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Charlotte
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Chennai
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Columbus
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── DC
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Delhi
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Dhaka
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Dubai
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── ExampleCity
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Faq.js
├── Footer.js
├── Giza
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Guilds.js
├── Gurugram
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Hero.js
├── HongKong
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Kigali
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Lima
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Locations.js
├── London
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Manila
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Map.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ ├── Steps.js
│ └── events.json
├── Map.js
├── Melbourne
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Millbrae
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Minneapolis
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ ├── Steps.js
│ └── Subscribe.js
├── MosesLake
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── NYC
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Nairobi
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Oshkosh
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Ottawa
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Patna
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Phoenix
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── SaintAugustine
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Santiago
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── SaoPaulo
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Schedule.js
├── SiliconValley
│ ├── About.js
│ ├── Action.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Singapore
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Map.js
│ ├── Schedule.js
│ ├── Sponsors.js
│ └── Steps.js
├── Steps.js
├── Subscribe.js
├── Sydney
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Tampa
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── ThousandOaks
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Toronto
│ ├── About.js
│ ├── CountdownTimer.js
│ ├── Email.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── LiveSchedule.js
│ ├── Locations.js
│ ├── Map.js
│ ├── Schedule.js
│ ├── Sponsor.js
│ ├── Steps.js
│ ├── Teamgallery.js
│ ├── events.json
│ ├── secEmail.js
│ └── sponsor
│ │ ├── desktop.js
│ │ ├── desktop_about_me.module.css
│ │ └── mobile.js
├── ValenzuelaCity
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Partners.js
│ ├── Schedule.js
│ └── Steps.js
├── Vancouver
│ ├── About.js
│ ├── Email.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Map.js
│ ├── Schedule.js
│ ├── Sponsor.js
│ ├── Steps.js
│ ├── Teamgallery.js
│ ├── events.json
│ ├── secEmail.js
│ └── sponsor
│ │ ├── desktop.js
│ │ ├── desktop_about_me.module.css
│ │ └── mobile.js
├── Winnipeg
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── Wolverhampton
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
└── chandigarh
│ ├── About.js
│ ├── Faq.js
│ ├── Footer.js
│ ├── Guilds.js
│ ├── Hero.js
│ ├── Locations.js
│ ├── Schedule.js
│ └── Steps.js
├── next.config.mjs
├── package.json
├── pages
├── _app.js
├── _document.js
├── abudhabi.js
├── alexandria.js
├── api
│ └── v1
│ │ ├── [city]
│ │ └── register.js
│ │ ├── map.js
│ │ ├── pre-signup.js
│ │ └── waiver.js
├── arlington.js
├── atlanta.js
├── auckland.js
├── austin.js
├── bengaluru.js
├── bergen.js
├── boston.js
├── bydgoszcz.js
├── calgary.js
├── cambridge.js
├── casablanca.js
├── chandigarh.js
├── charlotte.js
├── chennai.js
├── columbus.js
├── dc.js
├── delhi.js
├── dhaka.js
├── dubai.js
├── example-city.js
├── giza.js
├── gurugram.js
├── hongkong.js
├── index.js
├── kigali.js
├── lima.js
├── london.js
├── manila.js
├── map.js
├── melbourne.js
├── millbrae.js
├── minneapolis.js
├── moseslake.js
├── nairobi.js
├── nyc.js
├── oshkosh.js
├── ottawa.js
├── patna.js
├── phoenix.js
├── saint-augustine.js
├── santiago.js
├── sao-paulo.js
├── silicon-valley.js
├── singapore.js
├── sydney.js
├── tampa.js
├── thousand-oaks.js
├── toronto.js
├── valenzuela-city.js
├── vancouver.js
├── waiver.js
├── winnipeg.js
└── wolverhampton.js
├── postcss.config.mjs
├── public
├── billboard.png
├── cards
│ ├── artist.png
│ ├── hacker.png
│ └── musician.png
├── city
│ ├── Arlington
│ │ ├── arlington.png
│ │ └── title.png
│ ├── Columbus
│ │ └── logo.png
│ ├── Giza
│ │ └── counterspell-Giza.png
│ ├── Gurugram
│ │ └── gurugram.png
│ ├── HongKong
│ │ ├── Fillout.png
│ │ ├── GDHH.png
│ │ ├── HKACE.png
│ │ ├── KeplerKowloon.png
│ │ ├── SlashAll.webp
│ │ └── venue.jpg
│ ├── Lima-cards
│ │ ├── artista.png
│ │ ├── musico.png
│ │ └── programador.png
│ ├── Valenzuela
│ │ └── partners
│ │ │ ├── aws-cavite.png
│ │ │ ├── aws-siklab.png
│ │ │ ├── devcon-manila.png
│ │ │ └── valace.png
│ ├── Vancouver
│ │ ├── 23(2).png
│ │ ├── 2title_Vancouver.png
│ │ ├── sponsors
│ │ │ ├── hackclub.png
│ │ │ ├── ltt.jpg
│ │ │ └── visst.jpg
│ │ └── title_Vancouver.png
│ ├── boston
│ │ ├── boston-logo.png
│ │ ├── poster.pdf
│ │ ├── poster.png
│ │ └── prospectus.pdf
│ ├── casablanca
│ │ ├── alx.svg
│ │ ├── coca-cola.svg
│ │ ├── estem-morocco.png
│ │ ├── gomycode.png
│ │ ├── pesage-promotion.png
│ │ ├── robots-and-more.png
│ │ ├── subrini.svg
│ │ └── title_casablanca.png
│ ├── melbourne
│ │ └── melbtitle.png
│ ├── minneapolis
│ │ └── title.png
│ ├── moseslake
│ │ ├── titlemoses.png
│ │ ├── titlemoses2.png
│ │ └── titlemoses3.png
│ ├── oshkosh
│ │ ├── 4ImprintLogo.png
│ │ ├── BuffaloWildWingsLogo.png
│ │ ├── SchiekLogo.png
│ │ ├── TEKSystemsLogo.jpg
│ │ └── title.png
│ ├── ottawa
│ │ ├── Event_Liability_Release.docx.pdf
│ │ ├── sponsors
│ │ │ ├── analog-devices.png
│ │ │ ├── dorahacks.svg
│ │ │ ├── shopify.png
│ │ │ └── ssi-canada.png
│ │ └── title_ott.png
│ ├── santiago
│ │ ├── cards
│ │ │ ├── artista.png
│ │ │ ├── musico.png
│ │ │ └── programador.png
│ │ └── hero
│ │ │ ├── BG.png
│ │ │ ├── bg1.png
│ │ │ ├── bg2.png
│ │ │ ├── bg3.png
│ │ │ ├── bg4.png
│ │ │ └── bg5.png
│ ├── saopaulo
│ │ ├── prospectus.pdf
│ │ └── saopaulo-logo.png
│ ├── silicon-valley
│ │ ├── billboard.png
│ │ ├── hero
│ │ │ ├── bg1.png
│ │ │ ├── bg2.png
│ │ │ ├── bg3.png
│ │ │ ├── bg4.png
│ │ │ └── bg5.png
│ │ └── title.png
│ ├── singapore
│ │ ├── sponsors
│ │ │ ├── google.png
│ │ │ └── tiktok.png
│ │ └── title
│ │ │ └── title.png
│ ├── toronto
│ │ ├── sponsors
│ │ │ ├── 1Password.png
│ │ │ ├── claw_and_kitty.png
│ │ │ ├── indomie.png
│ │ │ ├── luminor.png
│ │ │ ├── shopify.png
│ │ │ ├── terraCotta.png
│ │ │ ├── tmu.png
│ │ │ └── ubisoft-logo.png
│ │ └── title_toronto.png
│ └── winnipeg
│ │ └── title.png
├── down.png
├── faqbkgr
│ ├── faq1.png
│ ├── faq2.png
│ ├── faq3.png
│ ├── faq4.png
│ ├── faq5.png
│ ├── faq6.png
│ ├── faq7.png
│ └── faq8.png
├── favicon.ico
├── flares
│ ├── flare1.png
│ ├── flare10.png
│ ├── flare2.png
│ ├── flare3.png
│ ├── flare4.png
│ ├── flare5.png
│ ├── flare6.png
│ ├── flare7.png
│ ├── flare8.png
│ ├── flare9.png
│ ├── torch1.png
│ └── torch2.png
├── fusion-pixel.woff2
├── hero
│ ├── bg1.png
│ ├── bg2.png
│ ├── bg3.png
│ ├── bg4.png
│ └── bg5.png
├── logo192.png
├── logo512.png
├── manifest.webmanifest
├── music.mp3
├── neuebit.woff
├── neuebit.woff2
├── photos
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ ├── 4.png
│ ├── 5.png
│ ├── 6.png
│ └── 7.png
├── retro.woff
├── robots.txt
├── smoke.gif
└── title.png
├── scripts
└── sitemap.js
├── styles
└── globals.css
├── tailwind.config.js
└── yarn.lock
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals",
3 | "rules": {
4 | "@next/next/no-img-element": "off",
5 | "react/no-unescaped-entities": "off",
6 | "eqeqeq": "warn"
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 | .yarn/install-state.gz
8 |
9 | # testing
10 | /coverage
11 |
12 | # next.js
13 | /.next/
14 | /out/
15 |
16 | # production
17 | /build
18 |
19 | # misc
20 | .DS_Store
21 | *.pem
22 | .env*
23 |
24 | # debug
25 | npm-debug.log*
26 | yarn-debug.log*
27 | yarn-error.log*
28 |
29 | # local env files
30 | .env*.local
31 |
32 | # vercel
33 | .vercel
34 |
35 | # typescript
36 | *.tsbuildinfo
37 | next-env.d.ts
38 |
39 | public/sitemap.xml
40 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Counterspell
2 |
3 | Want to create your own city page? See [the template](https://github.com/hackclub/counterspell/blob/master/pages/example-city.js) and modify it to fit your event!
4 |
--------------------------------------------------------------------------------
/bun.lockb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/bun.lockb
--------------------------------------------------------------------------------
/components/AbuDhabi/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "8:30 AM", event: "Doors open" },
5 | { time: "9:30 AM", event: "Opening ceremony" },
6 | { time: "9:45 AM", event: "Hacking begins" },
7 | { time: "10:00 AM", event: "Workshop A" },
8 | { time: "11:00 AM", event: "Workshop B" },
9 | { time: "12:00 PM", event: "Lunch" },
10 | { time: "2:00 PM", event: "Activity" },
11 | { time: "3:30 PM", event: "Workshop C" },
12 | { time: "4:30 PM", event: "?? Mystery ??" },
13 | { time: "5:00 PM", event: "Workshop D" },
14 | { time: "6:30 PM", event: "Project wrap-up" },
15 | { time: "7:00 PM", event: "Dinner" },
16 | { time: "7:30 PM", event: "Project demos" },
17 | { time: "8:15 PM", event: "Closing + voting" },
18 | { time: "9:00 PM", event: "Goodbye :)" },
19 | ];
20 |
21 | return (
22 | <>
23 |
24 |
25 | {schedule.map((item, i) => (
26 |
27 |
{item.event}
28 |
29 |
{item.time}
30 |
31 | ))}
32 |
33 |
34 | >
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/components/Alexandria/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Alexandria/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "9:00 AM", event: "Doors open" },
5 | { time: "10:00 AM", event: "Opening ceremony" },
6 | { time: "10:30 AM", event: "Lunch" },
7 | { time: "11:00 AM", event: "Start working on your game!" },
8 | { time: "1:00 PM", event: "Gamedev workshop 1" },
9 | { time: "3:30 PM", event: "Activity 1" },
10 | { time: "5:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:30 PM", event: "Dinner" },
12 | { time: "7:30 PM", event: "Night Surprise" },
13 | { time: "8:00 PM", event: "Closing Ceremony" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Arlington/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "10:00 AM", event: "Arrival" },
4 | { time: "11:00 AM", event: "Kickoff" },
5 | { time: "12:00 PM", event: "Lunch" },
6 | { time: "1:00 PM", event: "Workshop" },
7 | { time: "6:00 PM", event: "Dinner" },
8 | { time: "10:00 PM", event: "Judging" },
9 | { time: "11:00 PM", event: "Winners announced" },
10 | ];
11 |
12 | return (
13 | <>
14 |
15 |
16 | {schedule.map((item, i) => (
17 |
18 |
{item.event}
19 |
20 |
{item.time}
21 |
22 | ))}
23 |
All times are in Central Standard Time
24 |
25 |
26 | >
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/components/Atlanta/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Atlanta/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "5:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Auckland/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Auckland/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Austin/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Austin/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "11:30 AM", event: "Opening ceremony" },
6 | { time: "12:00 PM", event: "Lunch and start working on your game!" },
7 | { time: "2:00 PM", event: "Sprig Workshop" },
8 | { time: "4:00 PM", event: "Karaoke" },
9 | { time: "5:00 PM", event: "Art workshop & Bug squashing help" },
10 | { time: "6:00 PM", event: "Dinner" },
11 | { time: "8:00 PM", event: "Boba Drops" },
12 | { time: "10:00 PM", event: "Peer judging and prizes" },
13 | { time: "11:00 PM", event: "Event ends" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Bengaluru/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Bengaluru/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "08:30 AM", event: "Doors open" },
5 | { time: "09:00 AM", event: "Opening ceremony" },
6 | { time: "09:30 AM", event: "Team formation & brainstorming" },
7 | { time: "10:00 AM", event: "Start working on your game!" },
8 | { time: "11:00 AM", event: "Gamedev workshop 1" },
9 | { time: "12:30 PM", event: "Lunch" },
10 | { time: "1:00 PM", event: "Continue working on your game" },
11 | { time: "2:00 PM", event: "Gamedev workshop 2" },
12 | { time: "4:00 PM", event: "Fun activity 1" },
13 | { time: "5:00 PM", event: "Continue working / Mentoring sessions" },
14 | { time: "6:00 PM", event: "Dinner" },
15 | { time: "7:00 PM", event: "Prepare for game demos" },
16 | { time: "8:00 PM", event: "Game demos!" },
17 | { time: "8:45 PM", event: "Closing ceremony & Awards" },
18 | { time: "9:00 PM", event: "Event ends" },
19 | ];
20 |
21 | return (
22 | <>
23 |
24 |
25 | {schedule.map((item, i) => (
26 |
27 |
{item.event}
28 |
29 |
{item.time}
30 |
31 | ))}
32 |
33 |
34 | >
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/components/Bergen/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Boston/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Boston/Locations.js:
--------------------------------------------------------------------------------
1 | import Subscribe from "../Subscribe";
2 | import dynamic from "next/dynamic";
3 |
4 | const Map = dynamic(() => import("./../Map"), { ssr:false });
5 |
6 | export default function Locations({ registrationRef }) {
7 | // Do not update this list! We'll update it for you.
8 | const cities = [
9 | "Boston, MA",
10 | "New York City, NY",
11 | "Ottawa, ON",
12 | "Basking Ridge, NJ",
13 | "Austin, TX",
14 | "San Francisco, CA",
15 | "Burlington, VT",
16 | "Oshkosh, WI",
17 | ];
18 | // Do not update this list! We'll update it for you.
19 |
20 | return (
21 |
22 |
23 | {/* TODO: Replace `Example City` with your city */}
24 | Can't make it to Boston?
25 |
26 |
27 | There are 100+ other Counterspell locations worldwide!
28 |
29 |
30 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/components/Boston/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "8:00 AM", event: "Doors Open" },
5 | { time: "8:30-9:00 AM", event: "Opening Ceremony" },
6 | { time: "9:00 AM", event: "Hacking Begins!" },
7 | { time: "9:00-10:35 AM", event: "Intro to Godot Workshop" },
8 | { time: "10:50-11:35 AM", event: "Onshape/CAD Workshop" },
9 | { time: "10:50-11:35 AM", event: "Figma/Design Workshop" },
10 | { time: "12:00 PM", event: "Lunch + Lightening Talks!" },
11 | { time: "4:00-5:00 PM", event: "Game demos! + Voting" },
12 | { time: "5:00-5:30 PM", event: "Closing Ceremony" },
13 | ];
14 |
15 | return (
16 | <>
17 |
18 |
19 | {schedule.map((item, i) => (
20 |
21 |
{item.event}
22 |
23 |
{item.time}
24 |
25 | ))}
26 |
27 |
28 | >
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/components/Bydgoszcz/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Bydgoszcz/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "8:00 AM", event: "Doors open" },
4 | { time: "9:00 AM", event: "Opening ceremony" },
5 | { time: "10:00 AM", event: "Lunch" },
6 | { time: "10:30 AM", event: "Start working on your game!" },
7 | { time: "12:00 AM", event: "Gamedev workshop 1" },
8 | { time: "2:00 PM", event: "Activity" },
9 | { time: "3:00 PM", event: "Gamedev workshop 2" },
10 | { time: "4:00 PM", event: "Dinner" },
11 | { time: "5:00 PM", event: "Lightning talks" },
12 | { time: "6:00 AM", event: "Game demos!" },
13 | { time: "7:30 PM", event: "Closing ceremony" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Calgary/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Calgary/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Cambridge/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "8.45 AM", event: "Doors open" },
4 | { time: "9:00 AM", event: "Opening ceremony" },
5 | { time: "9:30 AM", event: "Start working on your game!" },
6 | { time: "9:30 AM", event: "Workshop 1" },
7 | { time: "11:00 AM", event: "Workshop 2" },
8 | { time: "12:00 PM", event: "Lunch" },
9 | { time: "1:00 PM", event: "Workshop 3" },
10 | { time: "5:15 PM", event: "Dinner" },
11 | { time: "7:30 PM", event: "Game demos and judging" },
12 | { time: "8:15 PM", event: "Closing ceremony" },
13 | { time: "8:30 PM", event: "Home time!" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Casablanca/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Charlotte/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Charlotte/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Chennai/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Chennai/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "08:30 AM", event: "Doors open" },
5 | { time: "09:00 AM", event: "Opening ceremony" },
6 | { time: "09:30 AM", event: "Team formation & brainstorming" },
7 | { time: "10:00 AM", event: "Gamedev workshop 1" },
8 | { time: "11:00 AM", event: "Start working on your game!" },
9 | { time: "12:30 PM", event: "Lunch" },
10 | { time: "1:00 PM", event: "Continue working on your game" },
11 | { time: "2:00 PM", event: "Gamedev workshop 2" },
12 | { time: "4:00 PM", event: "Fun activity" },
13 | { time: "5:00 PM", event: "Continue working / Mentoring sessions" },
14 | { time: "6:00 PM", event: "Dinner" },
15 | { time: "7:00 PM", event: "Prepare for game demos" },
16 | { time: "8:00 PM", event: "Game demos!" },
17 | { time: "8:45 PM", event: "Closing ceremony & Awards" },
18 | { time: "9:00 PM", event: "Event ends" },
19 | ];
20 |
21 | return (
22 | <>
23 |
24 |
25 | {schedule.map((item, i) => (
26 |
27 |
{item.event}
28 |
29 |
{item.time}
30 |
31 | ))}
32 |
33 |
34 | >
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/components/Columbus/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Columbus/Guilds.js:
--------------------------------------------------------------------------------
1 | import { Tilt } from "react-next-tilt";
2 |
3 | export default function Guilds() {
4 | return (
5 |
6 |
7 |
Artist, Musician or Coder?
8 |
9 | Regardless of which guild you are
10 | there is a place for you!
11 |
12 |
13 |
14 |
15 |
16 |
17 |

22 |
23 |
24 |
25 |
26 |

31 |
32 |
33 |
34 |
35 |

40 |
41 |
42 |
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/components/Columbus/Locations.js:
--------------------------------------------------------------------------------
1 | import Subscribe from "../Subscribe";
2 | import dynamic from "next/dynamic";
3 |
4 | const Map = dynamic(() => import("./../Map"), { ssr: false });
5 |
6 | export default function Locations({ registrationRef }) {
7 | // Do not update this list! We'll update it for you.
8 | const cities = [
9 | "Boston, MA",
10 | "New York City, NY",
11 | "Ottawa, ON",
12 | "Basking Ridge, NJ",
13 | "Austin, TX",
14 | "San Francisco, CA",
15 | "Burlington, VT",
16 | "Oshkosh, WI",
17 | ];
18 | // Do not update this list! We'll update it for you.
19 |
20 | return (
21 |
22 |
23 | {/* TODO: Replace `Example City` with your city */}
24 | Can't make it to Columbus?
25 |
26 |
27 | There are 100+ other Counterspell locations worldwide!
28 |
29 |
30 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/components/Columbus/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:50 AM", event: "Doors Open" },
5 | { time: "12:00-12:15 AM", event: "Introductions" },
6 | { time: "12:15-12:30 AM", event: "Opening Ceremony" },
7 | { time: "12:30 AM", event: "Hacking Begins!" },
8 | {
9 | time: "12:30-12:45 AM",
10 | event: "brainstorming / split into teams",
11 | },
12 | { time: "1:00-2:15 PM", event: "Eat lunch if you brought it / Hack1" },
13 | { time: "2:15 PM", event: "Delicious Snacks + Lightening Talks!" },
14 | { time: "2:45-3:45 PM", event: "More Hacking!" },
15 | { time: "3:45-4:00 PM", event: "Game demos! + Voting" },
16 | {
17 | time: "4:00-4:10 PM",
18 | event: "Bye bye!",
19 | },
20 | ];
21 |
22 | return (
23 | <>
24 |
25 |
26 | {schedule.map((item, i) => (
27 |
28 |
{item.event}
29 |
30 |
{item.time}
31 |
32 | ))}
33 |
34 |
35 | >
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/components/DC/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/DC/Locations.js:
--------------------------------------------------------------------------------
1 | import dynamic from "next/dynamic";
2 |
3 | const Map = dynamic(() => import("../Map"), { ssr:false });
4 |
5 | export default function Locations() {
6 | const cities = [
7 | "Boston, MA",
8 | "New York City, NY",
9 | "Ottawa, ON",
10 | "Basking Ridge, NJ",
11 | "Austin, TX",
12 | "San Francisco, CA",
13 | "Burlington, VT",
14 | "Oshkosh, WI",
15 | ];
16 |
17 | return (
18 |
19 |
20 | Can't make it to DC?
21 |
22 |
23 | There are 100+ other Counterspell locations worldwide!
24 |
25 |
26 |
31 |
32 |
33 |
34 |
Counterspell is organized by teenagers, for teenagers.
35 |
36 | Interested? {" "}
37 |
43 | Sign up here
44 |
45 | !
46 |
47 |
48 |
49 |
50 | );
51 | }
52 |
--------------------------------------------------------------------------------
/components/DC/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "11:00 AM", event: "Doors open" },
4 | { time: "12:00 PM", event: "Opening ceremony" },
5 | { time: "12:30 PM", event: "Lunch" },
6 | { time: "1:00 PM", event: "Start working on your game!" },
7 | { time: "2:00 PM", event: "Gamedev workshop 1" },
8 | { time: "4:00 PM", event: "Activity 1" },
9 | { time: "4:00 PM", event: "Gamedev workshop 2" },
10 | { time: "6:00 PM", event: "Dinner" },
11 | { time: "8:00 PM", event: "Lightning talks" },
12 | { time: "12:00 AM", event: "Midnight surprise" },
13 | { time: "8:00 AM", event: "Breakfast" },
14 | { time: "10:30 AM", event: "Game demos!" },
15 | { time: "12:00 PM", event: "Closing ceremony" },
16 | ];
17 |
18 | return (
19 | <>
20 |
21 |
22 | {schedule.map((item, i) => (
23 |
24 |
{item.event}
25 |
26 |
{item.time}
27 |
28 | ))}
29 |
30 |
31 | >
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/Delhi/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Delhi/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "8:00 AM", event: "Doors open" },
4 | { time: "8:20 PM", event: "Opening ceremony" },
5 | { time: "9:00 AM", event: "Introductions & Team Formation" },
6 | { time: "9:30 AM", event: "Start working on game!" },
7 | { time: "10:30 AM", event: "Breakfast" },
8 | { time: "11:30 AM", event: "Workshop 1" },
9 | { time: "1:00 PM", event: "Photoshoot" },
10 | { time: "1:30 PM", event: "Lunch" },
11 | { time: "4:00 PM", event: "Workshop 2" },
12 | { time: "5:30 PM", event: "Submissions Open" },
13 | { time: "6:00 PM", event: "Submissions Close" },
14 | { time: "6:00 PM", event: "Judges Review" },
15 | { time: "6:45 PM", event: "Prize Distribution" },
16 | { time: "7:10 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
--------------------------------------------------------------------------------
/components/Dhaka/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Dhaka/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "10:00 AM", event: "Doors open" },
4 | { time: "11:00 PM", event: "Opening ceremony" },
5 | { time: "1:30 PM", event: "Lunch" },
6 | { time: "2:00 PM", event: "Start working on your game!" },
7 | { time: "2:45 PM", event: "Gamedev workshop 1" },
8 | { time: "4:00 PM", event: "Activity 1" },
9 | { time: "4:40 PM", event: "Gamedev workshop 2" },
10 | { time: "6:00 PM", event: "Dinner" },
11 | { time: "8:00 PM", event: "Lightning talks" },
12 | { time: "12:00 AM", event: "Midnight surprise" },
13 | { time: "8:00 AM", event: "Breakfast" },
14 | { time: "10:30 AM", event: "Game demos!" },
15 | { time: "11:00 AM", event: "Closing ceremony" },
16 | ];
17 |
18 | return (
19 | <>
20 |
21 |
22 | {schedule.map((item, i) => (
23 |
24 |
{item.event}
25 |
26 |
{item.time}
27 |
28 | ))}
29 |
30 |
31 | >
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/Dubai/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Dubai/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "9:00 AM", event: "Doors open" },
5 | { time: "11:00 AM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "7:00 PM", event: "Game Demos!" },
11 | { time: "8:00 PM", event: "Closing ceremony" }
12 | ];
13 |
14 | return (
15 | <>
16 |
17 |
18 | {schedule.map((item, i) => (
19 |
20 |
{item.event}
21 |
22 |
{item.time}
23 |
24 | ))}
25 |
26 |
27 | >
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/components/ExampleCity/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/ExampleCity/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
54 |
55 | );
56 | }
57 |
--------------------------------------------------------------------------------
/components/Giza/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Giza/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "7:00 AM", event: "Doors open" },
5 | { time: "8:00 AM", event: "Opening ceremony" },
6 | { time: "8:30 AM", event: "Breakfast" },
7 | { time: "9:00 AM", event: "Start working on your game!" },
8 | { time: "10:00 AM", event: "Gamedev workshop 1" },
9 | { time: "12:00 PM", event: "Gamedev workshop 2 (+ Activity)" },
10 | { time: "2:00 PM", event: "Lunch" },
11 | { time: "4:30 PM", event: "Lightning talks" },
12 | { time: "6:30 PM", event: "Game demos!" },
13 | { time: "7:00 PM", event: "Dinner" },
14 | { time: "8:00 PM", event: "Closing ceremony" }
15 | ];
16 |
17 | return (
18 | <>
19 |
20 |
21 | {schedule.map((item, i) => (
22 |
23 |
{item.event}
24 |
25 |
{item.time}
26 |
27 | ))}
28 |
29 |
30 | >
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/components/Gurugram/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Gurugram/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/HongKong/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "9:00 AM", event: "開放入場" },
4 | { time: "9:30 PM", event: "開幕式" },
5 | { time: "10:00 PM", event: "開始製作你的遊戲!" },
6 | { time: "12:30 PM", event: "午餐" },
7 | { time: "2:00 PM", event: "遊戲開發工作坊" },
8 | { time: "4:00 PM", event: "活動 A" },
9 | { time: "6:00 PM", event: "晚餐" },
10 | { time: "7:00 AM", event: "夜間驚喜!" },
11 | { time: "7:30 AM", event: "遊戲演示!" },
12 | { time: "8:30 PM", event: "閉幕式" },
13 | ];
14 |
15 | return (
16 | <>
17 |
38 | >
39 | );
40 | }
41 |
--------------------------------------------------------------------------------
/components/Kigali/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
54 |
55 | );
56 | }
57 |
--------------------------------------------------------------------------------
/components/Kigali/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "8:00 AM", event: "Doors open" },
4 | { time: "8:45 PM", event: "Opening ceremony" },
5 | { time: "9:30 PM", event: "Breakfast" },
6 | { time: "10:30 PM", event: "Start working on your game!" },
7 | { time: "11:30 PM", event: "Gamedev workshop 1" },
8 | { time: "1:30 PM", event: "Lunch" },
9 | { time: "2:30 PM", event: "Activity 1" },
10 | { time: "4:30 PM", event: "Lightning talks" },
11 | { time: "5:30 PM", event: "Gamedev workshop 2" },
12 | { time: "7:30 PM", event: "Game demos" },
13 | { time: "8:30 PM", event: "Closing ceremony" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Lima/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Hecho con cariño por adolescentes de Hack Club, para adolescentes
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Lima/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "8:00 AM", event: "Se abren las puertas" },
5 | { time: "9:00 AM", event: "Ceremonia de apertura" },
6 | { time: "9:30 AM", event: "Empieza a trabajar en tu juego" },
7 | { time: "10:00 AM", event: "Taller de desarrollo de juegos 1" },
8 | { time: "1:00 PM", event: "Almuerzo" },
9 | { time: "2:00 PM", event: "Actividad 1" },
10 | { time: "3:00 PM", event: "Taller de desarrollo de juegos 2" },
11 | { time: "5:00 PM", event: "Coffee Break" },
12 | { time: "6:00 PM", event: "Fin y presentación de juegos" },
13 | { time: "7:00 PM", event: "Votación y ceremonia de cierre" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/London/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/London/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "10:00 AM", event: "Doors open!" },
5 | { time: "10:30 AM", event: "Opening Ceremony" },
6 | { time: "11:00 AM", event: "Workshop 1: Construct 3" },
7 | { time: "11:45 AM", event: "Workshop 2: PyGame" },
8 | { time: "12:30 PM", event: "Lunch" },
9 | { time: "1:30 PM", event: "Work on your game!" },
10 | { time: "3:15 PM", event: "Game demos + judging!" },
11 | { time: "4:00 PM", event: "Closing ceremony" },
12 | ];
13 |
14 | return (
15 | <>
16 |
17 |
18 | {schedule.map((item, i) => (
19 |
20 |
{item.event}
21 |
22 |
{item.time}
23 |
24 | ))}
25 |
26 |
27 | >
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/components/Manila/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "10:00 AM", event: "Doors open" },
5 | { time: "11:00 AM", event: "Opening ceremony" },
6 | { time: "12:00 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "9:00 PM", event: "Game demos!" },
14 | { time: "10:00 PM", event: "Closing ceremony" },
15 | ];
16 |
17 | return (
18 | <>
19 |
20 |
21 | {schedule.map((item, i) => (
22 |
23 |
{item.event}
24 |
25 |
{item.time}
26 |
27 | ))}
28 |
29 |
30 | >
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/components/Manila/Sponsors.js:
--------------------------------------------------------------------------------
1 | export default function Sponsors() {
2 | return (
3 |
4 |
5 |
6 | We would like to extend our heartfelt gratitude to our sponsors!
7 |
8 |
Do you want to help us make this first counterspell event successful? contact us!
9 |
Coming Soon...
10 |
11 |
12 | )
13 | }
14 |
--------------------------------------------------------------------------------
/components/Melbourne/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Melbourne/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | /*{ time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },*/
17 |
18 | { time: "11:00AM", event: "Doors open" },
19 | { time: "?????", event: "Schedule TBA soon" },
20 | ];
21 |
22 | return (
23 | <>
24 |
25 |
26 | {schedule.map((item, i) => (
27 |
28 |
{item.event}
29 |
30 |
{item.time}
31 |
32 | ))}
33 |
34 |
35 | >
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/components/Millbrae/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Millbrae/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Minneapolis/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/MosesLake/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/MosesLake/Locations.js:
--------------------------------------------------------------------------------
1 | import dynamic from "next/dynamic";
2 |
3 | const Map = dynamic(() => import("./../Map"), { ssr:false });
4 |
5 | export default function Locations() {
6 | // Do not update this list! We'll update it for you.
7 | const cities = [
8 | "Boston, MA",
9 | "New York City, NY",
10 | "Ottawa, ON",
11 | "Basking Ridge, NJ",
12 | "Austin, TX",
13 | "San Francisco, CA",
14 | "Burlington, VT",
15 | "Oshkosh, WI",
16 | ];
17 | // Do not update this list! We'll update it for you.
18 |
19 | return (
20 |
21 |
22 | Can't make it to Moses Lake?
23 |
24 |
25 | There are 100+ other Counterspell locations worldwide!
26 |
27 |
28 |
29 | {cities.map((city, i) => (
30 |
31 | {city}
32 |
33 | ))}
34 |
35 |
36 |
37 |
42 |
43 | );
44 | }
45 |
--------------------------------------------------------------------------------
/components/MosesLake/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/NYC/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/NYC/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "8:00 AM", event: "Doors open" },
5 | { time: "9:00 AM", event: "Opening ceremony" },
6 | { time: "10:00 AM", event: "Start working on your game!" },
7 | { time: "12:30 PM", event: "Lunch" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "6:30 PM", event: "Game demos!" },
13 | { time: "8:00 PM", event: "Closing ceremony" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Nairobi/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
24 |
29 |
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Nairobi/Locations.js:
--------------------------------------------------------------------------------
1 | export default function Locations() {
2 | // Do not update this list! We'll update it for you.
3 | const cities = [
4 | "Boston, MA",
5 | "New York City, NY",
6 | "Ottawa, ON",
7 | "Basking Ridge, NJ",
8 | "Austin, TX",
9 | "San Francisco, CA",
10 | "Burlington, VT",
11 | "Oshkosh, WI",
12 | ];
13 | // Do not update this list! We'll update it for you.
14 |
15 | return (
16 |
17 |
18 | {/* TODO: Replace `Example City` with your city */}
19 | Can't make it to Nairobi?
20 |
21 |
There are 200+ other Counterspell locations worldwide!
22 |
23 |
24 | {cities.map((city, i) => (
25 |
26 | {city}
27 |
28 | ))}
29 |
30 |
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/Nairobi/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "07:30 AM", event: "Doors open" },
4 | { time: "08:00 AM", event: "Opening ceremony" },
5 | { time: "08:15 AM", event: "PyGame Workshop" },
6 | { time: "09:00 AM", event: "Coding Session 1" },
7 | { time: "11:00 AM", event: "Boba" },
8 | { time: "11:30 AM", event: "Coding Session 1" },
9 | { time: "12:00 PM", event: "Fun Activity" },
10 | { time: "01:00 PM", event: "Lunch" },
11 | { time: "01:30 PM", event: "Fun Activity" },
12 | { time: "02:00 PM", event: "Coding Session" },
13 | { time: "04:00 PM", event: "Fun Activity" },
14 | { time: "04:15 PM", event: "Coding Session" },
15 | { time: "05:00 PM", event: "Boba" },
16 | { time: "05:25 PM", event: "Peer Voting" },
17 | { time: "06:25 PM", event: "Fun Activity" },
18 | { time: "07:00 PM", event: "Lightning Talks" },
19 | { time: "07:30 PM", event: "Closing Ceremony" },
20 | { time: "07:45 PM", event: "Photo Session" },
21 | { time: "08:00 PM", event: "Departure" },
22 | ];
23 |
24 | return (
25 | <>
26 |
27 |
28 | {schedule.map((item, i) => (
29 |
30 |
{item.event}
31 |
32 |
{item.time}
33 |
34 | ))}
35 |
36 |
37 | >
38 | );
39 | }
40 |
--------------------------------------------------------------------------------
/components/Oshkosh/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Oshkosh/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "10:00 AM", event: "Doors open" },
4 | { time: "11:00 AM", event: "Opening ceremony" },
5 | { time: "11:30 AM", event: "Lunch" },
6 | { time: "12:00 PM", event: "Start working on your game!" },
7 | { time: "1:00 PM", event: "Gamedev workshop 1" },
8 | { time: "3:00 PM", event: "Gamedev workshop 2" },
9 | { time: "5:00 PM", event: "Dinner" },
10 | { time: "7:00 PM", event: "Lightning talks" },
11 | { time: "12:00 AM", event: "Midnight surprise" },
12 | { time: "8:00 AM", event: "Breakfast" },
13 | { time: "9:30 AM", event: "Game demos!" },
14 | { time: "11:00 AM", event: "Closing ceremony" },
15 | ];
16 |
17 | return (
18 | <>
19 |
20 |
21 | {schedule.map((item, i) => (
22 |
23 |
{item.event}
24 |
25 |
{item.time}
26 |
27 | ))}
28 |
29 |
30 | >
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/components/Oshkosh/Sponsors.js:
--------------------------------------------------------------------------------
1 | export default function Locations() {
2 | return (
3 |
4 |
5 |
Thank you so much to these companies for supporting us!
6 |
7 | {/* 40px height, but maintain aspect ratio */}
8 |

9 |

10 |

11 |

12 |
13 |
14 |
15 | );
16 | }
17 |
--------------------------------------------------------------------------------
/components/Ottawa/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Ottawa/Locations.js:
--------------------------------------------------------------------------------
1 | export default function Locations() {
2 | const cities = [
3 | "Boston, MA",
4 | "New York City, NY",
5 | "Atlanta, GA",
6 | "Basking Ridge, NJ",
7 | "Austin, TX",
8 | "San Francisco, CA",
9 | "Burlington, VT",
10 | "Oshkosh, WI",
11 | ];
12 |
13 | return (
14 |
15 |
16 | {/* TODO: Replace `Example City` with your city */}
17 | Can't make it to Ottawa?
18 |
19 |
20 | There are 100+ other Counterspell locations worldwide!
21 |
22 |
23 |
24 | {cities.map((city, i) => (
25 |
26 | {city}
27 |
28 | ))}
29 |
30 |
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/Ottawa/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "1:30 PM", event: "Doors open" },
5 | { time: "2:00 PM", event: "Icebreaker activities" },
6 | { time: "2:30 PM", event: "Opening ceremony" },
7 | { time: "4:00 PM", event: "Workshops" },
8 | { time: "6:00 PM", event: "Dinner" },
9 | { time: "8:00 PM", event: "Activity" },
10 | { time: "10:00 PM", event: "Workshops" },
11 | { time: "1:00 AM", event: "Activity" },
12 | { time: "7:00 AM", event: "Breakfast" },
13 | { time: "10:00 AM", event: "Game demos!" },
14 | { time: "12:00 PM", event: "Lunch" },
15 | { time: "1:00 PM", event: "Closing ceremony" },
16 | { time: "2:00 PM", event: "Event ends" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Patna/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Patna/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "09:00 AM", event: "Doors open" },
5 | { time: "10:00 AM", event: "Opening ceremony" },
6 | { time: "11:00 AM", event: "Breakfast" },
7 | { time: "12:00 PM", event: "Event Starts!" },
8 | { time: "1:00 PM", event: "Activity 1" },
9 | { time: "2:00 PM", event: "Gamedev Workshop 1" },
10 | { time: "3:00 PM", event: "Lunch" },
11 | { time: "4:00 PM", event: "Gamedev workshop 2" },
12 | { time: "5:00 PM", event: "Activity 2" },
13 | { time: "7:00 PM", event: "Dinner" },
14 | { time: "8:00 PM", event: "Closing ceremony" },
15 | ];
16 |
17 | return (
18 | <>
19 |
20 |
21 | {schedule.map((item, i) => (
22 |
23 |
{item.event}
24 |
25 |
{item.time}
26 |
27 | ))}
28 |
29 |
30 | >
31 | );
32 | }
33 |
--------------------------------------------------------------------------------
/components/Phoenix/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Phoenix/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "8:30 AM", event: "Doors open" },
4 | { time: "9:00 AM", event: "Opening ceremony" },
5 | { time: "9:30 AM", event: "Hacking begins!" },
6 | { time: "10:00 AM", event: "Scratch Workshop" },
7 | { time: "11:00 AM", event: "Sprig Workshop" },
8 | { time: "12:00 PM", event: "Lunch is served!" },
9 | { time: "3:30 PM", event: "Hacking ends" },
10 | { time: "5:00 PM", event: "Closing ceremony" },
11 | { time: "6:00 PM", event: "Event ends :(" },
12 | ];
13 |
14 | return (
15 | <>
16 |
17 |
18 | {schedule.map((item, i) => (
19 |
20 |
{item.event}
21 |
22 |
{item.time}
23 |
24 | ))}
25 |
26 |
27 | >
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/components/SaintAugustine/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/SaintAugustine/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:30 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | { time: "1:00 PM", event: "Extra Peer Reviewing" },
18 | ];
19 |
20 | return (
21 | <>
22 |
23 |
24 | {schedule.map((item, i) => (
25 |
26 |
{item.event}
27 |
28 |
{item.time}
29 |
30 | ))}
31 |
32 |
33 | >
34 | );
35 | }
36 |
--------------------------------------------------------------------------------
/components/Santiago/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Construido por amor por jovenes, para jovenes en Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Santiago/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Puertas abiertas" },
5 | { time: "12:00 PM", event: "Ceremonia de comienzo" },
6 | { time: "12:30 PM", event: "Almuerzo" },
7 | { time: "1:00 PM", event: "Comienza a trabajar en tu juego!" },
8 | { time: "2:00 PM", event: "Taller de desarrollo de juegos 1" },
9 | { time: "4:00 PM", event: "Actividad 1" },
10 | { time: "4:00 PM", event: "Taller de desarrollo de juegos 2" },
11 | { time: "6:00 PM", event: "Cena" },
12 | { time: "8:00 PM", event: "Demostraciones de juegos" },
13 | { time: "11:00 PM", event: "Ceremonia de fin" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/SaoPaulo/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "09:00 AM", event: "Portas abertas! + Coffee break" },
5 | { time: "09:30 PM", event: "Cerimônia de abertura" },
6 | { time: "10:00 PM", event: "Atividade 1" },
7 | { time: "11:30 PM", event: "Start working on your game!" },
8 | { time: "12:30 PM", event: "Almoço" },
9 | { time: "1:30 PM", event: "Gamedev workshop 1" },
10 | { time: "3:00 PM", event: "Atividade 2" },
11 | { time: "4:00 PM", event: "Gamedev workshop 2" },
12 | { time: "7:00 PM", event: "Game Demos" },
13 | { time: "8:30 PM", event: "Cerimônia de Encerramento" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "11:00 AM", event: "Doors open" },
4 | { time: "12:00 PM", event: "Opening ceremony" },
5 | { time: "12:30 PM", event: "Lunch" },
6 | { time: "1:00 PM", event: "Start working on your game!" },
7 | { time: "2:00 PM", event: "Gamedev workshop 1" },
8 | { time: "4:00 PM", event: "Activity 1" },
9 | { time: "4:00 PM", event: "Gamedev workshop 2" },
10 | { time: "6:00 PM", event: "Dinner" },
11 | { time: "8:00 PM", event: "Lightning talks" },
12 | { time: "12:00 AM", event: "Midnight surprise" },
13 | { time: "8:00 AM", event: "Breakfast" },
14 | { time: "10:30 AM", event: "Game demos!" },
15 | { time: "12:00 PM", event: "Closing ceremony" },
16 | ];
17 |
18 | return (
19 | <>
20 |
21 |
22 | {schedule.map((item, i) => (
23 |
24 |
{item.event}
25 |
26 |
{item.time}
27 |
28 | ))}
29 |
30 |
31 | >
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/SiliconValley/Action.js:
--------------------------------------------------------------------------------
1 | export default function Guilds() {
2 | return (
3 |
4 |
5 |
6 | Sign Up and join our Discord
7 | server!
8 |
9 |
10 |
11 |
12 |
13 |
27 |
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/components/SiliconValley/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/SiliconValley/Locations.js:
--------------------------------------------------------------------------------
1 | import dynamic from "next/dynamic";
2 |
3 | const Map = dynamic(() => import("./../Map"), { ssr: false });
4 |
5 | export default function Locations({ registrationRef }) {
6 | // Do not update this list! We'll update it for you.
7 | const cities = [
8 | "Boston, MA",
9 | "New York City, NY",
10 | "Ottawa, ON",
11 | "Basking Ridge, NJ",
12 | "Austin, TX",
13 | "San Francisco, CA",
14 | "Burlington, VT",
15 | "Oshkosh, WI",
16 | ];
17 | // Do not update this list! We'll update it for you.
18 |
19 | return (
20 |
21 |
22 | {/* TODO: Replace `Example City` with your city */}
23 | Not in the Bay Area?
24 |
25 |
26 | There are 100+ other Counterspell locations worldwide!
27 |
28 |
29 |
34 |
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/components/Singapore/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Singapore/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "2:30 PM", event: "Doors open" },
5 | { time: "3:30 PM", event: "Opening ceremony" },
6 | { time: "4:00 PM", event: "Start working on your game!" },
7 | { time: "4:15 PM", event: "Gamedev workshop 1" },
8 | { time: "6:00 PM", event: "Dinner" },
9 | { time: "7:00 PM", event: "Gamedev workshop 2" },
10 | { time: "9:30 PM", event: "Lightning talks" },
11 | { time: "12:00 AM", event: "Midnight surprise" },
12 | { time: "1:00 AM", event: "Snack 1" },
13 | { time: "2:00 AM", event: "Activity thing" },
14 | { time: "7:30 AM", event: "Breakfast" },
15 | { time: "10:00 AM", event: "Activity thing 2" },
16 | { time: "12:00 PM", event: "Lunch" },
17 | { time: "2:00 PM", event: "Game demos" },
18 | { time: "3:00 PM", event: "Closing ceremony" }
19 | ];
20 |
21 | return (
22 | <>
23 |
24 |
25 | {schedule.map((item, i) => (
26 |
27 |
{item.event}
28 |
29 |
{item.time}
30 |
31 | ))}
32 |
33 |
34 | >
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/components/Singapore/Sponsors.js:
--------------------------------------------------------------------------------
1 | export default function Sponsors() {
2 | return (
3 |
4 |
5 | Our Sponsors
6 |
7 |
8 |

14 |
15 |
16 |

22 |
23 |
24 | );
25 | }
--------------------------------------------------------------------------------
/components/Sydney/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Sydney/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "4:00 PM", event: "Activity 1" },
10 | { time: "4:00 PM", event: "Gamedev workshop 2" },
11 | { time: "6:00 PM", event: "Dinner" },
12 | { time: "8:00 PM", event: "Lightning talks" },
13 | { time: "12:00 AM", event: "Midnight surprise" },
14 | { time: "8:00 AM", event: "Breakfast" },
15 | { time: "10:30 AM", event: "Game demos!" },
16 | { time: "12:00 PM", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Tampa/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Tampa/Locations.js:
--------------------------------------------------------------------------------
1 | import dynamic from "next/dynamic";
2 |
3 | const Map = dynamic(() => import("./../Map"), { ssr:false });
4 |
5 | export default function Locations() {
6 | return (
7 |
8 |
9 | Can't make it to Tampa?
10 |
11 |
12 | There are 100+ other Counterspell locations worldwide!
13 |
14 |
15 |
20 |
21 | );
22 | }
--------------------------------------------------------------------------------
/components/Tampa/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | const schedule = [
3 | { time: "8:30 AM", event: "Doors Open" },
4 | { time: "9:00 AM", event: "Opening Ceremony" },
5 | { time: "9:30 AM", event: "Intro to Game Development" },
6 | { time: "12:00 PM", event: "Lunch" },
7 | { time: "3:00 PM", event: "Surprise 🌠" },
8 | { time: "6:30 PM", event: "Dinner & Lightning Talks" },
9 | { time: "7:30 PM", event: "Game Demos & Voting" },
10 | { time: "8:15 PM", event: "Closing Ceremony" },
11 | ];
12 |
13 | return (
14 | <>
15 |
16 |
17 | {schedule.map((item, i) => (
18 |
19 |
{item.event}
20 |
21 |
{item.time}
22 |
23 | ))}
24 |
25 |
26 | >
27 | );
28 | }
29 |
--------------------------------------------------------------------------------
/components/ThousandOaks/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/ThousandOaks/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "11:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "2:00 PM", event: "Gamedev workshop 1" },
9 | { time: "3:00 PM", event: "Special Treat!" },
10 | { time: "4:00 PM", event: "Activity 1" },
11 | { time: "4:00 PM", event: "Gamedev workshop 2" },
12 | { time: "6:00 PM", event: "Dinner" },
13 | { time: "8:00 PM", event: "Lightning talks" },
14 | { time: "10:00 PM", event: "Game demos!" },
15 | { time: "11:00 PM", event: "Closing Ceremony" },
16 | ];
17 |
18 | return (
19 | <>
20 |
21 |
22 | {schedule.map((item, i) => (
23 |
24 |
{item.event}
25 |
26 |
{item.time}
27 |
28 | ))}
29 |
30 |
31 | >
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/Toronto/Email.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | export default function Email() {
4 | const [copied, setCopied] = useState(false);
5 | const email = "counterspellgta@gmail.com";
6 |
7 | const handleCopy = () => {
8 | const tempInput = document.createElement("input");
9 | tempInput.value = email;
10 | document.body.appendChild(tempInput);
11 | tempInput.select();
12 | tempInput.setSelectionRange(0, 99999);
13 |
14 | try {
15 | document.execCommand("copy");
16 | setCopied(true);
17 | setTimeout(() => setCopied(false), 2000);
18 | } catch (err) {
19 | console.error("Failed to copy text: ", err);
20 | }
21 |
22 | document.body.removeChild(tempInput);
23 | };
24 |
25 | return (
26 |
27 |
28 | Have a question? Send us a message
29 |
30 |
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/components/Toronto/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "10:00 AM", event: "Doors open" },
5 | { time: "12:00 PM", event: "Opening ceremony" },
6 | { time: "12:30 PM", event: "Lunch" },
7 | { time: "1:00 PM", event: "Start working on your game!" },
8 | { time: "6:00 PM", event: "Dinner" },
9 | { time: "8:00 PM", event: "Lightning talks" },
10 | { time: "12:00 AM", event: "Midnight surprise" },
11 | { time: "8:00 AM", event: "Breakfast" },
12 | { time: "11:00 AM", event: "Game demos!" },
13 | { time: "2:00 PM", event: "Closing ceremony" },
14 | ];
15 |
16 | return (
17 | <>
18 |
19 |
20 | {schedule.map((item, i) => (
21 |
22 |
{item.event}
23 |
24 |
{item.time}
25 |
26 | ))}
27 |
28 |
29 | >
30 | );
31 | }
32 |
--------------------------------------------------------------------------------
/components/Toronto/secEmail.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | export default function SecEmail() {
3 | const [copied, setCopied] = useState(false);
4 | const email = "counterspellgta@gmail.com";
5 |
6 | const handleCopy = () => {
7 | const tempInput = document.createElement("input");
8 | tempInput.value = email;
9 | document.body.appendChild(tempInput);
10 | tempInput.select();
11 | tempInput.setSelectionRange(0, 99999);
12 |
13 | try {
14 | document.execCommand("copy");
15 | setCopied(true);
16 | setTimeout(() => setCopied(false), 2000);
17 | } catch (err) {
18 | console.error("Failed to copy text: ", err);
19 | }
20 |
21 | document.body.removeChild(tempInput);
22 | };
23 |
24 | return (
25 |
26 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/components/Toronto/sponsor/desktop_about_me.module.css:
--------------------------------------------------------------------------------
1 | /* .parallax {
2 | overflow: hidden;
3 | white-space: nowrap;
4 | display: flex;
5 | flex-wrap: nowrap;
6 | width: 100%;
7 | }
8 |
9 | .parallax .scroller {
10 | font-weight: 600;
11 | :uppercase;
12 | display: flex;
13 | white-space: nowrap;
14 | display: flex;
15 | flex-wrap: nowrap;
16 | width: 100%;
17 | }
18 |
19 | .parallax span {
20 | display: block;
21 | /* margin-right: 30px; */
22 | }
23 |
24 | /* .box {
25 | margin: 10px !important;
26 | padding: 10px !important;
27 | } */
28 |
--------------------------------------------------------------------------------
/components/ValenzuelaCity/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "TO_BE_ANNOUCED", event: "Doors open" },
5 | { time: "NONE", event: "Opening ceremony" },
6 | { time: "NONE", event: "Breakfast" },
7 | { time: "NONE", event: "Ice Breaker" },
8 | { time: "NONE", event: "Gamedev workshop 1" },
9 | { time: "NONE", event: "Make a team or find one" },
10 | { time: "NONE", event: "Gamedev workshop 2" },
11 | { time: "NONE", event: "Lunch" },
12 | { time: "NONE", event: "Start working with your game" },
13 | { time: "NONE", event: "Snacks" },
14 | { time: "NONE", event: "More Game dev" },
15 | { time: "NONE", event: "Game demos!" },
16 | { time: "NONE", event: "Closing ceremony" },
17 | ];
18 |
19 | return (
20 | <>
21 |
22 |
23 | {schedule.map((item, i) => (
24 |
25 |
{item.event}
26 |
27 |
{item.time}
28 |
29 | ))}
30 |
31 |
32 | >
33 | );
34 | }
35 |
--------------------------------------------------------------------------------
/components/Vancouver/Email.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 |
3 | export default function Email() {
4 | const [copied, setCopied] = useState(false);
5 | const email = "vancouver@counterspell.hackclub.com";
6 |
7 | const handleCopy = () => {
8 | const tempInput = document.createElement("input");
9 | tempInput.value = email;
10 | document.body.appendChild(tempInput);
11 | tempInput.select();
12 | tempInput.setSelectionRange(0, 99999);
13 |
14 | try {
15 | document.execCommand("copy");
16 | setCopied(true);
17 | setTimeout(() => setCopied(false), 2000);
18 | } catch (err) {
19 | console.error("Failed to copy text: ", err);
20 | }
21 |
22 | document.body.removeChild(tempInput);
23 | };
24 |
25 | return (
26 |
27 |
28 | Have a question? Send us a message
29 |
30 |
43 |
44 | );
45 | }
46 |
--------------------------------------------------------------------------------
/components/Vancouver/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Vancouver/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "9:30 AM", event: "Intro and Welcome" },
5 | { time: "10:00 AM", event: "Workshop 1" },
6 | { time: "11:00 AM", event: "Workshop 2" },
7 | { time: "12:00 PM", event: "Lunch Break" },
8 | { time: "12:30 PM", event: "Hackathon Session Starts" },
9 | { time: "5:00 PM", event: "Hackathon Session Ends" },
10 | { time: "5:30 PM", event: "Review and Winners Announcement" },
11 | { time: "6:00 PM", event: "End of Event" }
12 | ];
13 |
14 | return (
15 | <>
16 |
17 |
18 | {schedule.map((item, i) => (
19 |
20 |
{item.event}
21 |
22 |
{item.time}
23 |
24 | ))}
25 |
26 |
27 | >
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/components/Vancouver/secEmail.js:
--------------------------------------------------------------------------------
1 | import { useState } from "react";
2 | export default function SecEmail() {
3 | const [copied, setCopied] = useState(false);
4 | const email = "vancouver@counterspell.hackclub.com";
5 |
6 | const handleCopy = () => {
7 | const tempInput = document.createElement("input");
8 | tempInput.value = email;
9 | document.body.appendChild(tempInput);
10 | tempInput.select();
11 | tempInput.setSelectionRange(0, 99999);
12 |
13 | try {
14 | document.execCommand("copy");
15 | setCopied(true);
16 | setTimeout(() => setCopied(false), 2000);
17 | } catch (err) {
18 | console.error("Failed to copy text: ", err);
19 | }
20 |
21 | document.body.removeChild(tempInput);
22 | };
23 |
24 | return (
25 |
26 |
39 |
40 | );
41 | }
42 |
--------------------------------------------------------------------------------
/components/Vancouver/sponsor/desktop_about_me.module.css:
--------------------------------------------------------------------------------
1 | /* .parallax {
2 | overflow: hidden;
3 | white-space: nowrap;
4 | display: flex;
5 | flex-wrap: nowrap;
6 | width: 100%;
7 | }
8 |
9 | .parallax .scroller {
10 | font-weight: 600;
11 | :uppercase;
12 | display: flex;
13 | white-space: nowrap;
14 | display: flex;
15 | flex-wrap: nowrap;
16 | width: 100%;
17 | }
18 |
19 | .parallax span {
20 | display: block;
21 | /* margin-right: 30px; */
22 | }
23 |
24 | /* .box {
25 | margin: 10px !important;
26 | padding: 10px !important;
27 | } */
28 |
--------------------------------------------------------------------------------
/components/Winnipeg/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/Winnipeg/Locations.js:
--------------------------------------------------------------------------------
1 | import Subscribe from "../Subscribe";
2 |
3 | export default function Locations() {
4 | // Do not update this list! We'll update it for you.
5 | const cities = [
6 | "Boston, MA",
7 | "New York City, NY",
8 | "Ottawa, ON",
9 | "Basking Ridge, NJ",
10 | "Austin, TX",
11 | "San Francisco, CA",
12 | "Burlington, VT",
13 | "Oshkosh, WI",
14 | ];
15 | // Do not update this list! We'll update it for you.
16 |
17 | return (
18 |
19 |
20 | {/* TODO: Replace `Example City` with your city */}
21 | Can't make it to Winnipeg?
22 |
23 |
24 | There are 100+ other Counterspell locations worldwide!
25 |
26 |
27 |
28 | {cities.map((city, i) => (
29 |
30 | {city}
31 |
32 | ))}
33 |
34 |
35 |
36 | );
37 | }
38 |
--------------------------------------------------------------------------------
/components/Winnipeg/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "08:45", event: "Doors open" },
5 | { time: "09:00", event: "Opening ceremony" },
6 | { time: "09:30", event: "Introductions / Icebreakers" },
7 | { time: "10:00", event: "Morning snack" },
8 | { time: "11:00", event: "Workshop 1" },
9 | { time: "12:30", event: "Lunch" },
10 | { time: "15:00", event: "Workshop 2" },
11 | { time: "18:00", event: "Dinner & Lightning talks" },
12 | { time: "19:30", event: "Game demos!" },
13 | { time: "20:30", event: "Closing ceremony" },
14 | { time: "21:00", event: "Pick-up time" },
15 | { time: "21:15", event: "Doors close" }
16 | ];
17 |
18 | return (
19 | <>
20 |
21 |
22 | {schedule.map((item, i) => (
23 |
24 |
{item.event}
25 |
26 |
{item.time}
27 |
28 | ))}
29 |
30 |
31 | >
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/Wolverhampton/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "10:30 AM", event: "Doors open" },
5 | { time: "11:00 AM", event: "Opening ceremony" },
6 | { time: "11:30 AM", event: "Start working on your game!" },
7 | { time: "12:30 PM", event: "Lunch" },
8 | { time: "1:00 PM", event: "Gamedev workshop 1" },
9 | { time: "2:00 PM", event: "Activity 1" },
10 | { time: "3:00 PM", event: "Gamedev workshop 2" },
11 | { time: "4:00 PM", event: "Lightning talks" },
12 | { time: "5:30 PM", event: "Dinner" },
13 | { time: "7:00 PM", event: "Game demos!" },
14 | { time: "7:30 PM", event: "Closing ceremony" },
15 | { time: "8:00 PM", event: "Finish" },
16 | ];
17 |
18 | return (
19 | <>
20 |
21 |
22 | {schedule.map((item, i) => (
23 |
24 |
{item.event}
25 |
26 |
{item.time}
27 |
28 | ))}
29 |
30 |
31 | >
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/components/chandigarh/Footer.js:
--------------------------------------------------------------------------------
1 | export default function Footer() {
2 | return (
3 |
4 |
5 |
Built with love by teenagers, for teenagers at Hack Club
6 |
7 |
44 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/components/chandigarh/Schedule.js:
--------------------------------------------------------------------------------
1 | export default function Schedule() {
2 | // TODO: Edit this to match your event schedule
3 | const schedule = [
4 | { time: "8:00 AM", event: "Doors open" },
5 | { time: "9:30 PM", event: "Opening ceremony" },
6 | { time: "9:45 PM", event: "Workshop 1" },
7 | { time: "11:30 PM", event: "Workshop 2" },
8 | { time: "1:00 PM", event: "Lunch" },
9 | { time: "7:00 PM", event: "Lightning Talks and Dinner" },
10 | { time: "7:30 PM", event: "Demos and Judging" },
11 | { time: "8:30 PM", event: "Closing Ceremony" },
12 | ];
13 |
14 | return (
15 | <>
16 |
17 |
18 | {schedule.map((item, i) => (
19 |
20 |
{item.event}
21 |
22 |
{item.time}
23 |
24 | ))}
25 |
26 |
27 | >
28 | );
29 | }
30 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | reactStrictMode: true,
4 | };
5 |
6 | export default nextConfig;
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "counterspell",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "prebuild": "node ./scripts/sitemap.js",
9 | "start": "next start",
10 | "lint": "next lint"
11 | },
12 | "dependencies": {
13 | "@dnd-kit/core": "^6.1.0",
14 | "@dnd-kit/sortable": "^8.0.0",
15 | "@hackclub/banner": "^1.0.3",
16 | "@tsparticles/confetti": "^3.5.0",
17 | "airtable-plus": "^1.0.4",
18 | "counterspell": "file:",
19 | "leaflet": "^1.9.4",
20 | "next": "^14.2.15",
21 | "react": "^18",
22 | "react-dom": "^18",
23 | "react-leaflet": "^4.2.1",
24 | "react-next-tilt": "^0.4.3",
25 | "theme-ui": "^0.16.2",
26 | "use-sound": "^4.0.3"
27 | },
28 | "devDependencies": {
29 | "eslint": "^8",
30 | "eslint-config-next": "14.2.14",
31 | "postcss": "^8",
32 | "tailwindcss": "^3.4.1"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/pages/_app.js:
--------------------------------------------------------------------------------
1 | import "../styles/globals.css";
2 | import Head from "next/head";
3 | import Script from "next/script";
4 |
5 | export default function App({ Component, pageProps }) {
6 | return (
7 | <>
8 |
9 |
10 |
11 |
15 |
16 |
17 | Counterspell
18 |
19 |
24 |
25 | >
26 | );
27 | }
28 |
--------------------------------------------------------------------------------
/pages/_document.js:
--------------------------------------------------------------------------------
1 | import { Html, Head, Main, NextScript } from "next/document";
2 |
3 | export default function Document() {
4 | return (
5 |
6 |
8 |
9 |
10 |
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/pages/api/v1/map.js:
--------------------------------------------------------------------------------
1 | import AirtablePlus from "airtable-plus";
2 |
3 | export default async function handler(req, res) {
4 | const EventsTable = new AirtablePlus({
5 | baseID: process.env.AIRTABLE_BASE_ID,
6 | apiKey: process.env.AIRTABLE_API_KEY,
7 | tableName: "Events",
8 | });
9 |
10 | const events = await EventsTable.read({
11 | filterByFormula: "AND({Approval} = 'Approved', {Coordinates} != '')"
12 | });
13 |
14 | const eventsInfo = events.map((event) => ({
15 | name: event.fields["Event Name"],
16 | website: event.fields["Website"],
17 | lat: event.fields["Coordinates"].split(", ")[0],
18 | lng: event.fields["Coordinates"].split(", ")[1]
19 | }));
20 |
21 | return res.status(200).json(eventsInfo);
22 | }
--------------------------------------------------------------------------------
/pages/api/v1/pre-signup.js:
--------------------------------------------------------------------------------
1 | import AirtablePlus from "airtable-plus";
2 | import Airtable from "airtable";
3 |
4 | export async function signup(email, event) {
5 | const preSignupTable = new AirtablePlus({
6 | baseID: process.env.AIRTABLE_BASE_ID,
7 | apiKey: process.env.AIRTABLE_API_KEY,
8 | tableName: "Pre-signups",
9 | });
10 |
11 | console.debug(`Pre-signing up "${email}" for "${event}"`);
12 |
13 | return preSignupTable.create({
14 | Email: email,
15 | "Event Name": event,
16 | });
17 | }
18 |
19 | export default async function handler(req, res) {
20 | if (req.method !== "POST") {
21 | return res.status(405).json({
22 | ok: false,
23 | error: "Method not allowed",
24 | });
25 | }
26 |
27 | const { email, event } = req.body;
28 |
29 | if (!email) {
30 | return res.status(400).json({
31 | ok: false,
32 | error: "Missing required fields",
33 | });
34 | }
35 |
36 | try {
37 | await signup(email, event);
38 |
39 | return res.json({
40 | ok: true,
41 | });
42 | } catch (error) {
43 | if (error instanceof Airtable.Error) {
44 | console.error(error);
45 |
46 | return res.status(400).json({
47 | ok: false,
48 | error: "Bad request",
49 | });
50 | }
51 | console.error(error);
52 |
53 | return res.status(500).json({
54 | ok: false,
55 | error: "Internal server error",
56 | });
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/pages/api/v1/waiver.js:
--------------------------------------------------------------------------------
1 | import AirtablePlus from "airtable-plus";
2 |
3 | export default async function handler(req, res) {
4 | if (req.method !== "GET") {
5 | return res.status(405).json({
6 | ok: false,
7 | error: "Method not allowed",
8 | });
9 | }
10 |
11 | const { type, id } = req.query;
12 |
13 | if (!type || !id) {
14 | return res.status(400).json({
15 | ok: false,
16 | error: "Missing required fields",
17 | });
18 | }
19 |
20 | const WaiversTable = new AirtablePlus({
21 | baseID: process.env.AIRTABLE_BASE_ID,
22 | apiKey: process.env.AIRTABLE_API_KEY,
23 | tableName: "Waivers",
24 | });
25 |
26 | let filter = "";
27 |
28 | if (type === "email") {
29 | filter = `{Student Email} = '${id}'`;
30 | }
31 | else if (type === "name") {
32 | filter = `{Student Full Name} = '${id}'`;
33 | }
34 | else {
35 | return res.status(400).json({
36 | ok: false,
37 | error: "Invalid type",
38 | });
39 | }
40 | const waivers = await WaiversTable.read({
41 | filterByFormula: filter
42 | });
43 |
44 | return res.status(200).json(waivers.length > 0);
45 | }
--------------------------------------------------------------------------------
/pages/map.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, useState } from "react";
2 | import useSound from "use-sound";
3 | import Head from "next/head";
4 | import dynamic from "next/dynamic";
5 |
6 | const Map = dynamic(() => import("../components/Map"), { ssr:false });
7 |
8 | export default function MapPage() {
9 | return (
10 | <>
11 |
12 |

18 |
20 | >
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/postcss.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('postcss-load-config').Config} */
2 | const config = {
3 | plugins: {
4 | tailwindcss: {},
5 | },
6 | };
7 |
8 | export default config;
9 |
--------------------------------------------------------------------------------
/public/billboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/billboard.png
--------------------------------------------------------------------------------
/public/cards/artist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/cards/artist.png
--------------------------------------------------------------------------------
/public/cards/hacker.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/cards/hacker.png
--------------------------------------------------------------------------------
/public/cards/musician.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/cards/musician.png
--------------------------------------------------------------------------------
/public/city/Arlington/arlington.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Arlington/arlington.png
--------------------------------------------------------------------------------
/public/city/Arlington/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Arlington/title.png
--------------------------------------------------------------------------------
/public/city/Columbus/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Columbus/logo.png
--------------------------------------------------------------------------------
/public/city/Giza/counterspell-Giza.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Giza/counterspell-Giza.png
--------------------------------------------------------------------------------
/public/city/Gurugram/gurugram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Gurugram/gurugram.png
--------------------------------------------------------------------------------
/public/city/HongKong/Fillout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/HongKong/Fillout.png
--------------------------------------------------------------------------------
/public/city/HongKong/GDHH.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/HongKong/GDHH.png
--------------------------------------------------------------------------------
/public/city/HongKong/HKACE.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/HongKong/HKACE.png
--------------------------------------------------------------------------------
/public/city/HongKong/KeplerKowloon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/HongKong/KeplerKowloon.png
--------------------------------------------------------------------------------
/public/city/HongKong/SlashAll.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/HongKong/SlashAll.webp
--------------------------------------------------------------------------------
/public/city/HongKong/venue.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/HongKong/venue.jpg
--------------------------------------------------------------------------------
/public/city/Lima-cards/artista.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Lima-cards/artista.png
--------------------------------------------------------------------------------
/public/city/Lima-cards/musico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Lima-cards/musico.png
--------------------------------------------------------------------------------
/public/city/Lima-cards/programador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Lima-cards/programador.png
--------------------------------------------------------------------------------
/public/city/Valenzuela/partners/aws-cavite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Valenzuela/partners/aws-cavite.png
--------------------------------------------------------------------------------
/public/city/Valenzuela/partners/aws-siklab.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Valenzuela/partners/aws-siklab.png
--------------------------------------------------------------------------------
/public/city/Valenzuela/partners/devcon-manila.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Valenzuela/partners/devcon-manila.png
--------------------------------------------------------------------------------
/public/city/Valenzuela/partners/valace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Valenzuela/partners/valace.png
--------------------------------------------------------------------------------
/public/city/Vancouver/23(2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Vancouver/23(2).png
--------------------------------------------------------------------------------
/public/city/Vancouver/2title_Vancouver.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Vancouver/2title_Vancouver.png
--------------------------------------------------------------------------------
/public/city/Vancouver/sponsors/hackclub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Vancouver/sponsors/hackclub.png
--------------------------------------------------------------------------------
/public/city/Vancouver/sponsors/ltt.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Vancouver/sponsors/ltt.jpg
--------------------------------------------------------------------------------
/public/city/Vancouver/sponsors/visst.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Vancouver/sponsors/visst.jpg
--------------------------------------------------------------------------------
/public/city/Vancouver/title_Vancouver.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/Vancouver/title_Vancouver.png
--------------------------------------------------------------------------------
/public/city/boston/boston-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/boston/boston-logo.png
--------------------------------------------------------------------------------
/public/city/boston/poster.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/boston/poster.pdf
--------------------------------------------------------------------------------
/public/city/boston/poster.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/boston/poster.png
--------------------------------------------------------------------------------
/public/city/boston/prospectus.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/boston/prospectus.pdf
--------------------------------------------------------------------------------
/public/city/casablanca/alx.svg:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/public/city/casablanca/estem-morocco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/casablanca/estem-morocco.png
--------------------------------------------------------------------------------
/public/city/casablanca/gomycode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/casablanca/gomycode.png
--------------------------------------------------------------------------------
/public/city/casablanca/pesage-promotion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/casablanca/pesage-promotion.png
--------------------------------------------------------------------------------
/public/city/casablanca/robots-and-more.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/casablanca/robots-and-more.png
--------------------------------------------------------------------------------
/public/city/casablanca/title_casablanca.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/casablanca/title_casablanca.png
--------------------------------------------------------------------------------
/public/city/melbourne/melbtitle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/melbourne/melbtitle.png
--------------------------------------------------------------------------------
/public/city/minneapolis/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/minneapolis/title.png
--------------------------------------------------------------------------------
/public/city/moseslake/titlemoses.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/moseslake/titlemoses.png
--------------------------------------------------------------------------------
/public/city/moseslake/titlemoses2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/moseslake/titlemoses2.png
--------------------------------------------------------------------------------
/public/city/moseslake/titlemoses3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/moseslake/titlemoses3.png
--------------------------------------------------------------------------------
/public/city/oshkosh/4ImprintLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/oshkosh/4ImprintLogo.png
--------------------------------------------------------------------------------
/public/city/oshkosh/BuffaloWildWingsLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/oshkosh/BuffaloWildWingsLogo.png
--------------------------------------------------------------------------------
/public/city/oshkosh/SchiekLogo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/oshkosh/SchiekLogo.png
--------------------------------------------------------------------------------
/public/city/oshkosh/TEKSystemsLogo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/oshkosh/TEKSystemsLogo.jpg
--------------------------------------------------------------------------------
/public/city/oshkosh/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/oshkosh/title.png
--------------------------------------------------------------------------------
/public/city/ottawa/Event_Liability_Release.docx.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/ottawa/Event_Liability_Release.docx.pdf
--------------------------------------------------------------------------------
/public/city/ottawa/sponsors/analog-devices.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/ottawa/sponsors/analog-devices.png
--------------------------------------------------------------------------------
/public/city/ottawa/sponsors/shopify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/ottawa/sponsors/shopify.png
--------------------------------------------------------------------------------
/public/city/ottawa/sponsors/ssi-canada.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/ottawa/sponsors/ssi-canada.png
--------------------------------------------------------------------------------
/public/city/ottawa/title_ott.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/ottawa/title_ott.png
--------------------------------------------------------------------------------
/public/city/santiago/cards/artista.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/cards/artista.png
--------------------------------------------------------------------------------
/public/city/santiago/cards/musico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/cards/musico.png
--------------------------------------------------------------------------------
/public/city/santiago/cards/programador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/cards/programador.png
--------------------------------------------------------------------------------
/public/city/santiago/hero/BG.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/hero/BG.png
--------------------------------------------------------------------------------
/public/city/santiago/hero/bg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/hero/bg1.png
--------------------------------------------------------------------------------
/public/city/santiago/hero/bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/hero/bg2.png
--------------------------------------------------------------------------------
/public/city/santiago/hero/bg3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/hero/bg3.png
--------------------------------------------------------------------------------
/public/city/santiago/hero/bg4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/hero/bg4.png
--------------------------------------------------------------------------------
/public/city/santiago/hero/bg5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/santiago/hero/bg5.png
--------------------------------------------------------------------------------
/public/city/saopaulo/prospectus.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/saopaulo/prospectus.pdf
--------------------------------------------------------------------------------
/public/city/saopaulo/saopaulo-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/saopaulo/saopaulo-logo.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/billboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/billboard.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/hero/bg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/hero/bg1.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/hero/bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/hero/bg2.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/hero/bg3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/hero/bg3.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/hero/bg4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/hero/bg4.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/hero/bg5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/hero/bg5.png
--------------------------------------------------------------------------------
/public/city/silicon-valley/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/silicon-valley/title.png
--------------------------------------------------------------------------------
/public/city/singapore/sponsors/google.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/singapore/sponsors/google.png
--------------------------------------------------------------------------------
/public/city/singapore/sponsors/tiktok.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/singapore/sponsors/tiktok.png
--------------------------------------------------------------------------------
/public/city/singapore/title/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/singapore/title/title.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/1Password.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/1Password.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/claw_and_kitty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/claw_and_kitty.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/indomie.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/indomie.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/luminor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/luminor.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/shopify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/shopify.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/terraCotta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/terraCotta.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/tmu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/tmu.png
--------------------------------------------------------------------------------
/public/city/toronto/sponsors/ubisoft-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/sponsors/ubisoft-logo.png
--------------------------------------------------------------------------------
/public/city/toronto/title_toronto.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/toronto/title_toronto.png
--------------------------------------------------------------------------------
/public/city/winnipeg/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/city/winnipeg/title.png
--------------------------------------------------------------------------------
/public/down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/down.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq1.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq2.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq3.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq4.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq5.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq6.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq7.png
--------------------------------------------------------------------------------
/public/faqbkgr/faq8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/faqbkgr/faq8.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/favicon.ico
--------------------------------------------------------------------------------
/public/flares/flare1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare1.png
--------------------------------------------------------------------------------
/public/flares/flare10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare10.png
--------------------------------------------------------------------------------
/public/flares/flare2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare2.png
--------------------------------------------------------------------------------
/public/flares/flare3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare3.png
--------------------------------------------------------------------------------
/public/flares/flare4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare4.png
--------------------------------------------------------------------------------
/public/flares/flare5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare5.png
--------------------------------------------------------------------------------
/public/flares/flare6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare6.png
--------------------------------------------------------------------------------
/public/flares/flare7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare7.png
--------------------------------------------------------------------------------
/public/flares/flare8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare8.png
--------------------------------------------------------------------------------
/public/flares/flare9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/flare9.png
--------------------------------------------------------------------------------
/public/flares/torch1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/torch1.png
--------------------------------------------------------------------------------
/public/flares/torch2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/flares/torch2.png
--------------------------------------------------------------------------------
/public/fusion-pixel.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/fusion-pixel.woff2
--------------------------------------------------------------------------------
/public/hero/bg1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/hero/bg1.png
--------------------------------------------------------------------------------
/public/hero/bg2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/hero/bg2.png
--------------------------------------------------------------------------------
/public/hero/bg3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/hero/bg3.png
--------------------------------------------------------------------------------
/public/hero/bg4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/hero/bg4.png
--------------------------------------------------------------------------------
/public/hero/bg5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/hero/bg5.png
--------------------------------------------------------------------------------
/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/logo192.png
--------------------------------------------------------------------------------
/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/logo512.png
--------------------------------------------------------------------------------
/public/manifest.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "Counterspell",
3 | "name": "Hack Club's fall hackathon, open to all high schoolers.",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/public/music.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/music.mp3
--------------------------------------------------------------------------------
/public/neuebit.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/neuebit.woff
--------------------------------------------------------------------------------
/public/neuebit.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/neuebit.woff2
--------------------------------------------------------------------------------
/public/photos/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/1.png
--------------------------------------------------------------------------------
/public/photos/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/2.png
--------------------------------------------------------------------------------
/public/photos/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/3.png
--------------------------------------------------------------------------------
/public/photos/4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/4.png
--------------------------------------------------------------------------------
/public/photos/5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/5.png
--------------------------------------------------------------------------------
/public/photos/6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/6.png
--------------------------------------------------------------------------------
/public/photos/7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/photos/7.png
--------------------------------------------------------------------------------
/public/retro.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/retro.woff
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Allow: /
3 |
4 | Sitemap: https://counterspell.hackclub.com/sitemap.xml
--------------------------------------------------------------------------------
/public/smoke.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/smoke.gif
--------------------------------------------------------------------------------
/public/title.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hackclub/counterspell/bf7d39bef529488c8b35c31530eadbae97bbb901/public/title.png
--------------------------------------------------------------------------------
/scripts/sitemap.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 | const { glob } = require("glob");
3 |
4 | const BASE_URL = "https://counterspell.hackclub.com";
5 |
6 | async function generateSiteMap() {
7 | console.log("Generating sitemap.xml");
8 |
9 | let pages = await glob("pages/**/*.js");
10 | const specific_ignored = [
11 | "sitemap.xml.js",
12 | "404.js",
13 | "index.js",
14 | "example-city.js",
15 | ];
16 | pages = pages.map((page) =>
17 | page.replaceAll("\\", "/").replace("pages/", "").replace(".js", "")
18 | );
19 | pages = pages.filter(
20 | (page) =>
21 | !(
22 | specific_ignored.includes(page) ||
23 | page.startsWith("_") ||
24 | page.startsWith("api/")
25 | )
26 | );
27 | console.log("Pages found to include in sitemap.xml:", pages.join(", "));
28 |
29 | const sitemap = `
30 |
31 |
32 | ${BASE_URL}/
33 |
34 | ${pages
35 | .map((path) => {
36 | return `
37 | ${BASE_URL}/${path}
38 |
39 | `;
40 | })
41 | .join("")}`;
42 |
43 | fs.writeFileSync("public/sitemap.xml", sitemap);
44 | }
45 |
46 | generateSiteMap();
47 |
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: [
4 | "./pages/**/*.{js,ts,jsx,tsx,mdx}",
5 | "./components/**/*.{js,ts,jsx,tsx,mdx}",
6 | "./app/**/*.{js,ts,jsx,tsx,mdx}",
7 | ],
8 | theme: {
9 | extend: {
10 | colors: {
11 | pink: "#FF4186",
12 | blue: "#5BE2FA",
13 | dark: "#202F53",
14 | darker: "#0A081E",
15 | },
16 | screens: {
17 | xs: "480px",
18 | "3xl": "2000px",
19 | },
20 | maxWidth: {
21 | "8xl": "90rem",
22 | },
23 | },
24 | },
25 | plugins: [],
26 | };
27 |
--------------------------------------------------------------------------------