diff --git a/renderer/pageComponents/SignUp/StyledWrapper.js b/renderer/pageComponents/SignUp/StyledWrapper.js
new file mode 100644
index 00000000..85d4b5a8
--- /dev/null
+++ b/renderer/pageComponents/SignUp/StyledWrapper.js
@@ -0,0 +1,49 @@
+import styled from 'styled-components';
+
+const Wrapper = styled.div`
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ min-height: 100vh;
+
+ .form-container {
+ max-width: 350px;
+ border-radius: 4px;
+ border: 1px #ddd solid;
+
+ button.continue-btn {
+ font-size: 16px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ min-height: 38px;
+ align-items: center;
+ color: #212529;
+ background: #e2e6ea;
+ border: solid 1px #dae0e5;
+ }
+
+ .field-error {
+ font-size: 0.875rem;
+ }
+
+ a {
+ color: var(--color-text-link);
+ }
+
+ .or {
+ display: inline-block;
+ position: relative;
+ top: -14px;
+ background: white;
+ padding-inline: 10px;
+ }
+
+ .error-msg {
+ font-size: 15px;
+ color: rgb(192 69 8);
+ }
+ }
+`;
+
+export default Wrapper;
diff --git a/renderer/pageComponents/SignUp/index.js b/renderer/pageComponents/SignUp/index.js
new file mode 100644
index 00000000..04511cb6
--- /dev/null
+++ b/renderer/pageComponents/SignUp/index.js
@@ -0,0 +1,187 @@
+import React, { useState } from "react";
+import Link from 'next/link';
+import StyledWrapper from './StyledWrapper';
+import IdentityApi from 'api/identity';
+import { useFormik } from 'formik';
+import * as Yup from 'yup';
+import { useRouter } from 'next/router';
+import { useAuth } from 'providers/Auth';
+
+const SignUp = () => {
+ const router = useRouter();
+ const [authState, authDispatch] = useAuth();
+ const [errorSigningUp, setErrorSigningUp] = useState(false);
+ const [errorMsg, setErrorMsg] = useState('');
+ const [signingUp, setSigningUp] = useState(false);
+
+ const {
+ currentUser
+ } = authState;
+
+ const formik = useFormik({
+ initialValues: {
+ name: '',
+ email: '',
+ password: ''
+ },
+ validationSchema: Yup.object({
+ name: Yup.string()
+ .min(3, 'Must be atleast 3 characters')
+ .max(50, 'Must be 50 characters or less')
+ .required('Required'),
+ email: Yup.string()
+ .email('Invalid email address')
+ .required('Required'),
+ password: Yup.string()
+ .min(8, 'Must be atleast 8 characters')
+ .max(50, 'Must be 50 characters or less')
+ .required('Required')
+ }),
+ onSubmit: (values, { resetForm }) => {
+ setSigningUp(true);
+ IdentityApi
+ .signup({
+ name: values.name,
+ email: values.email,
+ password: values.password
+ })
+ .then((response) => {
+ authDispatch({
+ type: 'LOGIN_SUCCESS',
+ user: response.data
+ });
+ })
+ .catch((error) => {
+ setSigningUp(false);
+ setErrorSigningUp(true);
+ setErrorMsg(error.message)
+ });
+ setSigningUp(false);
+ },
+ });
+
+ if(authState.isLoading) {
+ return null;
+ };
+
+ if(currentUser) {
+ router.push('/');
+ return null;
+ };
+
+ return (
+