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>
-		}
+        }
     }
 }
 
