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 c59f7bb..07319c7 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 7421556..01d15ef 100644
--- a/pages/01189998819991197253.js
+++ b/pages/01189998819991197253.js
@@ -1,23 +1,23 @@
 import Header from '../Components/Header'
 
 export default function Error() {
-	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
+                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}
+            />
+        </>
+    )
 }
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;
