diff --git a/public/devhacks-2027-sponsorship-package.pdf b/public/devhacks-2027-sponsorship-package.pdf new file mode 100644 index 0000000..d8458de Binary files /dev/null and b/public/devhacks-2027-sponsorship-package.pdf differ diff --git a/sitemap.txt b/sitemap.txt index 13426dd..a573371 100644 --- a/sitemap.txt +++ b/sitemap.txt @@ -1,6 +1,5 @@ https://devclub.ca/?/ https://devclub.ca/?/devhacks -https://devclub.ca/?/devhacks/2027 https://devclub.ca/?/devhacks/2023 https://devclub.ca/?/devhacks/2024 https://devclub.ca/?/devhacks/2024/schedule diff --git a/src/components/DevHacksPreRegister.tsx b/src/components/DevHacksPreRegister.tsx new file mode 100644 index 0000000..e7d453f --- /dev/null +++ b/src/components/DevHacksPreRegister.tsx @@ -0,0 +1,352 @@ +import React, { useState } from "react"; +import Box from "@mui/material/Box"; +import Typography from "@mui/material/Typography"; +import Button from "@mui/material/Button"; +import TextField from "@mui/material/TextField"; +import Alert from "@mui/material/Alert"; +import CircularProgress from "@mui/material/CircularProgress"; +import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutline"; +import MarkEmailReadIcon from "@mui/icons-material/MarkEmailRead"; + +/** + * GOOGLE SHEETS INTEGRATION INSTRUCTIONS: + * ------------------------------------------------------------- + * 1. Create a Google Sheet named ".devHacks 2027 Pre-Registrations". + * 2. In Google Sheets, go to Extensions > Apps Script. + * 3. Replace the code with the following 12-line snippet: + * + * function doPost(e) { + * try { + * var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); + * var data = JSON.parse(e.postData.contents); + * sheet.appendRow([new Date(), data.email]); + * return ContentService.createTextOutput(JSON.stringify({ status: "success" })) + * .setMimeType(ContentService.MimeType.JSON); + * } catch (err) { + * return ContentService.createTextOutput(JSON.stringify({ status: "error", message: err.toString() })) + * .setMimeType(ContentService.MimeType.JSON); + * } + * } + * + * 4. Click Deploy > New deployment. + * - Type: Web app + * - Execute as: Me (your Google account) + * - Who has access: Anyone + * 5. Copy the Web App URL and add it to your environment variables: + * VITE_DEVHACKS_PRE_REG_URL="https://script.google.com/macros/s/.../exec" + * ------------------------------------------------------------- + */ + +const SCRIPT_URL = (import.meta.env.VITE_DEVHACKS_PRE_REG_URL as string) || ""; + +const DevHacksPreRegister: React.FC = () => { + const [email, setEmail] = useState(""); + const [status, setStatus] = useState< + "idle" | "loading" | "success" | "error" + >("idle"); + const [feedback, setFeedback] = useState(""); + + const validateEmail = (val: string) => { + return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val.trim()); + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + const cleanEmail = email.trim(); + + if (!cleanEmail || !validateEmail(cleanEmail)) { + setStatus("error"); + setFeedback("Please enter a valid email address."); + return; + } + + setStatus("loading"); + setFeedback(""); + + try { + if (SCRIPT_URL) { + // Send directly to the Google Apps Script Web App attached to Google Sheets + await fetch(SCRIPT_URL, { + method: "POST", + mode: "no-cors", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + email: cleanEmail, + timestamp: new Date().toISOString(), + }), + }); + } else { + // If the script URL isn't configured yet, log and store in localStorage for safety + const existing = JSON.parse( + localStorage.getItem("devhacks_2027_prereg") || "[]" + ); + existing.push({ email: cleanEmail, date: new Date().toISOString() }); + localStorage.setItem("devhacks_2027_prereg", JSON.stringify(existing)); + } + + setStatus("success"); + setFeedback( + "๐ŸŽ‰ You're on the list! We'll send you an email the instant official registration and challenge tracks go live." + ); + setEmail(""); + } catch (err) { + console.error("Pre-registration error:", err); + setStatus("error"); + setFeedback( + "Could not submit right now. Please try again or email us directly at umdevclub@gmail.com." + ); + } + }; + + return ( + + + + Stay In The Loop + + + + Pre-Register for .devHacks 2027 + + + + Be the first to hear when official applications open, workshop topics + are revealed, and sponsor challenge tracks are announced! + + + {status === "success" ? ( + + + + Pre-Registration Confirmed! + + + {feedback} + + + + ) : ( + + { + setEmail(e.target.value); + if (status === "error") setStatus("idle"); + }} + disabled={status === "loading"} + variant="outlined" + size="medium" + sx={{ + "& .MuiOutlinedInput-root": { + backgroundColor: "#ffffff", + borderRadius: "8px", + fontFamily: '"IBM Plex Mono", monospace', + fontSize: "0.95rem", + "& fieldset": { + borderColor: "rgba(0, 0, 0, 0.23)", + borderRadius: "8px", + }, + "&:hover fieldset": { + borderColor: "rgba(0, 0, 0, 0.4)", + }, + "&.Mui-focused fieldset": { + borderColor: "#d4af37", + borderWidth: "2px", + }, + }, + }} + /> + + + )} + + {status === "error" && ( + + {feedback} + + )} + + + ๐Ÿ”’ No spam ever. We will only contact you with critical .devHacks 2027 + announcements. + + + ); +}; + +export default DevHacksPreRegister; diff --git a/src/components/HackathonFaq.tsx b/src/components/HackathonFaq.tsx index dcef9c2..54eafd6 100644 --- a/src/components/HackathonFaq.tsx +++ b/src/components/HackathonFaq.tsx @@ -8,38 +8,49 @@ import Box from "@mui/material/Box"; const HackathonFaq = () => { const faqData = [ { - question: "How many people can be on a team?", - answer: "We have limited team size to 5 at most.", + question: "When and where is .devHacks 2027?", + answer: + ".devHacks 2027 will take place from Friday, February 19 to Sunday, February 21, 2027 at the Engineering, Information and Technology Complex (EITC), University of Manitoba in Winnipeg, MB.", + }, + { + question: "Why is .devHacks expanding to 48 hours?", + answer: + "We are expanding from 24 hours to a full 48-hour hackathon to give participants the breathing room to build higher-quality projects, attend in-depth technical workshops, get meaningful rest, and connect with mentors and sponsors without feeling rushed.", + }, + { + question: "Is .devHacks free to attend?", + answer: + "Yes, 100% free! All meals, midnight snacks, drinks, hacking space, Wi-Fi, mentorship, workshops, and swag are completely covered thanks to our generous sponsors.", }, { - question: "Do I need to be on a team?", + question: "Who is eligible to participate?", answer: - "You arenโ€™t required to be on a team but strongly encouraged to promote group-work experience.", + ".devClub welcomes students of all backgrounds and experience levelsโ€”including high school, undergraduate, and graduate students. Whether you are an engineer, developer, UI/UX designer, business major, or just enthusiastic about technology, there is a place for you at .devHacks.", }, { - question: "Does every member of the team need to be registered?", + question: "How many people can be on a team?", answer: - "Yes, every member of the team should first register individually with the .devHacks registration form. You will then have to register your team with DevPost which will be released sometime next week.", + "Teams can have up to 5 members. You can participate solo, but working in a team is strongly encouraged to promote collaborative problem-solving and shared learning.", }, { - question: "What is the listing on devPost about", + question: "What if I don't have a team yet?", answer: - "After you have registered individually, and if you have people to form the team with, we need one of the team members to fill the DevPost listing to keep track of all the teams. Anyone participating solo should fill the Devpost listing too. (The listing will be released sometime next week where you can easiy edit team-members!). It is an easy way for us to keep track of your repos aswell as the members in your team.", + "No problem! You can pre-register individually. Closer to the event, we will host dedicated team-formation channels on our Discord server and conduct an in-person Team Matching & Meet and Greet before hacking starts.", }, { - question: "What if I donโ€™t have a team, Can I still participate?", + question: "When will official registration open?", answer: - " If you haven't already, please join our .devHacks discord server to connect with other students looking to form a team. We will also help with team-matching during Meet and Greet.", + "Official registration will open closer to the event date. Pre-register your email on this page to receive an immediate notification the moment registration and challenge tracks go live!", }, { - question: "What experience/skills do I need to participate?", + question: "What should I bring to .devHacks 2027?", answer: - "There is no required set of skills or experience. .devClub welcomes people of all skill levels to our hackathon, including engineers, designers, developers or even people with good ideas.", + "Bring your student ID, laptop, chargers, any hardware/peripherals you plan to hack on, comfortable clothes, and personal toiletries. We're still awaiting confirmation from the venue on arranging a potential overnight sleeping spot on campus.", }, { - question: "Can I work on the project after the doors close on Day 1?", + question: "How can our company get involved as a sponsor or mentor?", answer: - "Yes, you are welcome to work even after the doors close on day 1. However, we encourage you to get some healthy sleep to re-fuel for the next day. Also, this is the latest when students should vacate the venue i.e., 10 pm.", + "We'd love to partner with you! Check out our Sponsorship Package above or reach out directly to umdevclub@gmail.com to explore booth opportunities, sponsored challenge tracks, workshops, and recruitment perks.", }, ]; @@ -62,9 +73,19 @@ const HackathonFaq = () => { {faqData.map((faq, index) => ( { sx={{ background: "#272729", color: "white", + minHeight: "52px", + "&.Mui-expanded": { + minHeight: "52px", + }, + "& .MuiAccordionSummary-content": { + margin: "12px 0", + }, + "& .MuiAccordionSummary-content.Mui-expanded": { + margin: "12px 0", + }, }} aria-controls={`panel${index}-content`} id={`panel${index}-content`} @@ -86,7 +117,12 @@ const HackathonFaq = () => { {faq.question} - + } /> } /> } /> - } /> } /> } /> +
+ +
+ ๐Ÿš€ .devHacks 2027 + + Manitoba's largest hackathon is going 48 hours! + Feb 19โ€“21, 2027 at U of M. + + + Explore & Pre-Register โ†’ + +
+
+
+

WELCOME TO .DEVCLUB