├── .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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
31 |
32 | 33 |
34 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 | Artist card 22 |
23 |
24 | 25 |
26 | Musician card 31 |
32 |
33 | 34 |
35 | Hacker card 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 |
31 |
32 | 33 |
34 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
27 |
28 | 29 |
30 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | Art by Elena Baskakova (18, Boston) 52 | 53 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
18 |
19 | {schedule.map((item, i) => ( 20 |
21 |

{item.event}

22 |
23 |

{item.time}

24 |
25 | ))} 26 | 33 | 立即報名加入參加Counterspell! 34 | 35 |
36 | 37 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | Art by Elena Baskakova (18, Boston) 52 | 53 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Arte por Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
38 |
39 | 40 |
41 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 9 | Hack Club 10 | {" "} 11 | |{" "} 12 | 13 | Slack 14 | {" "} 15 | |{" "} 16 | 17 | YouTube 18 | {" "} 19 | |{" "} 20 | 21 | Instagram 22 | 23 |
24 |
25 | 26 | Art by Elena Baskakova (18, Boston) 27 | 28 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 | Buffalo Wild Wings 9 | Schiek Sports 10 | TEK Systems 11 | 4imprint 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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Old Site 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Arte por Elena Baskakova (18, Boston) 53 | 54 |
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 |
14 | 18 | Join Our Discord 19 | 20 | 24 | Sign Up Now! 25 | 26 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
30 |
31 | 32 |
33 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 | Tiktok 14 |
15 |
16 | Google 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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
16 |
17 | 18 |
19 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 |
8 | 14 | Hack Club 15 | {" "} 16 | |{" "} 17 | 23 | Slack 24 | {" "} 25 | |{" "} 26 | 32 | YouTube 33 | {" "} 34 | |{" "} 35 | 41 | Instagram 42 | 43 |
44 |
45 | 51 | {/* Please keep this attribution */} 52 | Art by Elena Baskakova (18, Boston) 53 | 54 |
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 | 7 | 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 | Counterspell 18 | 19 |
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 | 2 | 3 | 4 | 5 | 6 | 7 | 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 | --------------------------------------------------------------------------------