├── CNAME ├── .prettierignore ├── src ├── react-app-env.d.ts ├── Assets │ ├── venmo.png │ ├── RAPSheet.png │ ├── democracylab-logo.png │ ├── openseattle-logo.png │ ├── Onboarding │ │ ├── circleCheck.png │ │ ├── openCircle.png │ │ ├── arrowRight.svg │ │ ├── video.svg │ │ ├── checklist.svg │ │ ├── person.svg │ │ ├── heart.svg │ │ ├── fb.svg │ │ ├── file.svg │ │ ├── chat.svg │ │ ├── paper.svg │ │ ├── link.svg │ │ ├── exclamation.svg │ │ ├── head.svg │ │ ├── simpleQuestion.svg │ │ ├── linkedIn.svg │ │ ├── world.svg │ │ ├── venn.svg │ │ ├── screens.svg │ │ ├── tool.svg │ │ ├── meditate.svg │ │ ├── remote.svg │ │ ├── progress.svg │ │ ├── circleArrow.svg │ │ ├── checkmark.svg │ │ ├── symbols.svg │ │ ├── boat.svg │ │ ├── twitter.svg │ │ ├── doc.svg │ │ ├── userResearch.svg │ │ ├── bug.svg │ │ ├── group.svg │ │ ├── question.svg │ │ └── smallLogo.svg │ ├── gsStep1.svg │ ├── gsStep4.svg │ ├── gsStep2.svg │ ├── gsStep3.svg │ ├── topScrollButton.svg │ ├── diversity2.svg │ ├── cv_small_logo_dark. 1.svg │ └── marketing.svg ├── Components │ ├── __tests__ │ │ ├── jsconfig.json │ │ ├── GivingTuesday.spec.js │ │ ├── Footer.spec.js │ │ ├── ProgressBar.spec.js │ │ └── ToolTipModal.spec.js │ ├── DonationVideo.jsx │ ├── customHooks │ │ └── useDocumentTitle.jsx │ ├── Fact.jsx │ ├── FactIconGroup.jsx │ ├── ResponsiveJumpButtonGroup.jsx │ ├── Onboarding │ │ ├── PrimaryButton.jsx │ │ ├── Footer.jsx │ │ ├── MiroVideoModal.jsx │ │ ├── FindVideoModal.jsx │ │ ├── SocialContainer.jsx │ │ └── CompleteButton.jsx │ ├── FactSubList.jsx │ ├── FactGroup.jsx │ ├── LegalDisclaimer.jsx │ ├── FactSimpleCard.jsx │ ├── ContentSection.jsx │ ├── NavigationLogo.jsx │ ├── RestartButton.jsx │ ├── AccordionBuilder.jsx │ ├── HeroPanel.jsx │ ├── Table.jsx │ ├── DonateLevelCard.jsx │ ├── DonationForm.jsx │ ├── VolunteerRolesCard.jsx │ ├── RedesignHeroPanel.jsx │ ├── StepsIconGroup.jsx │ ├── ImageContentCard.jsx │ ├── TabPanelGroup.jsx │ ├── FactCard.jsx │ ├── FactImageCard.jsx │ ├── ToolTipModal.jsx │ ├── DonateDialog.jsx │ ├── PublicHousingList.jsx │ ├── ShelterList.jsx │ ├── FactExpandMoreCard.jsx │ ├── ProgressBar.jsx │ └── NavCardGroup.jsx ├── App.css ├── setupTests.js ├── index.css ├── ui-kit │ ├── ListItemLink.jsx │ ├── ExternalLink.jsx │ ├── RedesignButtonSecondary.jsx │ ├── RedesignButtonPrimary.jsx │ ├── BulletedListMui.jsx │ ├── RedesignButtonWide.jsx │ ├── CalulatorDialog.jsx │ ├── PrimaryButton.jsx │ ├── SecondaryButton.jsx │ ├── SkipLink.tsx │ ├── ListItem.jsx │ ├── NavButtonMobile.jsx │ ├── BackButton.jsx │ ├── ListItemMobileSnap.jsx │ └── NavButton.jsx ├── CSS │ ├── constants.css │ └── Calculator.css ├── reportWebVitals.js ├── Pages │ ├── Calculator │ │ ├── MainBranchTitleStyles.js │ │ ├── QuickStartGuideStyles.js │ │ ├── EndScreenStyles.js │ │ ├── SpecialCaseTitleStyles.js │ │ ├── MainBranchTitle.jsx │ │ └── QuestionScreenStyles.js │ ├── ErrorPage.jsx │ ├── ContactPage.jsx │ ├── ContactSuccessPage.jsx │ ├── PartnerPage.jsx │ └── Onboarding │ │ └── OnboardingHome.jsx ├── trackingUtils.js ├── index.jsx ├── Styles │ ├── Onboarding │ │ ├── useFooterStyles.js │ │ ├── useMod2Styles.js │ │ ├── useModalStyles.js │ │ ├── useButtonStyles.js │ │ └── useHomeStyles.js │ ├── WhyVacateEducationStyles.ts │ ├── WhyVacateHousingStyles.ts │ ├── WhyVacateEmploymentStyle.js │ ├── useWhyVacateStyles.js │ ├── useHomeStyles.js │ └── useGetInvolvedStyles.js ├── data │ ├── siteMap.ts │ └── calculatorPagesTypes.ts └── Subpages │ ├── WhyVacate │ ├── IconWithHeaderAndText.jsx │ ├── TextWithImage.jsx │ ├── TextWithCTAButton.jsx │ ├── TwoParagraphTextWithHeader.jsx │ ├── HousingBarriers.jsx │ ├── GovBarriers.jsx │ ├── EducationBarriers.jsx │ └── HousingOtherOptions.jsx │ └── GetStarted │ ├── RecordInformation.jsx │ └── LegalAidServices.jsx ├── public ├── robot.txt ├── styles.css ├── favicon.ico ├── apple-touch-icon.png └── manifest.json ├── .vscode ├── extensions.json └── settings.json ├── .env ├── .prettierrc.json ├── CODEOWNERS ├── .gitignore ├── .github └── workflows │ ├── post-commit-action.yml │ └── pull-request-checks.yml ├── tsconfig.json ├── LICENSE ├── pull_request_template.md ├── .eslintrc.yaml ├── 404.html ├── scripts └── generate-sitemap.mjs └── package.json /CNAME: -------------------------------------------------------------------------------- 1 | convictionvacation.org -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | CODEOWNERS 2 | LICENSE -------------------------------------------------------------------------------- /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /public/robot.txt: -------------------------------------------------------------------------------- 1 | User-agent:* 2 | Sitemap: https://clearviction.org/sitemap.xml -------------------------------------------------------------------------------- /public/styles.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 0; 5 | } 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/Assets/venmo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/src/Assets/venmo.png -------------------------------------------------------------------------------- /src/Assets/RAPSheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/src/Assets/RAPSheet.png -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["esbenp.prettier-vscode", "dbaeumer.vscode-eslint"] 3 | } 4 | -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/public/apple-touch-icon.png -------------------------------------------------------------------------------- /src/Components/__tests__/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "typeAcquisition": { 3 | "include": ["jest"] 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/Assets/democracylab-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/src/Assets/democracylab-logo.png -------------------------------------------------------------------------------- /src/Assets/openseattle-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/src/Assets/openseattle-logo.png -------------------------------------------------------------------------------- /src/Assets/Onboarding/circleCheck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/src/Assets/Onboarding/circleCheck.png -------------------------------------------------------------------------------- /src/Assets/Onboarding/openCircle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseattle/clearviction-v1/HEAD/src/Assets/Onboarding/openCircle.png -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | REACT_APP_SERVICE_ID = "service_yp3zmqj" 2 | REACT_APP_TEMPLATE_ID = "template_juz0rzp" 3 | REACT_APP_USER_ID = "user_oO1g8se7aDgjbfVNT50uo" -------------------------------------------------------------------------------- /src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | text-align: center; 3 | position: relative; 4 | min-height: 100vh; 5 | margin: 0; 6 | padding: 0; 7 | line-height: 1; 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "[javascriptreact]": { 5 | "editor.defaultFormatter": "rvest.vs-code-prettier-eslint" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": true, 5 | "singleQuote": false, 6 | "printWidth": 120, 7 | "bracketSpacing": true, 8 | "bracketSameLine": false, 9 | "arrowParens": "avoid" 10 | } 11 | -------------------------------------------------------------------------------- /src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import "@testing-library/jest-dom"; 6 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # These owners will be the default owners for everything in 2 | 3 | # the repo. Unless a later match takes precedence, 4 | 5 | # all of these users will be requested for 6 | 7 | # review when someone opens a pull request. 8 | 9 | * @stuttskl @mhyneman8 @erluebbers @ShepleySound 10 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: "Roboto", sans-serif; 3 | -webkit-font-smoothing: antialiased; 4 | -moz-osx-font-smoothing: grayscale; 5 | line-height: 1.5; 6 | } 7 | 8 | code { 9 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; 10 | } 11 | -------------------------------------------------------------------------------- /src/ui-kit/ListItemLink.jsx: -------------------------------------------------------------------------------- 1 | import { ListItem } from "@mui/material"; 2 | 3 | // eslint-disable-next-line import/prefer-default-export 4 | export const ListItemLink = props => { 5 | // eslint-disable-next-line react/jsx-props-no-spreading 6 | return ; 7 | }; 8 | -------------------------------------------------------------------------------- /src/Components/DonationVideo.jsx: -------------------------------------------------------------------------------- 1 | import ReactPlayer from "react-player"; 2 | 3 | const DonationVideo = () => { 4 | return ( 5 |
6 | 7 |
8 | ); 9 | }; 10 | 11 | export default DonationVideo; 12 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/arrowRight.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | /.pnp 4 | .pnp.js 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | 12 | # misc 13 | .DS_Store 14 | .env.local 15 | .env.development.local 16 | .env.test.local 17 | .env.production.local 18 | 19 | npm-debug.log* 20 | yarn-debug.log* 21 | yarn-error.log* 22 | 23 | node_modules 24 | 25 | /public/sitemap.xml -------------------------------------------------------------------------------- /src/CSS/constants.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --dark-blue: #2d3047; 3 | --heavy-blue: #2f3554; 4 | --light-gray: #dcdcdc; 5 | --gray: #c4c4c4; 6 | --blue: #a6b5cc; 7 | --light-blue: #4e6c99; 8 | --light-blue-transparent: rgba(78, 108, 153, 0.5); 9 | --z-index-front: 999; 10 | --gray90: #e5e5e5; 11 | --white: #ffffff; 12 | --black: #000000; 13 | } 14 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/checklist.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Components/customHooks/useDocumentTitle.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | 3 | const useDocumentTitle = title => { 4 | const [documentTitle, setDocumentTitle] = useState(title); 5 | 6 | useEffect(() => { 7 | document.title = `${documentTitle}Clearviction`; 8 | }, [documentTitle]); 9 | 10 | return [documentTitle, setDocumentTitle]; 11 | }; 12 | 13 | export { useDocumentTitle }; 14 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/person.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/heart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /src/Components/Fact.jsx: -------------------------------------------------------------------------------- 1 | import { Box, Typography } from "@mui/material"; 2 | 3 | const Fact = ({ icon, text }) => { 4 | return ( 5 | <> 6 | 7 | {icon} 8 | 9 | 10 | {text} 11 | 12 | 13 | ); 14 | }; 15 | 16 | export default Fact; 17 | -------------------------------------------------------------------------------- /.github/workflows/post-commit-action.yml: -------------------------------------------------------------------------------- 1 | name: Run prettier 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | prettier: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repo 14 | uses: actions/checkout@v2 15 | 16 | - name: Use Node.js 17 | uses: actions/setup-node@v2 18 | 19 | - name: run prettier 20 | run: npx prettier --check . 21 | -------------------------------------------------------------------------------- /src/Components/FactIconGroup.jsx: -------------------------------------------------------------------------------- 1 | import { Grid } from "@mui/material"; 2 | import Fact from "./Fact"; 3 | 4 | const FactIconGroup = ({ facts }) => { 5 | return ( 6 | 7 | {facts.map(fact => ( 8 | 9 | 10 | 11 | ))} 12 | 13 | ); 14 | }; 15 | 16 | export default FactIconGroup; 17 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Clearviction", 3 | "name": "Conviction Vacation Eligibility and Legal, Housing, Education, Employment Resources", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "apple-touch-icon.png", 12 | "sizes": "192x192", 13 | "type": "image/png" 14 | } 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/fb.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Pages/Calculator/MainBranchTitleStyles.js: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@mui/styles"; 2 | 3 | export const MainBranchTitleStyles = makeStyles(() => ({ 4 | grid: { 5 | display: "inline-block", 6 | marginTop: "72px", 7 | justifyContent: "center", 8 | textAlign: "center", 9 | }, 10 | header: { 11 | marginBottom: "24px", 12 | }, 13 | body: { 14 | marginBottom: "72px", 15 | }, 16 | button: { 17 | marginBottom: "40px", 18 | }, 19 | })); 20 | -------------------------------------------------------------------------------- /src/ui-kit/ExternalLink.jsx: -------------------------------------------------------------------------------- 1 | import { Link } from "@mui/material"; 2 | import { OpenInNewOutlined } from "@mui/icons-material"; 3 | 4 | // eslint-disable-next-line import/prefer-default-export 5 | export const ExternalLink = ({ href, children, name = "_blank", className }) => { 6 | return ( 7 | 8 | {children} 9 | 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /src/Components/__tests__/GivingTuesday.spec.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { render, screen } from "@testing-library/react"; 3 | import { ThemeProvider } from "@mui/material/styles"; 4 | import Theme from "../Theme.tsx"; 5 | import GivingTuesdayPage from "../../Pages/GivingTuesdayPage.jsx"; 6 | 7 | describe("", () => { 8 | it("renders", () => { 9 | render( 10 | 11 | 12 | 13 | ); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/chat.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/gsStep1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/ui-kit/RedesignButtonSecondary.jsx: -------------------------------------------------------------------------------- 1 | import { Button } from "@mui/material"; 2 | import { styled } from "@mui/material/styles"; 3 | 4 | // Uses styled() instead of makeStyles() 5 | export const RedesignButtonSecondary = styled(Button)(({ theme }) => ({ 6 | width: 248, 7 | height: 48, 8 | borderRadius: 50, 9 | backgroundColor: "white", 10 | color: theme.palette.primary.dark, 11 | boxShadow: "0 2px 4px rgba(0, 0, 0, 0.2)", 12 | "&:hover": { 13 | backgroundColor: theme.palette.primary.main, 14 | color: theme.palette.primary.contrastText, 15 | }, 16 | })); 17 | -------------------------------------------------------------------------------- /src/Assets/gsStep4.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/ui-kit/RedesignButtonPrimary.jsx: -------------------------------------------------------------------------------- 1 | import { Button } from "@mui/material"; 2 | import { styled } from "@mui/material/styles"; 3 | 4 | // Uses styled() instead of makeStyles() 5 | export const RedesignButtonPrimary = styled(Button)(({ theme }) => ({ 6 | width: 248, 7 | height: 48, 8 | borderRadius: 50, 9 | backgroundColor: theme.palette.primary.main, 10 | boxShadow: "0 2px 4px rgba(0, 0, 0, 0.2)", 11 | color: theme.palette.primary.contrastText, 12 | "&:hover": { 13 | backgroundColor: theme.palette.secondary.main, 14 | color: theme.palette.secondary.contrastText, 15 | }, 16 | })); 17 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/paper.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/ui-kit/BulletedListMui.jsx: -------------------------------------------------------------------------------- 1 | import { Typography } from "@mui/material"; 2 | 3 | /** 4 | * BulletedListMui is a solution for unordered lists that want bullet points 5 | * since Material-Ui does not have a specific solution for this scenario. 6 | * @param {*} props 7 | * @returns ul element with Material Ui style applied to it 8 | */ 9 | const BulletedListMui = props => { 10 | const { children, textColor } = props; 11 | return ( 12 | 13 | {children} 14 | 15 | ); 16 | }; 17 | 18 | export default BulletedListMui; 19 | -------------------------------------------------------------------------------- /src/Components/ResponsiveJumpButtonGroup.jsx: -------------------------------------------------------------------------------- 1 | import { Button, ButtonGroup, useMediaQuery } from "@mui/material"; 2 | 3 | const ResponsiveJumpButtonGroup = ({ links }) => { 4 | const matches = useMediaQuery("(min-width:600px)"); 5 | return ( 6 | 7 | {links.map((link, idx) => ( 8 | 11 | ))} 12 | 13 | ); 14 | }; 15 | 16 | export default ResponsiveJumpButtonGroup; 17 | -------------------------------------------------------------------------------- /src/trackingUtils.js: -------------------------------------------------------------------------------- 1 | const GA_MEASUREMENT_ID = "UA-215117449-1"; 2 | 3 | export function trackPageview(pageTitle) { 4 | if (typeof window.gtag !== "undefined") { 5 | window.gtag("event", "page_view", { 6 | page_title: pageTitle, 7 | page_location: window.location.href, 8 | page_path: window.location.pathname, 9 | send_to: GA_MEASUREMENT_ID, 10 | }); 11 | } 12 | } 13 | 14 | export function trackClick(clickedText) { 15 | if (typeof window.gtag !== "undefined") { 16 | window.gtag("event", "click", { 17 | event_label: clickedText, 18 | }); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/ui-kit/RedesignButtonWide.jsx: -------------------------------------------------------------------------------- 1 | import { Button } from "@mui/material"; 2 | import { styled } from "@mui/material/styles"; 3 | 4 | // Uses styled() instead of makeStyles() 5 | const RedesignButtonWide = styled(Button)(({ theme }) => ({ 6 | width: "300px", 7 | height: 48, 8 | borderRadius: 50, 9 | backgroundColor: theme.palette.primary.main, 10 | boxShadow: "0 2px 4px rgba(0, 0, 0, 0.2)", 11 | color: theme.palette.primary.contrastText, 12 | "&:hover": { 13 | backgroundColor: theme.palette.secondary.main, 14 | color: theme.palette.secondary.contrastText, 15 | }, 16 | })); 17 | 18 | export default RedesignButtonWide; 19 | -------------------------------------------------------------------------------- /src/Components/Onboarding/PrimaryButton.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Link } from "react-router-dom"; 3 | import { Typography } from "@mui/material"; 4 | import { useButtonStyles } from "../../Styles/Onboarding/useButtonStyles"; 5 | 6 | const PrimaryButton = ({ button }) => { 7 | const classes = useButtonStyles(); 8 | const { text, link } = button; 9 | return ( 10 | 11 |
12 | {text} 13 |
14 | 15 | ); 16 | }; 17 | 18 | export default PrimaryButton; 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "esModuleInterop": true, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "noFallthroughCasesInSwitch": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src", "scripts/generate-sitemap.mjs"] 20 | } 21 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/link.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/index.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./index.css"; 4 | import "./CSS/constants.css"; 5 | import { BrowserRouter as Router } from "react-router-dom"; 6 | import App from "./App"; 7 | import reportWebVitals from "./reportWebVitals"; 8 | 9 | ReactDOM.render( 10 | 11 | 12 | 13 | 14 | , 15 | document.getElementById("root") 16 | ); 17 | 18 | // If you want to start measuring performance in your app, pass a function 19 | // to log results (for example: reportWebVitals(console.log)) 20 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 21 | reportWebVitals(); 22 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/exclamation.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Styles/Onboarding/useFooterStyles.js: -------------------------------------------------------------------------------- 1 | import { makeStyles } from "@mui/styles"; 2 | 3 | export const useFooterStyles = makeStyles(theme => ({ 4 | footerContainer: { 5 | display: "flex", 6 | flexDirection: "row", 7 | justifyContent: "space-between", 8 | margin: theme.spacing(6), 9 | [theme.breakpoints.down("sm")]: { 10 | margin: theme.spacing(2), 11 | }, 12 | }, 13 | completeContainer: { 14 | display: "flex", 15 | justifyContent: "flex-end", 16 | margin: theme.spacing(3.625, 6, 3.625, 6), 17 | marginBottom: "-20px", 18 | [theme.breakpoints.down("md")]: { 19 | justifyContent: "center", 20 | }, 21 | }, 22 | })); 23 | -------------------------------------------------------------------------------- /src/Components/Onboarding/Footer.jsx: -------------------------------------------------------------------------------- 1 | import { useFooterStyles } from "../../Styles/Onboarding/useFooterStyles"; 2 | import PrimaryButton from "./PrimaryButton"; 3 | import CompleteButton from "./CompleteButton"; 4 | 5 | const Footer = ({ button1, button2 }) => { 6 | const classes = useFooterStyles(); 7 | 8 | return ( 9 | <> 10 |
11 | 12 |
13 |
14 | 15 | 16 |
17 | 18 | ); 19 | }; 20 | 21 | export default Footer; 22 | -------------------------------------------------------------------------------- /src/Components/FactSubList.jsx: -------------------------------------------------------------------------------- 1 | import { Link, List, ListItem } from "@mui/material"; 2 | 3 | const FactSubList = ({ resources }) => { 4 | return ( 5 | 6 | {resources.map(resource => ( 7 | 8 | 15 | {resource.name} 16 | 17 | 18 | ))} 19 | 20 | ); 21 | }; 22 | export default FactSubList; 23 | -------------------------------------------------------------------------------- /src/Components/FactGroup.jsx: -------------------------------------------------------------------------------- 1 | import { Grid } from "@mui/material"; 2 | import FactExpandMoreCard from "./FactExpandMoreCard"; 3 | 4 | const FactGroup = ({ facts }) => { 5 | return ( 6 | 7 | {facts.map(fact => ( 8 | 9 | 16 | 17 | ))} 18 | 19 | ); 20 | }; 21 | 22 | export default FactGroup; 23 | -------------------------------------------------------------------------------- /src/Assets/gsStep2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/head.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Components/LegalDisclaimer.jsx: -------------------------------------------------------------------------------- 1 | import PropTypes from "prop-types"; 2 | import { Box, Typography } from "@mui/material"; 3 | import { makeStyles } from "@mui/styles"; 4 | 5 | const useStyles = makeStyles(theme => ({ 6 | disclaimer: { 7 | margin: theme.spacing(2), 8 | fontSize: 14, 9 | }, 10 | })); 11 | 12 | const LegalDisclaimer = ({ text }) => { 13 | const classes = useStyles(); 14 | return ( 15 | 16 | 17 | {text} 18 | 19 | 20 | ); 21 | }; 22 | 23 | export default LegalDisclaimer; 24 | 25 | LegalDisclaimer.propTypes = { 26 | text: PropTypes.string.isRequired, 27 | }; 28 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/simpleQuestion.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/gsStep3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/linkedIn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Components/FactSimpleCard.jsx: -------------------------------------------------------------------------------- 1 | import { Card, CardContent, Typography } from "@mui/material"; 2 | import { makeStyles } from "@mui/styles"; 3 | 4 | const useStyles = makeStyles(theme => ({ 5 | rootStyle: { 6 | minHeight: "14em", 7 | display: "flex", 8 | justifyContent: "center", 9 | alignItems: "center", 10 | margin: theme.spacing(2), 11 | }, 12 | })); 13 | 14 | const FactSimpleCard = props => { 15 | const { children } = props; 16 | const classes = useStyles(); 17 | return ( 18 | 19 | 20 | 21 | {children} 22 | 23 | 24 | 25 | ); 26 | }; 27 | 28 | export default FactSimpleCard; 29 | -------------------------------------------------------------------------------- /src/Components/ContentSection.jsx: -------------------------------------------------------------------------------- 1 | import { Container, Paper, Typography } from "@mui/material"; 2 | import { useHomeStyles } from "../Styles/useHomeStyles"; 3 | 4 | const ContentSection = props => { 5 | const { sectionId, sectionSize, sectionTitle, children } = props; 6 | const classes = useHomeStyles(); 7 | 8 | return ( 9 | 10 | 11 | {sectionTitle && ( 12 | 13 | {sectionTitle} 14 | 15 | )} 16 | {children} 17 | 18 | 19 | ); 20 | }; 21 | 22 | export default ContentSection; 23 | -------------------------------------------------------------------------------- /src/Assets/Onboarding/world.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/Pages/ErrorPage.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import { Typography, Container, Grid } from "@mui/material"; 3 | import { trackPageview } from "../trackingUtils"; 4 | import { useDocumentTitle } from "../Components/customHooks/useDocumentTitle"; 5 | 6 | /** MATERIAL UI IMPORTS */ 7 | 8 | const ErrorPage = () => { 9 | useEffect(() => trackPageview("Error"), []); 10 | useDocumentTitle("Error Page - "); 11 | 12 | return ( 13 | 14 | 15 | 16 | 17 | Oops, page not found! 18 | 19 | 20 | 21 | 22 | ); 23 | }; 24 | 25 | export default ErrorPage; 26 | -------------------------------------------------------------------------------- /src/Components/__tests__/Footer.spec.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { render, screen } from "@testing-library/react"; 3 | import { BrowserRouter } from "react-router-dom"; 4 | import { ThemeProvider } from "@mui/material/styles"; 5 | import Footer from "../Footer"; 6 | import Theme from "../Theme.tsx"; 7 | 8 | describe("