diff --git a/src/colors.scss b/src/colors.scss
index d00f37b..a779639 100644
--- a/src/colors.scss
+++ b/src/colors.scss
@@ -2,6 +2,8 @@ $primary-main: var(--mui-palette-primary-main);
$primary-light: var(--mui-palette-primary-light);
$primary-dark: var(--mui-palette-primary-dark);
+$accent-color: #41bfc2;
+
$box-shadow-color: rgba(0, 0, 0, 0.1);
$border-color: #27323c;
diff --git a/src/components/AppBar/AppBar.tsx b/src/components/AppBar/AppBar.tsx
index dd21b03..89c37f5 100644
--- a/src/components/AppBar/AppBar.tsx
+++ b/src/components/AppBar/AppBar.tsx
@@ -2,6 +2,7 @@ import {
AppBar as AppBarMui,
Box,
Button,
+ Container,
Menu,
MenuItem,
Toolbar,
@@ -117,112 +118,120 @@ export const AppBar = () => {
const isAuthenticated = authState?.loggedIn === true
return (
-
-
-
- navigate('/')} />
-
+
+
+
+
+ navigate('/')} />
+
-
- {!isAuthenticated && (
-
- )}
-
- {isAuthenticated && (
- <>
-
-
-
+
+
+
+
+
+
+
+ >
+ )}
+
+
+
)
}
diff --git a/src/components/AppBar/style.module.scss b/src/components/AppBar/style.module.scss
index 718b872..1e58cb7 100644
--- a/src/components/AppBar/style.module.scss
+++ b/src/components/AppBar/style.module.scss
@@ -1,12 +1,15 @@
@import '../../colors.scss';
+@import '../../sizes.scss';
.AppBar {
background-color: $background-color !important;
z-index: 1400 !important;
- height: 60px;
+ height: $header-height;
flex-direction: row !important;
align-items: center;
+ border-bottom: solid 1px rgba(0, 0, 0, 0.075);
+
.toolbar {
flex-grow: 1;
display: flex;
diff --git a/src/components/Footer/Footer.tsx b/src/components/Footer/Footer.tsx
new file mode 100644
index 0000000..460f6e0
--- /dev/null
+++ b/src/components/Footer/Footer.tsx
@@ -0,0 +1,71 @@
+import { Box, Button, Grid, Link } from '@mui/material'
+import { Link as RouterLink } from 'react-router-dom'
+import styles from './style.module.scss'
+
+export const Footer = () => (
+
+)
diff --git a/src/components/Footer/style.module.scss b/src/components/Footer/style.module.scss
new file mode 100644
index 0000000..b711182
--- /dev/null
+++ b/src/components/Footer/style.module.scss
@@ -0,0 +1,83 @@
+.borderTop {
+ border-top: solid 1px rgba(0, 0, 0, 0.075);
+}
+
+.footer {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+
+ letter-spacing: 1px;
+ font-size: 14px;
+ line-height: 25px;
+ word-break: break-word;
+ text-shadow: 0 0 1px rgba(0, 0, 0, 0.15);
+ font-weight: 500;
+}
+
+.nav {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ grid-template-rows: none;
+ grid-gap: 15px;
+
+ > a {
+ min-height: 0;
+ }
+
+ button {
+ width: 100%;
+ justify-content: start;
+ }
+}
+
+.about {
+ font-weight: 500;
+
+ > p {
+ margin: 0;
+ }
+}
+
+.links {
+ > a + a {
+ margin-left: 25px;
+ }
+}
+
+.credits {
+ width: 100%;
+ text-align: center;
+ padding: 10px 0;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.5);
+ font-weight: 500;
+
+ > a {
+ transition: ease 0.4s;
+ color: rgba(1, 170, 173, 0.75);
+ text-decoration-color: inherit;
+
+ &:hover {
+ color: #01aaad;
+ }
+ }
+}
+
+.logo {
+ width: 100%;
+ max-width: 150px;
+ height: auto;
+
+ > img {
+ width: 100%;
+ max-width: 150px;
+ height: auto;
+ }
+}
+
+@media (max-width: 992px) {
+ .logo {
+ max-width: 200px;
+ }
+}
diff --git a/src/components/Landing/CardComponent/CardComponent.tsx b/src/components/Landing/CardComponent/CardComponent.tsx
new file mode 100644
index 0000000..be39ae0
--- /dev/null
+++ b/src/components/Landing/CardComponent/CardComponent.tsx
@@ -0,0 +1,58 @@
+import { Box, Typography } from '@mui/material'
+import { ReactElement } from 'react'
+
+import styles from './style.module.scss'
+
+interface CardComponentProps {
+ icon: ReactElement
+ title: ReactElement
+ description: ReactElement
+ actions?: ReactElement
+}
+
+export const CardComponent = ({
+ icon,
+ title,
+ description,
+ actions
+}: CardComponentProps) => {
+ return (
+
+
+ {icon}
+
+
+ {title}
+
+
+ {description}
+
+
+
+
+ {actions}
+
+
+ )
+}
diff --git a/src/components/Landing/CardComponent/style.module.scss b/src/components/Landing/CardComponent/style.module.scss
new file mode 100644
index 0000000..f82e98f
--- /dev/null
+++ b/src/components/Landing/CardComponent/style.module.scss
@@ -0,0 +1,43 @@
+@import '../../../colors.scss';
+
+.card {
+ border-radius: 32px;
+ padding: 25px;
+
+ box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0);
+ border: solid 1px rgba(0, 0, 0, 0);
+ position: relative;
+ background: #f4f4f4;
+
+ transition: ease 0.4s;
+
+ display: flex;
+ flex-direction: column;
+ gap: 15px;
+
+ &:hover {
+ box-shadow: 2px 2px 8px 0 rgba(0, 0, 0, 0.1);
+ background: #ffffff;
+ border: solid 1px rgba(0, 0, 0, 0.075);
+
+ .icon {
+ opacity: 1;
+ filter: saturate(1);
+ }
+ }
+}
+
+.content {
+ display: flex;
+ flex-direction: column;
+
+ gap: 25px;
+}
+
+.icon {
+ color: $accent-color;
+ transition: ease 0.4s;
+ font-size: 25px;
+ opacity: 0.5;
+ filter: saturate(0);
+}
diff --git a/src/index.css b/src/index.css
index b71a3cb..9ab84bb 100644
--- a/src/index.css
+++ b/src/index.css
@@ -1,5 +1,5 @@
:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
+ font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
@@ -25,8 +25,6 @@ a:hover {
body {
margin: 0;
- /* display: flex;
- place-items: center; */
min-width: 320px;
min-height: 100vh;
background-color: #f4f4fb;
@@ -70,8 +68,11 @@ button {
}
}
-.main {
- padding: 60px 0;
+#root {
+ min-height: 100vh;
+ display: flex;
+ flex-direction: column;
+ background: white;
}
.hide-mobile {
diff --git a/src/layouts/Main.tsx b/src/layouts/Main.tsx
index 60b052b..57d3597 100644
--- a/src/layouts/Main.tsx
+++ b/src/layouts/Main.tsx
@@ -1,4 +1,3 @@
-import { Box } from '@mui/material'
import Container from '@mui/material/Container'
import { Event, kinds } from 'nostr-tools'
import { useEffect, useState } from 'react'
@@ -28,6 +27,8 @@ import {
} from '../utils'
import { useAppSelector } from '../hooks'
import { SubCloser } from 'nostr-tools/abstract-pool'
+import styles from './style.module.scss'
+import { Footer } from '../components/Footer/Footer'
export const MainLayout = () => {
const dispatch: Dispatch = useDispatch()
@@ -152,19 +153,10 @@ export const MainLayout = () => {
return (
<>
-
-
-
-
-
-
+
+
+
+
>
)
}
diff --git a/src/layouts/style.module.scss b/src/layouts/style.module.scss
index 8d92532..b36c5d0 100644
--- a/src/layouts/style.module.scss
+++ b/src/layouts/style.module.scss
@@ -1,22 +1,31 @@
@import '../colors.scss';
+@import '../sizes.scss';
+
+.main {
+ padding: $header-height 0 0 0;
+ flex-grow: 1;
+}
@font-face {
font-family: 'Avenir';
font-weight: normal;
- src: local('Avenir'),
+ src:
+ local('Avenir'),
url(../assets/avenir-font/AvenirLTStd-Roman.otf) format('opentype');
}
@font-face {
font-family: 'Avenir';
font-weight: bold;
- src: local('Avenir'),
+ src:
+ local('Avenir'),
url(../assets/avenir-font/AvenirLTStd-Black.otf) format('opentype');
}
@font-face {
font-family: 'Avenir';
font-weight: lighter;
- src: local('Avenir'),
+ src:
+ local('Avenir'),
url(../assets/avenir-font/AvenirLTStd-Book.otf) format('opentype');
}
diff --git a/src/pages/landing/LandingPage.tsx b/src/pages/landing/LandingPage.tsx
index 2fff12e..0ac23ec 100644
--- a/src/pages/landing/LandingPage.tsx
+++ b/src/pages/landing/LandingPage.tsx
@@ -1,11 +1,19 @@
-import { Box, Button, Typography, useTheme } from '@mui/material'
+import {
+ Box,
+ Button,
+ Container,
+ Link,
+ Typography,
+ useTheme
+} from '@mui/material'
import { useEffect } from 'react'
import { useSelector } from 'react-redux'
-import { Link, useLocation, useNavigate } from 'react-router-dom'
+import { useLocation, useNavigate } from 'react-router-dom'
import { appPublicRoutes } from '../../routes'
import { State } from '../../store/rootReducer'
import { saveVisitedLink } from '../../utils'
import styles from './style.module.scss'
+import { CardComponent } from '../../components/Landing/CardComponent/CardComponent'
const bodyBackgroundColor = document.body.style.backgroundColor
@@ -16,72 +24,244 @@ export const LandingPage = () => {
const theme = useTheme()
- useEffect(() => {
- saveVisitedLink(location.pathname, location.search)
- }, [location])
-
const onSignInClick = async () => {
navigate(appPublicRoutes.login)
}
- return (
-
-
-
- Secure Document Signing
-
-
- SIGit is an open-source and self-hostable solution for secure document
- signing and verification. Code is MIT licenced and available at{' '}
-
- https://git.sigit.io/sig/it
-
+ {/* Font Awesome Free 6.1.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. */}
+
+
+ ),
+ title: <>Open Source>,
+ description: (
+ <>
+ Code is MIT licenced and available at{' '}
+
+ https://git.nostrdev.com/sigit/sigit.io
+
.
-
-
- SIGit lets you Create, Sign and Verify from any device with a browser.
-
-
- Unlike other solutions, SIGit is totally private - files are encrypted
- locally, and can only be exported by named recipients.
-
-
- Anyone can VERIFY the
- exported document.
+ >
+ )
+ },
+ {
+ icon: (
+
+ ),
+ title: <>Multi-Device>,
+ description: (
+ <>
+ Create, Sign and Verify documents and files from any device with a
+ browser.
+ >
+ )
+ },
+ {
+ icon: (
+
+ ),
+ title: <>Secure & Private>,
+ description: (
+ <>
+ Documents are encrypted locally and can be accessed only by named
+ recipients.
+ >
+ )
+ },
+ {
+ icon: (
+
+ ),
+ title: <>Verifiable>,
+ description: (
+ <>
+ Thanks to Schnorr Signatures and Web of Trust, SIGit is far more
+ auditable than traditional server-based offerings.
+ >
+ )
+ },
+ {
+ icon: (
+
+ ),
+ title: <>Works Offline>,
+ description: (
+ <>
+ Presuming you have a hardware signing device, it is possible to
+ complete a SIGit round without an internet connection.
+ >
+ )
+ },
+ {
+ icon: (
+
+ ),
+ title: <>Multi-Party Signing>,
+ description: (
+ <>
+ Choose any number of Signers and Viewers, track the signature status,
+ send reminders, get notifications on completion.
+ >
+ )
+ }
+ ]
+
+ useEffect(() => {
+ saveVisitedLink(location.pathname, location.search)
+ }, [location])
+
+ return (
+
+
+
+ SIGit - Secure & Private Document Signing
+
+ An open-source and self-hostable solution for secure document signing
+ and verification.
+
+
+ {cards.map((c, i) => (
+
+ ))}
- {!authState?.loggedIn && (
-
-
-
- )}
-
+
+ SIGit is a secure & private document signing service where you can
+ create, sign, and verify any document from any device with a browser.
+
+
+
+
+ {/*
+
+ Secure Document Signing
+
+
+ SIGit is an open-source and self-hostable solution for secure document
+ signing and verification. Code is MIT licenced and available at{' '}
+
+ https://git.sigit.io/sig/it
+
+ .
+
+
+ SIGit lets you Create, Sign and Verify from any device with a browser.
+
+
+ Unlike other solutions, SIGit is totally private - files are encrypted
+ locally, and can only be exported by named recipients.
+
+
+ Anyone can VERIFY the
+ exported document.
+
+
+ )} */}
+
)
}
diff --git a/src/pages/landing/style.module.scss b/src/pages/landing/style.module.scss
index a0e123f..9880d27 100644
--- a/src/pages/landing/style.module.scss
+++ b/src/pages/landing/style.module.scss
@@ -1,5 +1,12 @@
@import '../../colors.scss';
+.container {
+ padding: 5vh 0%;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
.landingPage {
display: flex;
flex-direction: column;
diff --git a/src/pages/login/index.tsx b/src/pages/login/index.tsx
index 0afb440..6fad8c3 100644
--- a/src/pages/login/index.tsx
+++ b/src/pages/login/index.tsx
@@ -1,4 +1,4 @@
-import { Box, Button, TextField, Typography } from '@mui/material'
+import { Box, Button, Container, TextField, Typography } from '@mui/material'
import { getPublicKey, nip19 } from 'nostr-tools'
import { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
@@ -352,7 +352,7 @@ export const Login = () => {
}
return (
- <>
+
{isLoading && }
Welcome to Sigit
@@ -375,6 +375,6 @@ export const Login = () => {
- >
+
)
}
diff --git a/src/sizes.scss b/src/sizes.scss
new file mode 100644
index 0000000..9c9b78f
--- /dev/null
+++ b/src/sizes.scss
@@ -0,0 +1 @@
+$header-height: 78.5px;
diff --git a/src/theme/index.ts b/src/theme/index.ts
index d852a6e..25acf57 100644
--- a/src/theme/index.ts
+++ b/src/theme/index.ts
@@ -24,11 +24,29 @@ export const theme = extendTheme({
MuiButton: {
styleOverrides: {
root: {
- borderRadius: '2rem'
+ padding: '10px 20px',
+ fontSize: '14px',
+ fontWeight: 'bold',
+ boxShadow: '0 0 8px 0 rgba(0, 0, 0, 0)',
+ lineHeight: '1.25',
+ borderRadius: '4px',
+ ':hover': {
+ transform: 'scale(1.02)',
+ boxShadow: '0 0 8px 0 rgba(0, 0, 0, 0)'
+ }
+ },
+ text: {
+ color: '#00000059',
+ background: 'transparent',
+ ':hover': {
+ background: '#47cccf',
+ color: 'white'
+ }
},
contained: {
+ background: '#47cccf',
':hover': {
- background: '#150a1a'
+ background: '#47cccf'
}
},
outlined: {
@@ -40,5 +58,14 @@ export const theme = extendTheme({
}
}
}
+ },
+ typography: {
+ fontFamily: [
+ 'system-ui',
+ 'Avenir',
+ 'Helvetica',
+ 'Arial',
+ 'sans-serif'
+ ].join(', ')
}
})