diff --git a/.gitignore b/.gitignore
index 1437c53..74b7586 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@
 yarn-error.log*
 
 # local env files
+.env
 .env.local
 .env.development.local
 .env.test.local
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ef74742..49da415 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,31 +1,32 @@
 {
-	"git.ignoreLimitWarning": true,
-	"cSpell.ignoreWords": [
-		"Captchas",
-		"Carrington",
-		"Cavendon",
-		"Customise",
-		"RSMV",
-		"Statethis",
-		"Texttools",
-		"Unbans",
-		"Unmutes",
-		"apos",
-		"autolayout",
-		"clcks",
-		"clicksforms",
-		"colour",
-		"customisation",
-		"getprefix",
-		"hcaptcha",
-		"noopener",
-		"noreferrer",
-		"parpart",
-		"pypi",
-		"setlanguage",
-		"slowmode",
-		"softban",
-		"unban",
-		"viewas"
-	]
+    "git.ignoreLimitWarning": true,
+    "cSpell.ignoreWords": [
+        "Captchas",
+        "Carrington",
+        "Cavendon",
+        "Customise",
+        "RSMV",
+        "Statethis",
+        "Texttools",
+        "Unbans",
+        "Unmutes",
+        "apos",
+        "autolayout",
+        "clcks",
+        "clicksforms",
+        "colour",
+        "customisation",
+        "getprefix",
+        "hcaptcha",
+        "noopener",
+        "noreferrer",
+        "parpart",
+        "pypi",
+        "setlanguage",
+        "slowmode",
+        "softban",
+        "svgr",
+        "unban",
+        "viewas"
+    ]
 }
\ No newline at end of file
diff --git a/Components/Card.js b/Components/Card.js
index 00a2df4..bab6153 100644
--- a/Components/Card.js
+++ b/Components/Card.js
@@ -4,12 +4,12 @@
 import { withRouter } from "next/router";
 
 class Card extends Component {
-	constructor(props) {
-		super(props);
+    constructor(props) {
+        super(props);
     }
 
-	render() {
-		return (
+    render() {
+        return (
             <div className={Styles.card} style={{
                 margin: "0"
             }} onClick={this.props.url ? () => { this.props.router.push(this.props.url)} : null}>
@@ -44,21 +44,21 @@
 }
 
 class CardRow extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
-	render() {
-		return (
+    render() {
+        return (
             <div className={Styles.container}>
-				{
-					react.Children.toArray(this.props.children).map((item, index) => {
-						return <div className={Styles.item} key={index}>{item}</div>
-					})
-				}
-			</div>
+                {
+                    react.Children.toArray(this.props.children).map((item, index) => {
+                        return <div className={Styles.item} key={index}>{item}</div>
+                    })
+                }
+            </div>
         )
-	}
+    }
 }
 
 Card = withRouter(Card);
diff --git a/Components/Docs.js b/Components/Docs.js
index c15b1d3..0fd42b1 100644
--- a/Components/Docs.js
+++ b/Components/Docs.js
@@ -5,13 +5,13 @@
         Children:
         - List of sections
     */
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
-	render() {
-		return "a"
-	}
+    render() {
+        return "a"
+    }
 }
 
 class Section extends Component {
diff --git a/Components/NavBar.js b/Components/NavBar.js
index a9e5dbb..bae8712 100644
--- a/Components/NavBar.js
+++ b/Components/NavBar.js
@@ -13,12 +13,12 @@
 }
 
 class NavBar extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
-	render() {
-		return (
+    render() {
+        return (
             <>
                 <div className={Styles.container}>
                     <a href="#skipNav" className={Styles.skipNav}>Skip navigation</a>
@@ -33,8 +33,8 @@
                     <ThemeChangeButton/>
                 </div>
             </>
-		)
-	}
+        )
+    }
 }
 
 export default NavBar;
diff --git a/Components/Panels.js b/Components/Panels.js
index 1ee500f..c6ae2f6 100644
--- a/Components/Panels.js
+++ b/Components/Panels.js
@@ -4,107 +4,107 @@
 
 
 class PanelClass extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
-	getStyle() {
-		const { inViewport, enterCount } = this.props;
-		if (inViewport && enterCount === 1) { return { WebkitTransition: 'all 0.75s ease-in-out', opacity: '1', transform: "translateY(0px)" };
-		} else if (!inViewport && enterCount < 1) { return { WebkitTransition: 'none', opacity: '0', transform: "translateY(20px)" };
-		} else { return {}; }
-	}
+    getStyle() {
+        const { inViewport, enterCount } = this.props;
+        if (inViewport && enterCount === 1) { return { WebkitTransition: 'all 0.75s ease-in-out', opacity: '1', transform: "translateY(0px)" };
+        } else if (!inViewport && enterCount < 1) { return { WebkitTransition: 'none', opacity: '0', transform: "translateY(20px)" };
+        } else { return {}; }
+    }
 
-	render() {
-		return <div className={Styles.panel} style={this.getStyle()} id={this.props.id} tabIndex={0}>
-				{
-					react.Children.toArray(this.props.children).map((child, index) => {
-						return child;
-					})
-				}
-		</div>
-	}
+    render() {
+        return <div className={Styles.panel} style={this.getStyle()} id={this.props.id} tabIndex={0}>
+                {
+                    react.Children.toArray(this.props.children).map((child, index) => {
+                        return child;
+                    })
+                }
+        </div>
+    }
 }
 
 
 class AutoLayout extends Component {
-	constructor(props) {
-		super(props);
-		this.children = react.Children.toArray(this.props.children)
-		this.validity = []
-		this.calculateValidity()
-	}
+    constructor(props) {
+        super(props);
+        this.children = react.Children.toArray(this.props.children)
+        this.validity = []
+        this.calculateValidity()
+    }
 
-	calculateValidity() {
-		this.children.map((item, index) => {
-			if ( index > 0 && item.props.halfSize && this.validity[index - 1] == 'half1' ) {
-				this.validity[index] = 'half2';
-			} else if ( index > 0 && !item.props.halfSize && this.validity[index - 1] == 'half1' ) {
-				this.validity[index] = 'full';
-				this.validity[index - 1] = 'full';
-			} else if ( item.props.halfSize && !(index == this.props.children.length - 1) ) {
-				this.validity[index] = 'half1';
-			} else if ( index == this.props.children.length - 1 && this.validity[index - 1] == 'half1' ) {
-				this.validity[index] = 'full';
-				this.validity[index - 1] = 'full';
-			} else if ( index == this.props.children.length - 1 && this.validity[index - 1] == 'half2' ) {
-				this.validity[index] = 'full';
-			} else {
-				this.validity[index] = 'full';
-			}
-		})
-	}
+    calculateValidity() {
+        this.children.map((item, index) => {
+            if ( index > 0 && item.props.halfSize && this.validity[index - 1] == 'half1' ) {
+                this.validity[index] = 'half2';
+            } else if ( index > 0 && !item.props.halfSize && this.validity[index - 1] == 'half1' ) {
+                this.validity[index] = 'full';
+                this.validity[index - 1] = 'full';
+            } else if ( item.props.halfSize && !(index == this.props.children.length - 1) ) {
+                this.validity[index] = 'half1';
+            } else if ( index == this.props.children.length - 1 && this.validity[index - 1] == 'half1' ) {
+                this.validity[index] = 'full';
+                this.validity[index - 1] = 'full';
+            } else if ( index == this.props.children.length - 1 && this.validity[index - 1] == 'half2' ) {
+                this.validity[index] = 'full';
+            } else {
+                this.validity[index] = 'full';
+            }
+        })
+    }
 
-	render() {
-		return (
+    render() {
+        return (
             <div className={Styles.container}>
-				{
-					this.children.map((item, index) => {
-						if ( this.validity[index] == 'full' ) {
-							return this.children[index]
-						} else if ( this.validity[index] == 'half1' ) {
-							return <div key={index} className={Styles.doublePanel}>
-								{this.children[index]}
-								{this.children[index + 1]}
-							</div>
-						}
-					})
-				}
-			</div>
+                {
+                    this.children.map((item, index) => {
+                        if ( this.validity[index] == 'full' ) {
+                            return this.children[index]
+                        } else if ( this.validity[index] == 'half1' ) {
+                            return <div key={index} className={Styles.doublePanel}>
+                                {this.children[index]}
+                                {this.children[index + 1]}
+                            </div>
+                        }
+                    })
+                }
+            </div>
         )
-	}
+    }
 }
 
 
 class Title extends Component {
-	render() {
-		return <h1 className={Styles.title}>{this.props.children}</h1>
-	}
+    render() {
+        return <h1 className={Styles.title}>{this.props.children}</h1>
+    }
 }
 
 class Subtitle extends Component {
-	render() {
-		return <h2 className={Styles.subtitle}>{this.props.children}</h2>
-	}
+    render() {
+        return <h2 className={Styles.subtitle}>{this.props.children}</h2>
+    }
 }
 
 class Text extends Component {
-	render() {
-		return <p className={Styles.text}>{this.props.children}</p>
-	}
+    render() {
+        return <p className={Styles.text}>{this.props.children}</p>
+    }
 }
 
 class Divider extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
-	render() {
-		let highlighted = this.props.toHighlight === this.props.name;
-		return <div className={Styles.divider} style={{
-				backgroundColor: (highlighted && this.props.highlightColour) ? ("#" + this.props.highlightColour) : "var(--theme-ui-colors-hint)"
-			}}>{this.props.forceHighlight}</div>
-	}
+    render() {
+        let highlighted = this.props.toHighlight === this.props.name;
+        return <div className={Styles.divider} style={{
+                backgroundColor: (highlighted && this.props.highlightColour) ? ("#" + this.props.highlightColour) : "var(--theme-ui-colors-hint)"
+            }}>{this.props.forceHighlight}</div>
+    }
 }
 
 const Panel = handleViewport(PanelClass, { rootMargin: '-1.0px' });
diff --git a/Components/Texttools.js b/Components/Texttools.js
index 2233e9c..57fddc0 100644
--- a/Components/Texttools.js
+++ b/Components/Texttools.js
@@ -4,56 +4,56 @@
 
 
 class List extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
-	render() {
-		return (
+    render() {
+        return (
             <div className={Styles.list}>
-				{
-					react.Children.toArray(this.props.children).map((item, index) => {
-						return <div key={index} className={Styles.listItem}>
+                {
+                    react.Children.toArray(this.props.children).map((item, index) => {
+                        return <div key={index} className={Styles.listItem}>
                             <div className={Styles.square} style={{borderColor: `#${this.props.colour}`}} />
                             <div>{item}</div>
                         </div>
-					})
-				}
-			</div>
+                    })
+                }
+            </div>
         )
-	}
+    }
 }
 
 class ListItem extends Component {
     render() {
-		return this.props.children
-	}
+        return this.props.children
+    }
 }
 
 class Code extends Component {
-	constructor(props) {
-		super(props);
-		this.state = {
-			isPopoverOpen: false,
-		};
-	}
+    constructor(props) {
+        super(props);
+        this.state = {
+            isPopoverOpen: false,
+        };
+    }
 
-	clicked() {
-		let content = this.props.children
-		navigator.clipboard.writeText(content)
-		this.setState({isPopoverOpen: true})
-		setTimeout(() => {
-			this.setState({isPopoverOpen: false})
-		}, 2000)
-	}
+    clicked() {
+        let content = this.props.children
+        navigator.clipboard.writeText(content)
+        this.setState({isPopoverOpen: true})
+        setTimeout(() => {
+            this.setState({isPopoverOpen: false})
+        }, 2000)
+    }
 
-	render() {
-		return <pre
-			className={Styles.code}
-			style={{color: `#${this.props.colour}`}}
-			onClick={this.props.clickable ? () => this.clicked() : () => this.clicked()}
-		>{this.state.isPopoverOpen ? "Copied!" : this.props.children}</pre>
-	}
+    render() {
+        return <pre
+            className={Styles.code}
+            style={{color: `#${this.props.colour}`}}
+            onClick={this.props.clickable ? () => this.clicked() : () => this.clicked()}
+        >{this.state.isPopoverOpen ? "Copied!" : this.props.children}</pre>
+    }
 }
 
 export { List, ListItem, Code };
\ No newline at end of file
diff --git a/package.json b/package.json
index 470224d..7f29cc2 100644
--- a/package.json
+++ b/package.json
@@ -1,9 +1,9 @@
 {
-  "name": "clicksminutepernet",
+  "name": "clicks",
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "dev": "next dev",
+    "dev": "NODE_OPTIONS=--openssl-legacy-provider next dev",
     "build": "ANALYZE=true NODE_OPTIONS=--openssl-legacy-provider NODE_ENV=production next build",
     "start": "next start",
     "lint": "next lint"
@@ -20,7 +20,6 @@
     "next-redux-wrapper": "^7.0.4",
     "react": "^18.1.0",
     "react-dom": "^18.1.0",
-    "react-draggable": "^4.4.5",
     "react-fade-in": "^2.0.1",
     "react-fast-marquee": "^1.3.1",
     "react-hcaptcha": "^0.1.1",
@@ -29,11 +28,9 @@
     "react-redux": "^7.2.4",
     "react-rewards": "^2.0.3",
     "react-tiny-popover": "^7.0.1",
-    "react-use-draggable-scroll": "^0.4.2",
     "redux": "^4.1.1",
     "redux-thunk": "^2.3.0",
-    "theme-ui": "^0.12.0",
-    "use-draggable-scroll": "^0.1.0"
+    "theme-ui": "^0.12.0"
   },
   "devDependencies": {
     "eslint": "7.32.0",
diff --git a/pages/01189998819991197253.js b/pages/01189998819991197253.js
index 2260163..f74ddc6 100644
--- a/pages/01189998819991197253.js
+++ b/pages/01189998819991197253.js
@@ -1,6 +1,27 @@
 import Header from '../Components/Header'
 
 export default function Error() {
+<<<<<<< HEAD
+    return (
+        <>
+            <Header
+                name="0118 999 881 999 119 7253"
+                subtext={<>
+                    Dear Sir/Madam,<br />
+                    Fire! Fire! Help me!<br />
+                    123 Cavendon Road.<br />
+                    Looking forward to hearing from you,<br />
+                    All the best, Maurice Moss
+                </>}
+                embedDescription="This is the internet"
+                gradient={["F27878", "D96B6B"]}
+                wave="web/waves/header/rsm"
+                buttons={[{color: "F27878", buttonText: "ffffff", text: "No that's too formal", link: "/#"}]}
+                fullscreen={true}
+            />
+        </>
+    )
+=======
 	return (
 		<>
 			<Header
@@ -20,4 +41,5 @@
 			/>
 		</>
 	)
+>>>>>>> 11dc35cde9cce7a8dfe7f5000060b0ea04437844
 }
diff --git a/pages/403.js b/pages/403.js
index c6b966c..ca404b1 100644
--- a/pages/403.js
+++ b/pages/403.js
@@ -2,23 +2,23 @@
 import {Component} from 'react'
 
 export default class Home extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
 
-	render() {
-		return (
-			<>
-				<Header
-					name="403"
-					subtext="Forbidden - You do not have the correct permissions to view this page"
-					gradient={["F27878", "D96B6B"]}
-					wave="web/waves/header/rsm"
-					buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
-					fullscreen={true}
-				/>
-			</>
-		)
-	}
+    render() {
+        return (
+            <>
+                <Header
+                    name="403"
+                    subtext="Forbidden - You do not have the correct permissions to view this page"
+                    gradient={["F27878", "D96B6B"]}
+                    wave="web/waves/header/rsm"
+                    buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
+                    fullscreen={true}
+                />
+            </>
+        )
+    }
 }
diff --git a/pages/404.js b/pages/404.js
index 103c513..a9bdce5 100644
--- a/pages/404.js
+++ b/pages/404.js
@@ -2,28 +2,28 @@
 import { Component } from 'react'
 
 export default class Home extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
 
-	render() {
-		return (
-			<>
-				<Header
-					name="404"
-					subtext="Not Found"
-					gradient={["F27878", "D96B6B"]}
-					wave="web/waves/header/rsm"
-					buttons={[
-						{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"},
-						{color: "F27878", buttonText: "ffffff", text: "Send Error",
-							link: `mailto:staff@clicks.codes?subject=Website%20Error%20Report&body=I%20got%20a%20404%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
-							target: true
-					}]}
-					fullscreen={true}
-				/>
-			</>
-		)
-	}
+    render() {
+        return (
+            <>
+                <Header
+                    name="404"
+                    subtext="Not Found"
+                    gradient={["F27878", "D96B6B"]}
+                    wave="web/waves/header/rsm"
+                    buttons={[
+                        {color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"},
+                        {color: "F27878", buttonText: "ffffff", text: "Send Error",
+                            link: `mailto:staff@clicks.codes?subject=Website%20Error%20Report&body=I%20got%20a%20404%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
+                            target: true
+                    }]}
+                    fullscreen={true}
+                />
+            </>
+        )
+    }
 }
diff --git a/pages/418.js b/pages/418.js
index 9fdf0cd..68daf86 100644
--- a/pages/418.js
+++ b/pages/418.js
@@ -2,23 +2,23 @@
 import {Component} from 'react'
 
 export default class Home extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
 
-	render() {
-		return (
-			<>
-				<Header
-					name="418"
-					subtext={<>I&apos;m a teapot<br /><br />The request body was short and stout.<br />Tip me over and pour me out</>}
-					gradient={["F27878", "D96B6B"]}
-					wave="web/waves/header/rsm"
-					buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
-					fullscreen={true}
-				/>
-			</>
-		)
-	}
+    render() {
+        return (
+            <>
+                <Header
+                    name="418"
+                    subtext={<>I&apos;m a teapot<br /><br />The request body was short and stout.<br />Tip me over and pour me out</>}
+                    gradient={["F27878", "D96B6B"]}
+                    wave="web/waves/header/rsm"
+                    buttons={[{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"}]}
+                    fullscreen={true}
+                />
+            </>
+        )
+    }
 }
diff --git a/pages/500.js b/pages/500.js
index 3f74c40..f0c12ef 100644
--- a/pages/500.js
+++ b/pages/500.js
@@ -2,28 +2,28 @@
 import {Component} from 'react'
 
 export default class Home extends Component {
-	constructor(props) {
-		super(props);
-	}
+    constructor(props) {
+        super(props);
+    }
 
 
-	render() {
-		return (
-			<>
-				<Header
-					name="500"
-					subtext="Internal Server Error"
-					gradient={["F27878", "D96B6B"]}
-					wave="web/waves/header/rsm"
-					buttons={[
-						{color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"},
-						{color: "F27878", buttonText: "ffffff", text: "Send Error",
-							link: `mailto:staff@clicks.codes?subject=Website%20Error%20Report&body=I%20got%20a%20500%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
-							target: true
-					}]}
-					fullscreen={true}
-				/>
-			</>
-		)
-	}
+    render() {
+        return (
+            <>
+                <Header
+                    name="500"
+                    subtext="Internal Server Error"
+                    gradient={["F27878", "D96B6B"]}
+                    wave="web/waves/header/rsm"
+                    buttons={[
+                        {color: "F27878", buttonText: "ffffff", text: "Go Home", link: "/#"},
+                        {color: "F27878", buttonText: "ffffff", text: "Send Error",
+                            link: `mailto:staff@clicks.codes?subject=Website%20Error%20Report&body=I%20got%20a%20500%20on%20the%20page%20%5BPlease%20Copy%20Website%20Link%20Here%5D`,
+                            target: true
+                    }]}
+                    fullscreen={true}
+                />
+            </>
+        )
+    }
 }
diff --git a/pages/api/nucleus/verify/complete.js b/pages/api/nucleus/verify/complete.js
index 1b58a04..39bd55c 100644
--- a/pages/api/nucleus/verify/complete.js
+++ b/pages/api/nucleus/verify/complete.js
@@ -2,13 +2,15 @@
 import qs from 'querystring';
 
 const Complete = async (req, res) => {
-    const chk = await Axios.post('http://localhost:3000/api/nucleus/verify/verifyToken', qs.stringify({
-        tkn: req.body.tkn
+    const chk = await Axios.post('https://hcaptcha.com/siteverify', qs.stringify({
+        response: req.body.tkn,
+        secret: '0x19C699BFfce07b2a026121DE6702706BB2d51D6c',
+        sitekey: '85074411-fa13-4d9b-b901-53095c6d1fc6'
     }))
     if ( !chk.data.success ) {
         return res.status(200).send({success: false})
     }
-    let secret = "slwu0rZV5W6WdmGtgI16du8Ar2tQGMr3Q9dE6u3poKiVODNV9SweaA3buawgkTmTuITXDWOUpBcTFA0qWrUvoshi1JB180WOFwA7"
+    let secret = process.env.VERIFY_SECRET
     try {
         await Axios.post(`http://192.168.0.18:10000/verify/${req.body.code}`, {
             secret: secret
diff --git a/pages/api/nucleus/verify/fetch.js b/pages/api/nucleus/verify/fetch.js
deleted file mode 100644
index ba7aa04..0000000
--- a/pages/api/nucleus/verify/fetch.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import Axios from 'axios';
-
-const Validate = async (req, res) => {
-    try {
-        // var out = await Axios.get(`http://192.168.102.7:10000/verify/${req.body.code}`)
-        // out = out.data
-        // let props = {
-        //     user: out.user,
-        //     role: out.role,
-        //     role_name: out.role_name,
-        //     guild: out.guild,
-        //     guild_name: out.guild_name,
-        //     guild_icon_url: out.guild_icon_url,
-        //     guild_size: out.guild_size
-        // }
-        return res.status(200).send(props)
-    } catch (err) {
-        return res.status(400).end()
-    }
-}
-
-export default Validate;
\ No newline at end of file
diff --git a/pages/api/nucleus/verify/verifyToken.js b/pages/api/nucleus/verify/verifyToken.js
deleted file mode 100644
index b44624e..0000000
--- a/pages/api/nucleus/verify/verifyToken.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import Axios from 'axios';
-import qs from 'querystring';
-
-const verifyToken = async (req, res) => {
-    const chk = await Axios.post('https://hcaptcha.com/siteverify', qs.stringify({
-        response: req.body.tkn,
-        secret: '0x19C699BFfce07b2a026121DE6702706BB2d51D6c',
-        sitekey: '85074411-fa13-4d9b-b901-53095c6d1fc6'
-    }))
-
-    // return res.send({ success: false });
-    return res.send({ success: chk.data.success });
-}
-
-export default verifyToken;
\ No newline at end of file
diff --git a/pages/clicksforms/docs.js b/pages/clicksforms/docs.js
index 46f3ee7..0988346 100644
--- a/pages/clicksforms/docs.js
+++ b/pages/clicksforms/docs.js
@@ -1,5 +1,5 @@
 export default function policy() {
-	return (<iframe style={{height:"100vh",width:"100vw"}} src="https://clicksminuteper.github.io/docs/clicksforms" />)
+    return (<iframe style={{height:"100vh",width:"100vw"}} src="https://clicksminuteper.github.io/docs/clicksforms" />)
 }
 
 // import Header from '../Components/Header'
diff --git a/pages/clicksforms/form.js b/pages/clicksforms/form.js
index c950e73..df5aeec 100644
--- a/pages/clicksforms/form.js
+++ b/pages/clicksforms/form.js
@@ -4,13 +4,13 @@
 import Question from '../../Components/ClicksForms/Question';
 
 export default class Form extends Component {
-	constructor(props) {
-		super(props);
+    constructor(props) {
+        super(props);
 }
 
-	render() {
-		return (
-			<>
+    render() {
+        return (
+            <>
                 <Header
                     name={this.props.name}
                     subtext={this.props.description + (this.props.active ? '' : <><br />this.props is not accepting responses. Please check back later</>)}
@@ -43,9 +43,9 @@
                         }
                     </div>
                 </div>
-			</>
-		)
-	}
+            </>
+        )
+    }
 }
 
 export async function getServerSideProps(ctx) {
diff --git a/pages/clicksforms/privacy.js b/pages/clicksforms/privacy.js
index 86e5f83..daffd96 100644
--- a/pages/clicksforms/privacy.js
+++ b/pages/clicksforms/privacy.js
@@ -1,3 +1,3 @@
 export default function policy() {
-	return (<iframe style={{height:"100vh",width:"100vw"}} src="https://clicksminuteper.github.io/policies/clicksforms" />)
+    return (<iframe style={{height:"100vh",width:"100vw"}} src="https://clicksminuteper.github.io/policies/clicksforms" />)
 }
\ No newline at end of file
diff --git a/pages/clicksforms/tos.js b/pages/clicksforms/tos.js
index 7b90253..50c1def 100644
--- a/pages/clicksforms/tos.js
+++ b/pages/clicksforms/tos.js
@@ -1,3 +1,3 @@
 export default function policy() {
-	return (<iframe style={{height:"100vh",width:"100vw"}} src="https://clicksminuteper.github.io/policies/clicksformstos" />)
+    return (<iframe style={{height:"100vh",width:"100vw"}} src="https://clicksminuteper.github.io/policies/clicksformstos" />)
 }
\ No newline at end of file
diff --git a/pages/nucleus/verify/index.js b/pages/nucleus/verify/index.js
index 796298a..44da4b4 100644
--- a/pages/nucleus/verify/index.js
+++ b/pages/nucleus/verify/index.js
@@ -14,10 +14,6 @@
     const [clicked, setClicked] = React.useState(false);
     const [theme, setTheme] = useColorMode()
 
-    if (clicked) {
-        Router.push('/nucleus/verify/alreadyVerified', '/nucleus/verify/success');
-    }
-
     const { reward: reward, isAnimating: isAnimating } = useReward('confetti', 'confetti', {
         elementSize: 10,
         elementCount: 150,
@@ -31,7 +27,7 @@
 
     async function submitForm(tkn) {
         if ( clicked ) {
-            return
+            Router.push('/nucleus/verify/alreadyVerified', '/nucleus/verify/success');
         }
         setClicked(true);
         reward();
diff --git a/pages/supporters.js b/pages/supporters.js
index d07482e..adbbbe7 100644
--- a/pages/supporters.js
+++ b/pages/supporters.js
@@ -14,24 +14,24 @@
     }
 
     clicked() {
-		let content = this.props.children
-		navigator.clipboard.writeText(content)
-		this.setState({isPopoverOpen: true})
-		setTimeout(() => {
-			this.setState({isPopoverOpen: false})
-		}, 2500)
-	}
+        let content = this.props.children
+        navigator.clipboard.writeText(content)
+        this.setState({isPopoverOpen: true})
+        setTimeout(() => {
+            this.setState({isPopoverOpen: false})
+        }, 2500)
+    }
 
     render() {
         if ( this.props.clickable === false) {
-			return <div style={{
+            return <div style={{
                 display: 'flex', flexDirection: 'column', alignItems: 'center',
                 justifyContent: 'center', backgroundColor: '#6576CC', color: '#FFFFFF',
                 paddingInline: '20px', paddingBlock: '0.25rem',
                 borderRadius: '10px', boxShadow: '0px -3px 10px 2px #424242'
             }}>{this.props.children}</div>
-		} else {
-			return <Popover
+        } else {
+            return <Popover
                 isOpen={this.state.isPopoverOpen}
                 positions={['top', 'bottom', 'left', 'right']} // preferred positions by priority
                 content={<Supporter colour={this.props.colour} clickable={false}>{this.props.sub}</Supporter>}
@@ -43,7 +43,7 @@
                     borderRadius: '10px'
                 }}>{this.props.children}</div>
             </Popover>
-		}
+        }
     }
 }
 
diff --git a/styles/Components/card.module.css b/styles/Components/card.module.css
index 5b269fa..b085718 100644
--- a/styles/Components/card.module.css
+++ b/styles/Components/card.module.css
@@ -1,121 +1,121 @@
 .backgroundImage {
-	position: absolute;
-	bottom: -5px;
-	left: 0;
-	width: calc(100% + 5px);
-	height: auto;
-	scale: stretch;
-	border-radius: 0;
-	filter: var(--theme-ui-colors-cardFilter);
-	transition: filter 0.3s ease-in-out;
+    position: absolute;
+    bottom: -5px;
+    left: 0;
+    width: calc(100% + 5px);
+    height: auto;
+    scale: stretch;
+    border-radius: 0;
+    filter: var(--theme-ui-colors-cardFilter);
+    transition: filter 0.3s ease-in-out;
 }
 
 .backgroundGradient {
-	position: absolute;
-	bottom: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	scale: stretch;
-	border-radius: 0;
-	filter: var(--theme-ui-colors-cardFilter);
-	transition: filter 0.3s ease-in-out;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    scale: stretch;
+    border-radius: 0;
+    filter: var(--theme-ui-colors-cardFilter);
+    transition: filter 0.3s ease-in-out;
 }
 
 .card {
-	border-radius: 17px;
-	width: 100%;
-	height: 204px;
-	padding-inline: 5px;
-	padding-bottom: 5px;
-	position: relative;
-	overflow: hidden;
-	margin: 100px;
-	transition: filter 0.3s ease-in-out;
-	transition: transform 0.15s ease-in-out;
+    border-radius: 17px;
+    width: 100%;
+    height: 204px;
+    padding-inline: 5px;
+    padding-bottom: 5px;
+    position: relative;
+    overflow: hidden;
+    margin: 100px;
+    transition: filter 0.3s ease-in-out;
+    transition: transform 0.15s ease-in-out;
 }
 .card:hover {
-	transform: translateY(-5px);
-	cursor: pointer;
+    transform: translateY(-5px);
+    cursor: pointer;
 }
 
 
 .panel {
-	position: absolute;
-	overflow-x: hidden;
-	overflow-y: hidden;
-	width: 88%;
-	height: 76%;
-	top: 12%;
-	left: 6%;
-	padding-top: 10px;
-	padding-bottom: 10px;
-	border-radius: 17px;
-	background-color: var(--theme-ui-colors-cardBackground);
-	transition: background-color 0.3s ease-in-out;
-	backdrop-filter: blur(7px);
+    position: absolute;
+    overflow-x: hidden;
+    overflow-y: hidden;
+    width: 88%;
+    height: 76%;
+    top: 12%;
+    left: 6%;
+    padding-top: 10px;
+    padding-bottom: 10px;
+    border-radius: 17px;
+    background-color: var(--theme-ui-colors-cardBackground);
+    transition: background-color 0.3s ease-in-out;
+    backdrop-filter: blur(7px);
 }
 
 .titleContainer {
-	display: flex;
-	flex-direction: row;
-	justify-content: center;
-	align-items: center;
-	width: 100%;
-	height: 32px;
-	padding-inline: 10px;
-	margin-top: 10px;
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    align-items: center;
+    width: 100%;
+    height: 32px;
+    padding-inline: 10px;
+    margin-top: 10px;
 }
 
 .title {
-	font-weight: 100;
-	font-size: 25px;
-	margin-left: 1vw;
-	line-height: 24px;
-	max-lines: 2;
-	color: var(--theme-ui-colors-text);
-	transition: color 0.3s ease-in-out;
+    font-weight: 100;
+    font-size: 25px;
+    margin-left: 1vw;
+    line-height: 24px;
+    max-lines: 2;
+    color: var(--theme-ui-colors-text);
+    transition: color 0.3s ease-in-out;
 }
 
 .image {
-	height: 40px;
-	width: 40px;
+    height: 40px;
+    width: 40px;
 }
 
 .subtext {
-	width: 100%;
-	padding-inline: 10px;
-	text-align: center;
-	color: var(--theme-ui-colors-text);
-	transition: color 0.3s ease-in-out;
+    width: 100%;
+    padding-inline: 10px;
+    text-align: center;
+    color: var(--theme-ui-colors-text);
+    transition: color 0.3s ease-in-out;
 }
 
 
 .buttonLayout {
-	display: flex;
-	flex-direction: row;
-	justify-content: flex-end;
-	align-items: center;
-	flex-wrap: wrap;
-	padding: 0px;
-	position: absolute;
-	bottom: 5px;
-	right: 5px;
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+    align-items: center;
+    flex-wrap: wrap;
+    padding: 0px;
+    position: absolute;
+    bottom: 5px;
+    right: 5px;
 }
 
 .button {
-	display: flex;
-	flex-direction: row;
-	align-items: flex-start;
-	justify-content: right;
-	position: static;
-	flex: none;
-	order: 1;
-	flex-grow: 0;
+    display: flex;
+    flex-direction: row;
+    align-items: flex-start;
+    justify-content: right;
+    position: static;
+    flex: none;
+    order: 1;
+    flex-grow: 0;
 
-	margin: 5px;
-	padding: 5px 10px;
-	border-radius: 8px;
+    margin: 5px;
+    padding: 5px 10px;
+    border-radius: 8px;
 }
 
 @media (max-width: 500px) {
@@ -123,8 +123,8 @@
 
 
 .card.clicked {
-	transform: scale(1) !important;
-	z-index: 9999;
+    transform: scale(1) !important;
+    z-index: 9999;
     width: 100%;
     height: 100%;
     position: fixed;
@@ -133,11 +133,11 @@
 }
 
 .backgroundGradient.clicked {
-	background-image: red;
+    background-image: red;
 }
 
 /* .image.clicked {
-	width: 1000px !important;
+    width: 1000px !important;
 } */
 
 .container {
diff --git a/styles/Components/header.module.css b/styles/Components/header.module.css
index e37ea1c..c6f12ad 100644
--- a/styles/Components/header.module.css
+++ b/styles/Components/header.module.css
@@ -1,72 +1,72 @@
 .backgroundImage {
-	position: absolute;
-	bottom: 0;
-	/* bottom: 50vh;
-	transform: translateY(50%); */
-	width: 100%;
-	filter: var(--theme-ui-colors-cardFilter);
-	transition: filter 0.3s ease-in-out;
+    position: absolute;
+    bottom: 0;
+    /* bottom: 50vh;
+    transform: translateY(50%); */
+    width: 100%;
+    filter: var(--theme-ui-colors-cardFilter);
+    transition: filter 0.3s ease-in-out;
 }
 
 .backgroundGradient {
-	position: absolute;
-	bottom: 0;
-	left: 0;
-	width: 100%;
-	height: 100%;
-	filter: var(--theme-ui-colors-cardFilter);
-	transition: filter 0.3s ease-in-out;
+    position: absolute;
+    bottom: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    filter: var(--theme-ui-colors-cardFilter);
+    transition: filter 0.3s ease-in-out;
 }
 
 .header {
-	width: 100vw;
-	position: relative;
-	overflow: hidden;
-	transition: filter 0.3s ease-in-out;
-	display: flex;
-	flex-direction: column;
-	justify-content: center;
-	align-items: center;
+    width: 100vw;
+    position: relative;
+    overflow: hidden;
+    transition: filter 0.3s ease-in-out;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
 }
 
 .panel {
     position: relative;
-	overflow: hidden;
-	width: min(calc(100vw - 40px), 1000px);
-	border-radius: 16.5px;
-	background-color: var(--theme-ui-colors-cardBackground);
-	transition: background-color 0.3s ease-in-out;
-	backdrop-filter: blur(7px);
-	padding-top: 30px;
-	padding-bottom: 40px;
-	padding-left: 10px;
-	padding-right: 10px;
-	margin-top: 20px;
-	margin-bottom: 20vh;
+    overflow: hidden;
+    width: min(calc(100vw - 40px), 1000px);
+    border-radius: 16.5px;
+    background-color: var(--theme-ui-colors-cardBackground);
+    transition: background-color 0.3s ease-in-out;
+    backdrop-filter: blur(7px);
+    padding-top: 30px;
+    padding-bottom: 40px;
+    padding-left: 10px;
+    padding-right: 10px;
+    margin-top: 20px;
+    margin-bottom: 20vh;
 }
 
 .title {
     width: 100%;
     text-align: center;
     font-weight: 100;
-	margin-top: 0px;
-	margin-bottom: -20px;
+    margin-top: 0px;
+    margin-bottom: -20px;
     font-size: 3em;
     color: var(--theme-ui-colors-text);
-	transition: color 0.3s ease-in-out;
-	word-break: break-word;
-	font-variant-ligatures: none;
+    transition: color 0.3s ease-in-out;
+    word-break: break-word;
+    font-variant-ligatures: none;
 }
 
 .subtext {
-	margin-bottom: 0px;
+    margin-bottom: 0px;
     width: 100%;
     text-align: center;
     font-weight: 100;
     font-size: 1.5em;
-	margin-top: 50px;
+    margin-top: 50px;
     color: var(--theme-ui-colors-text);
-	transition: color 0.3s ease-in-out;
+    transition: color 0.3s ease-in-out;
 }
 
 .subtextExtra {
@@ -74,71 +74,71 @@
 }
 
 .buttonLayout {
-	display: flex;
-	flex-direction: row;
-	justify-content: flex-start;
-	align-items: center;
-	flex-wrap: nowrap;
-	height: fit-content;
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-start;
+    align-items: center;
+    flex-wrap: nowrap;
+    height: fit-content;
 }
 .buttonOverflow {
-	display: flex;
-	flex-direction: row;
-	justify-content: flex-end;
-	align-items: center;
-	overflow-x: hidden;
-	flex-wrap: nowrap;
-	position: absolute;
-	bottom: 5px;
-	right: 5px;
-	width: calc(100% - 10px);
-	height: auto;
-	border-radius: 10px;
+    display: flex;
+    flex-direction: row;
+    justify-content: flex-end;
+    align-items: center;
+    overflow-x: hidden;
+    flex-wrap: nowrap;
+    position: absolute;
+    bottom: 5px;
+    right: 5px;
+    width: calc(100% - 10px);
+    height: auto;
+    border-radius: 10px;
 }
 
 .button {
-	display: flex;
-	flex-direction: row;
-	align-items: flex-end;
-	justify-content: right;
-	position: static;
-	flex: none;
-	order: 1;
-	flex-grow: 0;
+    display: flex;
+    flex-direction: row;
+    align-items: flex-end;
+    justify-content: right;
+    position: static;
+    flex: none;
+    order: 1;
+    flex-grow: 0;
 
-	margin: 5px;
-	padding: 5px 10px;
-	border-radius: 8px;
+    margin: 5px;
+    padding: 5px 10px;
+    border-radius: 8px;
 }
 
 .titleContainer {
-	display: flex;
-	flex-direction: row;
-	justify-content: center;
-	align-items: center;
-	flex-wrap: wrap;
-	padding: 0px;
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    align-items: center;
+    flex-wrap: wrap;
+    padding: 0px;
 }
 
 .headerImage {
-	width: auto;
-	height: 64px;
-	object-fit: cover;
-	object-position: center;
-	transition: filter 0.3s ease-in-out;
-	margin-bottom: 20px;
+    width: auto;
+    height: 64px;
+    object-fit: cover;
+    object-position: center;
+    transition: filter 0.3s ease-in-out;
+    margin-bottom: 20px;
 }
 
 .indicator {
-	height: auto;
-	width: 24px;
-	margin-inline: 5px;
-	padding: 0;
+    height: auto;
+    width: 24px;
+    margin-inline: 5px;
+    padding: 0;
 }
 
 .leftArrow {
-	transform: rotate(90deg);
+    transform: rotate(90deg);
 }
 .rightArrow {
-	transform: rotate(270deg);
+    transform: rotate(270deg);
 }
\ No newline at end of file
diff --git a/styles/clicksforms/form.module.css b/styles/clicksforms/form.module.css
index 16bebe1..cddb4f1 100644
--- a/styles/clicksforms/form.module.css
+++ b/styles/clicksforms/form.module.css
@@ -76,10 +76,10 @@
 }
 
 .errorContainer {
-	width: 100%;
-	height: 0px;
-	transition: 0.3s;
-	overflow: hidden;
+    width: 100%;
+    height: 0px;
+    transition: 0.3s;
+    overflow: hidden;
     margin-top: 5px;
     margin-bottom: 0;
 }
\ No newline at end of file
diff --git a/styles/globals.css b/styles/globals.css
index 4fac2dc..76badcc 100644
--- a/styles/globals.css
+++ b/styles/globals.css
@@ -10,7 +10,7 @@
 
 html {
   /* background-color: var(--theme-ui-colors-background); */
-	transition: background-color 0.3s ease-in-out;
+    transition: background-color 0.3s ease-in-out;
   background-color: #000000 !important;
   transition: 0.3s ease-in-out border-radius;
   border-radius: 0px;
@@ -43,7 +43,7 @@
   text-decoration: none;
   transition: 0.5s ease-in-out;
   color: var(--theme-ui-colors-primary);
-	transition: color 0.3s ease-in-out;
+    transition: color 0.3s ease-in-out;
 }
 
 * {
@@ -57,7 +57,7 @@
   font-weight: bold;
   color: #F27878;
   background-color: var(--theme-ui-colors-hint);
-	transition: background-color 0.3s ease-in-out;
+    transition: background-color 0.3s ease-in-out;
   padding: 2px;
   font-size: 105%;
   border-radius: 5px;
diff --git a/styles/nucleus/nucleus.module.css b/styles/nucleus/nucleus.module.css
index 391ddc0..4cce427 100644
--- a/styles/nucleus/nucleus.module.css
+++ b/styles/nucleus/nucleus.module.css
@@ -11,8 +11,8 @@
 }
 
 .text {
-	color: var(--card-text-color);
-	font-size: 18px;
+    color: var(--card-text-color);
+    font-size: 18px;
     text-align: center;
     padding-left: 10px;
     padding-right: 10px;
diff --git a/styles/rsmv/rsmv.module.css b/styles/rsmv/rsmv.module.css
index 391ddc0..4cce427 100644
--- a/styles/rsmv/rsmv.module.css
+++ b/styles/rsmv/rsmv.module.css
@@ -11,8 +11,8 @@
 }
 
 .text {
-	color: var(--card-text-color);
-	font-size: 18px;
+    color: var(--card-text-color);
+    font-size: 18px;
     text-align: center;
     padding-left: 10px;
     padding-right: 10px;
