diff --git a/app/routes/book-event.tsx b/app/routes/book-event.tsx
new file mode 100644
index 0000000..dbb31b4
--- /dev/null
+++ b/app/routes/book-event.tsx
@@ -0,0 +1,118 @@
+import {
+ Button,
+ Container,
+ Heading,
+ HStack,
+ Input,
+ Radio,
+ RadioGroup,
+ Textarea,
+ useToast,
+} from "@chakra-ui/react";
+import { useState } from "react";
+import Success from "../../components/Success.js";
+
+export default function () {
+ const toast = useToast();
+ const [eventDay, setEventDay] = useState("0");
+ const [eventDetails, setEventDetails] = useState("");
+ const [eventType, setEventType] = useState("");
+ const [riddleAnswer, setRiddleAnswer] = useState("");
+ const [submitSuccess, setSubmitSuccess] = useState(false);
+
+ async function submit() {
+ let eventResp: Response;
+
+ try {
+ eventResp = await fetch("/api/events-team/events/new", {
+ body: JSON.stringify({
+ answer: riddleAnswer || undefined,
+ day: eventDay,
+ details: eventDetails,
+ type: eventType,
+ }),
+ headers: {
+ "content-type": "application/json",
+ },
+ method: "POST",
+ });
+ } catch {
+ toast({
+ description: "Please check your internet and try again",
+ isClosable: true,
+ status: "error",
+ title: "Unknown error",
+ });
+
+ return;
+ }
+
+ if (!eventResp.ok) {
+ let errorMessage = "Unknown error";
+
+ try {
+ errorMessage = ((await eventResp.json()) as { error: string }).error;
+ } catch {}
+
+ useToast({
+ description: errorMessage,
+ isClosable: true,
+ status: "error",
+ title: "Oops!",
+ });
+
+ return;
+ }
+
+ setSubmitSuccess(true);
+ await new Promise((r) => setTimeout(r, 7500));
+ location.assign("/events-team");
+ }
+
+ return submitSuccess ? (
+
+ ) : (
+
+ Book an Event
+ Event Type
+
+
+ FoTD
+ Gamenight
+ QoTD
+ RoTW
+
+
+
+
+ Event Date
+
+ setEventDay(e.target.value.split("-")[2])}
+ type="date"
+ />
+
+ Event Details
+
+
+ );
+}