From ed4a7806fd262918a766b849176098142d275a3d Mon Sep 17 00:00:00 2001 From: Matthew M-B Date: Tue, 15 Oct 2024 22:50:59 -0400 Subject: [PATCH 1/2] Add hackathon information --- assets/scss/_components.scss | 1 + .../_hack_the_tunnels_challenge.scss | 117 ++++++++++++++++++ .../2024-2025/challenges/01-hello-world.md | 42 +++++++ .../challenges/02-redesign-login-page.md | 35 ++++++ .../challenges/03-update-central-layout.md | 63 ++++++++++ .../challenges/04-redesign-404-page.md | 29 +++++ .../challenges/05-e2e-sequence-diagram.md | 23 ++++ .../2024-2025/challenges/06-schema-diagram.md | 25 ++++ .../2024-2025/challenges/07-dark-mode.md | 24 ++++ .../challenges/08-responsive-menu-page.md | 27 ++++ .../challenges/09-email-timetable.md | 23 ++++ .../10-registration-count-report.md | 27 ++++ .../2024-2025/challenges/11-web-scraper.md | 25 ++++ .../challenges/12-overlapping-courses.md | 27 ++++ .../2024-2025/challenges/13-docker.md | 27 ++++ .../2024-2025/challenges/14-webhooks.md | 27 ++++ .../2024-2025/challenges/15-sms.md | 25 ++++ .../2024-2025/challenges/16-graphql.md | 27 ++++ .../2024-2025/challenges/17-github-actions.md | 26 ++++ .../18-course-recommendation-feature.md | 29 +++++ .../challenges/19-bcrypt-passwords.md | 29 +++++ .../challenges/20-add-course-crn-scheduled.md | 28 +++++ .../21-add-max-registration-column.md | 26 ++++ .../22-scheduled-event-page-caching copy.md | 34 +++++ .../challenges/23-add-css-animation.md | 19 +++ .../challenges/24-search-by-program.md | 22 ++++ .../challenges/25-course-text-search.md | 26 ++++ .../challenges/26-name-timetables.md | 27 ++++ .../2024-2025/challenges/27-jwt-env-file.md | 21 ++++ .../28-improve-timetable-styling.md | 23 ++++ .../challenges/29-improve-result-styling.md | 27 ++++ .../2024-2025/challenges/_index.md | 8 ++ .../_default/hack_the_tunnels_challenge.html | 17 +++ .../_default/hack_the_tunnels_challenges.html | 107 ++++++++++++++++ 34 files changed, 1063 insertions(+) create mode 100644 assets/scss/components/_hack_the_tunnels_challenge.scss create mode 100644 content/hackthetunnels/2024-2025/challenges/01-hello-world.md create mode 100644 content/hackthetunnels/2024-2025/challenges/02-redesign-login-page.md create mode 100644 content/hackthetunnels/2024-2025/challenges/03-update-central-layout.md create mode 100644 content/hackthetunnels/2024-2025/challenges/04-redesign-404-page.md create mode 100644 content/hackthetunnels/2024-2025/challenges/05-e2e-sequence-diagram.md create mode 100644 content/hackthetunnels/2024-2025/challenges/06-schema-diagram.md create mode 100644 content/hackthetunnels/2024-2025/challenges/07-dark-mode.md create mode 100644 content/hackthetunnels/2024-2025/challenges/08-responsive-menu-page.md create mode 100644 content/hackthetunnels/2024-2025/challenges/09-email-timetable.md create mode 100644 content/hackthetunnels/2024-2025/challenges/10-registration-count-report.md create mode 100644 content/hackthetunnels/2024-2025/challenges/11-web-scraper.md create mode 100644 content/hackthetunnels/2024-2025/challenges/12-overlapping-courses.md create mode 100644 content/hackthetunnels/2024-2025/challenges/13-docker.md create mode 100644 content/hackthetunnels/2024-2025/challenges/14-webhooks.md create mode 100644 content/hackthetunnels/2024-2025/challenges/15-sms.md create mode 100644 content/hackthetunnels/2024-2025/challenges/16-graphql.md create mode 100644 content/hackthetunnels/2024-2025/challenges/17-github-actions.md create mode 100644 content/hackthetunnels/2024-2025/challenges/18-course-recommendation-feature.md create mode 100644 content/hackthetunnels/2024-2025/challenges/19-bcrypt-passwords.md create mode 100644 content/hackthetunnels/2024-2025/challenges/20-add-course-crn-scheduled.md create mode 100644 content/hackthetunnels/2024-2025/challenges/21-add-max-registration-column.md create mode 100644 content/hackthetunnels/2024-2025/challenges/22-scheduled-event-page-caching copy.md create mode 100644 content/hackthetunnels/2024-2025/challenges/23-add-css-animation.md create mode 100644 content/hackthetunnels/2024-2025/challenges/24-search-by-program.md create mode 100644 content/hackthetunnels/2024-2025/challenges/25-course-text-search.md create mode 100644 content/hackthetunnels/2024-2025/challenges/26-name-timetables.md create mode 100644 content/hackthetunnels/2024-2025/challenges/27-jwt-env-file.md create mode 100644 content/hackthetunnels/2024-2025/challenges/28-improve-timetable-styling.md create mode 100644 content/hackthetunnels/2024-2025/challenges/29-improve-result-styling.md create mode 100644 content/hackthetunnels/2024-2025/challenges/_index.md create mode 100644 layouts/_default/hack_the_tunnels_challenge.html create mode 100644 layouts/_default/hack_the_tunnels_challenges.html diff --git a/assets/scss/_components.scss b/assets/scss/_components.scss index 156c42ade..b9a44df65 100644 --- a/assets/scss/_components.scss +++ b/assets/scss/_components.scss @@ -9,6 +9,7 @@ @import "components/faq-topic"; @import "components/footer"; @import "components/hack_the_tunnels"; +@import "components/hack_the_tunnels_challenge"; @import "components/header"; @import "components/home"; @import "components/internal"; diff --git a/assets/scss/components/_hack_the_tunnels_challenge.scss b/assets/scss/components/_hack_the_tunnels_challenge.scss new file mode 100644 index 000000000..8d273049c --- /dev/null +++ b/assets/scss/components/_hack_the_tunnels_challenge.scss @@ -0,0 +1,117 @@ +.hack-the-tunnels-challenge-page { + min-height: 100vh; + height: fit-content; + + text-align: left; + background-color: #020012; + color: white; + + .frontend { + &:hover { + background-color: #34d3fa; + cursor: pointer; + } + } + + .backend { + &:hover { + background-color: #f3da00; + cursor: pointer; + } + } + + .fullstack { + &:hover { + background-color: #8c65fe; + cursor: pointer; + } + } + + .security { + &:hover { + background-color: #c6006a; + cursor: pointer; + } + } + + .diagrams { + &:hover { + background-color: #ffbb3e; + cursor: pointer; + } + } + + .devops { + &:hover { + background-color: #78ff3e; + cursor: pointer; + } + } + + hr { + width: 100%; + opacity: 0.25; + } + + &__categories { + display: flex; + justify-content: center; + gap: 0.75rem; + margin-bottom: 1rem; + } + + &__category { + padding: 0.5rem 0.5rem; + border-radius: 0.2rem; + background-color: #363636; + color: white; + font-size: 1rem; + font-weight: bold; + transition: all 0.2s; + + a { + color: white !important; + } + } + + &__challenge { + margin-bottom: 2rem; + } + + &__content { + padding: 1rem; + max-width: 700px; + margin: 0 auto; + display: flex; + flex-direction: column; + justify-content: center; + + code { + background-color: #363636; + color: white; + padding: 0.2rem 0.5rem; + border-radius: 0.2rem; + } + + a { + color: #78ff3e; + text-decoration: none; + + code { + background-color: #2c2c2c; + color: #78ff3e; + padding: 0.2rem 0.5rem; + border-radius: 0.2rem; + } + } + } + + &__logo { + object-fit: cover; + width: 15rem; + // margin: 0 auto; + margin-top: 3rem; + margin-left: -1rem; + margin-bottom: 3rem; + } +} diff --git a/content/hackthetunnels/2024-2025/challenges/01-hello-world.md b/content/hackthetunnels/2024-2025/challenges/01-hello-world.md new file mode 100644 index 000000000..944dde3b6 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/01-hello-world.md @@ -0,0 +1,42 @@ +--- +id: "hello-world" +order: 1 +title: "Hello World: Update Page Title" +points: 1 +difficulty: Beginner Friendly (Start here) +category: Frontend +date: 2023-10-01T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/hello-world" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +To complete this challenge, please update the websites page title. + +Checkout: [`client/index.html`](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/index.html) + +And update the page title to be any name that you feel will better represent your project. + +```diff + + + + + + +- Hack The Tunnels Project ++ Your New Project Title + + +
+ + + +``` + +
+ +## Acceptance Criteria: + +This challenge will be considered complete if the title of the webpage / the name of their "tab" is anything but "Hack The Tunnels Project". \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/02-redesign-login-page.md b/content/hackthetunnels/2024-2025/challenges/02-redesign-login-page.md new file mode 100644 index 000000000..9b1e68a11 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/02-redesign-login-page.md @@ -0,0 +1,35 @@ +--- +id: "redesign-login-page" +order: 2 +title: "Create Your Own Login Page" +points: 6 +difficulty: Beginner Friendly +category: Frontend +date: 2023-10-01T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/redesign-login-page" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +For this challenge, your team needs redesign the Carleton Central login page. + +Checkout: [`client/src/pages/Login/Login.tsx`](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/pages/Login/Login.tsx) to get started. + +Additionally, today the email and password values used when clicking "sign in" are hard coded to be `admin@email.com` and `password`. + +Utilize React's [useState](https://legacy.reactjs.org/docs/hooks-state.html) hook to store custom values for email and password and update the ```attemptLogin``` login function to use the newly stored values. + +
+ +## Acceptance Criteria: + +The new login page must satisfy atleast (2) of these (4) possible criteria: +- Replace the image of Carleton University with something new +- Improve the styling of the "Sign in" button (improved colors, fonts, animation, etc) +- Move the "login panel" (the white box with inputs) to the left side of the screen +- Improve the "error message" styling. Ex: The message that appears when you enter a wrong email-password combination + +Additionally, the team must demonstrate that their sign in inputs are not hardcoded with values of `admin@email.com` and `password`. + +Bonus points are allowed to be given if it is obvious the team has put significant effort into overhauling the login page. diff --git a/content/hackthetunnels/2024-2025/challenges/03-update-central-layout.md b/content/hackthetunnels/2024-2025/challenges/03-update-central-layout.md new file mode 100644 index 000000000..f4fd147b9 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/03-update-central-layout.md @@ -0,0 +1,63 @@ +--- +id: "update-central-layout" +order: 3 +title: "Update Central Layout" +points: 7 +difficulty: Beginner Friendly +category: Frontend +date: 2023-10-01T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/update-central-layout" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +For this challenge, your team needs to improve the "Central Layout". + +Checkout: [`client/src/layouts/Central/Central.tsx`](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/layouts/Central/Central.tsx) to get started. + +The "Central Layout" is used by all of the pages themed to look like Carleton Central. + +This means that any change may to this file will modify the look of all over pages using this layout. + +In the example below, [`children`](https://react.dev/reference/react/Children) is the contents of other pages being passed into this layout to be rendered. + +```typescript +function Central({ title, children }: Props) { + return ( + + +
+ + +

{title}

+ +
{children}
+ +
+
Release: 8.10.1
+
+ © 2024 Ellucian Company L.P. and its affiliates. +
+
+
+ + ); +} +``` + +
+ +## Acceptance Criteria: + +The new layout must satisfy (3) of the (5) following criteria +- Modify the Carleton Central [``](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/layouts/Central/Banner/Banner.tsx) to look "better", such as... + - change the image + - add a better title + - anything you think would be cool or funny +- Add icons to [``](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/layouts/Central/HeaderLinks/HeaderLinks.tsx) icons that represent their intended goals +- Improve the "page title" styling (see `Central__page__title`) +- Create an improved footer (see `Central__page__footer`) +- Update the colors used in the layout (see `client/src/globals.scss`) + +Bonus points are allowed to be given if it is obvious the team has put significant effort into overhauling the login page. diff --git a/content/hackthetunnels/2024-2025/challenges/04-redesign-404-page.md b/content/hackthetunnels/2024-2025/challenges/04-redesign-404-page.md new file mode 100644 index 000000000..cf14f1b11 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/04-redesign-404-page.md @@ -0,0 +1,29 @@ +--- +id: "redesign-404-page" +order: 4 +title: "Redesign 404 Page" +points: 3 +difficulty: Beginner Friendly +category: Frontend +date: 2023-10-01T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/redesign-404-page" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +For this challenge, your team needs to improve the "[404](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404) Page". + +This is the page that renders whenever you try to go to a route that does not exist in your app, ex: `"http://localhost:5173/idontexist"`. + +Checkout: [`client/src/pages/NotFound/NotFound.tsx`](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/pages/NotFound/NotFound.tsx) to get started. + +
+ +## Acceptance Criteria: + +The new page must have more than just the text "404". + +If you can't think of any better improvements, just put a funny gif or something you feel represents the goal of this page. + +Bonus points are allowed to be given if it is obvious the team has put significant effort into overhauling the 404 page. diff --git a/content/hackthetunnels/2024-2025/challenges/05-e2e-sequence-diagram.md b/content/hackthetunnels/2024-2025/challenges/05-e2e-sequence-diagram.md new file mode 100644 index 000000000..695085073 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/05-e2e-sequence-diagram.md @@ -0,0 +1,23 @@ +--- +id: "e2e-sequence-diagram" +order: 5 +title: "Sequence Diagram" +points: 5 +difficulty: Beginner Friendly +category: Diagrams +date: 2023-10-01T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/e2e-sequence-diagram" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Pick one of the one of either [`Login`](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/pages/Login/Login.tsx) or [`BuildTimetable`](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/pages/BuildTimetable/BuildTimetable.tsx) pages and create a [sequence diagram](https://agilemodeling.com/artifacts/sequencediagram.htm) using [`mermaid.js`](https://mermaid.js.org/syntax/sequenceDiagram.html) + +Your diagram should show messagings passing between the `client`, `server`, and `database`. + +
+ +## Acceptance Criteria: + +The sequence diagrams do not need to strictly follow any standard. This challenge is meant to make the participant look through the codebase to see how messages are being passed. diff --git a/content/hackthetunnels/2024-2025/challenges/06-schema-diagram.md b/content/hackthetunnels/2024-2025/challenges/06-schema-diagram.md new file mode 100644 index 000000000..4ff907311 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/06-schema-diagram.md @@ -0,0 +1,25 @@ +--- +id: "schema-diagram" +order: 6 +title: "Entity Relationship Diagram" +points: 3 +difficulty: Beginner Friendly +category: Diagrams +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/schema-diagram" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Using the provided [Prisma schema file](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/service/src/db/schema.prisma), create a [Entity Relationship diagram](https://mermaid.js.org/syntax/entityRelationshipDiagram.html) using [`mermaid.js`](https://mermaid.js.org/syntax/entityRelationshipDiagram.html). + +Your diagram should model the relationships between the different entities, including their attributes and how they connect (e.g., one-to-many, many-to-many). + +
+ +## Acceptance Criteria: + +1. The schema diagram should represent each entity from the provided schema file and at least one relationship between entities. +2. Use Mermaid.js to clearly depict the relationships between tables (one-to-many, many-to-many, etc.). +3. The diagram does not need to match every attribute, but core relationships and entities should be represented. diff --git a/content/hackthetunnels/2024-2025/challenges/07-dark-mode.md b/content/hackthetunnels/2024-2025/challenges/07-dark-mode.md new file mode 100644 index 000000000..39c7f7b08 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/07-dark-mode.md @@ -0,0 +1,24 @@ +--- +id: "dark-mode" +order: 7 +title: "Dark Mode" +points: 5 +difficulty: Beginner Friendly +category: Frontend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/dark-mode" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Utilize the [`prefers-color-scheme`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme) CSS media feature to conditionally adjust part of the website's design to be darker or lighter based on the user's system preference. + +Choose any page in the app and make it so that page **has a fully working dark mode**. + +
+ +## Acceptance Criteria: + +The participant has successfully used the `prefers-color-scheme` media feature in CSS to implement conditional styling for dark mode on one full page. + diff --git a/content/hackthetunnels/2024-2025/challenges/08-responsive-menu-page.md b/content/hackthetunnels/2024-2025/challenges/08-responsive-menu-page.md new file mode 100644 index 000000000..de1874785 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/08-responsive-menu-page.md @@ -0,0 +1,27 @@ +--- +id: "carleton-central-responsive-menu" +order: 8 +title: "Responsive Menu Page" +points: 5 +difficulty: Intermediate +category: Frontend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/carleton-central-responsive-menu" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Redesign the Carleton Central ["menu"](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/pages/Menu/Menu.tsx) page to be responsive and mobile-friendly. The current menu is built for desktop screens, and your task is to make it adjust and display properly on mobile devices with various screen sizes. + +Use techniques such as CSS [Flexbox](https://www.w3schools.com/css/css3_flexbox.asp), [Grid](https://www.w3schools.com/css/css_grid.asp), and [media queries](https://www.w3schools.com/css/css_rwd_mediaqueries.asp) to ensure the layout adapts smoothly to smaller screens. + +**Note:** Only worry about preserving links to the "BuildTimetable" and "Timetables" pages. You can remove the rest of the links on this screen (if you want). + +
+ +## Acceptance Criteria: + +- The redesigned Carleton Central menu must be fully responsive, working well on mobile and tablet screen sizes. +- The participant must include at least one media query to adjust layout or styling based on screen width. +- The solution should maintain the usability and functionality of the original menu while improving the mobile experience. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/09-email-timetable.md b/content/hackthetunnels/2024-2025/challenges/09-email-timetable.md new file mode 100644 index 000000000..c8c1a79b5 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/09-email-timetable.md @@ -0,0 +1,23 @@ +--- +id: "email-timetable" +order: 9 +title: "Send Email On Timetable Create" +points: 8 +difficulty: Intermediate +category: Backend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/email-timetable" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +When a student creates a timetable, an email should be sent to the student's email address containing details of their newly created timetable. + +You can use any library to achieve this. If you're unsure where to start, this [guide](https://medium.com/@y.mehnati_49486/how-to-send-an-email-from-your-gmail-account-with-nodemailer-837bf09a7628) demonstrates how to send emails using `nodemailer` with Gmail. + +
+ +## Acceptance Criteria: + +- When a student creates a timetable, an email containing the timetable details is sent to the student's email. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/10-registration-count-report.md b/content/hackthetunnels/2024-2025/challenges/10-registration-count-report.md new file mode 100644 index 000000000..38488bce2 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/10-registration-count-report.md @@ -0,0 +1,27 @@ +--- +id: "registration-count-report" +order: 10 +title: "Generate Recurring Report" +points: 6 +difficulty: Intermediate +category: Backend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/registration-count-report" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Create a system that generates a report on a **recurring** basis that has a list of all students who have created atleast one timetable. + +You are free to implement the solution using any tools or libraries that fit the task. + +If you're not sure where to get started, take a look at [this guide](https://medium.com/@developerom/schedule-cron-jobs-in-node-js-12a6a33d6ed3). + +
+ +## Acceptance Criteria: + +1. The report includes a list of all students who have created atleast one timetable. +2. The system generates the report on a recurring basis. +3. The report is either saved to a file or logged in a way that can be easily accessed by the administrator. diff --git a/content/hackthetunnels/2024-2025/challenges/11-web-scraper.md b/content/hackthetunnels/2024-2025/challenges/11-web-scraper.md new file mode 100644 index 000000000..1c4641861 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/11-web-scraper.md @@ -0,0 +1,25 @@ +--- +id: "webscraper-course-data" +order: 11 +title: "Course Data Web Scraper" +points: 10 +difficulty: Intermediate +category: Backend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/webscraper-course-data" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Create a web scraper that extracts course data from the [Carleton Central schedule page](https://central.carleton.ca/prod/bwysched.p_select_term?wsea_code=EXT). The scraper should retrieve details such as course codes, titles, and available sections for a given term. + +If you're not sure where to get started, see this [guide. +](https://www.freecodecamp.org/news/the-ultimate-guide-to-web-scraping-with-node-js-daa2027dcd3/) +
+ +## Acceptance Criteria: + +1. The web scraper successfully extracts course data, including course codes, titles, and sections. +2. The scraper is able to parse data from at least one term and one program from the provided website. +3. The scraped data is outputted in a structured format, such as JSON or CSV. diff --git a/content/hackthetunnels/2024-2025/challenges/12-overlapping-courses.md b/content/hackthetunnels/2024-2025/challenges/12-overlapping-courses.md new file mode 100644 index 000000000..3be36dd0e --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/12-overlapping-courses.md @@ -0,0 +1,27 @@ +--- +id: "overlapping-courses" +order: 1 +title: "Prevent Overlapping Events" +points: 6 +difficulty: Beginner Friendly +category: Backend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/overlapping-courses" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Modify the backend to ensure that when a student creates a timetable, no two courses in the timetable overlap. If overlapping courses are detected, the timetable creation should be rejected, and an error message should be returned to the user. + +Timetable creation is handled in the Timetable Service ([service/src/services/Timetable.ts](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/service/src/services/Timetable.ts)) inside the `createTimetable` method. + +This method should return an error that is surfaced to the user if there are courses with conflicting times. + +
+ +## Acceptance Criteria: + +1. The backend rejects the creation of timetables with overlapping courses. +2. A clear error message is returned when overlapping courses are detected. +3. The participant's solution is well-integrated into the existing timetable creation process. diff --git a/content/hackthetunnels/2024-2025/challenges/13-docker.md b/content/hackthetunnels/2024-2025/challenges/13-docker.md new file mode 100644 index 000000000..8ca8955a9 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/13-docker.md @@ -0,0 +1,27 @@ +--- +id: "docker" +order: 13 +title: "Dockerize Client and Service" +points: 10 +difficulty: Intermediate +category: DevOps +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/docker" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Create Dockerfiles for both the `client` and `service` folders, then use Docker Compose to make them work together in a single development environment. The `client` should be able to communicate with the `service`, and both should run seamlessly within their respective containers. + +Ensure that all necessary dependencies are installed and that the services can interact as they would in a normal, non-Dockerized environment. + +To complete this challenge, you'll need to have [docker installed](https://formulae.brew.sh/formula/docker). + +
+ +## Acceptance Criteria: + +1. Dockerfiles are created for both the `client` and `service` folders. +2. Docker Compose is used to orchestrate both services so that they run together in containers. +3. The `client` is able to communicate with the `service` through the appropriate network configuration. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/14-webhooks.md b/content/hackthetunnels/2024-2025/challenges/14-webhooks.md new file mode 100644 index 000000000..c60f76c2f --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/14-webhooks.md @@ -0,0 +1,27 @@ +--- +id: "webhooks" +order: 14 +title: "Send Discord Webhook" +points: 6 +difficulty: Beginner Friendly +category: Backend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/webhooks" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Set up a system that triggers a [Discord webhook](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks) when a specific event happens (e.g., when a new timetable is created or a course is added). + +Your task is to configure the backend so that, upon the occurrence of {x} event, a message is sent to a Discord channel via a webhook. + +You can use any library or method to send the HTTP request to the Discord webhook URL. + +
+ +## Acceptance Criteria: + +1. A Discord webhook is triggered when {x} event happens in the system. +2. The participant successfully sends a message to a Discord channel when the event occurs. +3. The webhook message contains relevant information about the event. diff --git a/content/hackthetunnels/2024-2025/challenges/15-sms.md b/content/hackthetunnels/2024-2025/challenges/15-sms.md new file mode 100644 index 000000000..b52b30c4c --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/15-sms.md @@ -0,0 +1,25 @@ +--- +id: "sms" +order: 15 +title: "Send Text When Timetable Is Created" +points: 7 +difficulty: Intermediate +category: Backend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/sms" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Utilize [Twilio](https://www.twilio.com/en-us) to send a text (SMS) to students when a timetable is created. + +_Note: we don't currently collect phone numbers as part of the account creation process, so feel free to hardcode the desired phone number for this challenge._ + +
+ +## Acceptance Criteria: + +1. When a timetable is created, an SMS message is sent to the desired phone number. +2. The participant sets up Twilio properly to handle the SMS sending. +3. The message sent contains relevant details about the newly created timetable. diff --git a/content/hackthetunnels/2024-2025/challenges/16-graphql.md b/content/hackthetunnels/2024-2025/challenges/16-graphql.md new file mode 100644 index 000000000..45ceeff8b --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/16-graphql.md @@ -0,0 +1,27 @@ +--- +id: "graphql-api-implementation" +order: 16 +title: "Create a GraphQL API" +points: 10 +difficulty: Intermediate +category: Backend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/graphql-api-implementation" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Create a [GraphQL](https://graphql.org/) API for the service. This GraphQL API will be exposed on the route `POST /api/graphql`. + +To satisfy this challenge, implement at least one GraphQL query and one GraphQL mutation. Be sure to reuse the existing service code within the `service/src/services` folder to integrate with your GraphQL implementation. + +If you're not sure where to get started, check out this [guide.](https://graphql.org/graphql-js/) + +
+ +## Acceptance Criteria: + +1. A GraphQL API is set up and accessible at the specified route. +2. At least one query and one mutation are implemented successfully. +3. The participant reuses existing service code appropriately to handle the GraphQL operations. diff --git a/content/hackthetunnels/2024-2025/challenges/17-github-actions.md b/content/hackthetunnels/2024-2025/challenges/17-github-actions.md new file mode 100644 index 000000000..140b82399 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/17-github-actions.md @@ -0,0 +1,26 @@ +--- +id: "github-actions-prettier" +order: 1 +title: "Set Up GitHub Actions for Prettier" +points: 3 +difficulty: Beginner Friendly +category: DevOps +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/github-actions-prettier" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Create a [GitHub Actions](https://github.com/features/actions) configuration that runs Prettier automatically whenever a pull request (PR) is made. The action should format the code in the specified files to maintain code style consistency across the project. + +Ensure that your workflow is triggered on `pull_request` events and that it runs Prettier on the designated files or directories. + +See an [example of this](https://github.com/CarletonComputerScienceSociety/website/blob/master/.github/workflows/workflow.yml) on the CCSS Website repo. + +
+ +## Acceptance Criteria: + +1. A GitHub Actions workflow is created that runs Prettier on PRs. +2. The workflow triggers correctly when a pull request is opened or updated. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/18-course-recommendation-feature.md b/content/hackthetunnels/2024-2025/challenges/18-course-recommendation-feature.md new file mode 100644 index 000000000..64e8671fe --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/18-course-recommendation-feature.md @@ -0,0 +1,29 @@ +--- +id: "course-recommendation-feature" +order: 18 +title: "Course Recommendation" +points: 8 +difficulty: Intermediate +category: Fullstack +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/course-recommendation-feature" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Add a way on the "BuildTimetable" page for a student to request a course recommedntation based on a time and day specified by the student. + +When a user requests a recommendation, the system should return a list of available courses that fit within that time frame. + +To query the backend, you can either add new [query parameters](https://www.branch.io/glossary/query-parameters/#:~:text=Query%20parameters%20are%20a%20defined,web%20server%20when%20making%20requests.) to the `/scheduledEvents` endpoint or create a new endpoint. + +In terms of how this is presented to users, you are welcome to have it be as simple or as complex as you want. (It can just be a couple input boxes). + +
+ +## Acceptance Criteria: + +1. The feature successfully accepts a time input from the user. +2. The system returns a list of recommended courses that fit the specified time and days. +3. The recommendation logic handles potential scheduling conflicts appropriately. diff --git a/content/hackthetunnels/2024-2025/challenges/19-bcrypt-passwords.md b/content/hackthetunnels/2024-2025/challenges/19-bcrypt-passwords.md new file mode 100644 index 000000000..255469c40 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/19-bcrypt-passwords.md @@ -0,0 +1,29 @@ +--- +id: "bcrypt-passwords" +order: 19 +title: "Bcrypt Passwords" +points: 8 +difficulty: Beginner Friendly +category: Security +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/bcrypt-passwords" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +As a user, my password should not be stored in plain text. + +Storing passwords in plain text is a significant security risk, as it exposes sensitive information in case of a data breach. To enhance security, passwords should be hashed before being stored in the database. + +For this challenge use the [bcrypt npm package](https://www.npmjs.com/package/bcrypt) to hash passwords before they are stored. + +Additionally, update the login workflow to work with the now hashed passwords. + +You'll need to make changes in the [Authentication](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/service/src/services/Authentication.ts) and [Authorization](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/service/src/services/Authorization.ts) services. + +## Acceptance Criteria: + +- Passwords should no longer be stored in plain text in the database when an account is created. + +- The solution must be compatible with existing user workflows (ex: login flow), ensuring a smooth transition without requiring password resets for current users. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/20-add-course-crn-scheduled.md b/content/hackthetunnels/2024-2025/challenges/20-add-course-crn-scheduled.md new file mode 100644 index 000000000..2a933ad1f --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/20-add-course-crn-scheduled.md @@ -0,0 +1,28 @@ +--- +id: "add-course-crn-scheduled" +order: 20 +title: "Search Course by CRN" +points: 5 +difficulty: Intermediate +category: Fullstack +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/add-course-crn-scheduled" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Implement a feature on the BuildTimetable page that allows users to search for a course using the course's **CRN (Course Reference Number)**. The user should be able to input a CRN, and upon validation, added to the "worksheet" section of the BuildTimetable page. + +The feature should include validation to ensure the CRN is valid and exists in the course database. + +To query the backend, you can either add new CRN [query parameter](https://www.branch.io/glossary/query-parameters/#:~:text=Query%20parameters%20are%20a%20defined,web%20server%20when%20making%20requests.) to the `/scheduledEvents` endpoint or create a new endpoint. + +
+ +## Acceptance Criteria: + +1. Users can input a CRN to add a course to their schedule. +2. The system validates the CRN and provides appropriate feedback for valid or invalid inputs. +3. If the CRN is valid, the course is successfully added to the user's timetable. +4. The feature handles potential scheduling conflicts and notifies the user accordingly. diff --git a/content/hackthetunnels/2024-2025/challenges/21-add-max-registration-column.md b/content/hackthetunnels/2024-2025/challenges/21-add-max-registration-column.md new file mode 100644 index 000000000..42e97a851 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/21-add-max-registration-column.md @@ -0,0 +1,26 @@ +--- +id: "add-max-registration-column" +order: 2 +title: "Add Max Registration Column to Scheduled Events" +points: 3 +difficulty: Beginner Friendly +category: Backend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/add-max-registration-column" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Add a **"max registration"** column to the `scheduledEvents` table in the relational database. This column should store the maximum number of students allowed to register for each scheduled event. + +Ensure that the migration is created and executed correctly, and update any relevant models or services to reflect this new column. + +For help creating a Prisma migration, see [this guide](https://www.prisma.io/docs/orm/prisma-migrate/getting-started). + +
+ +## Acceptance Criteria: + +1. A migration is created to add the "max registration" column to the `scheduledEvents` table. +2. The new column is properly integrated into the existing data models and services. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/22-scheduled-event-page-caching copy.md b/content/hackthetunnels/2024-2025/challenges/22-scheduled-event-page-caching copy.md new file mode 100644 index 000000000..3379a11e8 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/22-scheduled-event-page-caching copy.md @@ -0,0 +1,34 @@ +--- +id: "scheduled-event-page-caching" +order: 22 +title: "Scheduled Event Page With Redis" +points: 8 +difficulty: Complex +category: Fullstack +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/scheduled-event-page-caching" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Let's recreate [this page](https://central.carleton.ca/prod/bwysched.p_display_course?wsea_code=EXT&term_code=202430&disp=22199269&crn=31211) from the original Carleton Central. + +In the client, create a new page in `client/src/pages` that will display detailed information for a scheduled event. The page should allow users to view data about the scheduled event, including information from both the **scheduled events** and **courses** tables. + +In the service API, create a new route in `service/src/api/routes/scheduledEvents.ts` for retrieving an individual scheduled event via `/scheduledEvents/:id`. + +Within the `ScheduledEvents` service (`service/src/services/ScheduledEvent.ts`), add a new method that retrieves a scheduled event and aggregates the necessary data from both the `scheduledEvents` and `courses` tables. + +For performance, use [**Redis**](https://redis.io/) to cache the retrieved data. When a user accesses the page, first check if the data is cached in Redis. If not, retrieve the data from the database and store it in Redis for future requests. + +You may need to install [Redis](https://formulae.brew.sh/formula/redis). + +
+ +## Acceptance Criteria: + +1. A new page is created in `client/src/pages` that displays detailed information about a scheduled event. +2. A new route (`/scheduledEvents/:id`) is added in `service/src/api/routes/scheduledEvents.ts` to fetch an individual scheduled event. +3. The `ScheduledEvents` service contains a method to retrieve data from both the `scheduledEvents` and `courses` tables. +4. Redis is used to cache the retrieved data, ensuring faster response times for future requests. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/23-add-css-animation.md b/content/hackthetunnels/2024-2025/challenges/23-add-css-animation.md new file mode 100644 index 000000000..2859a8bc2 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/23-add-css-animation.md @@ -0,0 +1,19 @@ +--- +id: "add-css-animation" +order: 23 +title: "Create A CSS Animation" +points: 5 +difficulty: Intermediate +category: Frontend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/add-css-animation" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Utilize [CSS Animations](https://www.w3schools.com/css/css3_animations.asp) to add something fun to your website! + +## Acceptance Criteria: + +The participant has utilized CSS animations in some way. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/24-search-by-program.md b/content/hackthetunnels/2024-2025/challenges/24-search-by-program.md new file mode 100644 index 000000000..9916acc86 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/24-search-by-program.md @@ -0,0 +1,22 @@ +--- +id: "search-by-program" +order: 1 +title: "Search By Program" +points: 5 +difficulty: Beginner Friendly +category: Fullstack +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/search-by-program" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + + +On the BuildTimetable page, add UI that allows the user to search for courses by program (ex: COMP, MATH, etc) + +To query the backend, you can either add new program [query parameter](https://www.branch.io/glossary/query-parameters/#:~:text=Query%20parameters%20are%20a%20defined,web%20server%20when%20making%20requests.) to the `/scheduledEvents` endpoint or create a new endpoint. + +## Acceptance Criteria: + +The participant can demostrate the different results are returned for each selected program. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/25-course-text-search.md b/content/hackthetunnels/2024-2025/challenges/25-course-text-search.md new file mode 100644 index 000000000..d0b2ae184 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/25-course-text-search.md @@ -0,0 +1,26 @@ +--- +id: "course-text-search" +order: 25 +title: "Course Elastic Search" +points: 11 +difficulty: Complex +category: Fullstack +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/course-text-search" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +On the **BuildTimetable** page, add a UI feature that allows users to search for "scheduled events" using a **search bar**. The search should query ElasticSearch to return relevant scheduled events based on course name, code, description, or any other relevant field. + +In the backend, integrate [**ElasticSearch**](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/brew.html) to index and search scheduled events from the database. + +
+ +## Acceptance Criteria: + +1. A search bar is added to the BuildTimetable page. +2. The search bar allows users to query scheduled events by text (e.g., course name, code, description). +3. The backend utilizes ElasticSearch to handle these queries and return results efficiently. +4. The UI displays the search results dynamically as the user types. diff --git a/content/hackthetunnels/2024-2025/challenges/26-name-timetables.md b/content/hackthetunnels/2024-2025/challenges/26-name-timetables.md new file mode 100644 index 000000000..6b56a3705 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/26-name-timetables.md @@ -0,0 +1,27 @@ +--- +id: "name-timetables" +order: 3 +title: "Save Timetable Name" +points: 4 +difficulty: Beginner Friendly +category: Frontend +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/name-timetables" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Add functionality to allow users to **save a custom name** for their timetables. This will help users identify their timetables more easily when managing multiple schedules. + +In the client, create an input field on the **BuildTimetable** page where users can enter a name for their timetable. + +Update the `createTimetable` method to use the input from that input field. + +
+ +## Acceptance Criteria: + +1. A text input field is added on the BuildTimetable page where users can enter a name for their timetable. +2. The name is saved in the backend when the timetable is created or updated. +3. The saved name is displayed when viewing or managing timetables. diff --git a/content/hackthetunnels/2024-2025/challenges/27-jwt-env-file.md b/content/hackthetunnels/2024-2025/challenges/27-jwt-env-file.md new file mode 100644 index 000000000..ef60a7492 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/27-jwt-env-file.md @@ -0,0 +1,21 @@ +--- +id: "jwt-env-file" +order: 1 +title: "Move JWT Secret to .env" +points: 3 +difficulty: Beginner Friendly +category: Security +date: 2023-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/jwt-env-file" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Currently in the codebase, the JWT secret is being hard coded... this is not good (see: `service/src/config/jwt.ts`). + +We should instead use a [`.env`](https://medium.com/@sujathamudadla1213/what-is-the-use-of-env-8d6b3eb94843) file to store sensitive information. + +## Acceptance Criteria: + +The participant instead reads the JWT secret off of the `.env` file. \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/28-improve-timetable-styling.md b/content/hackthetunnels/2024-2025/challenges/28-improve-timetable-styling.md new file mode 100644 index 000000000..514608577 --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/28-improve-timetable-styling.md @@ -0,0 +1,23 @@ +--- +id: "improve-timetable-styling" +order: 5 +title: "Improve Timetable Styling" +points: 6 +difficulty: Intermediate +category: Frontend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/improve-timetable-styling" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Improve the user experience by updating the **styling** of the [``](https://github.com/CarletonComputerScienceSociety/hack-the-tunnels-starter-2024/blob/main/client/src/components/Timetable/Timetable.tsx) component to make it more visually appealing and user-friendly. You can enhance the layout, colors, spacing, and overall design to improve clarity and usability for students. + +
+ +## Acceptance Criteria: + +The styling of the `` component is significantly improved, making it more visually appealing and easier to read. + +(so long as it looks pretty different you can give them the points) \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/29-improve-result-styling.md b/content/hackthetunnels/2024-2025/challenges/29-improve-result-styling.md new file mode 100644 index 000000000..63bf2808e --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/29-improve-result-styling.md @@ -0,0 +1,27 @@ +--- +id: "improve-result-styling" +order: 7 +title: "Improve Search Result Styling" +points: 6 +difficulty: Intermediate +category: Frontend +date: 2024-10-14T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/improve-result-styling" +layout: hack_the_tunnels_challenge +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- + +Enhance the **styling** of the "course results" on the BuildTimetable. + +This refers to the ui that displays search results for scheduled events. + +This can involve improving layout, colors, spacing, and overall design to improve clarity and visual appeal for students searching through results. + +
+ +## Acceptance Criteria: + +- The styling of the course search results are significantly different + +(so long as it looks pretty different you can give them the points) \ No newline at end of file diff --git a/content/hackthetunnels/2024-2025/challenges/_index.md b/content/hackthetunnels/2024-2025/challenges/_index.md new file mode 100644 index 000000000..62eaaf7cb --- /dev/null +++ b/content/hackthetunnels/2024-2025/challenges/_index.md @@ -0,0 +1,8 @@ +--- +title: "Hack The Tunnels Challenges" +date: 2023-10-01T23:11:13Z +draft: false +url: "/hackthetunnels/2024-2025/challenges" +layout: hack_the_tunnels_challenges +preview: "images/event_posters/2023-2024/hack_the_tunnels.jpg" +--- \ No newline at end of file diff --git a/layouts/_default/hack_the_tunnels_challenge.html b/layouts/_default/hack_the_tunnels_challenge.html new file mode 100644 index 000000000..9c257fb58 --- /dev/null +++ b/layouts/_default/hack_the_tunnels_challenge.html @@ -0,0 +1,17 @@ +{{ define "main" }} +
+
+ + + +

{{ .Title }} (Points: {{ .Params.points }})

+ +
+ {{ .Content }} +
+
+
+{{ end }} diff --git a/layouts/_default/hack_the_tunnels_challenges.html b/layouts/_default/hack_the_tunnels_challenges.html new file mode 100644 index 000000000..69d90a06d --- /dev/null +++ b/layouts/_default/hack_the_tunnels_challenges.html @@ -0,0 +1,107 @@ +{{ define "main" }} +
+
+ + + +

✨ Challenges ✨

+
+ +
+
+
+

🎨 Frontend

+ {{ range (where (where .Site.RegularPages "Section" "hackthetunnels") "Params.category" "Frontend").ByParam "order" }} +
+

{{ .Title }}

+

Points: {{ .Params.points }} • {{ .Params.difficulty }}

+
+ {{ end }} +
+
+
+

🛠️ Backend

+ {{ range (where (where .Site.RegularPages "Section" "hackthetunnels") "Params.category" "Backend").ByParam "order" }} +
+

{{ .Title }}

+

Points: {{ .Params.points }} • {{ .Params.difficulty }}

+
+ {{ end }} +
+
+
+

👨‍💻 Fullstack

+ {{ range (where (where .Site.RegularPages "Section" "hackthetunnels") "Params.category" "Fullstack").ByParam "order" }} +
+

{{ .Title }}

+

Points: {{ .Params.points }} • {{ .Params.difficulty }}

+
+ {{ end }} +
+
+
+

🔒 Security

+ {{ range (where (where .Site.RegularPages "Section" "hackthetunnels") "Params.category" "Security").ByParam "order" }} +
+

{{ .Title }}

+

Points: {{ .Params.points }} • {{ .Params.difficulty }}

+
+ {{ end }} +
+
+
+

🚢 DevOps

+ {{ range (where (where .Site.RegularPages "Section" "hackthetunnels") "Params.category" "DevOps").ByParam "order" }} +
+

{{ .Title }}

+

Points: {{ .Params.points }} • {{ .Params.difficulty }}

+
+ {{ end }} +
+
+
+

📊 Diagrams

+ {{ range (where (where .Site.RegularPages "Section" "hackthetunnels") "Params.category" "Diagrams").ByParam "order" }} +
+

{{ .Title }}

+

Points: {{ .Params.points }} • {{ .Params.difficulty }}

+
+ {{ end }} +
+
+
+{{ end }} From 6164769e3d8994705a065054281c275369ceefbd Mon Sep 17 00:00:00 2001 From: Matthew M-B Date: Tue, 15 Oct 2024 22:52:36 -0400 Subject: [PATCH 2/2] fix formatting --- layouts/_default/hack_the_tunnels_challenges.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/layouts/_default/hack_the_tunnels_challenges.html b/layouts/_default/hack_the_tunnels_challenges.html index 69d90a06d..a1f3fb9f1 100644 --- a/layouts/_default/hack_the_tunnels_challenges.html +++ b/layouts/_default/hack_the_tunnels_challenges.html @@ -10,7 +10,7 @@

✨ Challenges ✨