diff --git a/pages/api/rsmv/complete.js b/pages/api/rsmv/complete.js
new file mode 100644
index 0000000..3259967
--- /dev/null
+++ b/pages/api/rsmv/complete.js
@@ -0,0 +1,17 @@
+import Axios from 'axios';
+
+export default async (req, res) => {
+    let code = await Axios.post('http://localhost:3000/api/rsmv/validate', {code:req.body.code});
+    if (code.status != 200) {
+        return res.send(404);
+    }
+    if (code.data.user  != req.body.uid) return res.send(401)
+    if (code.data.guild != req.body.gid) return res.send(401)
+    if (code.data.role  != req.body.rid) return res.send(401)
+
+    let secret = "slwu0rZV5W6WdmGtgI16du8Ar2tQGMr3Q9dE6u3poKiVODNV9SweaA3buawgkTmTuITXDWOUpBcTFA0qWrUvoshi1JB180WOFwA7"
+    let resp = await Axios.get(
+        `http://192.168.102.5:10000/role/gid/${req.body.gid}/rid/${req.body.rid}/user/${req.body.uid}/secret/${secret}/code/${req.body.code}`
+    )
+    return res.send(resp.status);
+}
diff --git a/pages/api/rsmv/validate.js b/pages/api/rsmv/validate.js
new file mode 100644
index 0000000..7359a68
--- /dev/null
+++ b/pages/api/rsmv/validate.js
@@ -0,0 +1,28 @@
+import MongoClient from 'mongodb';
+
+
+const url = 'mongodb://rsm:LJMy*orVFAATQ5PaX7EKXq74&HCDFaLE@192.168.101.2:27017/rsm';
+const db = 'rsm';
+const collection = 'rsmv-tokens'
+
+export default (req, res) => {
+    return new Promise((resolve, reject) => {
+        MongoClient.connect(url, async function(err, client) {
+            let db_response = await client.db(db).collection(collection).findOne({code: req.body.code});
+
+            if (!db_response) return resolve(res.status(404).end());
+            if (db_response.timestamp + (1800) >= Date.now()) return resolve(res.status(410));
+
+            let props = {
+                user: db_response.user,
+                role: db_response.role,
+                role_name: db_response.role_name,
+                guild: db_response.guild,
+                guild_name: db_response.guild_name,
+                guild_icon_url: db_response.guild_icon_url,
+                guild_size: db_response.guild_size
+            }
+            return resolve(res.status(200).send(props));
+        })
+    })
+}
\ No newline at end of file
diff --git a/pages/api/rsmv/verifyTkn.js b/pages/api/rsmv/verifyTkn.js
new file mode 100644
index 0000000..7e9d06f
--- /dev/null
+++ b/pages/api/rsmv/verifyTkn.js
@@ -0,0 +1,12 @@
+import Axios from 'axios';
+import qs from 'querystring';
+
+export default 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: chk.data.success });
+}
\ No newline at end of file
diff --git a/pages/rsmv/failure.js b/pages/rsmv/failure.js
new file mode 100644
index 0000000..31b721b
--- /dev/null
+++ b/pages/rsmv/failure.js
@@ -0,0 +1,25 @@
+import { Component } from 'react'
+import Styles from '../../styles/rsmv/rsmv.module.scss'
+
+class Failed extends Component {
+    constructor(props) {
+        super(props)
+    }
+
+    render() {
+        return (
+        <div className={Styles.container}>
+
+            <div className={Styles.ServerHeader}>
+                <h4>
+                    Verification failed<br />
+                    Please try again, and if the error persists please contact us at <a href="mailto:verification@clicksminuteper.net" target="_blank">verification@clicksminuteper.net</a>
+                </h4> 
+            </div>
+        </div>
+        )
+    }
+
+}
+
+export default Failed;
\ No newline at end of file
diff --git a/pages/rsmv/index.js b/pages/rsmv/index.js
new file mode 100644
index 0000000..cdb9a3c
--- /dev/null
+++ b/pages/rsmv/index.js
@@ -0,0 +1,129 @@
+import { Component } from 'react';
+import Styles from '../../styles/rsmv/rsmv.module.css'
+import HCaptcha from '@hcaptcha/react-hcaptcha';
+import Axios from 'axios';
+import Router from 'next/router';
+import React from 'react';
+
+
+class RSMV extends Component {
+
+    constructor(props) {
+        super(props);
+        this.v = false;
+        this.state = {
+
+        }
+    }
+
+    async handleVerificationSuccess(cls, token) {
+        const chk = await Axios.put('/api/rsmv/verifyTkn', { tkn: token.toString() })
+        if(chk.data.success == true) {
+            return cls.v = true;
+        } else {
+            return;
+        }
+
+    }
+
+    async componentDidMount() {
+        this.setState({
+            cores: window.navigator.hardwareConcurrency,
+            userAgent: window.navigator.userAgent,
+            platform: window.navigator.platform,
+            language: window.navigator.language,
+            memory: window.navigator.deviceMemory,
+        })
+    }
+
+    async submitForm(cls) {
+        if (!cls.v) {
+            return Router.push('/rsmv/failure','/rsmv')
+        }
+        let code = await Axios.post('/api/rsmv/complete', {
+            uid:cls.props.uID,
+            rid:cls.props.rID,
+            gid:cls.props.gID,
+            code:cls.props.code
+        });
+        console.log(code.status)
+        if (code.status === 200 ) return Router.push('/rsmv/success','/rsmv')
+        else return Router.push('/rsmv/failure','/rsmv')
+    }
+
+    render() {
+        return <>
+            <div className={Styles.container}>
+                <div className={Styles.ServerHeader}>
+                    <div className={Styles.ServerHeaderCenter}>
+                        <img src={this.props.guild_icon_url} className={Styles.ServerHeaderImage}/>
+                    </div>
+                </div>
+                <div className={Styles.ServerHeader}>
+                    <div className={Styles.ServerHeaderCenter}>
+                        <h1>{this.props.guild_name}</h1>
+                        <h3>{this.props.memberCount} members</h3>
+                    </div>
+                </div>
+                <div className={Styles.ServerHeader}>
+                    <h4>
+                        Complete the check below to join {this.props.guild_name}.
+                    </h4>
+                </div>
+                <div className={Styles.form}>
+                    <HCaptcha
+                        id="Captchas mitigate problems"
+                        sitekey="85074411-fa13-4d9b-b901-53095c6d1fc6"
+                        onVerify={token => this.handleVerificationSuccess(this, token)}
+                    />
+                    <div className={Styles.buttonContainer}>
+                        <button type="button" className={Styles.button} onClick={(success) => this.submitForm(this)}>Proceed</button>
+                    </div>
+                </div>
+                <div className={Styles.BottomText}>
+                    <p>This is an automatic check performed by RSM.<br/>
+                        <br/>
+                        By clicking Proceed, you will be given the <highlight>{this.props.role_name}</highlight> role in <highlight>{this.props.guild_name}</highlight>.<br/>
+                        {/* <br/>
+                        By Proceeding, you consent to our use of cookies described in our <highlight>policy</highlight>. */}
+                    </p>
+                </div>
+            </div>
+        </>
+    }
+}
+
+export default RSMV;
+export async function getServerSideProps(ctx) {
+    if(!ctx.query.code) {
+        return {
+            redirect: {
+                destination: '/rsmv/faliure',
+                permanent: true
+            }
+        }
+    }
+    let code = await Axios.post('http://localhost:3000/api/rsmv/validate', {code:ctx.query.code});
+    let headers = ctx.req.headers;
+    if (code.status != 200 ) {
+        return {
+            redirect: {
+                destination: '/rsmv/faliure',
+                permanent: true
+            }
+        }
+    }
+    return {
+        props: {
+            uID:code.data.user,
+            rID:code.data.role,
+            role_name:code.data.role_name,
+            gID:code.data.guild,
+            guild_name:code.data.guild_name,
+            guild_icon_url:code.data.guild_icon_url,
+            memberCount:code.data.guild_size,
+            headers: headers,
+            code: ctx.query.code
+        }
+    }
+}
\ No newline at end of file
diff --git a/pages/rsmv/success.js b/pages/rsmv/success.js
new file mode 100644
index 0000000..66d2003
--- /dev/null
+++ b/pages/rsmv/success.js
@@ -0,0 +1,29 @@
+import { Component } from 'react'
+import Styles from '../../styles/pages/rsmv.module.scss'
+
+class Success extends Component {
+    constructor(props) {
+        super(props)
+    }
+
+
+
+    render() {
+        return (
+        <>
+        <div className={Styles.container}>
+            <div className={Styles.ServerHeader}>
+                <h4>
+                    Thank you for verifying.<br />
+                    You can now close this tab or window.
+                </h4>
+            </div>
+        </div>
+        <div style={{height:"38vh"}}></div>
+        </>
+        )
+    }
+
+}
+
+export default Success;
\ No newline at end of file
