diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000000000000000000000000000000000..a21b737af27b1f5fc38d1c40efd91e5871df796d
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "legal"]
+	path = legal
+	url = https://gitlab.insrt.uk/revolt/legal
diff --git a/components/Footer.module.scss b/components/Footer.module.scss
index 37e5110c8fc280ade447da77520843111b3b4de6..d283874b2d810eb9733131507894e42f449bce02 100644
--- a/components/Footer.module.scss
+++ b/components/Footer.module.scss
@@ -24,12 +24,11 @@
             a {
                 color: white;
                 transition: color ease-in-out .07s;
+
                 &:hover {
                     color: var(--accent);
-                }
 
-                svg {
-                    > &:hover {
+                    svg {
                         color: var(--accent);
                     }
                 }
diff --git a/components/Footer.tsx b/components/Footer.tsx
index 1fa649c02164f58b91046fca88d643c61215e90d..09fb5dd583169c08b8c9427a59ae1ff0775995e9 100644
--- a/components/Footer.tsx
+++ b/components/Footer.tsx
@@ -1,4 +1,5 @@
 import { Gitlab, Reddit, Twitter } from '@styled-icons/simple-icons';
+import Link from 'next/link';
 import { URLs } from '../urls';
 import styles from './Footer.module.scss';
 
@@ -36,12 +37,21 @@ export function Footer() {
                 </div>
                 <div className={styles.column}>
                     <b>Company</b>
-                    <a href={URLs.AboutUs}>About Us</a>
+                    <Link href="/about">
+                        <a>About Us</a>
+                    </Link>
                 </div>
                 <div className={styles.column}>
                     <b>Legal</b>
-                    <a href={URLs.TermsOfService}>Terms of Service</a>
-                    <a href={URLs.PrivacyPolicy}>Privacy Policy</a>
+                    <Link href="/terms">
+                        <a>Terms of Service</a>
+                    </Link>
+                    <Link href="/privacy">
+                        <a>Privacy Policy</a>
+                    </Link>
+                    <Link href="/aup">
+                        <a>Acceptable Usage</a>
+                    </Link>
                 </div>
             </div>
         </div>
diff --git a/components/Markdown.module.scss b/components/Markdown.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..ce0b25c2079b44a56b243c1ad2e91bddbf8868c4
--- /dev/null
+++ b/components/Markdown.module.scss
@@ -0,0 +1,25 @@
+.markdown {
+    * {
+        user-select: text;
+    }
+
+    font-weight: 500;
+
+    h1 {
+        color: var(--accent);
+        margin: 0;
+    }
+
+    h2, h3 {
+        margin-top: 2rem;
+    }
+
+    li {
+        padding: 2px 0;
+    }
+
+    blockquote {
+        opacity: 0.5;
+        margin-left: 24px;
+    }
+}
diff --git a/components/Markdown.tsx b/components/Markdown.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..f4956f02455bc3b01f7d9fb43f2651f7bd3dafb2
--- /dev/null
+++ b/components/Markdown.tsx
@@ -0,0 +1,22 @@
+import MarkdownIt from "markdown-it";
+import styles from './Markdown.module.scss';
+
+export const md: MarkdownIt = MarkdownIt({ breaks: true, linkify: true });
+
+interface Props {
+    content?: string;
+}
+
+export function Markdown({ content }: Props) {
+    if (typeof content === "undefined") return null;
+    if (content.length === 0) return null;
+
+    return (
+        <span
+            className={styles.markdown}
+            dangerouslySetInnerHTML={{
+                __html: md.render(content)
+            }}
+        />
+    );
+}
diff --git a/components/Navbar.tsx b/components/Navbar.tsx
index 3971358a17735bd10fc60788907ed41ee9fa8cb4..eef22784342e9d98e99a3febd928d57c057a2fcd 100644
--- a/components/Navbar.tsx
+++ b/components/Navbar.tsx
@@ -1,3 +1,4 @@
+import Link from 'next/link';
 import { URLs } from '../urls';
 import styles from './Navbar.module.scss';
 import { Globe } from '@styled-icons/feather';
@@ -5,7 +6,11 @@ import { Globe } from '@styled-icons/feather';
 export function Navbar() {
     return (
         <div className={styles.navbar}>
-            <img src="/logo.svg" draggable={false} />
+            <Link href="/">
+                <a>
+                    <img src="/logo.svg" draggable={false} />
+                </a>
+            </Link>
             <div className={styles.actions}>
                 <a href={URLs.Roadmap} target="_blank">Roadmap</a>
                 {/* <a>Developers</a> */}
diff --git a/globals.d.ts b/globals.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c1c18f6c1f0fa21c49c26ab2ae01625aad5118a
--- /dev/null
+++ b/globals.d.ts
@@ -0,0 +1 @@
+declare module '*.md';
diff --git a/legal b/legal
new file mode 160000
index 0000000000000000000000000000000000000000..2ca645c902b4594af0383bab608d1606c86d1bf1
--- /dev/null
+++ b/legal
@@ -0,0 +1 @@
+Subproject commit 2ca645c902b4594af0383bab608d1606c86d1bf1
diff --git a/package.json b/package.json
index e0aa112493d858bf531c77d2d4a63c2dd3cd9a7a..4df5d04a424be65df9952f9a3e85aa7db5798784 100644
--- a/package.json
+++ b/package.json
@@ -19,6 +19,7 @@
     "@types/node": "^14.14.41",
     "@types/react": "^17.0.3",
     "classnames": "^2.3.1",
+    "markdown-it": "^12.0.6",
     "sass": "^1.32.10",
     "styled-components": "^5.2.3",
     "typescript": "^4.2.4"
diff --git a/pages/about.tsx b/pages/about.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..9df778e2bdcf20694da6c89d27c2a1aecc07dbe1
--- /dev/null
+++ b/pages/about.tsx
@@ -0,0 +1,35 @@
+import Head from 'next/head';
+import { Footer } from '../components/Footer';
+import { Navbar } from '../components/Navbar';
+import styles from '../styles/Legal.module.scss';
+import { Markdown } from '../components/Markdown';
+
+export default function Home({ content }: { content: string }) {
+    return (
+        <div>
+            <Head>
+                <title>About Revolt</title>
+                <link rel="icon" href="/favicon.ico" />
+                <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=0" />
+
+                <link rel="preconnect" href="https://fonts.gstatic.com" />
+                <link href="https://fonts.googleapis.com/css2?family=Inter:wght@500;600&display=swap" rel="stylesheet" />
+            </Head>
+            <main>
+                <Navbar />
+                <div className={styles.content}>
+                    <Markdown content={content} />
+                </div>
+                <Footer />
+            </main>
+        </div>
+    );
+}
+
+export async function getStaticProps() {
+    const { readFile } = require('fs/promises');
+    const file = await readFile('./legal/About.md');
+    const content = file.toString();
+    
+    return { props: { content } }
+}
diff --git a/pages/aup.tsx b/pages/aup.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..3650c551e2d5755f1f18ea208b805596c0096528
--- /dev/null
+++ b/pages/aup.tsx
@@ -0,0 +1,35 @@
+import Head from 'next/head';
+import { Footer } from '../components/Footer';
+import { Navbar } from '../components/Navbar';
+import styles from '../styles/Legal.module.scss';
+import { Markdown } from '../components/Markdown';
+
+export default function Home({ content }: { content: string }) {
+    return (
+        <div>
+            <Head>
+                <title>Acceptable Usage Policy - Revolt</title>
+                <link rel="icon" href="/favicon.ico" />
+                <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=0" />
+
+                <link rel="preconnect" href="https://fonts.gstatic.com" />
+                <link href="https://fonts.googleapis.com/css2?family=Inter:wght@500;600&display=swap" rel="stylesheet" />
+            </Head>
+            <main>
+                <Navbar />
+                <div className={styles.content}>
+                    <Markdown content={content} />
+                </div>
+                <Footer />
+            </main>
+        </div>
+    );
+}
+
+export async function getStaticProps() {
+    const { readFile } = require('fs/promises');
+    const file = await readFile('./legal/Acceptable Usage Policy.md');
+    const content = file.toString();
+    
+    return { props: { content } }
+}
diff --git a/pages/index.tsx b/pages/index.tsx
index 85e620876a045ba708275ca6cdd8d30cdb370e1a..a5ed5a404131fbefac9ca460b0d9fde2cc2d9fd7 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -5,6 +5,7 @@ import { ArrowRight, HelpCircle } from '@styled-icons/feather';
 import { JoinPrompt } from '../components/JoinPrompt';
 import { Navbar } from '../components/Navbar';
 import styles from '../styles/Home.module.scss';
+import { URLs } from '../urls';
 
 export default function Home() {
     return (
@@ -42,7 +43,7 @@ export default function Home() {
                     <style dangerouslySetInnerHTML={{ __html: `html { scroll-snap-type: y mandatory; }` }} /> }
             </Head>
             <main>
-                <a className={styles.feedback} href="">
+                <a className={styles.feedback} href={URLs.Feedback} target="_blank">
                     <HelpCircle size={24} strokeWidth={2}/>Feedback
                 </a>
                 <section className={styles.hero}>
diff --git a/pages/privacy.tsx b/pages/privacy.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..0209397b1d8a3ee1d3ea73fda15f8670e24f3d2e
--- /dev/null
+++ b/pages/privacy.tsx
@@ -0,0 +1,35 @@
+import Head from 'next/head';
+import { Footer } from '../components/Footer';
+import { Navbar } from '../components/Navbar';
+import styles from '../styles/Legal.module.scss';
+import { Markdown } from '../components/Markdown';
+
+export default function Home({ content }: { content: string }) {
+    return (
+        <div>
+            <Head>
+                <title>Privacy Policy - Revolt</title>
+                <link rel="icon" href="/favicon.ico" />
+                <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=0" />
+
+                <link rel="preconnect" href="https://fonts.gstatic.com" />
+                <link href="https://fonts.googleapis.com/css2?family=Inter:wght@500;600&display=swap" rel="stylesheet" />
+            </Head>
+            <main>
+                <Navbar />
+                <div className={styles.content}>
+                    <Markdown content={content} />
+                </div>
+                <Footer />
+            </main>
+        </div>
+    );
+}
+
+export async function getStaticProps() {
+    const { readFile } = require('fs/promises');
+    const file = await readFile('./legal/Privacy Policy.md');
+    const content = file.toString();
+    
+    return { props: { content } }
+}
diff --git a/pages/terms.tsx b/pages/terms.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..f8d2de71712c967ce5b6b7d1ca36536d2a8ff780
--- /dev/null
+++ b/pages/terms.tsx
@@ -0,0 +1,35 @@
+import Head from 'next/head';
+import { Footer } from '../components/Footer';
+import { Navbar } from '../components/Navbar';
+import styles from '../styles/Legal.module.scss';
+import { Markdown } from '../components/Markdown';
+
+export default function Home({ content }: { content: string }) {
+    return (
+        <div>
+            <Head>
+                <title>Terms of Service - Revolt</title>
+                <link rel="icon" href="/favicon.ico" />
+                <meta name="viewport" content="width=device-width, initial-scale=0.9, user-scalable=0" />
+
+                <link rel="preconnect" href="https://fonts.gstatic.com" />
+                <link href="https://fonts.googleapis.com/css2?family=Inter:wght@500;600&display=swap" rel="stylesheet" />
+            </Head>
+            <main>
+                <Navbar />
+                <div className={styles.content}>
+                    <Markdown content={content} />
+                </div>
+                <Footer />
+            </main>
+        </div>
+    );
+}
+
+export async function getStaticProps() {
+    const { readFile } = require('fs/promises');
+    const file = await readFile('./legal/Terms of Service.md');
+    const content = file.toString();
+    
+    return { props: { content } }
+}
diff --git a/styles/Legal.module.scss b/styles/Legal.module.scss
new file mode 100644
index 0000000000000000000000000000000000000000..39b166fe7654935e88cf32ba4fa907eb40dd66a7
--- /dev/null
+++ b/styles/Legal.module.scss
@@ -0,0 +1,5 @@
+.content {
+    margin: auto;
+    padding: 20px;
+    max-width: 720px;
+}
diff --git a/urls.ts b/urls.ts
index 5a665163c04df689c179251301272f729b823d74..e3af57874fcddda2eea095f7e006853b63185e59 100644
--- a/urls.ts
+++ b/urls.ts
@@ -4,13 +4,12 @@ export const URLs = {
     Roadmap: 'https://www.notion.so/Roadmap-d285602ba73543438bf1cdb0a4754514',
     Developers: 'https://developers.revolt.chat',
 
+    Feedback: 'https://form.insrt.uk/form/607f276fed17160022857908',
     SourceCode: 'https://gitlab.insrt.uk/revolt',
     Reddit: 'https://reddit.com/r/revoltchat',
     Twitter: 'https://twitter.com/revoltchat',
 
     Translate: 'https://weblate.insrt.uk/engage/revolt/?utm_source=widget',
 
-    AboutUs: 'https://www.notion.so/About-f12f76fcbb124e27824639bac5dbbf11',
-    TermsOfService: 'https://www.notion.so/Terms-of-Service-25dfc6bd25114a67b6eb6696f8463134',
-    PrivacyPolicy: 'https://www.notion.so/Privacy-Policy-fcbc659894284f4bbb23e8ab3a1a476c',
+    AboutUs: 'https://www.notion.so/About-f12f76fcbb124e27824639bac5dbbf11'
 };
diff --git a/yarn.lock b/yarn.lock
index c62e36b90eaada0c896e1b33738ad724ddac56f9..abecc00b28f7269bf26030ed912e20ee3b81261f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -302,6 +302,11 @@ anymatch@~3.1.1:
     normalize-path "^3.0.0"
     picomatch "^2.0.4"
 
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
 array-filter@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83"
@@ -803,6 +808,11 @@ encoding@0.1.13:
   dependencies:
     iconv-lite "^0.6.2"
 
+entities@~2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5"
+  integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==
+
 es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2:
   version "1.18.0"
   resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4"
@@ -1217,6 +1227,13 @@ line-column@^1.0.2:
     isarray "^1.0.0"
     isobject "^2.0.0"
 
+linkify-it@^3.0.1:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-3.0.2.tgz#f55eeb8bc1d3ae754049e124ab3bb56d97797fb8"
+  integrity sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==
+  dependencies:
+    uc.micro "^1.0.1"
+
 loader-utils@1.2.3:
   version "1.2.3"
   resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
@@ -1257,6 +1274,17 @@ make-dir@^3.0.2:
   dependencies:
     semver "^6.0.0"
 
+markdown-it@^12.0.6:
+  version "12.0.6"
+  resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-12.0.6.tgz#adcc8e5fe020af292ccbdf161fe84f1961516138"
+  integrity sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==
+  dependencies:
+    argparse "^2.0.1"
+    entities "~2.1.0"
+    linkify-it "^3.0.1"
+    mdurl "^1.0.1"
+    uc.micro "^1.0.5"
+
 md5.js@^1.3.4:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
@@ -1266,6 +1294,11 @@ md5.js@^1.3.4:
     inherits "^2.0.1"
     safe-buffer "^5.1.2"
 
+mdurl@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e"
+  integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=
+
 merge-stream@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
@@ -2044,6 +2077,11 @@ typescript@^4.2.4:
   resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961"
   integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==
 
+uc.micro@^1.0.1, uc.micro@^1.0.5:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
+  integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
+
 unbox-primitive@^1.0.0:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471"