From 4bf6a8c8abde2bcf9e9875269106d9ada64ecfa2 Mon Sep 17 00:00:00 2001 From: mai Date: Wed, 30 Sep 2026 17:47:58 -0400 Subject: [PATCH 01/11] add ci, typecheck and build wf --- .github/workflows/ci.yml | 32 ++++++++++++++++++++++++++++++++ .gitignore | 2 ++ bun.lock | 11 +++++++++++ e2e/smoke.spec.ts | 38 ++++++++++++++++++++++++++++++++++++++ package.json | 12 +++++++++++- playwright.config.ts | 21 +++++++++++++++++++++ tsconfig.json | 2 +- 7 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 e2e/smoke.spec.ts create mode 100644 playwright.config.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..e1804fbc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,32 @@ +name: CI + +on: + pull_request: + push: + branches: [main] + +concurrency: + group: ci-${{ github.ref }} + cancel-in-progress: true + +env: + VITE_SANITY_PROJECT_ID: ci-placeholder + VITE_SANITY_DATASET: ci-placeholder + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22.18.0 + - uses: oven-sh/setup-bun@v2 + with: + bun-version-file: package.json + - run: bun install --frozen-lockfile + - run: bun run typecheck + - run: bun run build + - run: bunx playwright install --with-deps chromium + - run: bun run test:e2e + diff --git a/.gitignore b/.gitignore index 7a7fc85a..2c181f2e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ # testing /coverage +/test-results +/playwright-report # production /build diff --git a/bun.lock b/bun.lock index 1deaf50d..40dd2c45 100644 --- a/bun.lock +++ b/bun.lock @@ -15,7 +15,10 @@ }, "devDependencies": { "@oxlint/plugins": "1.86.0", + "@playwright/test": "^1.63.0", "@types/node": "^26.6.3", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.1", "eslint-plugin-react-you-might-not-need-an-effect": "^1.0.2", "husky": "^9.1.7", @@ -294,6 +297,8 @@ "@oxlint/plugins": ["@oxlint/plugins@1.86.0", "", {}, "sha512-JeAiaaRMyUiUEQHQ7zBsJn1aEdbLyt1HJsOs4XKIIlATNxcvWRrRxneZA+RF4G03cQobq3IhTqSfyLhOFv03qA=="], + "@playwright/test": ["@playwright/test@1.63.0", "", { "dependencies": { "playwright": "1.63.0" }, "bin": { "playwright": "cli.js" } }, "sha512-oxMK4vllB9RK5NQ2l1pq1IfOf2AvnEuj/vYGDj0H2nMtmtZpKtCwt/l00GEO6xjGfpBNAvjovvYdCm50dRQkpQ=="], + "@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="], "@react-aria/focus": ["@react-aria/focus@3.22.1", "", { "dependencies": { "@swc/helpers": "^0.5.0", "react-aria": "^3.48.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, "sha512-CPxtkyrBi/HYY5P3lE/57sQ6qfa0lN8E55TOm89H0kNGv0lKt+/0zP7lWERzBjRr5IxBVrQX4gFEowBN52LPaA=="], @@ -392,6 +397,8 @@ "@types/react": ["@types/react@19.3.0", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-N0rFCuH9YoxG9/m61l9MfpJKfmLOVU0em7ipIz6TRgSSkvReLB9vL85GB+yr8Bs5leqpvg96JSwF4ZS1s4viQg=="], + "@types/react-dom": ["@types/react-dom@19.3.0", "", { "peerDependencies": { "@types/react": "^19.3.0" } }, "sha512-ZI7bU42mZXXKHn/qNLEw2IrbiINU7X5+vfgdixBHkCNpYWXjKgfQ/P+uyGb5CjOLB9UcnTeg3rylQtV2hym44Q=="], + "@types/react-transition-group": ["@types/react-transition-group@4.4.12", "", { "peerDependencies": { "@types/react": "*" } }, "sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w=="], "@types/warning": ["@types/warning@3.0.4", "", {}, "sha512-CqN8MnISMwQbLJXO3doBAV4Yw9hx9/Pyr2rZ78+NfaCnhyRA/nKrpyk6E7mKw17ZOaQdLpK9GiUjrqLzBlN3sg=="], @@ -732,6 +739,10 @@ "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], + "playwright": ["playwright@1.63.0", "", { "dependencies": { "playwright-core": "1.63.0" }, "bin": { "playwright": "cli.js" } }, "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg=="], + + "playwright-core": ["playwright-core@1.63.0", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg=="], + "postcss": ["postcss@8.5.28", "", { "dependencies": { "nanoid": "^3.3.18", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A=="], "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], diff --git a/e2e/smoke.spec.ts b/e2e/smoke.spec.ts new file mode 100644 index 00000000..5a97c33c --- /dev/null +++ b/e2e/smoke.spec.ts @@ -0,0 +1,38 @@ +import { expect, test } from '@playwright/test'; + +const routes = [ + '/', + '/apply', + '/culture', + '/teams', + '/projects', + '/teams-expanded/management', + '/teams-expanded/operations', + '/teams-expanded/software', + '/teams-expanded/hardware', + '/teams-expanded/engagement', + '/positions/software/0', + '/positions/hardware/0', +]; + +test.beforeEach(async ({ page }) => { + await page.route(/\.sanity\.io\//, route => route.fulfill({ json: { result: [] } })); +}); + +for (const path of routes) { + test(`${path} renders without errors`, async ({ page }) => { + const errors: string[] = []; + + page.on('pageerror', error => errors.push(error.message)); + page.on('console', message => { + if (message.type() === 'error') { + errors.push(message.text()); + } + }); + + await page.goto(path, { waitUntil: 'networkidle' }); + + await expect(page.locator('#root')).not.toBeEmpty(); + expect(errors).toEqual([]); + }); +} diff --git a/package.json b/package.json index a4f220da..53979e0a 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "build": "vite build", "preview": "vite preview", "test": "vitest --passWithNoTests", + "test:e2e": "playwright test", + "typecheck": "tsc", "knip": "knip", "knip:fix": "knip --fix", "lint": "oxlint", @@ -27,7 +29,10 @@ }, "devDependencies": { "@oxlint/plugins": "1.86.0", + "@playwright/test": "^1.63.0", "@types/node": "^26.6.3", + "@types/react": "^19.3.0", + "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.1", "eslint-plugin-react-you-might-not-need-an-effect": "^1.0.2", "husky": "^9.1.7", @@ -40,5 +45,10 @@ "vite": "^8.2.2", "vite-plugin-svgr": "^5.2.0", "vitest": "^5.0.2" - } + }, + "engines": { + "bun": ">=1.4.2", + "node": ">=22.18.0" + }, + "packageManager": "bun@1.4.2" } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..847b43de --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,21 @@ +import { defineConfig, devices } from '@playwright/test'; + +const port = 4173; + +export default defineConfig({ + testDir: 'e2e', + forbidOnly: Boolean(process.env.CI), + retries: process.env.CI ? 1 : 0, + use: { + baseURL: `http://localhost:${port}`, + }, + projects: [ + { name: 'desktop', use: { ...devices['Desktop Chrome'] } }, + { name: 'mobile', use: { ...devices['Pixel 7'] } }, + ], + webServer: { + command: `bunx vite build && bunx vite preview --port ${port} --strictPort`, + url: `http://localhost:${port}`, + reuseExistingServer: !process.env.CI, + }, +}); diff --git a/tsconfig.json b/tsconfig.json index 9474a888..3ae65ca5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,5 +14,5 @@ "isolatedModules": true, "types": ["vite/client", "vite-plugin-svgr/client"] }, - "include": ["src", "vite.config.ts", "oxlint.config.ts"] + "include": ["src", "e2e", "vite.config.ts", "oxlint.config.ts", "playwright.config.ts"] } From 240d6a19c22f91b57aef526f1162e1689282a8c7 Mon Sep 17 00:00:00 2001 From: mai Date: Wed, 30 Sep 2026 18:49:30 -0400 Subject: [PATCH 02/11] build: pin bun on Netlify and use repo vars in CI --- .github/workflows/ci.yml | 4 ++-- netlify.toml | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 netlify.toml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e1804fbc..2c90e65c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,8 +10,8 @@ concurrency: cancel-in-progress: true env: - VITE_SANITY_PROJECT_ID: ci-placeholder - VITE_SANITY_DATASET: ci-placeholder + VITE_SANITY_PROJECT_ID: ${{ vars.VITE_SANITY_PROJECT_ID || 'ci-placeholder' }} + VITE_SANITY_DATASET: ${{ vars.VITE_SANITY_DATASET || 'ci-placeholder' }} jobs: check: diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 00000000..a7405332 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,2 @@ +[build.environment] + BUN_VERSION = "1.4.2" From 4b699ac13e9de00e02093eb66ad5fb6a171dd447 Mon Sep 17 00:00:00 2001 From: mai Date: Wed, 30 Sep 2026 19:04:51 -0400 Subject: [PATCH 03/11] migrate data files and core helpers to ts --- src/assets/constants.js | 4 - src/assets/constants.ts | 6 + src/{client.js => client.ts} | 3 +- src/component/ExternalRedirect.jsx | 9 - src/component/ExternalRedirect.tsx | 14 ++ src/component/ScrollToTop.js | 13 -- src/component/ScrollToTop.tsx | 13 ++ src/data/ApplyData/allApps.js | 16 -- src/data/ApplyData/allApps.ts | 26 +++ src/data/ApplyData/{clients.js => clients.ts} | 12 +- .../{engagement.js => engagement.ts} | 62 +++--- .../ApplyData/{hardware.js => hardware.ts} | 49 +++-- src/data/ApplyData/operations.js | 150 --------------- src/data/ApplyData/operations.ts | 178 ++++++++++++++++++ .../ApplyData/{software.js => software.ts} | 75 ++++---- src/data/ApplyData/types.ts | 13 ++ src/data/teamPageDetails.js | 57 ------ src/data/teamPageDetails.ts | 56 ++++++ ...andedTeamsJSON.js => ExpandedTeamsJSON.ts} | 91 ++++----- .../JSONFiles/{RolesJSON.js => RolesJSON.ts} | 168 ++++++++--------- ...hatYouLearnJSON.js => WhatYouLearnJSON.ts} | 26 +-- src/services/useSanity.js | 21 --- src/services/useSanity.ts | 26 +++ src/shared/useWebsite.js | 20 -- src/shared/useWebsite.ts | 21 +++ 25 files changed, 608 insertions(+), 521 deletions(-) delete mode 100644 src/assets/constants.js create mode 100644 src/assets/constants.ts rename src/{client.js => client.ts} (70%) delete mode 100644 src/component/ExternalRedirect.jsx create mode 100644 src/component/ExternalRedirect.tsx delete mode 100644 src/component/ScrollToTop.js create mode 100644 src/component/ScrollToTop.tsx delete mode 100644 src/data/ApplyData/allApps.js create mode 100644 src/data/ApplyData/allApps.ts rename src/data/ApplyData/{clients.js => clients.ts} (95%) rename src/data/ApplyData/{engagement.js => engagement.ts} (51%) rename src/data/ApplyData/{hardware.js => hardware.ts} (85%) delete mode 100644 src/data/ApplyData/operations.js create mode 100644 src/data/ApplyData/operations.ts rename src/data/ApplyData/{software.js => software.ts} (85%) create mode 100644 src/data/ApplyData/types.ts delete mode 100644 src/data/teamPageDetails.js create mode 100644 src/data/teamPageDetails.ts rename src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/{ExpandedTeamsJSON.js => ExpandedTeamsJSON.ts} (90%) rename src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/{RolesJSON.js => RolesJSON.ts} (94%) rename src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/{WhatYouLearnJSON.js => WhatYouLearnJSON.ts} (92%) delete mode 100644 src/services/useSanity.js create mode 100644 src/services/useSanity.ts delete mode 100644 src/shared/useWebsite.js create mode 100644 src/shared/useWebsite.ts diff --git a/src/assets/constants.js b/src/assets/constants.js deleted file mode 100644 index d531269e..00000000 --- a/src/assets/constants.js +++ /dev/null @@ -1,4 +0,0 @@ -export const constants = { - Position_Software_Client : 'https://docs.google.com/forms/d/e/1FAIpQLSfWrQlG1ewhGAtKYrVyLVmTQ4KPdm99j9lwm049UywL-yhL9w/viewform?usp=sf_link', - Position_Hardware_Client : 'https://docs.google.com/forms/d/e/1FAIpQLSc7TVI0FmZG6DujNi2GLEUeyGBQYlhAGtFUyf5AXzLIB0mF9Q/viewform?usp=sf_link' -} \ No newline at end of file diff --git a/src/assets/constants.ts b/src/assets/constants.ts new file mode 100644 index 00000000..d823890b --- /dev/null +++ b/src/assets/constants.ts @@ -0,0 +1,6 @@ +export const constants = { + Position_Software_Client: + 'https://docs.google.com/forms/d/e/1FAIpQLSfWrQlG1ewhGAtKYrVyLVmTQ4KPdm99j9lwm049UywL-yhL9w/viewform?usp=sf_link', + Position_Hardware_Client: + 'https://docs.google.com/forms/d/e/1FAIpQLSc7TVI0FmZG6DujNi2GLEUeyGBQYlhAGtFUyf5AXzLIB0mF9Q/viewform?usp=sf_link', +}; diff --git a/src/client.js b/src/client.ts similarity index 70% rename from src/client.js rename to src/client.ts index bb5927e9..99d573b4 100644 --- a/src/client.js +++ b/src/client.ts @@ -1,5 +1,6 @@ import { createClient } from '@sanity/client'; import imageUrlBuilder from '@sanity/image-url'; +import type { ImageUrlBuilder, SanityImageSource } from '@sanity/image-url'; export const client = createClient({ projectId: import.meta.env.VITE_SANITY_PROJECT_ID, @@ -10,6 +11,6 @@ export const client = createClient({ const builder = imageUrlBuilder(client); -export const urlFor = source => { +export const urlFor = (source: SanityImageSource): ImageUrlBuilder => { return builder.image(source); }; diff --git a/src/component/ExternalRedirect.jsx b/src/component/ExternalRedirect.jsx deleted file mode 100644 index 87b48323..00000000 --- a/src/component/ExternalRedirect.jsx +++ /dev/null @@ -1,9 +0,0 @@ -import { useEffect } from 'react' - -export default function ExternalRedirect({ to }) { - useEffect(() => { - window.location.href = to - }, [to]) - - return <> -} diff --git a/src/component/ExternalRedirect.tsx b/src/component/ExternalRedirect.tsx new file mode 100644 index 00000000..949af3b0 --- /dev/null +++ b/src/component/ExternalRedirect.tsx @@ -0,0 +1,14 @@ +import { useEffect } from 'react'; +import type { JSX } from 'react'; + +type ExternalRedirectProps = { + to: string; +}; + +export default function ExternalRedirect({ to }: ExternalRedirectProps): JSX.Element { + useEffect(() => { + window.location.href = to; + }, [to]); + + return <>; +} diff --git a/src/component/ScrollToTop.js b/src/component/ScrollToTop.js deleted file mode 100644 index 8bb9e4c7..00000000 --- a/src/component/ScrollToTop.js +++ /dev/null @@ -1,13 +0,0 @@ -import { useEffect } from "react"; -import { useLocation } from "react-router-dom"; - - -export default function ScrollToTop() { - const { pathName } = useLocation; - - useEffect(() => { - window.scrollTo(0, 0); - }, [pathName]); - - return null; -} \ No newline at end of file diff --git a/src/component/ScrollToTop.tsx b/src/component/ScrollToTop.tsx new file mode 100644 index 00000000..e485cbc1 --- /dev/null +++ b/src/component/ScrollToTop.tsx @@ -0,0 +1,13 @@ +import { useEffect } from 'react'; +import { useLocation } from 'react-router-dom'; + +export default function ScrollToTop(): null { + // @ts-expect-error -- known bug: useLocation is never called, so pathName is always undefined + const { pathName } = useLocation; + + useEffect(() => { + window.scrollTo(0, 0); + }, [pathName]); + + return null; +} diff --git a/src/data/ApplyData/allApps.js b/src/data/ApplyData/allApps.js deleted file mode 100644 index 03bd9284..00000000 --- a/src/data/ApplyData/allApps.js +++ /dev/null @@ -1,16 +0,0 @@ -import Clients from './clients' -import Engagement from './engagement' -import Hardware from './hardware' -import Operations from './operations' -import Software from './software' - -const applicationsByTeams = { - clients: Clients, - hardware: Hardware, - software: Software, - operations: Operations, - management: [], - engagement: Engagement, -} - -export default applicationsByTeams diff --git a/src/data/ApplyData/allApps.ts b/src/data/ApplyData/allApps.ts new file mode 100644 index 00000000..7e7151f3 --- /dev/null +++ b/src/data/ApplyData/allApps.ts @@ -0,0 +1,26 @@ +import Clients from './clients'; +import Engagement from './engagement'; +import Hardware from './hardware'; +import Operations from './operations'; +import Software from './software'; +import type { Position } from './types'; + +type ApplicationsByTeams = { + clients: Position[]; + hardware: Position[]; + software: Position[]; + operations: Position[]; + management: Position[]; + engagement: Position[]; +}; + +const applicationsByTeams: ApplicationsByTeams = { + clients: Clients, + hardware: Hardware, + software: Software, + operations: Operations, + management: [], + engagement: Engagement, +}; + +export default applicationsByTeams; diff --git a/src/data/ApplyData/clients.js b/src/data/ApplyData/clients.ts similarity index 95% rename from src/data/ApplyData/clients.js rename to src/data/ApplyData/clients.ts index e153d1d9..06a15c77 100644 --- a/src/data/ApplyData/clients.js +++ b/src/data/ApplyData/clients.ts @@ -1,4 +1,6 @@ -const Clients = [ +import type { Position } from './types'; + +const Clients: Position[] = [ { positionTitle: 'Client', categoryType: 'Clients', @@ -15,8 +17,8 @@ const Clients = [ remarks: 'The position begins and ends with the Northeastern academic semester. The last day to apply is November 17th.', applicationLink: - 'https://docs.google.com/forms/d/e/1FAIpQLSd8PPVmILgy92GdVZCn8cYm1sSgsnKZVxnaNDxA8KKL1JxYSg/viewform?usp=sharing' - } + 'https://docs.google.com/forms/d/e/1FAIpQLSd8PPVmILgy92GdVZCn8cYm1sSgsnKZVxnaNDxA8KKL1JxYSg/viewform?usp=sharing', + }, //this is a bogus app for testing purposes, delete later // { // positionTitle: 'Client Two', @@ -31,6 +33,6 @@ const Clients = [ // remarks: 'The position begins and ends with the Northeastern academic semester. The last day to apply is November 10th.', // applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSd8PPVmILgy92GdVZCn8cYm1sSgsnKZVxnaNDxA8KKL1JxYSg/viewform?usp=sharing' // } -] +]; -export default Clients +export default Clients; diff --git a/src/data/ApplyData/engagement.js b/src/data/ApplyData/engagement.ts similarity index 51% rename from src/data/ApplyData/engagement.js rename to src/data/ApplyData/engagement.ts index 93f496c6..893634dc 100644 --- a/src/data/ApplyData/engagement.js +++ b/src/data/ApplyData/engagement.ts @@ -1,12 +1,18 @@ -const remarks = "Please note that these positions are in-person, semester-long roles and begin in early January with an expected time commitment of 10 hrs/week.\nApplications close December 13th at 11:59pm"; +import type { Position } from './types'; + +const remarks = + 'Please note that these positions are in-person, semester-long roles and begin in early January with an expected time commitment of 10 hrs/week.\nApplications close December 13th at 11:59pm'; + const startDate = '1/1/2024'; + const endDate = '4/19/2024'; -const Engagement = [ +const Engagement: Position[] = [ { positionTitle: 'Social Media Manager', categoryType: 'Engagement', - description: "As Social Media Manager, you'll work with the content team to create weekly social media posts, SMS blasts, and brainstorm new ideas to increase engagement!", + description: + "As Social Media Manager, you'll work with the content team to create weekly social media posts, SMS blasts, and brainstorm new ideas to increase engagement!", responsibilities: 'They are the owner of digital communications through Instagram, LinkedIn, and Facebook.', requirements: '', startDate: startDate, @@ -14,12 +20,14 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLScIodICkaQbA1rMfrKb2kKF4q-F2atLExaCUTjlf9st30NOEg/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLScIodICkaQbA1rMfrKb2kKF4q-F2atLExaCUTjlf9st30NOEg/viewform?usp=sf_link', }, { positionTitle: 'Photographer', categoryType: 'Engagement', - description: "As Photographer/Videographer you'll work with the content team to create photo and video content on a regular basis and at larger events as well as brainstorm new ideas to increase engagement!", + description: + "As Photographer/Videographer you'll work with the content team to create photo and video content on a regular basis and at larger events as well as brainstorm new ideas to increase engagement!", responsibilities: 'Responsible for documenting the semester, attending weekly meetings and events to do so.', requirements: '', startDate: startDate, @@ -27,7 +35,8 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeJlkgjYneZ0WsggQdzRax7MPiKUWrUcALUMhPi_5XQcb1YAQ/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSeJlkgjYneZ0WsggQdzRax7MPiKUWrUcALUMhPi_5XQcb1YAQ/viewform?usp=sf_link', }, // { // positionTitle: 'Videographer', @@ -45,7 +54,8 @@ const Engagement = [ { positionTitle: 'Brand Designer', categoryType: 'Engagement', - description: "The Brand Designer is responsible for creating high-quality collateral that members across the organization can use to promote our workshops, community events, and other initiatives. ", + description: + 'The Brand Designer is responsible for creating high-quality collateral that members across the organization can use to promote our workshops, community events, and other initiatives. ', responsibilities: 'Types of projects include branding, posters, merchandise, and social media graphics!', requirements: '', startDate: startDate, @@ -53,38 +63,45 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdKBDAJkzeA-Ds-r3f2jyyKp3Eg4v8Op_47jwA957FccSmDKA/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdKBDAJkzeA-Ds-r3f2jyyKp3Eg4v8Op_47jwA957FccSmDKA/viewform?usp=sf_link', }, { positionTitle: 'Copywriter', categoryType: 'Engagement', - description: "The copy writter developes and refines the voice of Generate across all of our written work", - responsibilities: "As Copywriter, you'll work on writing blog posts, copy for our newsletter, and collaborating with the Social Media Manager to help write social media messages to reach newer audiences. ", + description: 'The copy writter developes and refines the voice of Generate across all of our written work', + responsibilities: + "As Copywriter, you'll work on writing blog posts, copy for our newsletter, and collaborating with the Social Media Manager to help write social media messages to reach newer audiences. ", requirements: '', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSf2__rqdzOW2y2mWfjb1WkrroiFgxgeimqduEZ-vZAuFchLsg/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSf2__rqdzOW2y2mWfjb1WkrroiFgxgeimqduEZ-vZAuFchLsg/viewform?usp=sf_link', }, { positionTitle: 'Event Coordinator', categoryType: 'Engagement', - description: "The Event Coordinators are responsible for engaging the Generate community and supporting the overall happiness of Generate members. ", - responsibilities: "As an Events Coordinator, you will oversee community events, ranging from field day to Showcase, and find ways to bring Generate members together through spirit, collaboration, boldness, and curiosity.", + description: + 'The Event Coordinators are responsible for engaging the Generate community and supporting the overall happiness of Generate members. ', + responsibilities: + 'As an Events Coordinator, you will oversee community events, ranging from field day to Showcase, and find ways to bring Generate members together through spirit, collaboration, boldness, and curiosity.', requirements: '', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLScfwXD3WtJ7cQeCm-KdGQF8ypdMtsD0hh3Tz3ImQoj3Xma4Ww/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLScfwXD3WtJ7cQeCm-KdGQF8ypdMtsD0hh3Tz3ImQoj3Xma4Ww/viewform?usp=sf_link', }, { positionTitle: 'Relations Specialist', categoryType: 'Engagement', - description: "The relations team works with prospective clients and members, other organizations around the Northeastern ecosystem, and our own members! We strive to build the best culture in the organizations and portray Generate in a positive light throughout all channels. ", + description: + 'The relations team works with prospective clients and members, other organizations around the Northeastern ecosystem, and our own members! We strive to build the best culture in the organizations and portray Generate in a positive light throughout all channels. ', responsibilities: "Engage with members, the greater northeastern community, and more to spread Generate's message", requirements: '', startDate: startDate, @@ -92,7 +109,8 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdsAIKm9Q2W16wgZ9kiX0Jtj8VQWhI5cO5jz4vaPhk2R9pMaQ/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdsAIKm9Q2W16wgZ9kiX0Jtj8VQWhI5cO5jz4vaPhk2R9pMaQ/viewform?usp=sf_link', }, { positionTitle: 'Relations Lead', @@ -107,7 +125,8 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdkBkEw11NnBc-O0AZo8CjuhDb4_2Qi75qPAJXxKwfUuMjHtg/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdkBkEw11NnBc-O0AZo8CjuhDb4_2Qi75qPAJXxKwfUuMjHtg/viewform?usp=sf_link', }, { positionTitle: 'Events Lead', @@ -120,7 +139,7 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: '' + applicationLink: '', }, { positionTitle: 'Content Lead', @@ -133,9 +152,8 @@ const Engagement = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: '' + applicationLink: '', }, +]; -] - -export default Engagement +export default Engagement; diff --git a/src/data/ApplyData/hardware.js b/src/data/ApplyData/hardware.ts similarity index 85% rename from src/data/ApplyData/hardware.js rename to src/data/ApplyData/hardware.ts index 831b318e..ebf2495e 100644 --- a/src/data/ApplyData/hardware.js +++ b/src/data/ApplyData/hardware.ts @@ -1,37 +1,46 @@ -const remarks = "Please note that these positions are in-person, semester-long roles and begin in September with an expected time commitment of 5-8 hours/week. Applications close August 9 at 11:59pm. Please contact me (damato.j@northeastern.edu or @JoJo on the Sherman Center Slack) with any questions or concerns!"; +import type { Position } from './types'; + +const remarks = + 'Please note that these positions are in-person, semester-long roles and begin in September with an expected time commitment of 5-8 hours/week. Applications close August 9 at 11:59pm. Please contact me (damato.j@northeastern.edu or @JoJo on the Sherman Center Slack) with any questions or concerns!'; + const startDate = '1/1/2024'; + const endDate = '4/19/2024'; -const Hardware = [ +const Hardware: Position[] = [ { positionTitle: 'Hardware Engineer', categoryType: 'Hardware', description: - "Mechanical Hardware Engineers will focus on designing, testing, and prototyping mechanical concepts such as part design, design for manufacturing, 3D printing, motor integration, etc. with the team. Electrical Hardware Engineers focus on designing, testing, and prototyping electronic concepts such as electromechanical integration, control and sensor systems, PCB design, etc. All engineers focus on greater development of their client project and deliverables.", + 'Mechanical Hardware Engineers will focus on designing, testing, and prototyping mechanical concepts such as part design, design for manufacturing, 3D printing, motor integration, etc. with the team. Electrical Hardware Engineers focus on designing, testing, and prototyping electronic concepts such as electromechanical integration, control and sensor systems, PCB design, etc. All engineers focus on greater development of their client project and deliverables.', responsibilities: - "Hardware engineers are key members of the organization who make up the majority of our four unique project teams. The role is an opportunity for growth at all levels, whether starting out your engineering career or developing advanced skills and techniques.", - requirements: "Attends all team meetings, communicates well, and completes work outside of meetings. Brings a curious mind and excited attitude to the table regardless of prior experience level. Is interested in the greater Generate community beyond just their project team. They are a strong team-player with positive time management and organizational skills.", + 'Hardware engineers are key members of the organization who make up the majority of our four unique project teams. The role is an opportunity for growth at all levels, whether starting out your engineering career or developing advanced skills and techniques.', + requirements: + 'Attends all team meetings, communicates well, and completes work outside of meetings. Brings a curious mind and excited attitude to the table regardless of prior experience level. Is interested in the greater Generate community beyond just their project team. They are a strong team-player with positive time management and organizational skills.', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdrzsBXGnfznjbbThXbH5E_nLZxgpFdKSLcAHia7JvSK4tMJw/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdrzsBXGnfznjbbThXbH5E_nLZxgpFdKSLcAHia7JvSK4tMJw/viewform?usp=sf_link', }, { positionTitle: 'Industrial Designer', categoryType: 'Hardware', description: - "Industrial Designers on project teams focus on a variety of design-related things depending on the client and project they are assigned to. Tasks may include but are not limited to branding design, GUI development, material selection, design of a chassis/housing/etc., rendering and animations, and more.", + 'Industrial Designers on project teams focus on a variety of design-related things depending on the client and project they are assigned to. Tasks may include but are not limited to branding design, GUI development, material selection, design of a chassis/housing/etc., rendering and animations, and more.', responsibilities: "Industrial Designers are key members of the organization who bring client's aesthetic visions for their products to life in conjunction with the engineering teams. The role is an opportunity for growth at all levels, whether starting out your design career or developing advanced skills and techniques.", - requirements: "Attends all team meetings, communicates well, and completes work outside of meetings. Brings a curious mind and excited attitude to the table regardless of prior experience level. Is interested in the greater Generate community beyond just their project team. They are a strong team-player with positive time management and organizational skills.", + requirements: + 'Attends all team meetings, communicates well, and completes work outside of meetings. Brings a curious mind and excited attitude to the table regardless of prior experience level. Is interested in the greater Generate community beyond just their project team. They are a strong team-player with positive time management and organizational skills.', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSccY9rhVJz9srVMPSKYGsC9xLIr5Jr_mRdgbBoIwM_3l-VeRw/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSccY9rhVJz9srVMPSKYGsC9xLIr5Jr_mRdgbBoIwM_3l-VeRw/viewform?usp=sf_link', }, { positionTitle: 'Lead Mechanical Engineer', @@ -47,7 +56,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/W4uxEDTLiZbAPTEn7' + applicationLink: 'https://forms.gle/W4uxEDTLiZbAPTEn7', }, { positionTitle: 'Lead Electrical Engineer', @@ -61,7 +70,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/W4uxEDTLiZbAPTEn7' + applicationLink: 'https://forms.gle/W4uxEDTLiZbAPTEn7', }, { positionTitle: 'Chief Lead', @@ -77,7 +86,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/d5neFKZZFEMHoYGp6' + applicationLink: 'https://forms.gle/d5neFKZZFEMHoYGp6', }, { positionTitle: 'Chief Electrical Engineer', @@ -93,7 +102,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16' + applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { positionTitle: 'Chief Mechanical Engineer', @@ -109,7 +118,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16' + applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { positionTitle: 'Chief Computer Engineer', @@ -125,7 +134,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16' + applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { positionTitle: 'Chief Industrial Designer', @@ -141,7 +150,7 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16' + applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { positionTitle: 'Project Lead', @@ -157,8 +166,8 @@ const Hardware = [ workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://forms.gle/WoESCr6f9GB7fSky7' - } -] + applicationLink: 'https://forms.gle/WoESCr6f9GB7fSky7', + }, +]; -export default Hardware +export default Hardware; diff --git a/src/data/ApplyData/operations.js b/src/data/ApplyData/operations.js deleted file mode 100644 index 9c9a0353..00000000 --- a/src/data/ApplyData/operations.js +++ /dev/null @@ -1,150 +0,0 @@ -const remarks = "Please note that these positions are in-person, semester-long roles and begin in early January with an expected time commitment of 10 hrs/week. Please contact operations@generatenu.com or @Sam Yip on Sherman Center Slack with any questions or concerns.\nApplications close December 13th at 11:59pm"; -const startDate = '1/1/2024'; -const endDate = '4/19/2024'; - -const Operations = [ - - { - positionTitle: 'Corporate Partnerships Coordinator', - categoryType: 'Operations', - description: "The role of the Corporate Partnership Coordinator is to foster mutually beneficial relationships between Generate and potential employers and corporate sponsors.\n\nThe Coordinator will collaborate with members from Generate's Engagement team as well as Sherman Center staff to foster external relationships.", - responsibilities: "Developmenting professional relationships with corporate/external companies. Communicating with recruiters and other professionals. ", - requirements: "The ideal candidate has confident and professional communication skills, and is creative and self-motivated, coming up with new and exciting methods to create meaningful corporate relationships.", - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdRGd12UHhCOdLiDeVSjuSDiDnjv2pkL7UJ-QViYCf0zXp44A/viewform?usp=sf_link' - }, - { - positionTitle: 'Data Engineer', - categoryType: 'Operations', - description: "Data Engineers play a vital role within the Data and Strategy Team, serving as the backbone of our data-driven operations. This role works with the Data & Strategy Lead to implement data models that support our analytical projects. ", - responsibilities: "Responsibilities for this role include designing and developing data pipelines, performing data cleansing and validation, and developing/maintaining data documentation. This role is an opportunity to utilize your technical expertise within an entrepreneurial setting.", - requirements: "Previous experience using programming languages. Ability to effectively communicate. ", - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSfuZjasfFVrp6fuLCMKq-RGRJDro81-HB3GZMvWqiCl1qzdDQ/viewform?usp=sf_link' - }, - { - positionTitle: 'Member Development Specialist', - categoryType: 'Operations', - description: "The role of the Member Development Specialist is to create methods of active reflection and acknowledgment of members' personal and professional growth, as well as advise on how to put this growth into digestible words for resumes and interviews.\n\nThe specialist will implement new templates and systems for advisement of writing resumes, preparing for interviews, and overall self-recognition of the growth and leadership in individual Generate members experience. This might come in the form of creating and executing workshops and mock interviews, creating systems for 1:1 mentoring in these areas, or implementing completely new ideas!", - responsibilities: "Develop initiatives and resources for current and future Generate leaders. Build upon the current system that facilities and encourages the growth of our members.", - requirements: "The ideal candidate has impressive interpersonal skills, a passion for mentorship, and is creative and self-motivated, coming up with new and exciting methods to foster active acknowledgment of member growth.", - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdgWvDtFCb8FDOJJLd62bbnmUhgf6QR1ZdDP3thlq5ljD5CFg/viewform?usp=sf_link' - }, - { - positionTitle: 'Financial Analyst', - categoryType: 'Operations', - description: "The Financial Analyst works hand-in-hand with the Sherman Center's Director, Generate's Operations Director, and Generate's Operational Support Lead. This role is responsible for all Generate purchasing and creating and monitoring the budget. As a result, they must ensure that all teams in Generate have the necessary supplies to complete their initiatives throughout the semester and are aware of and following their budget. In order to ensure steady and successful team progression, the Financial Analyst is responsible for tracking orders on a regular schedule and managing and developing relationships with external vendors.", - responsibilities: "Order all needed supplies and materials needed for projects, member development, events, etc. Oversee the budget of the organization and maintain the spending habits of each team. ", - requirements: "Must have prior experience managing finances. Will be evaluated and further interviewed by the Sherman Center Director.", - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeAs4ugY3xjaJ_0GdFlwqDsIvzi7vR0mfTKtZq0IByQinSpPQ/viewform?usp=sf_link' - }, - // { - // positionTitle: 'Archive Analyst', - // categoryType: 'Operations', - // description: '', - // responsibilities: '', - // requirements: '', - // startDate: startDate, - // endDate: endDate, - // workCommitment: 10, - // active: false, - // remarks: remarks, - // applicationLink: '' - // }, - - { - positionTitle: 'Tech Operations Consultant', - categoryType: 'Operations', - description: "The Tech Operations Consultant is responsible for improving and streamlining Generates Operations as a whole. You will play a pivotal role in analyzing the organization's functionality, integrating new technologies, improving workflows and, enhancing efficiency in processes in the organization. With dedication to driving efficiency and fostering collaboration, as a Tech Operations Consultant, you will contribute significantly to Generates success as a dynamic, tech-forward student organization, fostering innovation and growth.", - responsibilities: "Oversee the management of our space booking software, enabling members to maximize its potential. ", - requirements: "Flexible and adaptability. Creative thinking ", - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLScvNWF5YuMa-IZhIup5V4Y5JJ2zpDi12NtAzakHPurwZHp9TA/viewform?usp=sf_link' - }, - - { - positionTitle: 'Technical Writer', - categoryType: 'Operations', - description: "The Technical Writer role is responsible for improving and streamlining our internal documents and forms. You will play a pivotal role in ensuring the efficiency and consistency of our internal processes through the creation of user-friendly templates. Additionally, the Technical Writer will be responsible for researching and compiling best practices for the creation of internal documents.", - responsibilities: "Organize and maintain the progress of internal documentation. Centralizing any Generate wide resources and information. ", - requirements: "Ability to think creatively and demonstrate organization skills.", - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSfnWMqtajHFHbQ43L09KT4QIZ8fiHF4zr_aR_YsekpUXyNdBw/viewform?usp=sf_link' - }, - { - positionTitle: 'Data & Strategy Lead', - categoryType: 'Operations', - description: - 'The Data & Strategy Lead cultivates ways on data acquisition, data analyzing and presenting this data in a useful and informative manner. This person will work to coordinate data engineers and business analysts in the execution of existing recurring projects, as well as aid in the conceptualization of new projects. The Data & Strategy Lead will spend their time leading and supporting their direct reports, establishing the goals and direction of the Data & Strategy team as well as carrying out the goals of the Operations side of the organization, observing the processes of Generate teams and aiding in their improvement when possible.', - responsibilities: - 'The Data & Strategy Lead will facilitate weekly meetings and regular check-ins with the members of the Data & Strategy team as well as use their expertise to conceptualize and oversee projects that will provide even greater improvement in Generate as an organization', - requirements: - 'Previous experience using Tableu, Python, SQL, AWS, or Git.The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSfZ6sGNtUQr3SkzXx7f1VcJkXNlYUceWZcNk5Vj_2eyQ_Kscw/viewform?usp=sf_link' - }, - { - positionTitle: 'Organizational Development Lead', - categoryType: 'Operations', - description: - 'As the Organization Development Lead you will work to make Generate an increasingly more diverse, inclusive, and equitable community through a variety of initiatives. In this role you will work to ensure that Generate members feel included and feel like they belong in the community, as well as fostering a place where members can grow both professionally and personally.', - responsibilities: - 'Collect and evaluate feedback from previous and current semesters to understand the diversity, equity, and inclusion of the community, as well as determining the needs of the community and where and how as a community we can grow. Maintaining and building initiatives that fosters the belonging, diversity, equity, and inclusion of team members in Generate', - requirements: - 'The ideal candidate has confident and professional communication skills, and is creative and self-motivated, looking for new ways to further the growth of the organization and members.The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdceh_MFnbmaW7XiDY-n2H7uE8NHwuElyjy0tBUafoqCyBZqQ/viewform?usp=sf_link' - }, - { - positionTitle: 'Operational Support Lead', - categoryType: 'Operations', - description: - "The Operational Support Lead strives to enhance the experience of Generate members working in the build studio through the improvement of Generate's resources and processes and through the maintenance of said resources and processes.", - responsibilities: - 'Identifying and addressing challenges for Generate that relate to experiences of working within the Build Studio physically and digitally.Maintaining existing processes for the Build Studio, including purchasing, organization, inventory, etc.Coordinating with organizations on campus and other Generate teams to develop internal trainings related to the Build Studio.Empower team members to work to achieve their personal and professional goals', - requirements: - 'The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture. Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, - workCommitment: 10, - active: false, - remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdtp1IkFRnrOYa-m3smhYo7ss-bNjrvbFNoxhuyrWKKS4zx2A/viewform?usp=sf_link' - }, -] - -export default Operations diff --git a/src/data/ApplyData/operations.ts b/src/data/ApplyData/operations.ts new file mode 100644 index 00000000..2f8a0f64 --- /dev/null +++ b/src/data/ApplyData/operations.ts @@ -0,0 +1,178 @@ +import type { Position } from './types'; + +const remarks = + 'Please note that these positions are in-person, semester-long roles and begin in early January with an expected time commitment of 10 hrs/week. Please contact operations@generatenu.com or @Sam Yip on Sherman Center Slack with any questions or concerns.\nApplications close December 13th at 11:59pm'; + +const startDate = '1/1/2024'; + +const endDate = '4/19/2024'; + +const Operations: Position[] = [ + { + positionTitle: 'Corporate Partnerships Coordinator', + categoryType: 'Operations', + description: + "The role of the Corporate Partnership Coordinator is to foster mutually beneficial relationships between Generate and potential employers and corporate sponsors.\n\nThe Coordinator will collaborate with members from Generate's Engagement team as well as Sherman Center staff to foster external relationships.", + responsibilities: + 'Developmenting professional relationships with corporate/external companies. Communicating with recruiters and other professionals. ', + requirements: + 'The ideal candidate has confident and professional communication skills, and is creative and self-motivated, coming up with new and exciting methods to create meaningful corporate relationships.', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdRGd12UHhCOdLiDeVSjuSDiDnjv2pkL7UJ-QViYCf0zXp44A/viewform?usp=sf_link', + }, + { + positionTitle: 'Data Engineer', + categoryType: 'Operations', + description: + 'Data Engineers play a vital role within the Data and Strategy Team, serving as the backbone of our data-driven operations. This role works with the Data & Strategy Lead to implement data models that support our analytical projects. ', + responsibilities: + 'Responsibilities for this role include designing and developing data pipelines, performing data cleansing and validation, and developing/maintaining data documentation. This role is an opportunity to utilize your technical expertise within an entrepreneurial setting.', + requirements: 'Previous experience using programming languages. Ability to effectively communicate. ', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSfuZjasfFVrp6fuLCMKq-RGRJDro81-HB3GZMvWqiCl1qzdDQ/viewform?usp=sf_link', + }, + { + positionTitle: 'Member Development Specialist', + categoryType: 'Operations', + description: + "The role of the Member Development Specialist is to create methods of active reflection and acknowledgment of members' personal and professional growth, as well as advise on how to put this growth into digestible words for resumes and interviews.\n\nThe specialist will implement new templates and systems for advisement of writing resumes, preparing for interviews, and overall self-recognition of the growth and leadership in individual Generate members experience. This might come in the form of creating and executing workshops and mock interviews, creating systems for 1:1 mentoring in these areas, or implementing completely new ideas!", + responsibilities: + 'Develop initiatives and resources for current and future Generate leaders. Build upon the current system that facilities and encourages the growth of our members.', + requirements: + 'The ideal candidate has impressive interpersonal skills, a passion for mentorship, and is creative and self-motivated, coming up with new and exciting methods to foster active acknowledgment of member growth.', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdgWvDtFCb8FDOJJLd62bbnmUhgf6QR1ZdDP3thlq5ljD5CFg/viewform?usp=sf_link', + }, + { + positionTitle: 'Financial Analyst', + categoryType: 'Operations', + description: + "The Financial Analyst works hand-in-hand with the Sherman Center's Director, Generate's Operations Director, and Generate's Operational Support Lead. This role is responsible for all Generate purchasing and creating and monitoring the budget. As a result, they must ensure that all teams in Generate have the necessary supplies to complete their initiatives throughout the semester and are aware of and following their budget. In order to ensure steady and successful team progression, the Financial Analyst is responsible for tracking orders on a regular schedule and managing and developing relationships with external vendors.", + responsibilities: + 'Order all needed supplies and materials needed for projects, member development, events, etc. Oversee the budget of the organization and maintain the spending habits of each team. ', + requirements: + 'Must have prior experience managing finances. Will be evaluated and further interviewed by the Sherman Center Director.', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSeAs4ugY3xjaJ_0GdFlwqDsIvzi7vR0mfTKtZq0IByQinSpPQ/viewform?usp=sf_link', + }, + // { + // positionTitle: 'Archive Analyst', + // categoryType: 'Operations', + // description: '', + // responsibilities: '', + // requirements: '', + // startDate: startDate, + // endDate: endDate, + // workCommitment: 10, + // active: false, + // remarks: remarks, + // applicationLink: '' + // }, + + { + positionTitle: 'Tech Operations Consultant', + categoryType: 'Operations', + description: + "The Tech Operations Consultant is responsible for improving and streamlining Generates Operations as a whole. You will play a pivotal role in analyzing the organization's functionality, integrating new technologies, improving workflows and, enhancing efficiency in processes in the organization. With dedication to driving efficiency and fostering collaboration, as a Tech Operations Consultant, you will contribute significantly to Generates success as a dynamic, tech-forward student organization, fostering innovation and growth.", + responsibilities: + 'Oversee the management of our space booking software, enabling members to maximize its potential. ', + requirements: 'Flexible and adaptability. Creative thinking ', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLScvNWF5YuMa-IZhIup5V4Y5JJ2zpDi12NtAzakHPurwZHp9TA/viewform?usp=sf_link', + }, + + { + positionTitle: 'Technical Writer', + categoryType: 'Operations', + description: + 'The Technical Writer role is responsible for improving and streamlining our internal documents and forms. You will play a pivotal role in ensuring the efficiency and consistency of our internal processes through the creation of user-friendly templates. Additionally, the Technical Writer will be responsible for researching and compiling best practices for the creation of internal documents.', + responsibilities: + 'Organize and maintain the progress of internal documentation. Centralizing any Generate wide resources and information. ', + requirements: 'Ability to think creatively and demonstrate organization skills.', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSfnWMqtajHFHbQ43L09KT4QIZ8fiHF4zr_aR_YsekpUXyNdBw/viewform?usp=sf_link', + }, + { + positionTitle: 'Data & Strategy Lead', + categoryType: 'Operations', + description: + 'The Data & Strategy Lead cultivates ways on data acquisition, data analyzing and presenting this data in a useful and informative manner. This person will work to coordinate data engineers and business analysts in the execution of existing recurring projects, as well as aid in the conceptualization of new projects. The Data & Strategy Lead will spend their time leading and supporting their direct reports, establishing the goals and direction of the Data & Strategy team as well as carrying out the goals of the Operations side of the organization, observing the processes of Generate teams and aiding in their improvement when possible.', + responsibilities: + 'The Data & Strategy Lead will facilitate weekly meetings and regular check-ins with the members of the Data & Strategy team as well as use their expertise to conceptualize and oversee projects that will provide even greater improvement in Generate as an organization', + requirements: + 'Previous experience using Tableu, Python, SQL, AWS, or Git.The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSfZ6sGNtUQr3SkzXx7f1VcJkXNlYUceWZcNk5Vj_2eyQ_Kscw/viewform?usp=sf_link', + }, + { + positionTitle: 'Organizational Development Lead', + categoryType: 'Operations', + description: + 'As the Organization Development Lead you will work to make Generate an increasingly more diverse, inclusive, and equitable community through a variety of initiatives. In this role you will work to ensure that Generate members feel included and feel like they belong in the community, as well as fostering a place where members can grow both professionally and personally.', + responsibilities: + 'Collect and evaluate feedback from previous and current semesters to understand the diversity, equity, and inclusion of the community, as well as determining the needs of the community and where and how as a community we can grow. Maintaining and building initiatives that fosters the belonging, diversity, equity, and inclusion of team members in Generate', + requirements: + 'The ideal candidate has confident and professional communication skills, and is creative and self-motivated, looking for new ways to further the growth of the organization and members.The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdceh_MFnbmaW7XiDY-n2H7uE8NHwuElyjy0tBUafoqCyBZqQ/viewform?usp=sf_link', + }, + { + positionTitle: 'Operational Support Lead', + categoryType: 'Operations', + description: + "The Operational Support Lead strives to enhance the experience of Generate members working in the build studio through the improvement of Generate's resources and processes and through the maintenance of said resources and processes.", + responsibilities: + 'Identifying and addressing challenges for Generate that relate to experiences of working within the Build Studio physically and digitally.Maintaining existing processes for the Build Studio, including purchasing, organization, inventory, etc.Coordinating with organizations on campus and other Generate teams to develop internal trainings related to the Build Studio.Empower team members to work to achieve their personal and professional goals', + requirements: + 'The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture. Has strong time management and organizational skills', + startDate: startDate, + endDate: endDate, + workCommitment: 10, + active: false, + remarks: remarks, + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSdtp1IkFRnrOYa-m3smhYo7ss-bNjrvbFNoxhuyrWKKS4zx2A/viewform?usp=sf_link', + }, +]; + +export default Operations; diff --git a/src/data/ApplyData/software.js b/src/data/ApplyData/software.ts similarity index 85% rename from src/data/ApplyData/software.js rename to src/data/ApplyData/software.ts index 21755c82..6fe593ce 100644 --- a/src/data/ApplyData/software.js +++ b/src/data/ApplyData/software.ts @@ -1,53 +1,60 @@ -const remarks = "Please note that these positions are in-person, semester-long roles and begin in early January with an expected time commitment of 10 hrs/week.\nApplications close December 13th at 11:59pm"; +import type { Position } from './types'; + +const remarks = + 'Please note that these positions are in-person, semester-long roles and begin in early January with an expected time commitment of 10 hrs/week.\nApplications close December 13th at 11:59pm'; + const startDate = '1/1/2024'; -const endDate = '4/19/2024'; -const Software = [ +const endDate = '4/19/2024'; +const Software: Position[] = [ { positionTitle: 'UI/UX Designer', categoryType: 'Software', description: - "UI/UX Designers work on a project team to contribute to the completion of high-quality, professional fully prototyped hi-fi wireframes for Generate clients. They are excellent at working in a team, iterating on their work, and accepting constructive critique. In the past, designers have designed complete UI/UX workflows for apps and websites. Designs created for the team are implemented by the engineers so you can see your work come to life! Designers also work closely with clients and customers to understand user needs & needed functionality", + 'UI/UX Designers work on a project team to contribute to the completion of high-quality, professional fully prototyped hi-fi wireframes for Generate clients. They are excellent at working in a team, iterating on their work, and accepting constructive critique. In the past, designers have designed complete UI/UX workflows for apps and websites. Designs created for the team are implemented by the engineers so you can see your work come to life! Designers also work closely with clients and customers to understand user needs & needed functionality', responsibilities: - "Attend and actively participate in regular team meetings.Fully prototype, iterate, and design Lo-Fi & Hi-Fi wireframes for a mobile app, website, or other digital productHost user testing to get real feedback on designs and support the iterative process.Accept and give feedback to peers, for both soft and hard skills.Help design the visual identity of both the product and the client organization in a way that is cohesive and suitable for the target audience.Assist the clients in making their product marketable, unique, and appealing.Iterate rapidly on client feedback", + 'Attend and actively participate in regular team meetings.Fully prototype, iterate, and design Lo-Fi & Hi-Fi wireframes for a mobile app, website, or other digital productHost user testing to get real feedback on designs and support the iterative process.Accept and give feedback to peers, for both soft and hard skills.Help design the visual identity of both the product and the client organization in a way that is cohesive and suitable for the target audience.Assist the clients in making their product marketable, unique, and appealing.Iterate rapidly on client feedback', requirements: '', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeRm2c1KOjPyytj6NYxhsDiMeu2ewWc1B1oVL7dxaV1PF6h3g/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSeRm2c1KOjPyytj6NYxhsDiMeu2ewWc1B1oVL7dxaV1PF6h3g/viewform?usp=sf_link', }, { positionTitle: 'Brand Designer', categoryType: 'Software', description: - "Brand Designers work on a project team to contribute to the completion of high-quality, professional brands for Generate clients. They are excellent at working in a team, iterating on their work, and accepting constructive critique. Brand designers work closely with clients and customers to produce logos, marketing materials, and branding guidelines.", + 'Brand Designers work on a project team to contribute to the completion of high-quality, professional brands for Generate clients. They are excellent at working in a team, iterating on their work, and accepting constructive critique. Brand designers work closely with clients and customers to produce logos, marketing materials, and branding guidelines.', responsibilities: - "Attend and actively participate in regular team meetings.Fully prototype, iterate, and design Lo-Fi & Hi-Fi wireframes for a mobile app, website, or other digital productHost user testing to get real feedback on designs and support the iterative process.Accept and give feedback to peers, for both soft and hard skills.Help design the visual identity of both the product and the client organization in a way that is cohesive and suitable for the target audience.Assist the clients in making their product marketable, unique, and appealing.Iterate rapidly on client feedback", + 'Attend and actively participate in regular team meetings.Fully prototype, iterate, and design Lo-Fi & Hi-Fi wireframes for a mobile app, website, or other digital productHost user testing to get real feedback on designs and support the iterative process.Accept and give feedback to peers, for both soft and hard skills.Help design the visual identity of both the product and the client organization in a way that is cohesive and suitable for the target audience.Assist the clients in making their product marketable, unique, and appealing.Iterate rapidly on client feedback', requirements: '', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeRm2c1KOjPyytj6NYxhsDiMeu2ewWc1B1oVL7dxaV1PF6h3g/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSeRm2c1KOjPyytj6NYxhsDiMeu2ewWc1B1oVL7dxaV1PF6h3g/viewform?usp=sf_link', }, { positionTitle: 'Software Engineer', categoryType: 'Software', description: - "Generate Software Engineers work on a software project team to contribute to the completion of high-quality, professional work for Generate clients. They are excellent at working in a team and tackling complex technical problems. Past projects have included both front-end and back-end engineering for apps, websites and more!", + 'Generate Software Engineers work on a software project team to contribute to the completion of high-quality, professional work for Generate clients. They are excellent at working in a team and tackling complex technical problems. Past projects have included both front-end and back-end engineering for apps, websites and more!', responsibilities: - "Work with a team of talented developers and designers to build a full-stack project for a clien.tAccept and give feedback to peers, both for soft and hard skills to grow as individuals and a team.Attend and actively participate in regular team meetings and code reviews", + 'Work with a team of talented developers and designers to build a full-stack project for a clien.tAccept and give feedback to peers, both for soft and hard skills to grow as individuals and a team.Attend and actively participate in regular team meetings and code reviews', requirements: '', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, remarks: remarks, - applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeh4uRxgeuDWIRkzFar9yoPfGf3zJ8TygWwQn3woFjyObvoqg/viewform?usp=sf_link' + applicationLink: + 'https://docs.google.com/forms/d/e/1FAIpQLSeh4uRxgeuDWIRkzFar9yoPfGf3zJ8TygWwQn3woFjyObvoqg/viewform?usp=sf_link', }, { positionTitle: 'Design Lead', @@ -62,9 +69,8 @@ const Software = [ endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: 'https://forms.gle/2D5FNbvU5a7oh5Rs7' + remarks: remarks, + applicationLink: 'https://forms.gle/2D5FNbvU5a7oh5Rs7', }, { positionTitle: 'Technical Lead', @@ -77,9 +83,8 @@ const Software = [ endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: 'https://forms.gle/aKHPvDKey7Ksxfts8' + remarks: remarks, + applicationLink: 'https://forms.gle/aKHPvDKey7Ksxfts8', }, { positionTitle: 'Project Lead', @@ -94,9 +99,8 @@ const Software = [ endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: 'https://forms.gle/gLtnZU15VixE4hwJ9' + remarks: remarks, + applicationLink: 'https://forms.gle/gLtnZU15VixE4hwJ9', }, { positionTitle: 'Chief Frontend Architect', @@ -105,15 +109,13 @@ const Software = [ 'New Role for Fall 2023! The Chief Frontend Architect will work as an advisor to all software teams to improve frontend development', responsibilities: 'Oversee frontend development on 5 software teams. Run frontend workshops geared at different expertise levels. Help debug when needed', - requirements: - 'Demonstrated frontend development skills. Debugging skills. Interest in mentoring and teaching.', + requirements: 'Demonstrated frontend development skills. Debugging skills. Interest in mentoring and teaching.', startDate: startDate, endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: '' + remarks: remarks, + applicationLink: '', }, { positionTitle: 'Chief Software Architect', @@ -128,9 +130,8 @@ const Software = [ endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: '' + remarks: remarks, + applicationLink: '', }, { positionTitle: 'Chief UX/UI', @@ -145,9 +146,8 @@ const Software = [ endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: '' + remarks: remarks, + applicationLink: '', }, { positionTitle: 'Brand Chief', @@ -162,10 +162,9 @@ const Software = [ endDate: endDate, workCommitment: 10, active: false, - remarks: - remarks, - applicationLink: '' - } -] + remarks: remarks, + applicationLink: '', + }, +]; -export default Software +export default Software; diff --git a/src/data/ApplyData/types.ts b/src/data/ApplyData/types.ts new file mode 100644 index 00000000..ac0fc774 --- /dev/null +++ b/src/data/ApplyData/types.ts @@ -0,0 +1,13 @@ +export type Position = { + positionTitle: string; + categoryType: string; + description: string; + responsibilities: string; + requirements: string; + startDate: string; + endDate: string; + workCommitment: number; + active: boolean; + remarks: string; + applicationLink: string; +}; diff --git a/src/data/teamPageDetails.js b/src/data/teamPageDetails.js deleted file mode 100644 index bd703d6f..00000000 --- a/src/data/teamPageDetails.js +++ /dev/null @@ -1,57 +0,0 @@ -import ManagementActiveIcon from "../assets/icons/teams/colored/Management.png"; -import OperationsActiveIcon from "../assets/icons/teams/colored/Operations.png"; -import SoftwareActiveIcon from "../assets/icons/teams/colored/Software.png"; -import HardwareActiveIcon from "../assets/icons/teams/colored/Hardware.png"; -import CommunityActiveIcon from "../assets/icons/teams/colored/Community.png"; - -import ManagementInactiveIcon from "../assets/icons/teams/gray/Management.png"; -import OperationsInactiveIcon from "../assets/icons/teams/gray/Operations.png"; -import SoftwareInactiveIcon from "../assets/icons/teams/gray/Software.png"; -import HardwareInactiveIcon from "../assets/icons/teams/gray/Hardware.png"; -import CommunityInactiveIcon from "../assets/icons/teams/gray/Community.png"; - -import ManagementLargePicture from "../assets/images/TeamsPageImages/TeamsPagePH1.png" -import OperationsLargePicture from "../assets/images/TeamsPageImages/TeamsPagePH2.png" -import SoftwareLargePicture from "../assets/images/TeamsPageImages/TeamsPagePH3.png" -import HardwareLargePicture from "../assets/images/TeamsPageImages/TeamsPagePH4.png" -import EngagementLargePicture from "../assets/images/TeamsPageImages/TeamsPagePH5.png" - -// yellow - "#FFBF3C" -const TeamPageDetails = [{ - name: "Management", - color: "#187DFF", - activeIcon: ManagementActiveIcon, - inactiveIcon: ManagementInactiveIcon, - largePic: ManagementLargePicture, - }, - { - name: "Hardware", - color: "#FF5751", - activeIcon: HardwareActiveIcon, - inactiveIcon: HardwareInactiveIcon, - largePic: HardwareLargePicture, - }, - { - name: "Software", - color: "#FFBF3C", - activeIcon: SoftwareActiveIcon, - inactiveIcon: SoftwareInactiveIcon, - largePic: SoftwareLargePicture, - }, - { - name: "Operations", - color: "#6FCF97", - activeIcon: OperationsActiveIcon, - inactiveIcon: OperationsInactiveIcon, - largePic: OperationsLargePicture, - }, - { - name: "Engagement", - color: "#A559EC", - activeIcon: CommunityActiveIcon, - inactiveIcon: CommunityInactiveIcon, - largePic: EngagementLargePicture, - } -] - -export default TeamPageDetails; \ No newline at end of file diff --git a/src/data/teamPageDetails.ts b/src/data/teamPageDetails.ts new file mode 100644 index 00000000..a1271388 --- /dev/null +++ b/src/data/teamPageDetails.ts @@ -0,0 +1,56 @@ +import CommunityActiveIcon from '../assets/icons/teams/colored/Community.png'; +import HardwareActiveIcon from '../assets/icons/teams/colored/Hardware.png'; +import ManagementActiveIcon from '../assets/icons/teams/colored/Management.png'; +import OperationsActiveIcon from '../assets/icons/teams/colored/Operations.png'; +import SoftwareActiveIcon from '../assets/icons/teams/colored/Software.png'; +import CommunityInactiveIcon from '../assets/icons/teams/gray/Community.png'; +import HardwareInactiveIcon from '../assets/icons/teams/gray/Hardware.png'; +import ManagementInactiveIcon from '../assets/icons/teams/gray/Management.png'; +import OperationsInactiveIcon from '../assets/icons/teams/gray/Operations.png'; +import SoftwareInactiveIcon from '../assets/icons/teams/gray/Software.png'; +import ManagementLargePicture from '../assets/images/TeamsPageImages/TeamsPagePH1.png'; +import OperationsLargePicture from '../assets/images/TeamsPageImages/TeamsPagePH2.png'; +import SoftwareLargePicture from '../assets/images/TeamsPageImages/TeamsPagePH3.png'; +import HardwareLargePicture from '../assets/images/TeamsPageImages/TeamsPagePH4.png'; +import EngagementLargePicture from '../assets/images/TeamsPageImages/TeamsPagePH5.png'; + +// yellow - "#FFBF3C" +const TeamPageDetails = [ + { + name: 'Management', + color: '#187DFF', + activeIcon: ManagementActiveIcon, + inactiveIcon: ManagementInactiveIcon, + largePic: ManagementLargePicture, + }, + { + name: 'Hardware', + color: '#FF5751', + activeIcon: HardwareActiveIcon, + inactiveIcon: HardwareInactiveIcon, + largePic: HardwareLargePicture, + }, + { + name: 'Software', + color: '#FFBF3C', + activeIcon: SoftwareActiveIcon, + inactiveIcon: SoftwareInactiveIcon, + largePic: SoftwareLargePicture, + }, + { + name: 'Operations', + color: '#6FCF97', + activeIcon: OperationsActiveIcon, + inactiveIcon: OperationsInactiveIcon, + largePic: OperationsLargePicture, + }, + { + name: 'Engagement', + color: '#A559EC', + activeIcon: CommunityActiveIcon, + inactiveIcon: CommunityInactiveIcon, + largePic: EngagementLargePicture, + }, +]; + +export default TeamPageDetails; diff --git a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/ExpandedTeamsJSON.js b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/ExpandedTeamsJSON.ts similarity index 90% rename from src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/ExpandedTeamsJSON.js rename to src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/ExpandedTeamsJSON.ts index 8f9e0ecf..e3ee60c9 100644 --- a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/ExpandedTeamsJSON.js +++ b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/ExpandedTeamsJSON.ts @@ -1,14 +1,15 @@ -import TeamsStock from '../../../../../assets/images/TeamsPageImages/TeamsStockPhoto.svg' -import Leads from '../../../../../assets/images/TeamsPageImages/leads.jpg' -import Legacy from '../../../../../assets/images/TeamsPageImages/legacy.jpg' -import Management1 from '../../../../../assets/images/TeamsPageImages/management1.jpg' -import Management2 from '../../../../../assets/images/TeamsPageImages/management2.jpg' -import Operations1 from '../../../../../assets/images/TeamsPageImages/operations1.jpg' -import Operations2 from '../../../../../assets/images/TeamsPageImages/operations2.jpg' -import Hardware1 from '../../../../../assets/images/TeamsPageImages/hardware1.jpg' -import Hardware2 from '../../../../../assets/images/TeamsPageImages/fallshowcase-43.jpg' -import Engagement1 from '../../../../../assets/images/TeamsPageImages/engagement1.jpg' -import Engagement2 from '../../../../../assets/images/TeamsPageImages/engagement2.jpg' +import Engagement1 from '../../../../../assets/images/TeamsPageImages/engagement1.jpg'; +import Engagement2 from '../../../../../assets/images/TeamsPageImages/engagement2.jpg'; +import Hardware2 from '../../../../../assets/images/TeamsPageImages/fallshowcase-43.jpg'; +import Hardware1 from '../../../../../assets/images/TeamsPageImages/hardware1.jpg'; +import Leads from '../../../../../assets/images/TeamsPageImages/leads.jpg'; +import Legacy from '../../../../../assets/images/TeamsPageImages/legacy.jpg'; +import Management1 from '../../../../../assets/images/TeamsPageImages/management1.jpg'; +import Management2 from '../../../../../assets/images/TeamsPageImages/management2.jpg'; +import Operations1 from '../../../../../assets/images/TeamsPageImages/operations1.jpg'; +import Operations2 from '../../../../../assets/images/TeamsPageImages/operations2.jpg'; +import TeamsStock from '../../../../../assets/images/TeamsPageImages/TeamsStockPhoto.svg'; + // What Youll learn could probably be added here? export const ExpandedTeamsJSON = { management: { @@ -18,15 +19,15 @@ export const ExpandedTeamsJSON = { { header: 'WHAT WE DO', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: Management1 + image: Management1, }, { header: 'HOW WE WORK', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', image: Management2, - invert: true - } - ] + invert: true, + }, + ], }, operations: { abbv: 'OPRTNS', @@ -35,15 +36,15 @@ export const ExpandedTeamsJSON = { { header: 'WHAT WE DO', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: Operations1 + image: Operations1, }, { header: 'HOW WE WORK', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', image: Operations2, - invert: true - } - ] + invert: true, + }, + ], }, software: { abbv: 'SFTWRE', @@ -52,14 +53,14 @@ export const ExpandedTeamsJSON = { { header: 'WHAT WE DO', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: Legacy + image: Legacy, }, { header: 'HOW WE WORK', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', image: Leads, - invert: true - } + invert: true, + }, ], featured: { header: 'Featured Projects', @@ -69,17 +70,17 @@ export const ExpandedTeamsJSON = { 'Lorem ipsum dolor sit amet, consectetur adipisc elit. Est sed nunc porttitor arcu etiam. Eget duis sapien, faucibus nunc nec elit tempus risus. Tincidunt sagittis nulla orci id. Augue risus adipiscing mi eleifend proin nisl ac graa.', image: TeamsStock, invert: false, - button: '../../teams' + button: '../../teams', }, { description: 'Lorem ipsum dolor sit amet, consectetur adipisc elit. Est sed nunc porttitor arcu etiam. Eget duis sapien, faucibus nunc nec elit tempus risus. Tincidunt sagittis nulla orci id. Augue risus adipiscing mi eleifend proin nisl ac graa.', image: TeamsStock, invert: true, - button: '../../projects' - } - ] - } + button: '../../projects', + }, + ], + }, }, hardware: { abbv: 'HRDWRE', @@ -88,14 +89,14 @@ export const ExpandedTeamsJSON = { { header: 'WHAT WE DO', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: Hardware1 + image: Hardware1, }, { header: 'HOW WE WORK', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', image: Hardware2, - invert: true - } + invert: true, + }, ], featured: { header: 'Featured Projects', @@ -105,17 +106,17 @@ export const ExpandedTeamsJSON = { 'Lorem ipsum dolor sit amet, consectetur adipisc elit. Est sed nunc porttitor arcu etiam. Eget duis sapien, faucibus nunc nec elit tempus risus. Tincidunt sagittis nulla orci id. Augue risus adipiscing mi eleifend proin nisl ac graa.', image: TeamsStock, invert: false, - button: '../../teams' + button: '../../teams', }, { description: 'Lorem ipsum dolor sit amet, consectetur adipisc elit. Est sed nunc porttitor arcu etiam. Eget duis sapien, faucibus nunc nec elit tempus risus. Tincidunt sagittis nulla orci id. Augue risus adipiscing mi eleifend proin nisl ac graa.', image: TeamsStock, invert: true, - button: '../../projects' - } - ] - } + button: '../../projects', + }, + ], + }, }, engagement: { abbv: 'ENGMNT', @@ -124,14 +125,14 @@ export const ExpandedTeamsJSON = { { header: 'WHAT WE DO', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: Engagement1 + image: Engagement1, }, { header: 'HOW WE WORK', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', image: Engagement2, - invert: true - } + invert: true, + }, ], featured: { header: 'Featured Events', @@ -141,16 +142,16 @@ export const ExpandedTeamsJSON = { 'Lorem ipsum dolor sit amet, consectetur adipisc elit. Est sed nunc porttitor arcu etiam. Eget duis sapien, faucibus nunc nec elit tempus risus. Tincidunt sagittis nulla orci id. Augue risus adipiscing mi eleifend proin nisl ac graa.', image: TeamsStock, invert: false, - button: '../../teams' + button: '../../teams', }, { description: 'Lorem ipsum dolor sit amet, consectetur adipisc elit. Est sed nunc porttitor arcu etiam. Eget duis sapien, faucibus nunc nec elit tempus risus. Tincidunt sagittis nulla orci id. Augue risus adipiscing mi eleifend proin nisl ac graa.', image: TeamsStock, invert: true, - button: '../../projects' - } - ] - } - } -} + button: '../../projects', + }, + ], + }, + }, +}; diff --git a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.js b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts similarity index 94% rename from src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.js rename to src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts index dc90c473..92605a8c 100644 --- a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.js +++ b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts @@ -1,82 +1,76 @@ // The Order of these is how it will appear on the management expanded teams page -export const Teams = [ - 'management', - 'hardware', - 'software', - 'operations', - 'engagement' -] +export const Teams = ['management', 'hardware', 'software', 'operations', 'engagement']; export const RolesJSON = { management: { Director: { header: 'Executive Director', - desc: 'The executive director oversees all internal and external operations of Generate. They are responsible for ensuring each of their directors and teams have the resources they need to be successful and for strategically positioning the organization within the larger Northeastern community. They work internationally with their directors to execute their vision and support the growth of each member in the organization. They collaborate with other Mosaic organizations and others in the global network to lift up entrepreneurs and increase the impact of Generate.' - } + desc: 'The executive director oversees all internal and external operations of Generate. They are responsible for ensuring each of their directors and teams have the resources they need to be successful and for strategically positioning the organization within the larger Northeastern community. They work internationally with their directors to execute their vision and support the growth of each member in the organization. They collaborate with other Mosaic organizations and others in the global network to lift up entrepreneurs and increase the impact of Generate.', + }, }, operations: { Director: { header: 'Operations Director', - desc: 'The operations director is responsible for the day to day operations of the organization, ensuring teams are supported and have the resources they need. As operations director, you work closely with your team to provide resources for the build studio and seek out ways to improve the organization on all fronts. You help manage the budget for the year and work with your team to plan the logistics of events like showcases and our speaker series. You work with your team to develop growth strategies for Generate.' + desc: 'The operations director is responsible for the day to day operations of the organization, ensuring teams are supported and have the resources they need. As operations director, you work closely with your team to provide resources for the build studio and seek out ways to improve the organization on all fronts. You help manage the budget for the year and work with your team to plan the logistics of events like showcases and our speaker series. You work with your team to develop growth strategies for Generate.', }, Roles: [ { header: 'Data & Strategy Team', lead: { subheader: 'Data & Strategy Lead', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, members: [ { subheader: 'Data Analysts', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Ops Support Team', lead: { subheader: 'Ops Support Lead', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, members: [ { subheader: 'Tech Specialist', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Info Architect', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Financial Purchasing Analyst', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Org Dev Team', lead: { subheader: 'Org Dev Lead', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, members: [ { subheader: 'Strategy Partner Coordinators', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Member Development Coordinator', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], + }, + ], }, software: { Director: { header: 'Software Director', - desc: 'The software director is responsible for overseeing the software projects, the software chief team, and the software clients. As the software director you work closely with the Project leads, guiding them through the hiring, scoping, and product development process. You will work with the leads to support the projects and prodive educational content through workshops and our wiki. You will work with clients to provide resources and ensure they have a successful Generate experience. You will also work with the management team to cultivate close connections within the organization and uphold Generates values.' + desc: 'The software director is responsible for overseeing the software projects, the software chief team, and the software clients. As the software director you work closely with the Project leads, guiding them through the hiring, scoping, and product development process. You will work with the leads to support the projects and prodive educational content through workshops and our wiki. You will work with clients to provide resources and ensure they have a successful Generate experience. You will also work with the management team to cultivate close connections within the organization and uphold Generates values.', }, Roles: [ { @@ -84,58 +78,58 @@ export const RolesJSON = { members: [ { subheader: 'Chief Software Architect', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Chief Frontend Architect', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Chief UI/UX Designer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Chief Brand Designer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Leads', lead: { subheader: 'Project Leads', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, members: [ { subheader: 'Technical Leads', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Design Leads', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Members', members: [ { subheader: 'Software Engineers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Software Designers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], + }, + ], }, hardware: { Director: { header: 'Hardware Director', - desc: 'The hardware director is responsible for overseeing the hardware projects, the hardware chief team, and the hardware clients. As the hardware director you work closely with the Project leads, guiding them through the hiring, scoping, and product development process. You will work with the chiefs to support the projects and produce educational content through workshops and our wiki. You will work with clients to provide resources and ensure they have a successful Generate experience. You will also work with the management team to cultivate close connections within the organization and uphold Generates values.' + desc: 'The hardware director is responsible for overseeing the hardware projects, the hardware chief team, and the hardware clients. As the hardware director you work closely with the Project leads, guiding them through the hiring, scoping, and product development process. You will work with the chiefs to support the projects and produce educational content through workshops and our wiki. You will work with clients to provide resources and ensure they have a successful Generate experience. You will also work with the management team to cultivate close connections within the organization and uphold Generates values.', }, Roles: [ { @@ -143,133 +137,133 @@ export const RolesJSON = { members: [ { subheader: 'Chief Mechanical Engineer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Chief Industrial Engineer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Chief Electrical Engineer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Chief Computer Engineer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Leads', lead: { subheader: 'Project Leads', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, members: [ { subheader: 'Senior Electrical Engineers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Senior Mechanical Engineers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Members', members: [ { subheader: 'Electrical Engineers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Computer Engineers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Mechanical Engineers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Industrial Designers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], + }, + ], }, engagement: { Director: { header: 'Engagement Director', - desc: 'The engagement director is responsible for managing student involvement in Generate. They oversee events, recruitment for both students and clients and our branding/marketing content. As engagement director, you will work with your team to create an inclusive culture where students can build lasting connections. You will oversee major events, manage outreach within the Northeastern community, and work internally to build a thriving culture.' + desc: 'The engagement director is responsible for managing student involvement in Generate. They oversee events, recruitment for both students and clients and our branding/marketing content. As engagement director, you will work with your team to create an inclusive culture where students can build lasting connections. You will oversee major events, manage outreach within the Northeastern community, and work internally to build a thriving culture.', }, Roles: [ { header: 'Content team', lead: { subheader: 'Content Lead', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, - members: [] + members: [], }, { header: '', lead: { subheader: '', - desc: '' + desc: '', }, members: [ { subheader: 'Copywriter (Brand Voice)', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Designers', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Photographer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Videographer', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Social Media Coordinator', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, { subheader: 'Illustrator', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' - } - ] + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', + }, + ], }, { header: 'Events Team', lead: { subheader: 'Events Lead', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, - members: [] + members: [], }, { header: '', lead: { subheader: 'Events Coordinator', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, - members: [] + members: [], }, { header: 'Relations team', lead: { subheader: 'Relations Lead', - desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' + desc: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', }, - members: [] - } - ] - } -} + members: [], + }, + ], + }, +}; diff --git a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/WhatYouLearnJSON.js b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/WhatYouLearnJSON.ts similarity index 92% rename from src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/WhatYouLearnJSON.js rename to src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/WhatYouLearnJSON.ts index 91515bc7..84c90754 100644 --- a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/WhatYouLearnJSON.js +++ b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/WhatYouLearnJSON.ts @@ -1,4 +1,4 @@ -import TeamsStock from '../../../../../assets/images/TeamsPageImages/TeamsStockPhoto.svg' +import TeamsStock from '../../../../../assets/images/TeamsPageImages/TeamsStockPhoto.svg'; export const WhatYouLearnJSON = { software: { @@ -6,37 +6,37 @@ export const WhatYouLearnJSON = { { header: 'Engineering', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: TeamsStock + image: TeamsStock, }, { header: 'Design', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', - image: TeamsStock + image: TeamsStock, }, { header: 'Leadership', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', - image: TeamsStock - } - ] + image: TeamsStock, + }, + ], }, hardware: { about: [ { header: 'Engineering', body: "Our management team is the driving force behind Generate, empowering each member to grow and build innovative products. They work directly with members and clients to support their growth and the team's vision.They build our professional image and position the organization strategically within the Northeastern ecosystem, bridging our internal operations with the larger community.", - image: TeamsStock + image: TeamsStock, }, { header: 'Design', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', - image: TeamsStock + image: TeamsStock, }, { header: 'Leadership', body: 'Generate is entirely student-led. Our management team offers a unique opportunity for students to gain leadership experience in a fast-paced, innovative culture. The team is united through the yearly vision set by the executive director and builds initiatives around those goals. Each member leaves their own mark on Generate, continuously improving for the future.', - image: TeamsStock - } - ] - } -} + image: TeamsStock, + }, + ], + }, +}; diff --git a/src/services/useSanity.js b/src/services/useSanity.js deleted file mode 100644 index 1c10a723..00000000 --- a/src/services/useSanity.js +++ /dev/null @@ -1,21 +0,0 @@ -import { client } from '../client' -import { useState, useEffect } from 'react' - -export function useSanity(query, params = {}, modifier = (data) => data) { - const [data, setData] = useState([]) - - useEffect( - () => { - const fetchData = async () => { - const fetchedData = await client.fetch(query, params) - const modifiedData = modifier(fetchedData) - setData(modifiedData) - } - - fetchData() - }, - [] /*, [modifier, params, query]*/ - ) - - return data -} diff --git a/src/services/useSanity.ts b/src/services/useSanity.ts new file mode 100644 index 00000000..91fc3b15 --- /dev/null +++ b/src/services/useSanity.ts @@ -0,0 +1,26 @@ +import type { QueryParams } from '@sanity/client'; +import { useState, useEffect } from 'react'; + +import { client } from '../client'; + +export function useSanity(query: string): T[]; +export function useSanity(query: string, params: QueryParams, modifier: (data: Raw[]) => T[]): T[]; +export function useSanity( + query: string, + params: QueryParams = {}, + modifier: (data: Raw[]) => (Raw | T)[] = data => data +): (Raw | T)[] { + const [data, setData] = useState<(Raw | T)[]>([]); + + useEffect(() => { + const fetchData = async (): Promise => { + const fetchedData = await client.fetch(query, params); + const modifiedData = modifier(fetchedData); + setData(modifiedData); + }; + + fetchData(); + }, [] /*, [modifier, params, query]*/); + + return data; +} diff --git a/src/shared/useWebsite.js b/src/shared/useWebsite.js deleted file mode 100644 index cdb7c807..00000000 --- a/src/shared/useWebsite.js +++ /dev/null @@ -1,20 +0,0 @@ -import { useState, useEffect } from 'react'; - -export default function useWebsite() { - const [isWebsite, setIsWebsite] = useState(window.innerWidth > 650); - //choose the screen size - const handleResize = () => { - if (window.innerWidth > 650) { - setIsWebsite(true); - } else { - setIsWebsite(false); - } - }; - - // create an event listener - useEffect(() => { - window.addEventListener("resize", handleResize); - }); - - return isWebsite; -} \ No newline at end of file diff --git a/src/shared/useWebsite.ts b/src/shared/useWebsite.ts new file mode 100644 index 00000000..3279fc76 --- /dev/null +++ b/src/shared/useWebsite.ts @@ -0,0 +1,21 @@ +import { useState, useEffect } from 'react'; + +export default function useWebsite(): boolean { + const [isWebsite, setIsWebsite] = useState(window.innerWidth > 650); + + //choose the screen size + const handleResize = (): void => { + if (window.innerWidth > 650) { + setIsWebsite(true); + } else { + setIsWebsite(false); + } + }; + + // create an event listener + useEffect(() => { + window.addEventListener('resize', handleResize); + }); + + return isWebsite; +} From 0c1eaa2b65145d0b451f42fc822a34dfabe534e5 Mon Sep 17 00:00:00 2001 From: mai Date: Thu, 1 Oct 2026 01:58:58 -0400 Subject: [PATCH 04/11] fix scroll to top bug --- src/component/ScrollToTop.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/component/ScrollToTop.tsx b/src/component/ScrollToTop.tsx index e485cbc1..88f5470b 100644 --- a/src/component/ScrollToTop.tsx +++ b/src/component/ScrollToTop.tsx @@ -2,12 +2,11 @@ import { useEffect } from 'react'; import { useLocation } from 'react-router-dom'; export default function ScrollToTop(): null { - // @ts-expect-error -- known bug: useLocation is never called, so pathName is always undefined - const { pathName } = useLocation; + const { pathname } = useLocation(); useEffect(() => { window.scrollTo(0, 0); - }, [pathName]); + }, [pathname]); return null; } From 0bebd8eb697cbf74e59a75971f37b3211e33a24a Mon Sep 17 00:00:00 2001 From: mai Date: Thu, 1 Oct 2026 02:07:41 -0400 Subject: [PATCH 05/11] make it more ts --- src/component/ExternalRedirect.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/component/ExternalRedirect.tsx b/src/component/ExternalRedirect.tsx index 949af3b0..1a1a9376 100644 --- a/src/component/ExternalRedirect.tsx +++ b/src/component/ExternalRedirect.tsx @@ -1,14 +1,13 @@ import { useEffect } from 'react'; -import type { JSX } from 'react'; type ExternalRedirectProps = { to: string; }; -export default function ExternalRedirect({ to }: ExternalRedirectProps): JSX.Element { +export default function ExternalRedirect({ to }: ExternalRedirectProps): null { useEffect(() => { window.location.href = to; }, [to]); - return <>; + return null; } From 665fdb5508db4b35ee12d46c8b709344759558fa Mon Sep 17 00:00:00 2001 From: mai Date: Thu, 1 Oct 2026 02:10:34 -0400 Subject: [PATCH 06/11] fix handle resize --- src/client.ts | 5 +- src/data/ApplyData/allApps.ts | 11 +--- src/data/ApplyData/engagement.ts | 54 ++++++++--------- src/data/ApplyData/hardware.ts | 60 +++++++++---------- src/data/ApplyData/operations.ts | 54 ++++++++--------- src/data/ApplyData/software.ts | 60 +++++++++---------- src/data/ApplyData/types.ts | 4 +- .../CommonTeam/JSONFiles/RolesJSON.ts | 2 +- src/shared/useWebsite.ts | 16 ++--- 9 files changed, 127 insertions(+), 139 deletions(-) diff --git a/src/client.ts b/src/client.ts index 99d573b4..dd47261e 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,6 +1,5 @@ import { createClient } from '@sanity/client'; -import imageUrlBuilder from '@sanity/image-url'; -import type { ImageUrlBuilder, SanityImageSource } from '@sanity/image-url'; +import { createImageUrlBuilder, type ImageUrlBuilder, type SanityImageSource } from '@sanity/image-url'; export const client = createClient({ projectId: import.meta.env.VITE_SANITY_PROJECT_ID, @@ -9,7 +8,7 @@ export const client = createClient({ useCdn: true, }); -const builder = imageUrlBuilder(client); +const builder = createImageUrlBuilder(client); export const urlFor = (source: SanityImageSource): ImageUrlBuilder => { return builder.image(source); diff --git a/src/data/ApplyData/allApps.ts b/src/data/ApplyData/allApps.ts index 7e7151f3..f6f8e2be 100644 --- a/src/data/ApplyData/allApps.ts +++ b/src/data/ApplyData/allApps.ts @@ -5,16 +5,9 @@ import Operations from './operations'; import Software from './software'; import type { Position } from './types'; -type ApplicationsByTeams = { - clients: Position[]; - hardware: Position[]; - software: Position[]; - operations: Position[]; - management: Position[]; - engagement: Position[]; -}; +type Team = 'clients' | 'hardware' | 'software' | 'operations' | 'management' | 'engagement'; -const applicationsByTeams: ApplicationsByTeams = { +const applicationsByTeams: Record = { clients: Clients, hardware: Hardware, software: Software, diff --git a/src/data/ApplyData/engagement.ts b/src/data/ApplyData/engagement.ts index 893634dc..d311b78f 100644 --- a/src/data/ApplyData/engagement.ts +++ b/src/data/ApplyData/engagement.ts @@ -15,11 +15,11 @@ const Engagement: Position[] = [ "As Social Media Manager, you'll work with the content team to create weekly social media posts, SMS blasts, and brainstorm new ideas to increase engagement!", responsibilities: 'They are the owner of digital communications through Instagram, LinkedIn, and Facebook.', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLScIodICkaQbA1rMfrKb2kKF4q-F2atLExaCUTjlf9st30NOEg/viewform?usp=sf_link', }, @@ -30,11 +30,11 @@ const Engagement: Position[] = [ "As Photographer/Videographer you'll work with the content team to create photo and video content on a regular basis and at larger events as well as brainstorm new ideas to increase engagement!", responsibilities: 'Responsible for documenting the semester, attending weekly meetings and events to do so.', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeJlkgjYneZ0WsggQdzRax7MPiKUWrUcALUMhPi_5XQcb1YAQ/viewform?usp=sf_link', }, @@ -58,11 +58,11 @@ const Engagement: Position[] = [ 'The Brand Designer is responsible for creating high-quality collateral that members across the organization can use to promote our workshops, community events, and other initiatives. ', responsibilities: 'Types of projects include branding, posters, merchandise, and social media graphics!', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdKBDAJkzeA-Ds-r3f2jyyKp3Eg4v8Op_47jwA957FccSmDKA/viewform?usp=sf_link', }, @@ -73,11 +73,11 @@ const Engagement: Position[] = [ responsibilities: "As Copywriter, you'll work on writing blog posts, copy for our newsletter, and collaborating with the Social Media Manager to help write social media messages to reach newer audiences. ", requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSf2__rqdzOW2y2mWfjb1WkrroiFgxgeimqduEZ-vZAuFchLsg/viewform?usp=sf_link', }, @@ -89,11 +89,11 @@ const Engagement: Position[] = [ responsibilities: 'As an Events Coordinator, you will oversee community events, ranging from field day to Showcase, and find ways to bring Generate members together through spirit, collaboration, boldness, and curiosity.', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLScfwXD3WtJ7cQeCm-KdGQF8ypdMtsD0hh3Tz3ImQoj3Xma4Ww/viewform?usp=sf_link', }, @@ -104,11 +104,11 @@ const Engagement: Position[] = [ 'The relations team works with prospective clients and members, other organizations around the Northeastern ecosystem, and our own members! We strive to build the best culture in the organizations and portray Generate in a positive light throughout all channels. ', responsibilities: "Engage with members, the greater northeastern community, and more to spread Generate's message", requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdsAIKm9Q2W16wgZ9kiX0Jtj8VQWhI5cO5jz4vaPhk2R9pMaQ/viewform?usp=sf_link', }, @@ -120,11 +120,11 @@ const Engagement: Position[] = [ responsibilities: 'Develop an intentional and inclusive client and member recruitment strategy.Work with other clubs and organizations across campus.Manage relationships with global campuses', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdkBkEw11NnBc-O0AZo8CjuhDb4_2Qi75qPAJXxKwfUuMjHtg/viewform?usp=sf_link', }, @@ -134,11 +134,11 @@ const Engagement: Position[] = [ description: '', responsibilities: '', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: '', }, { @@ -147,11 +147,11 @@ const Engagement: Position[] = [ description: '', responsibilities: '', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: '', }, ]; diff --git a/src/data/ApplyData/hardware.ts b/src/data/ApplyData/hardware.ts index ebf2495e..b2e485bb 100644 --- a/src/data/ApplyData/hardware.ts +++ b/src/data/ApplyData/hardware.ts @@ -17,11 +17,11 @@ const Hardware: Position[] = [ 'Hardware engineers are key members of the organization who make up the majority of our four unique project teams. The role is an opportunity for growth at all levels, whether starting out your engineering career or developing advanced skills and techniques.', requirements: 'Attends all team meetings, communicates well, and completes work outside of meetings. Brings a curious mind and excited attitude to the table regardless of prior experience level. Is interested in the greater Generate community beyond just their project team. They are a strong team-player with positive time management and organizational skills.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdrzsBXGnfznjbbThXbH5E_nLZxgpFdKSLcAHia7JvSK4tMJw/viewform?usp=sf_link', }, @@ -34,11 +34,11 @@ const Hardware: Position[] = [ "Industrial Designers are key members of the organization who bring client's aesthetic visions for their products to life in conjunction with the engineering teams. The role is an opportunity for growth at all levels, whether starting out your design career or developing advanced skills and techniques.", requirements: 'Attends all team meetings, communicates well, and completes work outside of meetings. Brings a curious mind and excited attitude to the table regardless of prior experience level. Is interested in the greater Generate community beyond just their project team. They are a strong team-player with positive time management and organizational skills.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSccY9rhVJz9srVMPSKYGsC9xLIr5Jr_mRdgbBoIwM_3l-VeRw/viewform?usp=sf_link', }, @@ -51,11 +51,11 @@ const Hardware: Position[] = [ 'Lead and mentor team members in technical design work. Assist the project lead in interviewing, evaluating, and hiring designers for your team during August and September. Assist the project lead in developing a semester long project scope, and ensuring the team stays on track to fulfill expectations. Communicate with the project lead to help create and delegate development goals for the team over the course of the semester. Communicate with team members, chief designers, and Hardware director to plan, schedule, and run occasional cross-team critiques and weekly design reviews which provide feedback to team members on a regular basis. Contribute to designs whenever and wherever applicable', requirements: 'Desire to lead a team of designers. Experience participating and running design critique sessions. Experience with interactive design tool (Figma). Understanding of the UI/UX design process including but not limited to creating user flows, lo-fi wireframes, and hi-fi prototypes. Comfortable working with and/or creating brand design systems', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/W4uxEDTLiZbAPTEn7', }, { @@ -65,11 +65,11 @@ const Hardware: Position[] = [ 'A Technical Lead is enthusiastic about the Hardware development process. Additionally, they are expected to strive in a collaborative environment, which includes both their team and outside clients. Furthermore, they are confident in their leadership in order to lead a team of talented, driven engineers to execute their vision and to grow their team members’ skills. As the Single Point of Accountability for their project’s development team, the Technical Lead is expected to ensure development work stays on track by mentoring newer engineers, appropriately delegating tasks, and by making personal contributions to the codebase. An essential aspect of this responsibility is keeping their Project Lead, the Chief Hardware Architect, and the Chief Frontend Architect up to date on their progress.', responsibilities: '', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/W4uxEDTLiZbAPTEn7', }, { @@ -81,11 +81,11 @@ const Hardware: Position[] = [ 'The Chief Team Lead will work closely with the Hardware Director to accomplish shared goals of advancing the technical capabilities of hardware and reaching beyond the Generate/Hardware communities.They guide the greater Chief team to not only consult on projects, but to scope and improve technical advancements within Hardware throughout the semester', requirements: 'The ideal candidate is a strong communicator and has a desire to lead in a high responsibility role, with critical communication to relay needs from Project Leads to the Chiefs in terms of supplementary workshops, design reviews, extra support, etc.They are a strong team-player with a desire to develop themselves as a leader and the organization’s technical abilities', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/d5neFKZZFEMHoYGp6', }, { @@ -97,11 +97,11 @@ const Hardware: Position[] = [ 'Each chief will consult teams to help eliminate blockers and push teams toward high quality work.The chiefs will work with each other and with the Chief Team Lead to push Generate Hardware both with regard to project development, but also our technical capabilities.Each chief will also be responsible for developing and hosting a series of workshops and bootcamps related to their discipline that will run throughout the semester', requirements: 'Chief Electrical Engineer is a technical expert in electrical engineering, ideally with a deep knowledge of best practice for PCB design, communication protocols (I2C, SPI, UART), soldering, etc.Is skilled in PCB design and bring-up, has good problem solving abilities.Skills in electromechanical integration (motors, motor controllers, etc) are a plus', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { @@ -113,11 +113,11 @@ const Hardware: Position[] = [ 'Each chief will consult teams to help eliminate blockers and push teams toward high quality work.The chiefs will work with each other and with the Chief Team Lead to push Generate Hardware both with regard to project development, but also our technical capabilities.Each chief will also be responsible for developing and hosting a series of workshops and bootcamps related to their discipline that will run throughout the semester', requirements: 'Chief Electrical Engineer is a technical expert in electrical engineering, ideally with a deep knowledge of best practice for PCB design, communication protocols (I2C, SPI, UART), soldering, etc.Is skilled in PCB design and bring-up, has good problem solving abilities.Skills in electromechanical integration (motors, motor controllers, etc) are a plus', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { @@ -129,11 +129,11 @@ const Hardware: Position[] = [ 'Each chief will consult teams to help eliminate blockers and push teams toward high quality work.The chiefs will work with each other and with the Chief Team Lead to push Generate Hardware both with regard to project development, but also our technical capabilities.Each chief will also be responsible for developing and hosting a series of workshops and bootcamps related to their discipline that will run throughout the semester', requirements: 'Chief Electrical Engineer is a technical expert in electrical engineering, ideally with a deep knowledge of best practice for PCB design, communication protocols (I2C, SPI, UART), soldering, etc.Is skilled in PCB design and bring-up, has good problem solving abilities.Skills in electromechanical integration (motors, motor controllers, etc) are a plus', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { @@ -145,11 +145,11 @@ const Hardware: Position[] = [ 'Each chief will consult teams to help eliminate blockers and push teams toward high quality work.The chiefs will work with each other and with the Chief Team Lead to push Generate Hardware both with regard to project development, but also our technical capabilities.Each chief will also be responsible for developing and hosting a series of workshops and bootcamps related to their discipline that will run throughout the semester', requirements: 'Chief Electrical Engineer is a technical expert in electrical engineering, ideally with a deep knowledge of best practice for PCB design, communication protocols (I2C, SPI, UART), soldering, etc.Is skilled in PCB design and bring-up, has good problem solving abilities.Skills in electromechanical integration (motors, motor controllers, etc) are a plus', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/Ujgvvf4Drj5sCju16', }, { @@ -161,11 +161,11 @@ const Hardware: Position[] = [ 'Project Leads are key members of the organization who empower teams of engineers and designers to develop products from concept to prototype, and help build our Generate community.This role is an opportunity to simultaneously mentor others and be mentored in a positive leadership environment', requirements: 'The ideal candidate has a desire to mentor others in a technical environment.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/WoESCr6f9GB7fSky7', }, ]; diff --git a/src/data/ApplyData/operations.ts b/src/data/ApplyData/operations.ts index 2f8a0f64..f8e5638b 100644 --- a/src/data/ApplyData/operations.ts +++ b/src/data/ApplyData/operations.ts @@ -17,11 +17,11 @@ const Operations: Position[] = [ 'Developmenting professional relationships with corporate/external companies. Communicating with recruiters and other professionals. ', requirements: 'The ideal candidate has confident and professional communication skills, and is creative and self-motivated, coming up with new and exciting methods to create meaningful corporate relationships.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdRGd12UHhCOdLiDeVSjuSDiDnjv2pkL7UJ-QViYCf0zXp44A/viewform?usp=sf_link', }, @@ -33,11 +33,11 @@ const Operations: Position[] = [ responsibilities: 'Responsibilities for this role include designing and developing data pipelines, performing data cleansing and validation, and developing/maintaining data documentation. This role is an opportunity to utilize your technical expertise within an entrepreneurial setting.', requirements: 'Previous experience using programming languages. Ability to effectively communicate. ', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSfuZjasfFVrp6fuLCMKq-RGRJDro81-HB3GZMvWqiCl1qzdDQ/viewform?usp=sf_link', }, @@ -50,11 +50,11 @@ const Operations: Position[] = [ 'Develop initiatives and resources for current and future Generate leaders. Build upon the current system that facilities and encourages the growth of our members.', requirements: 'The ideal candidate has impressive interpersonal skills, a passion for mentorship, and is creative and self-motivated, coming up with new and exciting methods to foster active acknowledgment of member growth.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdgWvDtFCb8FDOJJLd62bbnmUhgf6QR1ZdDP3thlq5ljD5CFg/viewform?usp=sf_link', }, @@ -67,11 +67,11 @@ const Operations: Position[] = [ 'Order all needed supplies and materials needed for projects, member development, events, etc. Oversee the budget of the organization and maintain the spending habits of each team. ', requirements: 'Must have prior experience managing finances. Will be evaluated and further interviewed by the Sherman Center Director.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeAs4ugY3xjaJ_0GdFlwqDsIvzi7vR0mfTKtZq0IByQinSpPQ/viewform?usp=sf_link', }, @@ -97,11 +97,11 @@ const Operations: Position[] = [ responsibilities: 'Oversee the management of our space booking software, enabling members to maximize its potential. ', requirements: 'Flexible and adaptability. Creative thinking ', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLScvNWF5YuMa-IZhIup5V4Y5JJ2zpDi12NtAzakHPurwZHp9TA/viewform?usp=sf_link', }, @@ -114,11 +114,11 @@ const Operations: Position[] = [ responsibilities: 'Organize and maintain the progress of internal documentation. Centralizing any Generate wide resources and information. ', requirements: 'Ability to think creatively and demonstrate organization skills.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSfnWMqtajHFHbQ43L09KT4QIZ8fiHF4zr_aR_YsekpUXyNdBw/viewform?usp=sf_link', }, @@ -131,11 +131,11 @@ const Operations: Position[] = [ 'The Data & Strategy Lead will facilitate weekly meetings and regular check-ins with the members of the Data & Strategy team as well as use their expertise to conceptualize and oversee projects that will provide even greater improvement in Generate as an organization', requirements: 'Previous experience using Tableu, Python, SQL, AWS, or Git.The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSfZ6sGNtUQr3SkzXx7f1VcJkXNlYUceWZcNk5Vj_2eyQ_Kscw/viewform?usp=sf_link', }, @@ -148,11 +148,11 @@ const Operations: Position[] = [ 'Collect and evaluate feedback from previous and current semesters to understand the diversity, equity, and inclusion of the community, as well as determining the needs of the community and where and how as a community we can grow. Maintaining and building initiatives that fosters the belonging, diversity, equity, and inclusion of team members in Generate', requirements: 'The ideal candidate has confident and professional communication skills, and is creative and self-motivated, looking for new ways to further the growth of the organization and members.The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture.Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdceh_MFnbmaW7XiDY-n2H7uE8NHwuElyjy0tBUafoqCyBZqQ/viewform?usp=sf_link', }, @@ -165,11 +165,11 @@ const Operations: Position[] = [ 'Identifying and addressing challenges for Generate that relate to experiences of working within the Build Studio physically and digitally.Maintaining existing processes for the Build Studio, including purchasing, organization, inventory, etc.Coordinating with organizations on campus and other Generate teams to develop internal trainings related to the Build Studio.Empower team members to work to achieve their personal and professional goals', requirements: 'The ideal candidate has a desire to mentor others.They are a strong team-player with the ability to advocate for an inclusive and welcoming team-culture. Has strong time management and organizational skills', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSdtp1IkFRnrOYa-m3smhYo7ss-bNjrvbFNoxhuyrWKKS4zx2A/viewform?usp=sf_link', }, diff --git a/src/data/ApplyData/software.ts b/src/data/ApplyData/software.ts index 6fe593ce..02f73935 100644 --- a/src/data/ApplyData/software.ts +++ b/src/data/ApplyData/software.ts @@ -16,11 +16,11 @@ const Software: Position[] = [ responsibilities: 'Attend and actively participate in regular team meetings.Fully prototype, iterate, and design Lo-Fi & Hi-Fi wireframes for a mobile app, website, or other digital productHost user testing to get real feedback on designs and support the iterative process.Accept and give feedback to peers, for both soft and hard skills.Help design the visual identity of both the product and the client organization in a way that is cohesive and suitable for the target audience.Assist the clients in making their product marketable, unique, and appealing.Iterate rapidly on client feedback', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeRm2c1KOjPyytj6NYxhsDiMeu2ewWc1B1oVL7dxaV1PF6h3g/viewform?usp=sf_link', }, @@ -32,11 +32,11 @@ const Software: Position[] = [ responsibilities: 'Attend and actively participate in regular team meetings.Fully prototype, iterate, and design Lo-Fi & Hi-Fi wireframes for a mobile app, website, or other digital productHost user testing to get real feedback on designs and support the iterative process.Accept and give feedback to peers, for both soft and hard skills.Help design the visual identity of both the product and the client organization in a way that is cohesive and suitable for the target audience.Assist the clients in making their product marketable, unique, and appealing.Iterate rapidly on client feedback', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeRm2c1KOjPyytj6NYxhsDiMeu2ewWc1B1oVL7dxaV1PF6h3g/viewform?usp=sf_link', }, @@ -48,11 +48,11 @@ const Software: Position[] = [ responsibilities: 'Work with a team of talented developers and designers to build a full-stack project for a clien.tAccept and give feedback to peers, both for soft and hard skills to grow as individuals and a team.Attend and actively participate in regular team meetings and code reviews', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://docs.google.com/forms/d/e/1FAIpQLSeh4uRxgeuDWIRkzFar9yoPfGf3zJ8TygWwQn3woFjyObvoqg/viewform?usp=sf_link', }, @@ -65,11 +65,11 @@ const Software: Position[] = [ 'Lead and mentor team members in technical design work. Assist the project lead in interviewing, evaluating, and hiring designers for your team during August and September. Assist the project lead in developing a semester long project scope, and ensuring the team stays on track to fulfill expectations. Communicate with the project lead to help create and delegate development goals for the team over the course of the semester. Communicate with team members, chief designers, and software director to plan, schedule, and run occasional cross-team critiques and weekly design reviews which provide feedback to team members on a regular basis. Contribute to designs whenever and wherever applicable', requirements: 'Desire to lead a team of designers. Experience participating and running design critique sessions. Experience with interactive design tool (Figma). Understanding of the UI/UX design process including but not limited to creating user flows, lo-fi wireframes, and hi-fi prototypes. Comfortable working with and/or creating brand design systems', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/2D5FNbvU5a7oh5Rs7', }, { @@ -79,11 +79,11 @@ const Software: Position[] = [ "At Generate, each team of Engineers is now guided by two Technical Leads who collaborate with the engineers on their team, the Project Lead, and the Design Lead to develop a product in alignment with their team's and client's goals.\nA Technical Lead is passionate about the software development process and is expected to excel in collaborative environments, both within their team and with external stakeholders. Proficiency in collaborative decision-making is crucial, especially concerning technical decisions, as they guide a team of talented engineers and foster skill development.\nThe dual Technical Leads play a pivotal role in maintaining the project's momentum. This involves ensuring the team builds strong, extensible foundations, mentoring both new and experienced engineers, and actively contributing to the codebase. Additionally, this involves keeping key stakeholders, such as the Project Lead, Chief Software Architect, and Chief Frontend Architect, informed of progress in an accurate and complete manner.", responsibilities: '', requirements: '', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/aKHPvDKey7Ksxfts8', }, { @@ -95,11 +95,11 @@ const Software: Position[] = [ 'Scope out a semester’s worth of work.Hire a team of leads, engineers and designers.Lead weekly team meetings.Overseeing assignments and project progress.Communicate updates the the client', requirements: 'Responsible, organized approach to management.Demonstrated excitement for Generate’s community.Understanding of software and/or design timelines and requirements', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: 'https://forms.gle/gLtnZU15VixE4hwJ9', }, { @@ -110,11 +110,11 @@ const Software: Position[] = [ responsibilities: 'Oversee frontend development on 5 software teams. Run frontend workshops geared at different expertise levels. Help debug when needed', requirements: 'Demonstrated frontend development skills. Debugging skills. Interest in mentoring and teaching.', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: '', }, { @@ -126,11 +126,11 @@ const Software: Position[] = [ 'Oversee structure & development on 5 software teams. Run workshops & bootcamps to set up semesters and improve Generate’s knowledge base. Meet with team tech leads weekly and check-in on progress & blockers. Advise project leads during pre-semester period', requirements: 'Strong understanding of how to structure projects. Demonstrated development skills. Debugging skills. Interest in mentoring and teaching', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: '', }, { @@ -142,11 +142,11 @@ const Software: Position[] = [ 'Oversee structure & design on 5 software teams. Run workshops & bootcamps to set up semesters and improve Generate’s knowledge base. Meet with team design leads weekly and check-in on progress & blockers. Advise project leads during pre-semester period', requirements: 'Experience designing intricate interfaces in Figma. Skills needed to lead workshops. Good critiquing skills. Interest in mentoring and teaching', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: '', }, { @@ -158,11 +158,11 @@ const Software: Position[] = [ 'Oversee brand design on up to 4 software teams. Work with Generate’s own brand. Run workshops & bootcamps to set up semesters and improve brand design in Generate. Meet with team design leads weekly and check-in on progress & blockers.', requirements: 'Experience developing at least one brand (personal projects work). Skills needed to lead workshops. Good critiquing skills. Interest in mentoring and teaching', - startDate: startDate, - endDate: endDate, + startDate, + endDate, workCommitment: 10, active: false, - remarks: remarks, + remarks, applicationLink: '', }, ]; diff --git a/src/data/ApplyData/types.ts b/src/data/ApplyData/types.ts index ac0fc774..6446a30e 100644 --- a/src/data/ApplyData/types.ts +++ b/src/data/ApplyData/types.ts @@ -1,6 +1,8 @@ +type Category = 'Clients' | 'Engagement' | 'Hardware' | 'Operations' | 'Software'; + export type Position = { positionTitle: string; - categoryType: string; + categoryType: Category; description: string; responsibilities: string; requirements: string; diff --git a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts index 92605a8c..eecf855b 100644 --- a/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts +++ b/src/pages/TeamsPage/ExpandedTeams/CommonTeam/JSONFiles/RolesJSON.ts @@ -1,5 +1,5 @@ // The Order of these is how it will appear on the management expanded teams page -export const Teams = ['management', 'hardware', 'software', 'operations', 'engagement']; +export const Teams = ['management', 'hardware', 'software', 'operations', 'engagement'] as const; export const RolesJSON = { management: { diff --git a/src/shared/useWebsite.ts b/src/shared/useWebsite.ts index 3279fc76..2b05926c 100644 --- a/src/shared/useWebsite.ts +++ b/src/shared/useWebsite.ts @@ -3,19 +3,13 @@ import { useState, useEffect } from 'react'; export default function useWebsite(): boolean { const [isWebsite, setIsWebsite] = useState(window.innerWidth > 650); - //choose the screen size - const handleResize = (): void => { - if (window.innerWidth > 650) { - setIsWebsite(true); - } else { - setIsWebsite(false); - } - }; - - // create an event listener useEffect(() => { + const handleResize = (): void => setIsWebsite(window.innerWidth > 650); + window.addEventListener('resize', handleResize); - }); + + return (): void => window.removeEventListener('resize', handleResize); + }, []); return isWebsite; } From 6c68baaf99b486ca87f36662d2c4b44d840903c0 Mon Sep 17 00:00:00 2001 From: mai Date: Thu, 1 Oct 2026 02:16:27 -0400 Subject: [PATCH 07/11] back button fix --- src/component/ScrollToTop.tsx | 9 +- src/component/ShadowedButton/index.jsx | 23 ++-- src/data/ApplyData/allApps.ts | 4 +- .../ChooseYourCharacter/index.jsx | 128 ++++++++---------- 4 files changed, 74 insertions(+), 90 deletions(-) diff --git a/src/component/ScrollToTop.tsx b/src/component/ScrollToTop.tsx index 88f5470b..6c6964f4 100644 --- a/src/component/ScrollToTop.tsx +++ b/src/component/ScrollToTop.tsx @@ -1,12 +1,15 @@ import { useEffect } from 'react'; -import { useLocation } from 'react-router-dom'; +import { useLocation, useNavigationType } from 'react-router-dom'; export default function ScrollToTop(): null { const { pathname } = useLocation(); + const navigationType = useNavigationType(); useEffect(() => { - window.scrollTo(0, 0); - }, [pathname]); + if (navigationType !== 'POP') { + window.scrollTo(0, 0); + } + }, [pathname, navigationType]); return null; } diff --git a/src/component/ShadowedButton/index.jsx b/src/component/ShadowedButton/index.jsx index 4a311238..97b18d9a 100644 --- a/src/component/ShadowedButton/index.jsx +++ b/src/component/ShadowedButton/index.jsx @@ -1,20 +1,21 @@ -import React from 'react' -import './style.css' -import { constants } from '../../assets/constants.js' +import React from 'react'; + +import './style.css'; +import { constants } from '../../assets/constants'; export default function ShadowedButton(props) { const ButtonStyle = { backgroundColor: props.fillColor, padding: `${props.yPad || '1rem'} ${props.xPad}`, - fontSize: `${props.fontSize || '1.5vw'}` - } + fontSize: `${props.fontSize || '1.5vw'}`, + }; const handleOnClick = () => { - const name = props.lnk - const key = name.replace(' ', '_') - const POSITIONS_URL = 'Position_' + key - window.location.assign(constants[POSITIONS_URL]) - } + const name = props.lnk; + const key = name.replace(' ', '_'); + const POSITIONS_URL = 'Position_' + key; + window.location.assign(constants[POSITIONS_URL]); + }; return ( - ) + ); } diff --git a/src/data/ApplyData/allApps.ts b/src/data/ApplyData/allApps.ts index f6f8e2be..94109c38 100644 --- a/src/data/ApplyData/allApps.ts +++ b/src/data/ApplyData/allApps.ts @@ -7,7 +7,9 @@ import type { Position } from './types'; type Team = 'clients' | 'hardware' | 'software' | 'operations' | 'management' | 'engagement'; -const applicationsByTeams: Record = { +type ApplicationsByTeams = Record; + +const applicationsByTeams: ApplicationsByTeams = { clients: Clients, hardware: Hardware, software: Software, diff --git a/src/pages/LandingPageV3/ChooseYourCharacter/index.jsx b/src/pages/LandingPageV3/ChooseYourCharacter/index.jsx index 7d96b08a..9226d4b8 100644 --- a/src/pages/LandingPageV3/ChooseYourCharacter/index.jsx +++ b/src/pages/LandingPageV3/ChooseYourCharacter/index.jsx @@ -1,35 +1,28 @@ -import React, { useEffect, useState } from 'react' -import ArcadeText from '../../../assets/images/landingpage-v3/DynamicArcadeText.jsx' -import ArcadeMachine from '../../../assets/images/landingpage-v3/DynamicArcadeMachine.jsx' -import { urlFor } from '../../../client.js' -import { useSanity } from '../../../services/useSanity.js' -import Mascot from './Mascot.jsx' +import React, { useEffect, useState } from 'react'; -const MascotRadioButton = ({ - color, - index, - isFullOpacity, - handleMouseEnter -}) => { +import ArcadeMachine from '../../../assets/images/landingpage-v3/DynamicArcadeMachine.jsx'; +import ArcadeText from '../../../assets/images/landingpage-v3/DynamicArcadeText.jsx'; +import { urlFor } from '../../../client'; +import { useSanity } from '../../../services/useSanity'; +import Mascot from './Mascot.jsx'; + +const MascotRadioButton = ({ color, index, isFullOpacity, handleMouseEnter }) => { return ( -
handleMouseEnter(index)} - > +
handleMouseEnter(index)}>
- ) -} + ); +}; const DirectorsList = ({ directors, coloredIndex, handleSelect }) => { return ( -
+
{directors && directors.map((director, index) => ( { /> ))}
- ) -} + ); +}; const ArcadeMachineWrapper = ({ directors, directorToTeam, coloredIndex }) => { if (!directors[coloredIndex]?.name) { - return <> + return <>; } - const currentTeam = directorToTeam.get(directors[coloredIndex].name) + const currentTeam = directorToTeam.get(directors[coloredIndex].name); return ( <> {directors && directorToTeam && directors[coloredIndex] && ( @@ -59,89 +52,74 @@ const ArcadeMachineWrapper = ({ directors, directorToTeam, coloredIndex }) => { /> )} - ) -} + ); +}; export default function ChooseYourCharacter() { - const directorsQuery = `*[_type == "director"] | order(zIndex)` - const branchQuery = `*[_type == "team"] {team,team_abbreviation,color,zIndex} | order(zIndex)` + const directorsQuery = `*[_type == "director"] | order(zIndex)`; + const branchQuery = `*[_type == "team"] {team,team_abbreviation,color,zIndex} | order(zIndex)`; - const directors = useSanity(directorsQuery, {}, (data) => + const directors = useSanity(directorsQuery, {}, data => data - ? data.map((director) => ({ + ? data.map(director => ({ ...director, color: director.color.hex, - image: urlFor(director.image) + image: urlFor(director.image), })) : [] - ) + ); - const branches = useSanity(branchQuery, {}, (data) => + const branches = useSanity(branchQuery, {}, data => data - ? data.map((branch) => ({ + ? data.map(branch => ({ ...branch, team: branch.team.toUpperCase(), - teamAbbreviation: (branch.team_abbreviation || '').toUpperCase() + teamAbbreviation: (branch.team_abbreviation || '').toUpperCase(), })) : [] - ) + ); useEffect(() => { if (branches.length === 0 || directors.length === 0) { - return + return; } else { const newDirectorMapping = new Map( - directors.map((director) => { - const branch = branches.find( - (branch) => - branch.team.toUpperCase() === director.team.toUpperCase() - ) - return [director.name, branch] + directors.map(director => { + const branch = branches.find(branch => branch.team.toUpperCase() === director.team.toUpperCase()); + return [director.name, branch]; }) - ) + ); - setDirectorToTeam(newDirectorMapping) + setDirectorToTeam(newDirectorMapping); } - }, [branches, directors]) + }, [branches, directors]); - const [coloredIndex, setSelected] = useState(0) - let [directorToTeam, setDirectorToTeam] = useState(new Map()) + const [coloredIndex, setSelected] = useState(0); + let [directorToTeam, setDirectorToTeam] = useState(new Map()); - const handleSelect = (index) => { - setSelected(index) - } + const handleSelect = index => { + setSelected(index); + }; return ( -
-
-

+
+
+

Choose Your Character

-
-
-
- +
+
+
+ {directors && directors[coloredIndex] && ( - + )}
- +
-
+
- ) + ); } From 98a771d824f54bed7d78a8ee1819df71076c5040 Mon Sep 17 00:00:00 2001 From: mai Date: Thu, 1 Oct 2026 02:17:06 -0400 Subject: [PATCH 08/11] small fix --- src/component/ScrollToTop.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/component/ScrollToTop.tsx b/src/component/ScrollToTop.tsx index 6c6964f4..12b03516 100644 --- a/src/component/ScrollToTop.tsx +++ b/src/component/ScrollToTop.tsx @@ -1,12 +1,12 @@ import { useEffect } from 'react'; -import { useLocation, useNavigationType } from 'react-router-dom'; +import { NavigationType, useLocation, useNavigationType } from 'react-router-dom'; export default function ScrollToTop(): null { const { pathname } = useLocation(); const navigationType = useNavigationType(); useEffect(() => { - if (navigationType !== 'POP') { + if (navigationType !== NavigationType.Pop) { window.scrollTo(0, 0); } }, [pathname, navigationType]); From 8d734eb65fb9d14f30b85aef641d741fe47ef1ff Mon Sep 17 00:00:00 2001 From: mai Date: Thu, 1 Oct 2026 11:12:28 -0400 Subject: [PATCH 09/11] migrate shared components to ts --- src/assets/images/applypage-v2/RightArrow.jsx | 22 -- src/assets/images/applypage-v2/RightArrow.tsx | 21 ++ ...deMachine.jsx => DynamicArcadeMachine.tsx} | 282 ++++++------------ .../landingpage-v3/DynamicArcadeText.jsx | 76 ----- .../landingpage-v3/DynamicArcadeText.tsx | 66 ++++ ...ner.jsx => HorizontalDesktopContainer.tsx} | 46 ++- ...leContainer.jsx => NewMobileContainer.tsx} | 27 +- .../Footer/HorizontalFooter/index.jsx | 65 ---- .../Footer/HorizontalFooter/index.tsx | 60 ++++ src/component/Footer/VerticalFooter/index.jsx | 69 ----- src/component/Footer/VerticalFooter/index.tsx | 64 ++++ src/component/Footer/index.jsx | 48 --- src/component/Footer/index.tsx | 61 ++++ .../LandingPage/MemberInfoSession/index.jsx | 49 --- .../LandingPage/MemberInfoSession/index.tsx | 51 ++++ .../LandingPage/PopupAd/CloseButton.jsx | 23 -- .../LandingPage/PopupAd/CloseButton.tsx | 31 ++ src/component/LandingPage/PopupAd/index.jsx | 47 --- src/component/LandingPage/PopupAd/index.tsx | 62 ++++ src/component/NavBar/{index.jsx => index.tsx} | 36 +-- src/component/NextPage/index.jsx | 14 - src/component/NextPage/index.tsx | 21 ++ .../ShadowedButton/{index.jsx => index.tsx} | 24 +- .../{SocialIcon.jsx => SocialIcon.tsx} | 54 ++-- .../ApplyPageV2/TeamApplicationCard/index.jsx | 130 +++----- .../ChooseYourCharacter/index.jsx | 4 +- 26 files changed, 701 insertions(+), 752 deletions(-) delete mode 100644 src/assets/images/applypage-v2/RightArrow.jsx create mode 100644 src/assets/images/applypage-v2/RightArrow.tsx rename src/assets/images/landingpage-v3/{DynamicArcadeMachine.jsx => DynamicArcadeMachine.tsx} (66%) delete mode 100644 src/assets/images/landingpage-v3/DynamicArcadeText.jsx create mode 100644 src/assets/images/landingpage-v3/DynamicArcadeText.tsx rename src/component/DesktopMobileHandler/{HorizontalDesktopContainer.jsx => HorizontalDesktopContainer.tsx} (61%) rename src/component/DesktopMobileHandler/{NewMobileContainer.jsx => NewMobileContainer.tsx} (66%) delete mode 100644 src/component/Footer/HorizontalFooter/index.jsx create mode 100644 src/component/Footer/HorizontalFooter/index.tsx delete mode 100644 src/component/Footer/VerticalFooter/index.jsx create mode 100644 src/component/Footer/VerticalFooter/index.tsx delete mode 100644 src/component/Footer/index.jsx create mode 100644 src/component/Footer/index.tsx delete mode 100644 src/component/LandingPage/MemberInfoSession/index.jsx create mode 100644 src/component/LandingPage/MemberInfoSession/index.tsx delete mode 100644 src/component/LandingPage/PopupAd/CloseButton.jsx create mode 100644 src/component/LandingPage/PopupAd/CloseButton.tsx delete mode 100644 src/component/LandingPage/PopupAd/index.jsx create mode 100644 src/component/LandingPage/PopupAd/index.tsx rename src/component/NavBar/{index.jsx => index.tsx} (60%) delete mode 100644 src/component/NextPage/index.jsx create mode 100644 src/component/NextPage/index.tsx rename src/component/ShadowedButton/{index.jsx => index.tsx} (52%) rename src/component/{SocialIcon.jsx => SocialIcon.tsx} (69%) diff --git a/src/assets/images/applypage-v2/RightArrow.jsx b/src/assets/images/applypage-v2/RightArrow.jsx deleted file mode 100644 index 94318ebe..00000000 --- a/src/assets/images/applypage-v2/RightArrow.jsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react' - -const RightArrowIcon = ({ color }) => { - return ( - - - - ) -} - -export default RightArrowIcon diff --git a/src/assets/images/applypage-v2/RightArrow.tsx b/src/assets/images/applypage-v2/RightArrow.tsx new file mode 100644 index 00000000..c4d73a9b --- /dev/null +++ b/src/assets/images/applypage-v2/RightArrow.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import type { JSX } from 'react'; + +type RightArrowIconProps = { + color: string; +}; + +const RightArrowIcon = ({ color }: RightArrowIconProps): JSX.Element => { + return ( + + + + ); +}; + +export default RightArrowIcon; diff --git a/src/assets/images/landingpage-v3/DynamicArcadeMachine.jsx b/src/assets/images/landingpage-v3/DynamicArcadeMachine.tsx similarity index 66% rename from src/assets/images/landingpage-v3/DynamicArcadeMachine.jsx rename to src/assets/images/landingpage-v3/DynamicArcadeMachine.tsx index d742cd74..554fb435 100644 --- a/src/assets/images/landingpage-v3/DynamicArcadeMachine.jsx +++ b/src/assets/images/landingpage-v3/DynamicArcadeMachine.tsx @@ -1,250 +1,166 @@ -import React from 'react' +import React from 'react'; +import type { JSX } from 'react'; + +type DynamicArcadeMachineProps = { + color?: string; + text?: string; + imgUrl?: string; +}; const DynamicArcadeMachine = ({ color = '#187DFF', text = '', - imgUrl = '' -}) => ( - - - - - - - ( + + + + + + + + + + + - - - - - - - + + + - - - - - + + + + + - - + cx="15.4082" + cy="8.3412" + rx="15.4082" + ry="8.3412" + transform="matrix(0.992465 -0.122528 0.17547 0.984485 113.027 514.635)" + fill="#A1A1A1" + /> + + - - + + - + - + {text} -) +); -export default DynamicArcadeMachine +export default DynamicArcadeMachine; diff --git a/src/assets/images/landingpage-v3/DynamicArcadeText.jsx b/src/assets/images/landingpage-v3/DynamicArcadeText.jsx deleted file mode 100644 index c498571a..00000000 --- a/src/assets/images/landingpage-v3/DynamicArcadeText.jsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react' - -const DynamicIcon = ({ color = '#187DFF', director = {}, id }) => ( -
- - - - - - - - - - - {director.title} - - - {director.name} - - - - {director.email}@northeastern.edu - - - -
-) - -export default DynamicIcon diff --git a/src/assets/images/landingpage-v3/DynamicArcadeText.tsx b/src/assets/images/landingpage-v3/DynamicArcadeText.tsx new file mode 100644 index 00000000..bf20fef9 --- /dev/null +++ b/src/assets/images/landingpage-v3/DynamicArcadeText.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import type { JSX } from 'react'; + +type Director = { + title?: string; + name?: string; + email?: string; +}; + +type DynamicIconProps = { + color?: string; + director?: Director; + id?: string; +}; + +const DynamicIcon = ({ color = '#187DFF', director = {}, id }: DynamicIconProps): JSX.Element => ( +
+ + + + + + + + + + + {director.title} + + + {director.name} + + + + {director.email}@northeastern.edu + + + +
+); + +export default DynamicIcon; diff --git a/src/component/DesktopMobileHandler/HorizontalDesktopContainer.jsx b/src/component/DesktopMobileHandler/HorizontalDesktopContainer.tsx similarity index 61% rename from src/component/DesktopMobileHandler/HorizontalDesktopContainer.jsx rename to src/component/DesktopMobileHandler/HorizontalDesktopContainer.tsx index 234c742c..5d70ddac 100644 --- a/src/component/DesktopMobileHandler/HorizontalDesktopContainer.jsx +++ b/src/component/DesktopMobileHandler/HorizontalDesktopContainer.tsx @@ -1,7 +1,16 @@ -import React from "react"; -import { useEffect, useRef } from "react"; -import Row from "react-bootstrap/esm/Row"; -import "./style.css"; +import React from 'react'; +import { useEffect, useRef } from 'react'; +import type { JSX, ReactNode } from 'react'; +import Row from 'react-bootstrap/esm/Row'; + +import './style.css'; + +type HorizontalDesktopContainerProps = { + children: ReactNode; + desktopBGColor: string; + containerClassName?: string; + rowClassName?: string; +}; /** * A component that handles rendering content differently based on whether the user is on desktop or mobile. @@ -19,18 +28,25 @@ export default function HorizontalDesktopContainer({ children, desktopBGColor, ...props -}) { - const scrollContainerRef = useRef(null); +}: HorizontalDesktopContainerProps): JSX.Element { + const scrollContainerRef = useRef(null); useEffect(() => { const scrollContainer = scrollContainerRef.current; - const handleWheel = (evt) => { + + if (!scrollContainer) { + return; + } + + const handleWheel = (evt: WheelEvent): void => { evt.preventDefault(); scrollContainer.scrollLeft += evt.deltaY; }; - scrollContainer.addEventListener("wheel", handleWheel); - return () => { - scrollContainer.removeEventListener("wheel", handleWheel); + + scrollContainer.addEventListener('wheel', handleWheel); + + return (): void => { + scrollContainer.removeEventListener('wheel', handleWheel); }; }, []); @@ -40,15 +56,13 @@ export default function HorizontalDesktopContainer({
{/* The content is wrapped in a Row component from the react-bootstrap library to ensure proper layout */} - - {children} - + {children}
); diff --git a/src/component/DesktopMobileHandler/NewMobileContainer.jsx b/src/component/DesktopMobileHandler/NewMobileContainer.tsx similarity index 66% rename from src/component/DesktopMobileHandler/NewMobileContainer.jsx rename to src/component/DesktopMobileHandler/NewMobileContainer.tsx index 512b8ca1..380aa191 100644 --- a/src/component/DesktopMobileHandler/NewMobileContainer.jsx +++ b/src/component/DesktopMobileHandler/NewMobileContainer.tsx @@ -1,6 +1,15 @@ -import React from "react"; -import Column from "react-bootstrap/esm/Col"; -import "./style.css"; +import React from 'react'; +import type { JSX, ReactNode } from 'react'; +import Column from 'react-bootstrap/esm/Col'; + +import './style.css'; + +type NewMobileContainerProps = { + children: ReactNode; + mobileBGColor: string; + containerClassName?: string; + rowClassName?: string; +}; /** * A component that handles rendering content differently based on whether the user is on desktop or mobile. @@ -18,19 +27,13 @@ export default function NewMobileContainer({ children, mobileBGColor, ...props -}) { +}: NewMobileContainerProps): JSX.Element { return ( <> {/* Mobile view */} -
+
{/* The content is wrapped in a Column component from the react-bootstrap library to ensure proper layout */} - - {children} - + {children}
); diff --git a/src/component/Footer/HorizontalFooter/index.jsx b/src/component/Footer/HorizontalFooter/index.jsx deleted file mode 100644 index 9f1b9b13..00000000 --- a/src/component/Footer/HorizontalFooter/index.jsx +++ /dev/null @@ -1,65 +0,0 @@ -import React from 'react' -import '../style.css' -import GenerateLogo from '../../../assets/images/landingpage-v2/footerlogo.svg' //"../../assets/images/landingpage-v2/footerlogo.svg"; -import { FooterLink } from '..' -import { useNavigate } from 'react-router-dom' -import { SocialIcon, socialIcons } from '../../SocialIcon' -import { pages } from '..' -import ShadowedButton from '../../ShadowedButton' - -function HorizontalFooter() { - const navigate = useNavigate() - const currentPageUrl = window.location.href - const handleOnClick = () => { - window.scrollTo(0, 0) - navigate('/') - } - - return ( -
-
- - } - onClick={handleOnClick} - /> -
-
-
- {pages.map((page, index) => ( - - ))} -
-
- {socialIcons.map((si, index) => ( -
- {si.map((s, subIndex) => ( -
- -
- ))} -
- ))} -
-
-
- ) -} - -export default HorizontalFooter diff --git a/src/component/Footer/HorizontalFooter/index.tsx b/src/component/Footer/HorizontalFooter/index.tsx new file mode 100644 index 00000000..fc03e7d3 --- /dev/null +++ b/src/component/Footer/HorizontalFooter/index.tsx @@ -0,0 +1,60 @@ +import React from 'react'; +import type { JSX } from 'react'; + +import '../style.css'; +import { useNavigate } from 'react-router-dom'; + +import { FooterLink } from '..'; +import { pages } from '..'; +import GenerateLogo from '../../../assets/images/landingpage-v2/footerlogo.svg'; //"../../assets/images/landingpage-v2/footerlogo.svg"; +import ShadowedButton from '../../ShadowedButton'; +import { SocialIcon, socialIcons } from '../../SocialIcon'; + +function HorizontalFooter(): JSX.Element { + const navigate = useNavigate(); + const currentPageUrl = window.location.href; + + const handleOnClick = (): void => { + window.scrollTo(0, 0); + navigate('/'); + }; + + return ( +
+
+ } + onClick={handleOnClick} + /> +
+
+
+ {pages.map((page, index) => ( + + ))} +
+
+ {socialIcons.map((si, index) => ( +
+ {si.map((s, subIndex) => ( +
+ +
+ ))} +
+ ))} +
+
+
+ ); +} + +export default HorizontalFooter; diff --git a/src/component/Footer/VerticalFooter/index.jsx b/src/component/Footer/VerticalFooter/index.jsx deleted file mode 100644 index 452bd17f..00000000 --- a/src/component/Footer/VerticalFooter/index.jsx +++ /dev/null @@ -1,69 +0,0 @@ -import React from 'react' -import '../style.css' -import GenerateLogo from '../../../assets/images/landingpage-v2/footerlogo.svg' -import { useNavigate } from 'react-router-dom' -import { SocialIcon, socialIcons } from '../../SocialIcon' -import { pages, FooterLink } from '../index' -import ShadowedButton from '../../ShadowedButton' - -function VerticalFooter() { - const currentPageUrl = window.location.href - const navigate = useNavigate() - const handleOnClick = () => { - window.scrollTo(0, 0) - navigate('/') - } - - return ( -
-
- - } - onClick={handleOnClick} - /> -
-
-
- {pages.map((page, index) => ( - - ))} -
-
- {socialIcons.map((si, index) => ( -
- {si.map((s) => ( - - ))} -
- ))} -
-
-
- ) -} - -export default VerticalFooter diff --git a/src/component/Footer/VerticalFooter/index.tsx b/src/component/Footer/VerticalFooter/index.tsx new file mode 100644 index 00000000..61aa9174 --- /dev/null +++ b/src/component/Footer/VerticalFooter/index.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import type { JSX } from 'react'; + +import '../style.css'; +import { useNavigate } from 'react-router-dom'; + +import GenerateLogo from '../../../assets/images/landingpage-v2/footerlogo.svg'; +import ShadowedButton from '../../ShadowedButton'; +import { SocialIcon, socialIcons } from '../../SocialIcon'; +import { pages, FooterLink } from '../index'; + +function VerticalFooter(): JSX.Element { + const currentPageUrl = window.location.href; + const navigate = useNavigate(); + + const handleOnClick = (): void => { + window.scrollTo(0, 0); + navigate('/'); + }; + + return ( +
+
+ } + onClick={handleOnClick} + /> +
+
+
+ {pages.map((page, index) => ( + + ))} +
+
+ {socialIcons.map((si, index) => ( +
+ {si.map(s => ( + + ))} +
+ ))} +
+
+
+ ); +} + +export default VerticalFooter; diff --git a/src/component/Footer/index.jsx b/src/component/Footer/index.jsx deleted file mode 100644 index 3c74ffb8..00000000 --- a/src/component/Footer/index.jsx +++ /dev/null @@ -1,48 +0,0 @@ -import React from 'react' -import HorizontalFooter from './HorizontalFooter' -import useWebsite from '../../shared/useWebsite' -import VerticalFooter from './VerticalFooter' - -export const pages = [ - // { name: 'Generate', link: '/' }, - { name: 'Apply', link: '/apply' }, - { name: 'About', link: '/' }, - // { name: 'Culture', link: '/culture' }, - // { name: 'Teams', link: '/teams' }, - // { name: "People", link: "/", disabled: true }, - { name: 'Projects', link: '/projects' } -] - -export const FooterLink = ({ page, currentPage }) => { - const { name, link, disabled } = page - const isCurrentPage = currentPage === link - - return ( -
- {disabled ? ( - - {name} - - ) : isCurrentPage ? ( - - - {name} {'<'} - - - ) : ( - - {name} - - )} -
- ) -} - -function Footer() { - const website = useWebsite() - const isBigScreen = !window.matchMedia('(max-device-width: 650px)').matches - - return isBigScreen && website ? : -} - -export default Footer diff --git a/src/component/Footer/index.tsx b/src/component/Footer/index.tsx new file mode 100644 index 00000000..7488db98 --- /dev/null +++ b/src/component/Footer/index.tsx @@ -0,0 +1,61 @@ +import React from 'react'; +import type { JSX } from 'react'; + +import useWebsite from '../../shared/useWebsite'; +import HorizontalFooter from './HorizontalFooter'; +import VerticalFooter from './VerticalFooter'; + +type FooterPage = { + name: string; + link: string; + disabled?: boolean; +}; + +type FooterLinkProps = { + page: FooterPage; + currentPage: string; +}; + +export const pages: FooterPage[] = [ + // { name: 'Generate', link: '/' }, + { name: 'Apply', link: '/apply' }, + { name: 'About', link: '/' }, + // { name: 'Culture', link: '/culture' }, + // { name: 'Teams', link: '/teams' }, + // { name: "People", link: "/", disabled: true }, + { name: 'Projects', link: '/projects' }, +]; + +export const FooterLink = ({ page, currentPage }: FooterLinkProps): JSX.Element => { + const { name, link, disabled } = page; + const isCurrentPage = currentPage === link; + + return ( +
+ {disabled ? ( + + {name} + + ) : isCurrentPage ? ( + + + {name} {'<'} + + + ) : ( + + {name} + + )} +
+ ); +}; + +function Footer(): JSX.Element { + const website = useWebsite(); + const isBigScreen = !window.matchMedia('(max-device-width: 650px)').matches; + + return isBigScreen && website ? : ; +} + +export default Footer; diff --git a/src/component/LandingPage/MemberInfoSession/index.jsx b/src/component/LandingPage/MemberInfoSession/index.jsx deleted file mode 100644 index 8430940f..00000000 --- a/src/component/LandingPage/MemberInfoSession/index.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react' -import PopupAd from '../PopupAd' -import puzzle from './assets/gen-puzzle.svg' -import './style.css' - -/** - * Member Info Session popup. - */ -function ApplyTodayPopup({ url, onClose }) { - return ( - -
- - -

MEMBER APPLICATIONS OPEN

- -

- We want Engineers{' '} - Builders -

- -

- Whether you're into hardware engineering, UX Design, marketing, game - design, finance, data science, or art there's a space for{' '} - YOU in Generate. -

- -

- Yes, we hire plenty of hardware, software, and data engineers. But we - build alongside marketers, operations specialists, artists, internal - systems developers, game designers, and more. -

- -

- Applications open now. Come lead, build, and leave your mark. -

- - - Apply Today! - - -
-
- ) -} - -export default ApplyTodayPopup diff --git a/src/component/LandingPage/MemberInfoSession/index.tsx b/src/component/LandingPage/MemberInfoSession/index.tsx new file mode 100644 index 00000000..0b3154e4 --- /dev/null +++ b/src/component/LandingPage/MemberInfoSession/index.tsx @@ -0,0 +1,51 @@ +import React from 'react'; +import type { JSX } from 'react'; + +import PopupAd from '../PopupAd'; +import puzzle from './assets/gen-puzzle.svg'; +import './style.css'; + +type ApplyTodayPopupProps = { + url: string; + onClose?: () => void; +}; + +/** + * Member Info Session popup. + */ +function ApplyTodayPopup({ url, onClose }: ApplyTodayPopupProps): JSX.Element { + return ( + +
+ + +

MEMBER APPLICATIONS OPEN

+ +

+ We want Engineers Builders +

+ +

+ Whether you're into hardware engineering, UX Design, marketing, game design, finance, data science, or art + there's a space for YOU in Generate. +

+ +

+ Yes, we hire plenty of hardware, software, and data engineers. But we build alongside marketers, operations + specialists, artists, internal systems developers, game designers, and more. +

+ +

Applications open now. Come lead, build, and leave your mark.

+ + + Apply Today! + + +
+
+ ); +} + +export default ApplyTodayPopup; diff --git a/src/component/LandingPage/PopupAd/CloseButton.jsx b/src/component/LandingPage/PopupAd/CloseButton.jsx deleted file mode 100644 index 55788bdc..00000000 --- a/src/component/LandingPage/PopupAd/CloseButton.jsx +++ /dev/null @@ -1,23 +0,0 @@ -import React from 'react' -import './CloseButton.css' - -/** - * Close button styled in Generate's design language - * - * By default it floats centered just above the popup content - */ -function CloseButton({ onClick, className = '', style }) { - return ( - - ) -} - -export default CloseButton diff --git a/src/component/LandingPage/PopupAd/CloseButton.tsx b/src/component/LandingPage/PopupAd/CloseButton.tsx new file mode 100644 index 00000000..bcb0c513 --- /dev/null +++ b/src/component/LandingPage/PopupAd/CloseButton.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import type { CSSProperties, JSX } from 'react'; + +import './CloseButton.css'; + +type CloseButtonProps = { + onClick: () => void; + className?: string; + style?: CSSProperties; +}; + +/** + * Close button styled in Generate's design language + * + * By default it floats centered just above the popup content + */ +function CloseButton({ onClick, className = '', style }: CloseButtonProps): JSX.Element { + return ( + + ); +} + +export default CloseButton; diff --git a/src/component/LandingPage/PopupAd/index.jsx b/src/component/LandingPage/PopupAd/index.jsx deleted file mode 100644 index e61eebbf..00000000 --- a/src/component/LandingPage/PopupAd/index.jsx +++ /dev/null @@ -1,47 +0,0 @@ -import React, { useState } from 'react' -import CloseButton from './CloseButton' -import './style.css' - -/** - * A generalized popup ad wrapper that composes over arbitrary content. - */ -function PopupAd({ - children, - showOverlay = true, - closeOnOverlayClick = true, - showCloseButton = true, - onClose, - className = '', - style -}) { - const [isOpen, setIsOpen] = useState(true) - - const closePopup = () => { - setIsOpen(false) - if (onClose) onClose() - } - - if (!isOpen) return null - - const handleOverlayClick = () => { - if (closeOnOverlayClick) closePopup() - } - - return ( -
-
e.stopPropagation()} - > - {showCloseButton && } - {children} -
-
- ) -} - -export default PopupAd diff --git a/src/component/LandingPage/PopupAd/index.tsx b/src/component/LandingPage/PopupAd/index.tsx new file mode 100644 index 00000000..872a4fea --- /dev/null +++ b/src/component/LandingPage/PopupAd/index.tsx @@ -0,0 +1,62 @@ +import React, { useState } from 'react'; +import type { CSSProperties, JSX, ReactNode } from 'react'; + +import CloseButton from './CloseButton'; +import './style.css'; + +type PopupAdProps = { + children: ReactNode; + showOverlay?: boolean; + closeOnOverlayClick?: boolean; + showCloseButton?: boolean; + onClose?: () => void; + className?: string; + style?: CSSProperties; +}; + +/** + * A generalized popup ad wrapper that composes over arbitrary content. + */ +function PopupAd({ + children, + showOverlay = true, + closeOnOverlayClick = true, + showCloseButton = true, + onClose, + className = '', + style, +}: PopupAdProps): JSX.Element | null { + const [isOpen, setIsOpen] = useState(true); + + const closePopup = (): void => { + setIsOpen(false); + + if (onClose) { + onClose(); + } + }; + + if (!isOpen) { + return null; + } + + const handleOverlayClick = (): void => { + if (closeOnOverlayClick) { + closePopup(); + } + }; + + return ( +
+
e.stopPropagation()}> + {showCloseButton && } + {children} +
+
+ ); +} + +export default PopupAd; diff --git a/src/component/NavBar/index.jsx b/src/component/NavBar/index.tsx similarity index 60% rename from src/component/NavBar/index.jsx rename to src/component/NavBar/index.tsx index 52f0d0cf..6fe85db2 100644 --- a/src/component/NavBar/index.jsx +++ b/src/component/NavBar/index.tsx @@ -1,28 +1,30 @@ -import React from 'react' -import GenerateLogo from '../../assets/images/landingpage/affiliateorgintros/Generate Logo_Nav.png' -import './style.css' -import { useNavigate } from 'react-router-dom' +import React from 'react'; +import type { JSX } from 'react'; +import { useNavigate } from 'react-router-dom'; -const NavBar = () => { - const navigate = useNavigate() - const currentUrl = window.location.href.split('/').at(-1) +import './style.css'; +import GenerateLogo from '../../assets/images/landingpage/affiliateorgintros/Generate Logo_Nav.png'; + +const NavBar = (): JSX.Element => { + const navigate = useNavigate(); + const currentUrl = window.location.href.split('/').at(-1); return ( -