diff --git a/Components/Header.js b/Components/Header.js
index 7d7a1c7..1d9e9e5 100644
--- a/Components/Header.js
+++ b/Components/Header.js
@@ -105,12 +105,13 @@
             }
         }
     }
+    const season = props.season ?? { season: "normal", filePath: "normal" };
 
     return (
         <div className={Styles.header} style={{
             margin: "0",
             minHeight: props.fullscreen ? "calc(100vh - 42px)" : "calc(100vh - (4 * max(2em, 4vw)) - 1em)",
-            transform: props.season.season === "aprilFools" ? "rotate(2.5deg)" : "none",
+            transform: season.season === "aprilFools" ? "rotate(2.5deg)" : "none",
             transition: "transform 1s cubic-bezier(.47,1.64,.41,.8), background-color 0.3s ease-in-out"
         }} id={props.id ? props.id : null}>
             <div className={Styles.container} style={{minHeight: props.fullscreen ? "calc(100vh - 42px)" : "calc(100vh - (4 * max(2em, 4vw)) - 1em)"}}>
@@ -153,7 +154,11 @@
                         <h1 className={Styles.title}>{props.name}</h1>
                     </div>
                     <div className={Styles.textBar}>
-                        <p className={Styles.subtext + " " + (props.buttons.length ? Styles.subtextExtra : null)}>{props.subtext}</p>
+                        {
+                            props.subtext instanceof String ?
+                            <p className={Styles.subtext + " " + (props.buttons.length ? Styles.subtextExtra : null)}>{props.subtext}</p> :
+                            props.subtext
+                        }
                     </div>
                     <a href="#skipNav" id="skipNav" style={{display: "none"}} />
                     { props.buttons.length ?
diff --git a/Components/Texttools.js b/Components/Texttools.js
index 57fddc0..76fa8cf 100644
--- a/Components/Texttools.js
+++ b/Components/Texttools.js
@@ -48,11 +48,11 @@
     }
 
     render() {
-        return <pre
+        return <span
             className={Styles.code}
             style={{color: `#${this.props.colour}`}}
             onClick={this.props.clickable ? () => this.clicked() : () => this.clicked()}
-        >{this.state.isPopoverOpen ? "Copied!" : this.props.children}</pre>
+        >{this.state.isPopoverOpen ? "Copied!" : this.props.children}</span>
     }
 }
 
diff --git a/pages/api/season.js b/pages/api/season.js
index c3066cc..2603a52 100644
--- a/pages/api/season.js
+++ b/pages/api/season.js
@@ -2,6 +2,14 @@
     return Math.floor((new Date().getTime() - date.getTime()) / (1000 * 60 * 60 * 24))
 }
 
+function daysSinceDate(date) {
+    // If the date is after today, make it last year
+    if (date > new Date()) {
+        date.setFullYear(date.getFullYear() - 1);
+    }
+    return Math.floor((new Date().getTime() - date.getTime()) / (1000 * 60 * 60 * 24));
+}
+
 function getSeason() {
     let year = new Date().getFullYear();
 
@@ -10,7 +18,8 @@
         halloween: [new Date(`${year}-10-25`), new Date(`${year}-11-1`)],
         trans: [new Date(`${year}-11-13`), new Date(`${year}-11-19`)],
         christmas: [new Date(`${year}-12-1`), new Date(`${year}-12-26`)],
-        aprilFools: [new Date(`${year}-04-01`), new Date(`${year}-04-01`)]
+        aprilFools: [new Date(`${year}-04-01`), new Date(`${year}-04-01`)],
+        fake: [new Date(`${year}-01-01`), new Date(`${year}-01-01`)]
     }
     const filePaths = {
         normal: "normal",
@@ -23,19 +32,19 @@
 
     let current = new Date();
     let currentSeason = Object.keys(dates).find((str) => current >= dates[str][0] && current <= dates[str][1]) || "normal";
-    let daysIntoSeason;
+    let currentDaysIntoSeason;
     if (currentSeason !== "normal") {
-        daysIntoSeason = daysIntoSeason(dates[currentSeason][0])
+        currentDaysIntoSeason = daysIntoSeason(dates[currentSeason][0])
     } else {
-        // Calculate the days from the end of each season
-        let days = Object.keys(dates).map((str) => daysIntoSeason(dates[str][1])).filter((num) => num > 0);
-        daysIntoSeason = Math.min(...days);
+        // Calculate how many days it has been since each season ended
+        let days = Object.keys(dates).map((str) => daysSinceDate(dates[str][1]))
+        currentDaysIntoSeason = Math.min(...days);
     }
 
     return {
         season: currentSeason,
         filePath: filePaths[currentSeason],
-        daysIntoSeason: daysIntoSeason
+        daysIntoSeason: currentDaysIntoSeason
     }
 }
 
diff --git a/pages/nucleus/transcript/about.js b/pages/nucleus/transcript/about.js
new file mode 100644
index 0000000..088e2d3
--- /dev/null
+++ b/pages/nucleus/transcript/about.js
@@ -0,0 +1,71 @@
+import React, { Component } from 'react'
+import Header from '../../../Components/Header'
+import { AutoLayout, Panel, Title, Subtitle, Text, Divider } from '../../../Components/Panels'
+import { Code } from '../../../Components/Texttools'
+import { Card, CardRow } from '../../../Components/Card'
+import HCaptcha from 'react-hcaptcha';
+import { useReward } from 'react-rewards';
+
+function About(props) {
+    const { reward, isAnimating } = useReward('confetti', 'confetti', {
+        elementSize: 12,
+        spread: 85,
+        position: "absolute",
+        colors: ["#F27878", "#E5AB71", "#E5DC71", "#A1CC65", "#68D49E", "#71AFE5", "#6576CC", "#8D58B2", "#BF5E9F"]
+    });
+
+    return (
+        <>
+            <Header
+                name="Nucleus Transcripts"
+                subtext="Review purged messages in a channel"
+                customImage={"https://assets.clicks.codes/web/logos/nucleus.svg"}
+                embedImage={"https://assets.clicks.codes/bots/nucleus/normal.png"}
+                gradient={["F27878", "D96B6B"]}
+                wave="web/waves/header/nucleus"
+                buttons={[
+                    {color: "424242", buttonText: "FFFFFF", link: "#about", text: "About"},
+                    {color: "424242", buttonText: "FFFFFF", link: "#privacy", text: "Privacy"},
+                    {color: "F27878", buttonText: "FFFFFF", link: "#invite", text: "Invite"}
+                ]}
+                season={props.season}
+            />
+            <AutoLayout>
+                <Panel halfSize={false} id="about">
+                    <Title>About Transcripts</Title>
+                    <Divider />
+                    <Text>Transcripts are generated whenever a purge command is run, or a ticket is deleted (and transcripts are enabled).</Text>
+                    <Text>These store the messages, authors, and the content for future reference.</Text>
+                    <Text>When the transcript is created, you will get a link to our website to view it.</Text>
+                    <Text>Images and files are not stored, and are not available in transcripts.</Text>
+                </Panel>
+                <Panel halfSize={true} id="privacy">
+                    <Title>Privacy</Title>
+                    <Divider />
+                    <Text>Transcripts can be viewed by anyone online if they have the URL. These are random to avoid this happening by chance.</Text>
+                    <Text>The code is long enough that it is hard to guess any specific code. The URL is not linked to your server in any way.</Text>
+                    <Text>All transcripts for your server can be deleted from <Code colour="F27878">/privacy</Code>.</Text>
+                </Panel>
+                <Panel halfSize={true} id="invite">
+                    <Title>Invite</Title>
+                    <Divider />
+                    <CardRow>
+                        <Card
+                            wave="nucleus"
+                            icon="bots/nucleus/circle"
+                            buttonText={"FFFFFF"} gradient={["F27878", "D96B6B"]}
+                            title="Nucleus"
+                            subtext="Invite Nucleus to your server"
+                            buttons={[
+                                {color: "424242", link: "https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands", text: "Invite"}
+                            ]}
+                            url="https://discord.com/api/oauth2/authorize?client_id=715989276382462053&permissions=121295465718&scope=bot%20applications.commands"
+                        />
+                    </CardRow>
+                </Panel>
+            </AutoLayout>
+        </>
+    )
+}
+
+export default About;
\ No newline at end of file
diff --git a/pages/nucleus/transcript/index.js b/pages/nucleus/transcript/index.js
new file mode 100644
index 0000000..1c9e88f
--- /dev/null
+++ b/pages/nucleus/transcript/index.js
@@ -0,0 +1,57 @@
+import Axios from 'axios';
+import React from 'react';
+
+function Index(props) {
+    return <>
+    <div style={{
+        width: "100vw",
+        height: "40px",
+        backgroundColor: "#F27878",
+        display: "flex",
+        justifyContent: "left",
+        alignItems: "center",
+        paddingLeft: "25px",
+        color: "white",
+        fontSize: "1.5em",
+    }}>Nucleus Transcripts</div>
+    <div style={{
+        height: "100vw",
+        width: "100vw",
+        backgroundColor: "var(--theme-ui-colors-background)",
+        margintop: "-50px",
+        padding: "25px",
+        paddingTop: "10px",
+        transition: "all 0.3s ease-in-out"
+    }}>
+        <p>{props.humanReadable}</p>
+    </div>
+</>
+}
+
+export default Index;
+export async function getServerSideProps(ctx) {
+    if(!ctx.query.code) {
+        return {
+            redirect: {
+                destination: '/nucleus/transcript/about',
+                permanent: true
+            }
+        }
+    }
+    let code;
+    try {
+        code = await Axios.get(`http://localhost:10000/transcript/${ctx.query.code}/human`);
+    } catch (e) {
+        return {
+            redirect: {
+                destination: '/nucleus/transcript/invalid',
+                permanent: true
+            }
+        }
+    }
+    return {
+        props: {
+            humanReadable: code.data
+        }
+    }
+}
\ No newline at end of file
diff --git a/pages/nucleus/transcript/invalid.js b/pages/nucleus/transcript/invalid.js
new file mode 100644
index 0000000..8491aeb
--- /dev/null
+++ b/pages/nucleus/transcript/invalid.js
@@ -0,0 +1,26 @@
+import { Component } from 'react'
+import Link from 'next/link'
+import Header from '../../../Components/Header'
+
+class Failed extends Component {
+    constructor(props) {
+        super(props)
+    }
+
+    render() {
+        return (
+            <Header
+                name="Transcript does not exist"
+                subtext={<p>No transcripts matched that code. If you believe this is a mistake, please submit a report in <Link href="https://discord.gg/bPaNnxe" target="_blank" rel="noopener noreferrer">our server</Link></p>}
+                gradient={["F27878", "D96B6B"]}
+                wave="web/waves/header/nucleus"
+                buttons={[]}
+                fullscreen={true}
+                season={this.props.season}
+            />
+        )
+    }
+
+}
+
+export default Failed;
\ No newline at end of file
diff --git a/pages/nucleus/transcript/testing.js b/pages/nucleus/transcript/testing.js
new file mode 100644
index 0000000..ac0240b
--- /dev/null
+++ b/pages/nucleus/transcript/testing.js
@@ -0,0 +1,54 @@
+import React from 'react';
+
+function Testing(props) {
+    return <>
+        <div style={{
+            width: "100vw",
+            height: "40px",
+            backgroundColor: "#F27878",
+            display: "flex",
+            justifyContent: "left",
+            alignItems: "center",
+            paddingLeft: "25px",
+            color: "white",
+            fontSize: "1.5em",
+        }}>Nucleus Transcripts</div>
+        <div style={{
+            height: "100vw",
+            width: "100vw",
+            backgroundColor: "var(--theme-ui-colors-background)",
+            margintop: "-50px",
+            padding: "25px",
+            paddingTop: "10px",
+            transition: "all 0.3s ease-in-out"
+        }}>
+            <p>{props.humanReadable}</p>
+        </div>
+    </>
+}
+
+export default Testing;
+export async function getServerSideProps(ctx) {
+    if(!ctx.query.code) {
+        return {
+            redirect: {
+                destination: '/nucleus/transcript/about',
+                permanent: true
+            }
+        }
+    }
+    if (ctx.query.code === "test") {
+        return {
+            props: {
+                humanReadable: "This is a test string! It should render correctly on the page"
+            }
+        }
+    } else {
+        return {
+            redirect: {
+                destination: '/nucleus/transcript/invalid',
+                permanent: true
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/pages/nucleus/verify/failure.js b/pages/nucleus/verify/failure.js
index 8581c18..12fdc26 100644
--- a/pages/nucleus/verify/failure.js
+++ b/pages/nucleus/verify/failure.js
@@ -1,4 +1,5 @@
 import { Component } from 'react'
+import Link from 'next/link'
 import Header from '../../../Components/Header'
 
 class Failed extends Component {
@@ -10,7 +11,9 @@
         return (
             <Header
                 name="Verification failed"
-                subtext={<p>Please try again, and if the error persists please contact us at <a href="mailto:verification@clicks.codes" target="_blank" rel="noopener noreferrer">verification@clicks.codes</a></p>}
+                subtext={
+                    <p>Please try again, and if the error persists please contact us at <Link href="mailto:verification@clicks.codes" target="_blank" rel="noopener noreferrer">verification@clicks.codes</Link></p>
+                }
                 gradient={["F27878", "D96B6B"]}
                 wave="web/waves/header/nucleus"
                 buttons={[]}
