hi coded
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