diff --git a/package.json b/package.json
index b4af7abfb8ec3907553a368e1410a9ea0cc7ebcc..792a4133031569f8b2f78f36737c5d1f2579d2c1 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
         "react": "^16.13.1",
         "react-dom": "^16.13.1",
         "react-scripts": "3.4.1",
-        "yup": "^0.29.1"
+        "zod": "^1.10.3"
     },
     "scripts": {
         "start": "react-scripts start",
diff --git a/src/components/CreateLinkTile.tsx b/src/components/CreateLinkTile.tsx
index 63a57d32cf20b3634d9bc40fade2ea3e25636019..06b0c973e89a4627e3ddb960c6198e79946ca484 100644
--- a/src/components/CreateLinkTile.tsx
+++ b/src/components/CreateLinkTile.tsx
@@ -15,12 +15,15 @@ limitations under the License.
 */
 
 import React, { useEffect, useRef } from 'react';
+import { Formik, Form } from 'formik';
+
 import Tile from './Tile';
 import Button from './Button';
 import TextButton from './TextButton';
 import Input from './Input';
-import { Formik, Form } from 'formik';
-import * as Yup from 'yup';
+
+import { parseHash } from '../parser/parser';
+import { LinkKind } from '../parser/types';
 
 import './CreateLinkTile.scss';
 
@@ -28,6 +31,24 @@ interface ILinkNotCreatedTileProps {
     setLink: React.Dispatch<React.SetStateAction<string>>;
 }
 
+interface FormValues {
+    identifier: string;
+}
+
+// Hacky use of types here
+function validate(values: FormValues): Partial<FormValues> {
+    const errors: Partial<FormValues> = {};
+
+    const parse = parseHash(values.identifier);
+
+    if (parse.kind === LinkKind.ParseFailed) {
+        errors.identifier =
+            "That link doesn't look right. Double check the details.";
+    }
+
+    return errors;
+}
+
 const LinkNotCreatedTile: React.FC<ILinkNotCreatedTileProps> = (
     props: ILinkNotCreatedTileProps
 ) => {
@@ -41,15 +62,7 @@ const LinkNotCreatedTile: React.FC<ILinkNotCreatedTileProps> = (
                 initialValues={{
                     identifier: '',
                 }}
-                validationSchema={Yup.object({
-                    identifier: Yup.string()
-                        .test(
-                            'is-identifier',
-                            "That link doesn't look right. Double check the details.",
-                            (link) => link
-                        )
-                        .required('Required'),
-                })}
+                validate={validate}
                 onSubmit={(values): void => {
                     props.setLink(
                         document.location.protocol +
@@ -109,7 +122,6 @@ const LinkCreatedTile: React.FC<ILinkCreatedTileProps> = (props) => {
 
 const CreateLinkTile: React.FC = () => {
     const [link, setLink] = React.useState('');
-    console.log(link);
     if (!link) {
         return <LinkNotCreatedTile setLink={setLink} />;
     } else {