diff --git a/frontend/src/components/ElectionForm/QuickPoll.tsx b/frontend/src/components/ElectionForm/QuickPoll.tsx
index db7a9de4..2c9d617c 100644
--- a/frontend/src/components/ElectionForm/QuickPoll.tsx
+++ b/frontend/src/components/ElectionForm/QuickPoll.tsx
@@ -5,12 +5,12 @@ import TextField from "@mui/material/TextField";
import { useNavigate } from "react-router"
import structuredClone from '@ungap/structured-clone';
import { StyledButton, StyledTextField } from '../styles.js'
-import { Button, IconButton } from '@mui/material';
+import { Box, Button, IconButton } from '@mui/material';
import DeleteIcon from '@mui/icons-material/Delete';
-import { useCookie } from '../../hooks/useCookie';
import { useLocalStorage } from '../../hooks/useLocalStorage';
import Typography from '@mui/material/Typography';
import { usePostElection } from '../../hooks/useAPI';
+import { useCookie } from '../../hooks/useCookie';
const QuickPoll = ({ authSession }) => {
const [tempID, setTempID] = useCookie('temp_id', '0')
@@ -141,24 +141,46 @@ const QuickPoll = ({ authSession }) => {
return (
)
}
diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx
index f5600aeb..b77df5a5 100644
--- a/frontend/src/components/Footer.tsx
+++ b/frontend/src/components/Footer.tsx
@@ -10,8 +10,7 @@ export default function Footer() {
- theme.palette.grey[200],//Make theme pallete for this
+ backgroundColor: 'var(--brand-gray-1)',
p: 6,
width: '100%',
mt: 'auto'
diff --git a/frontend/src/components/LandingPage.tsx b/frontend/src/components/LandingPage.tsx
index 0ffc0523..6c9d5865 100644
--- a/frontend/src/components/LandingPage.tsx
+++ b/frontend/src/components/LandingPage.tsx
@@ -3,45 +3,63 @@ import Grid from "@mui/material/Grid";
import Typography from '@mui/material/Typography';
import Box from '@mui/material/Box';
import QuickPoll from './ElectionForm/QuickPoll';
+import LandingPageHero from './LandingPage/LandingPageHero';
+import LandingPageFeatureElections from './LandingPage/LandingPageFeaturedElections';
+import LandingPageFeatures from './LandingPage/LandingPageFeatures';
+import LandingPageSignUpBar from './LandingPage/LandingPageSignUpBar';
+import LandingPageTestimonials from './LandingPage/LandingPageTestimonials';
+import { Paper } from '@mui/material';
+import LandingPagePricing from './LandingPage/LandingPagePricing';
const LandingPage = ({ authSession }) => {
return (
-
-
-
- STAR Elections
-
-
- Open source election software
-
-
- From quick polls to highly secure elections
-
-
- Voting methods approved by the Equal Vote Coalition
-
-
-
-
-
-
+
+
+
+
+
+ $0.00,
+ description: <>Unlimited voters for Public elections
Private elections up to 100 voters>
+ },
+ {
+ title: 'Professional',
+ price: <>Contact for quote>,
+ description: <>Private elections over 100 voters
All proceeds go to non-profit use
Discounts are available on request
Email elections@equal.vote>
+ },
+ ]}/>
)
}
diff --git a/frontend/src/components/LandingPage/FeaturedElection.tsx b/frontend/src/components/LandingPage/FeaturedElection.tsx
new file mode 100644
index 00000000..2aae9e5c
--- /dev/null
+++ b/frontend/src/components/LandingPage/FeaturedElection.tsx
@@ -0,0 +1,24 @@
+import { Card, CardActionArea, CardContent, Paper, Typography } from "@mui/material";
+import React from 'react';
+import { useNavigate } from "react-router";
+
+
+export default ({electionId}) => {
+ const navigate = useNavigate();
+
+ return navigate(`/Election/${electionId}`)} elevation={8} sx={{
+ width: '100%',
+ maxWidth: '20rem',
+ display: 'flex',
+ flexDirection: 'column',
+ flexShrink: '0',
+ }}>
+
+
+ Election Title
+ election info
+ election info
+
+
+
+}
\ No newline at end of file
diff --git a/frontend/src/components/LandingPage/LandingPageFeaturedElections.tsx b/frontend/src/components/LandingPage/LandingPageFeaturedElections.tsx
new file mode 100644
index 00000000..58256f7c
--- /dev/null
+++ b/frontend/src/components/LandingPage/LandingPageFeaturedElections.tsx
@@ -0,0 +1,32 @@
+import { Box, Typography } from '@mui/material'
+import React from 'react'
+import FeaturedElection from './FeaturedElection'
+
+export default ({electionIds}) => {
+ return
+
+ Vote in a Featured Public Election
+
+
+ {electionIds.map(electionId => )}
+
+
+}
\ No newline at end of file
diff --git a/frontend/src/components/LandingPage/LandingPageFeatures.tsx b/frontend/src/components/LandingPage/LandingPageFeatures.tsx
new file mode 100644
index 00000000..ad3bf8d4
--- /dev/null
+++ b/frontend/src/components/LandingPage/LandingPageFeatures.tsx
@@ -0,0 +1,74 @@
+import { Box, Grid, Typography } from '@mui/material'
+import React from 'react'
+import FeaturedElection from './FeaturedElection'
+
+export default () => {
+ let rowSxProps = {
+ paddingLeft: 5,
+ display: 'flex',
+ flexDirection: {xs: 'column', lg: 'row'},
+ width: '100%',
+ maxWidth: '110rem',
+ gap: {xs: '0rem', lg: '8rem'},
+ };
+
+ let itemSxProps= {
+ flexShrink: '0',
+ width: {xs: '100%', lg: '35%'},
+ };
+
+ return
+ Features
+
+
+
+ Voting Methods
+ Supports a variety of single and multiwinner voting methods
+
+
+
+ - STAR Voting
+ - STAR PR
+ - Ranked Robin
+
+
+
+
+
+
+ - Direct Link
great for Open elections
+ - Email List
ballots will be emailed to voters
+ - Voter ID List
voters input an id to access ballot
+
+
+
+ Reach your Voters
+ Lots of ways to share ballots with Voters
+
+
+
+
+ Use Cases
+ Good for elections of all shapes and sizes
+
+
+
+ - Public Polls
for online opinion polling
+ - Private Polls
for your club
+ - Official Elections
for your organization
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/frontend/src/components/LandingPage/LandingPageHero.tsx b/frontend/src/components/LandingPage/LandingPageHero.tsx
new file mode 100644
index 00000000..aa5c2be8
--- /dev/null
+++ b/frontend/src/components/LandingPage/LandingPageHero.tsx
@@ -0,0 +1,70 @@
+import Box from '@mui/material/Box'
+import Grid from '@mui/material/Grid'
+import Typography from '@mui/material/Typography'
+import React from 'react'
+import QuickPoll from '../ElectionForm/QuickPoll'
+
+export default ({authSession}) => {
+ return (
+
+
+
+
+ STAR Elections
+
+
+ Open source election software
+
+
+ From quick polls to highly secure elections
+
+
+ Voting methods approved by the Equal Vote Coalition
+
+
+
+ Elections Created
+ 10001
+
+
+ Votes Cast
+ 10001
+
+
+
+
+
+
+
+
+
+
+ )
+}
\ No newline at end of file
diff --git a/frontend/src/components/LandingPage/LandingPagePricing.tsx b/frontend/src/components/LandingPage/LandingPagePricing.tsx
new file mode 100644
index 00000000..8fd5592c
--- /dev/null
+++ b/frontend/src/components/LandingPage/LandingPagePricing.tsx
@@ -0,0 +1,44 @@
+import { Box, Paper, Typography } from '@mui/material'
+import React from 'react'
+
+export default ({options}) => {
+ return
+
+ Pricing
+
+
+ {options.map(option =>
+
+ {option.title}
+ {option.price}
+ {option.description}
+
+ )}
+
+
+}
\ No newline at end of file
diff --git a/frontend/src/components/LandingPage/LandingPageSignUpBar.tsx b/frontend/src/components/LandingPage/LandingPageSignUpBar.tsx
new file mode 100644
index 00000000..52bf08b9
--- /dev/null
+++ b/frontend/src/components/LandingPage/LandingPageSignUpBar.tsx
@@ -0,0 +1,38 @@
+import { Box, Button, Typography } from '@mui/material';
+import React from 'react';
+import { StyledButton } from '../styles';
+
+export default ({authSession}) =>
+
+
+ Sign up to create your first election (It's Free!)
+ {/*I just copied styled button but removed the full width*/ }
+
+
+
\ No newline at end of file
diff --git a/frontend/src/components/LandingPage/LandingPageTestimonials.tsx b/frontend/src/components/LandingPage/LandingPageTestimonials.tsx
new file mode 100644
index 00000000..dfc67dea
--- /dev/null
+++ b/frontend/src/components/LandingPage/LandingPageTestimonials.tsx
@@ -0,0 +1,46 @@
+import { Box, Typography } from '@mui/material'
+import React from 'react'
+
+export default ({testimonials}) => {
+ return
+
+ Testimonials
+
+
+ {testimonials.map(testimonial =>
+
+
+ "{testimonial.quote}"
-{testimonial.name}
+
+
+ )}
+
+
+}
\ No newline at end of file
diff --git a/frontend/src/index.css b/frontend/src/index.css
index 80b30a07..5fc39811 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -14,7 +14,8 @@
--ltbrand-red: #FF6069FF;
--brand-purple: #4D2586;
- --brand-ltblue: #2AA2B3;
+ --brand-ltblue: #2AA2B3;
+ --brand-ltblue-comma: 42, 162, 179; /* comma version to be used within rgba */
--brand-blue: #02627c;
--brand-gold: #FFE156;
--brand-red: #EE2C53;
@@ -371,4 +372,12 @@ code {
.activewinnerResultTab{
border-bottom: 1px solid transparent;
background-color: var(--brand-white);
+}
+
+.featuredElection:hover{
+ /*Copied from Paper elevation 8, except for color change and doubled opacity*/
+ box-shadow:
+ 0px 5px 5px -3px rgba(var(--brand-ltblue-comma), 0.4),
+ 0px 8px 10px 1px rgba(var(--brand-ltblue-comma), 0.28),
+ 0px 3px 14px 2px rgba(var(--brand-ltblue-comma), 0.24);
}
\ No newline at end of file