diff --git a/.eslintrc.json b/.eslintrc.json
index 839b6a61..26d4bd55 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,5 +1,4 @@
 {
-	"plugins": ["@typescript-eslint"],
 	"extends": ["next/core-web-vitals", "plugin:@typescript-eslint/recommended"],
 	"ignorePatterns": ["node_modules/", "__tests__/"],
 	"rules": {
diff --git a/package.json b/package.json
index f60f7f91..bece4710 100644
--- a/package.json
+++ b/package.json
@@ -14,7 +14,7 @@
 	},
 	"dependencies": {
 		"@next-auth/prisma-adapter": "^1.0.5",
-		"@next/eslint-plugin-next": "13.2.4-canary.0",
+		"@next/eslint-plugin-next": "13.2.5-canary.19",
 		"@prisma/client": "^4.10.1",
 		"@radix-ui/react-dialog": "^1.0.2",
 		"@radix-ui/react-dropdown-menu": "^2.0.3",
@@ -27,10 +27,11 @@
 		"cmdk": "^0.1.22",
 		"jest": "^29.4.3",
 		"lodash.debounce": "^4.0.8",
-		"next": "13.2.4-canary.0",
+		"next": "13.2.5-canary.19",
 		"next-auth": "^4.19.2",
 		"next-themes": "^0.2.1",
 		"react": "18.2.0",
+		"react-cookie": "^4.1.1",
 		"react-datepicker": "4.8.0",
 		"react-dom": "18.2.0",
 		"react-dropzone": "14.2.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a2725081..c85cac4a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3,7 +3,7 @@ lockfileVersion: 5.4
 specifiers:
   '@next-auth/prisma-adapter': ^1.0.5
   '@next/bundle-analyzer': 13.1.7-canary.26
-  '@next/eslint-plugin-next': 13.2.4-canary.0
+  '@next/eslint-plugin-next': 13.2.5-canary.19
   '@prisma/client': ^4.10.1
   '@radix-ui/react-dialog': ^1.0.2
   '@radix-ui/react-dropdown-menu': ^2.0.3
@@ -36,7 +36,7 @@ specifiers:
   jest: ^29.4.3
   jest-mock-extended: ^3.0.2
   lodash.debounce: ^4.0.8
-  next: 13.2.4-canary.0
+  next: 13.2.5-canary.19
   next-auth: ^4.19.2
   next-themes: ^0.2.1
   next-unused: 0.0.6
@@ -47,6 +47,7 @@ specifiers:
   prettier: 2.8.3
   prisma: ^4.10.1
   react: 18.2.0
+  react-cookie: ^4.1.1
   react-datepicker: 4.8.0
   react-dom: 18.2.0
   react-dropzone: 14.2.3
@@ -65,7 +66,7 @@ specifiers:
 
 dependencies:
   '@next-auth/prisma-adapter': 1.0.5_qpmskah7lm3ildf4stmwh4q42u
-  '@next/eslint-plugin-next': 13.2.4-canary.0
+  '@next/eslint-plugin-next': 13.2.5-canary.19
   '@prisma/client': 4.10.1_prisma@4.10.1
   '@radix-ui/react-dialog': 1.0.2_5ndqzdd6t4rivxsukjv3i3ak2q
   '@radix-ui/react-dropdown-menu': 2.0.3_5ndqzdd6t4rivxsukjv3i3ak2q
@@ -78,10 +79,11 @@ dependencies:
   cmdk: 0.1.22_5ndqzdd6t4rivxsukjv3i3ak2q
   jest: 29.4.3_@types+node@18.11.18
   lodash.debounce: 4.0.8
-  next: 13.2.4-canary.0_biqbaboplfbrettd7655fr4n2y
-  next-auth: 4.19.2_5d3uzjtamlpvvireij3yl2isni
-  next-themes: 0.2.1_5d3uzjtamlpvvireij3yl2isni
+  next: 13.2.5-canary.19_biqbaboplfbrettd7655fr4n2y
+  next-auth: 4.19.2_gjjimu27ie6kivuv476ljuoy44
+  next-themes: 0.2.1_gjjimu27ie6kivuv476ljuoy44
   react: 18.2.0
+  react-cookie: 4.1.1_react@18.2.0
   react-datepicker: 4.8.0_biqbaboplfbrettd7655fr4n2y
   react-dom: 18.2.0_react@18.2.0
   react-dropzone: 14.2.3_react@18.2.0
@@ -1017,7 +1019,7 @@ packages:
       next-auth: ^4
     dependencies:
       '@prisma/client': 4.10.1_prisma@4.10.1
-      next-auth: 4.19.2_5d3uzjtamlpvvireij3yl2isni
+      next-auth: 4.19.2_gjjimu27ie6kivuv476ljuoy44
     dev: false
 
   /@next/bundle-analyzer/13.1.7-canary.26:
@@ -1029,8 +1031,8 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@next/env/13.2.4-canary.0:
-    resolution: {integrity: sha512-zh3+D4qTGhDJMM6RuciIOEBA6pHeO6EE3U7LFSknX79BwVqsWpDa59yFeelmrXXh8hHCdOajrReISPICeoQRNw==}
+  /@next/env/13.2.5-canary.19:
+    resolution: {integrity: sha512-QXO4HlOMammiqsRvFFfr29oPR5qj6bneLmwkRfceYcBE1bq8+xnB3ZpMCc26mCpAkpSFWlGgF53JzKCWWxlAxQ==}
     dev: false
 
   /@next/eslint-plugin-next/13.1.7-canary.26:
@@ -1039,32 +1041,14 @@ packages:
       glob: 7.1.7
     dev: true
 
-  /@next/eslint-plugin-next/13.2.4-canary.0:
-    resolution: {integrity: sha512-opggGf9WdvkcRJFqeaJOU39MrHcbkKszBM//vht1hDYR7+g7elcW2PEMKSGuwxfF6DR4HUPJFyrDc1Nj8l9+pg==}
+  /@next/eslint-plugin-next/13.2.5-canary.19:
+    resolution: {integrity: sha512-21kD07NHHu+a+8hK2vI14tqE+YSM5VKZuUZRF+OamC0bk/b4TzzmXhbJH6Hj3goD8MkbLW8wSMBmiswrGBadOg==}
     dependencies:
       glob: 7.1.7
     dev: false
 
-  /@next/swc-android-arm-eabi/13.2.4-canary.0:
-    resolution: {integrity: sha512-i8ZrvlgYkoUhkBNNRo+mChzMB7KhGOVoe1tWbogWngTo63ljrId0HlcPfNFNOGccggUPmSmIgkzXv5+wS1MN9Q==}
-    engines: {node: '>= 10'}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    dev: false
-    optional: true
-
-  /@next/swc-android-arm64/13.2.4-canary.0:
-    resolution: {integrity: sha512-IJSJyXp3rNXaMuWdMSfaSwBMejzzTkzfAq1miXVHwxQt06OP2lAlRdBj1XBFqPLgxVdhtJFeukiBLA6WbMesFw==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: false
-    optional: true
-
-  /@next/swc-darwin-arm64/13.2.4-canary.0:
-    resolution: {integrity: sha512-e60xAA4bX4K1WLtW61rqW7JalmCES4IZSwutLiV5+oikqPNFV2rWbkPC/otgL4wOJmNo6GO0XpkKofMnQolo+A==}
+  /@next/swc-darwin-arm64/13.2.5-canary.19:
+    resolution: {integrity: sha512-29JRAeF/dMO/cHlGmNun6t7oAKmZ1UmPyHZi6jbbSOZH4mpLAtLhyg6azqHzTYQj86TLpJZMc12g2ql4e62ldQ==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [darwin]
@@ -1072,8 +1056,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-darwin-x64/13.2.4-canary.0:
-    resolution: {integrity: sha512-QnfNzyyzxgD2SO4VZipAE7c/HnYl6pz7MKphDb3U/AbkzsncZYfFXbxxMo4GSAu1AQ4QdKwcDFAM3PBelKIppg==}
+  /@next/swc-darwin-x64/13.2.5-canary.19:
+    resolution: {integrity: sha512-hz5pbgSg+vq2YZPFFmwwzXyXdXNffhHm97v8RWK4fUtMD9DlbZJrRUVcyOtk9486u1SkTXIMyZ8KUjE1TpZQQg==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [darwin]
@@ -1081,26 +1065,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-freebsd-x64/13.2.4-canary.0:
-    resolution: {integrity: sha512-0m8pOp3cQvGFS3Q98LrCKJL3eHiXBsl81dFbkizQaZb7h/p3LZ0LBYN6i1GVelB1JXxfO1sJA2L2eu4tASNcwQ==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: false
-    optional: true
-
-  /@next/swc-linux-arm-gnueabihf/13.2.4-canary.0:
-    resolution: {integrity: sha512-fTKY0WHyYb7xYw9gKkW6+yHrIAj6jA5eoC41ePNpssbwqsIyHZKHDjiGHLYU7/Uq7i/GU+/O+Y9V5eRKsfGOCA==}
-    engines: {node: '>= 10'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: false
-    optional: true
-
-  /@next/swc-linux-arm64-gnu/13.2.4-canary.0:
-    resolution: {integrity: sha512-bKpw2Dxml5OOfvTWWmAifEc3nDgAzSLailkqPAeKzK7ag21NSizABPB3YpfixTUeBF5ftamhP0U4M36O6av4zg==}
+  /@next/swc-linux-arm64-gnu/13.2.5-canary.19:
+    resolution: {integrity: sha512-MIQJpgHhIIbr/CJyBOFSCsbr1Kv1nFB2VC2zfARjyDOOuKQQf5tlJrERQKyr8b61+/w5f+L3ZiPp7QPAUd9jmA==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
@@ -1108,8 +1074,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-linux-arm64-musl/13.2.4-canary.0:
-    resolution: {integrity: sha512-Z8bxSnofNGiXzJZj41pnwQYoITR398ASNzEXe0Sq9kNvZuKoUn7WANpqbE9EFVrQn726czHrpSdSjujINA0aag==}
+  /@next/swc-linux-arm64-musl/13.2.5-canary.19:
+    resolution: {integrity: sha512-r88q1FhZwFpWwBH6lLJmm9d/WCY2MIewghUqOCKMbXLtPBLdSEvNR726PGGUBtC6pFQsRuv7Prn7CT/VMkRyXA==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
@@ -1117,8 +1083,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-linux-x64-gnu/13.2.4-canary.0:
-    resolution: {integrity: sha512-3N8HhgKcldKv6VKE1pozPjgLi/8tEmUyqXbT/u1cG0HDDhJj6CxCnZoBPS7u6JzhbfTjqwPdvt6IcyJkevFRsA==}
+  /@next/swc-linux-x64-gnu/13.2.5-canary.19:
+    resolution: {integrity: sha512-Ke5aTqYMH9J3a38t6GvM58AY3MmOKbSR3RTQzaIb+96xtTUdzWjWnbAv05Lr9zlrnjTHmFR50CoOvulLTCXW/w==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
@@ -1126,8 +1092,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-linux-x64-musl/13.2.4-canary.0:
-    resolution: {integrity: sha512-G7fAzeK68piPXfbgQ4uc7zTg7RTE8Yg/FZt6Yd2S9DNvsO2PHWgKitMZZUOpHn/5OY9sg/ne1lwcegRIDmU9yA==}
+  /@next/swc-linux-x64-musl/13.2.5-canary.19:
+    resolution: {integrity: sha512-GPAyzn7ksPTpY0rPoMnzBydnpMAnK9z8H8y6VEvbAqwoJY+NZN+YepnJkW9HV01mdrvmxXv5dkdPlfbxW5pRsQ==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
@@ -1135,8 +1101,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-win32-arm64-msvc/13.2.4-canary.0:
-    resolution: {integrity: sha512-4t3SyyqieUuEMuLvuRs+R0m+6Ocm9DiPq1xLBu5noaxOgMSYyPjUFZbhL2bfG1OQb6VyZmaeGpN4ZDfS5Mjixw==}
+  /@next/swc-win32-arm64-msvc/13.2.5-canary.19:
+    resolution: {integrity: sha512-s+z9qlmtvWJ5uQj8yrX5d+SW4OeYN+8fdnLDRIZBa1IJZ2R6GZ0suX06KMZHR+RE2Z/vI3Nwz7kyAq3RkK9/HQ==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [win32]
@@ -1144,8 +1110,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-win32-ia32-msvc/13.2.4-canary.0:
-    resolution: {integrity: sha512-+KDwr1SMEbbCc9rMJlQSbyGJMrfcyjTfa7TpsRpYmb4g9fGFCpXfKpyS8MVStH/k1Ye27X1WQZsOsS9RIdRWGg==}
+  /@next/swc-win32-ia32-msvc/13.2.5-canary.19:
+    resolution: {integrity: sha512-6EjXMAERpj71R1kGcocTtSefI33W4lN7L/ERtIwc1YUSw1wajsOHoWZBH0S9g6H632rxeuZi9oUfYbxOQnYsAQ==}
     engines: {node: '>= 10'}
     cpu: [ia32]
     os: [win32]
@@ -1153,8 +1119,8 @@ packages:
     dev: false
     optional: true
 
-  /@next/swc-win32-x64-msvc/13.2.4-canary.0:
-    resolution: {integrity: sha512-GMUCU4jFwHUDTMM5RZVHjLj+uR24vqUKrOhgT8SHPBVU05Rq68loq4frGU5HVl7m7jAk5TTjoIMLR6WuR8Qxmw==}
+  /@next/swc-win32-x64-msvc/13.2.5-canary.19:
+    resolution: {integrity: sha512-bEXNS4MbZwM/k1HjxZ3dfnkZWZZD81kQfY8yLCmuefXZ+YgcY2dh4AB6+CbgYKJ3GBCGqM5gpFu3/5fQZg+g1g==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [win32]
@@ -1826,6 +1792,10 @@ packages:
       '@types/node': 18.11.18
     dev: true
 
+  /@types/cookie/0.3.3:
+    resolution: {integrity: sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==}
+    dev: false
+
   /@types/debug/4.1.7:
     resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
     dependencies:
@@ -1849,6 +1819,13 @@ packages:
       '@types/unist': 2.0.6
     dev: true
 
+  /@types/hoist-non-react-statics/3.3.1:
+    resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==}
+    dependencies:
+      '@types/react': 18.0.27
+      hoist-non-react-statics: 3.3.2
+    dev: false
+
   /@types/istanbul-lib-coverage/2.0.4:
     resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
 
@@ -2502,6 +2479,13 @@ packages:
       base64-js: 1.5.1
       ieee754: 1.2.1
 
+  /busboy/1.6.0:
+    resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+    engines: {node: '>=10.16.0'}
+    dependencies:
+      streamsearch: 1.1.0
+    dev: false
+
   /call-bind/1.0.2:
     resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
     dependencies:
@@ -2736,6 +2720,11 @@ packages:
   /convert-source-map/2.0.0:
     resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
 
+  /cookie/0.4.2:
+    resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
+    engines: {node: '>= 0.6'}
+    dev: false
+
   /cookie/0.5.0:
     resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
     engines: {node: '>= 0.6'}
@@ -4147,6 +4136,12 @@ packages:
       space-separated-tokens: 2.0.1
     dev: true
 
+  /hoist-non-react-statics/3.3.2:
+    resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==}
+    dependencies:
+      react-is: 16.13.1
+    dev: false
+
   /html-escaper/2.0.2:
     resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
 
@@ -5743,7 +5738,7 @@ packages:
     dev: true
     optional: true
 
-  /next-auth/4.19.2_5d3uzjtamlpvvireij3yl2isni:
+  /next-auth/4.19.2_gjjimu27ie6kivuv476ljuoy44:
     resolution: {integrity: sha512-6V2YG3IJQVhgCAH7mvT3yopTW92gMdUrcwGX7NQ0dCreT/+axGua/JmVdarjec0C/oJukKpIYRgjMlV+L5ZQOQ==}
     peerDependencies:
       next: ^12.2.5 || ^13
@@ -5758,7 +5753,7 @@ packages:
       '@panva/hkdf': 1.0.2
       cookie: 0.5.0
       jose: 4.11.0
-      next: 13.2.4-canary.0_biqbaboplfbrettd7655fr4n2y
+      next: 13.2.5-canary.19_biqbaboplfbrettd7655fr4n2y
       oauth: 0.9.15
       openid-client: 5.3.0
       preact: 10.11.2
@@ -5768,14 +5763,14 @@ packages:
       uuid: 8.3.2
     dev: false
 
-  /next-themes/0.2.1_5d3uzjtamlpvvireij3yl2isni:
+  /next-themes/0.2.1_gjjimu27ie6kivuv476ljuoy44:
     resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==}
     peerDependencies:
       next: '*'
       react: '*'
       react-dom: '*'
     dependencies:
-      next: 13.2.4-canary.0_biqbaboplfbrettd7655fr4n2y
+      next: 13.2.5-canary.19_biqbaboplfbrettd7655fr4n2y
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
     dev: false
@@ -5791,12 +5786,12 @@ packages:
       - supports-color
     dev: true
 
-  /next/13.2.4-canary.0_biqbaboplfbrettd7655fr4n2y:
-    resolution: {integrity: sha512-vWGAI05RK5y+qZRBtV3PylLtGEhU0vhC9RwgCJK9mxRdZdPgK6BcZMLYnQnNJNv8DGhYx3iNVfTMFaHGR4nBtw==}
+  /next/13.2.5-canary.19_biqbaboplfbrettd7655fr4n2y:
+    resolution: {integrity: sha512-PHDHdrlMaZu3YmFAKPfLGVQgl7pohUs9G7Q3HJVw9qmqEK3e1PDc6y8ny5sg6HXaIAdqrnMgzLLPyHpKAGZ6cA==}
     engines: {node: '>=14.6.0'}
     hasBin: true
     peerDependencies:
-      '@opentelemetry/api': ^1.4.0
+      '@opentelemetry/api': ^1.4.1
       fibers: '>= 3.1.0'
       node-sass: ^6.0.0 || ^7.0.0
       react: ^18.2.0
@@ -5812,27 +5807,24 @@ packages:
       sass:
         optional: true
     dependencies:
-      '@next/env': 13.2.4-canary.0
+      '@next/env': 13.2.5-canary.19
       '@swc/helpers': 0.4.14
+      busboy: 1.6.0
       caniuse-lite: 1.0.30001458
       postcss: 8.4.14
       react: 18.2.0
       react-dom: 18.2.0_react@18.2.0
       styled-jsx: 5.1.1_react@18.2.0
     optionalDependencies:
-      '@next/swc-android-arm-eabi': 13.2.4-canary.0
-      '@next/swc-android-arm64': 13.2.4-canary.0
-      '@next/swc-darwin-arm64': 13.2.4-canary.0
-      '@next/swc-darwin-x64': 13.2.4-canary.0
-      '@next/swc-freebsd-x64': 13.2.4-canary.0
-      '@next/swc-linux-arm-gnueabihf': 13.2.4-canary.0
-      '@next/swc-linux-arm64-gnu': 13.2.4-canary.0
-      '@next/swc-linux-arm64-musl': 13.2.4-canary.0
-      '@next/swc-linux-x64-gnu': 13.2.4-canary.0
-      '@next/swc-linux-x64-musl': 13.2.4-canary.0
-      '@next/swc-win32-arm64-msvc': 13.2.4-canary.0
-      '@next/swc-win32-ia32-msvc': 13.2.4-canary.0
-      '@next/swc-win32-x64-msvc': 13.2.4-canary.0
+      '@next/swc-darwin-arm64': 13.2.5-canary.19
+      '@next/swc-darwin-x64': 13.2.5-canary.19
+      '@next/swc-linux-arm64-gnu': 13.2.5-canary.19
+      '@next/swc-linux-arm64-musl': 13.2.5-canary.19
+      '@next/swc-linux-x64-gnu': 13.2.5-canary.19
+      '@next/swc-linux-x64-musl': 13.2.5-canary.19
+      '@next/swc-win32-arm64-msvc': 13.2.5-canary.19
+      '@next/swc-win32-ia32-msvc': 13.2.5-canary.19
+      '@next/swc-win32-x64-msvc': 13.2.5-canary.19
     transitivePeerDependencies:
       - '@babel/core'
       - babel-plugin-macros
@@ -6752,6 +6744,17 @@ packages:
       minimist: 1.2.7
       strip-json-comments: 2.0.1
 
+  /react-cookie/4.1.1_react@18.2.0:
+    resolution: {integrity: sha512-ffn7Y7G4bXiFbnE+dKhHhbP+b8I34mH9jqnm8Llhj89zF4nPxPutxHT1suUqMeCEhLDBI7InYwf1tpaSoK5w8A==}
+    peerDependencies:
+      react: '>= 16.3.0'
+    dependencies:
+      '@types/hoist-non-react-statics': 3.3.1
+      hoist-non-react-statics: 3.3.2
+      react: 18.2.0
+      universal-cookie: 4.0.4
+    dev: false
+
   /react-datepicker/4.8.0_biqbaboplfbrettd7655fr4n2y:
     resolution: {integrity: sha512-u69zXGHMpxAa4LeYR83vucQoUCJQ6m/WBsSxmUMu/M8ahTSVMMyiyQzauHgZA2NUr9y0FUgOAix71hGYUb6tvg==}
     peerDependencies:
@@ -7392,6 +7395,11 @@ packages:
       internal-slot: 1.0.4
     dev: true
 
+  /streamsearch/1.1.0:
+    resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+    engines: {node: '>=10.0.0'}
+    dev: false
+
   /string-length/4.0.2:
     resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
     engines: {node: '>=10'}
@@ -7940,6 +7948,13 @@ packages:
       unist-util-visit-parents: 5.1.1
     dev: true
 
+  /universal-cookie/4.0.4:
+    resolution: {integrity: sha512-lbRVHoOMtItjWbM7TwDLdl8wug7izB0tq3/YVKhT/ahB4VDvWMyvnADfnJI8y6fSvsjh51Ix7lTGC6Tn4rMPhw==}
+    dependencies:
+      '@types/cookie': 0.3.3
+      cookie: 0.4.2
+    dev: false
+
   /update-browserslist-db/1.0.10_browserslist@4.21.5:
     resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==}
     hasBin: true
diff --git a/src/app/(drift)/layout.tsx b/src/app/(drift)/layout.tsx
index afa093c8..4807daac 100644
--- a/src/app/(drift)/layout.tsx
+++ b/src/app/(drift)/layout.tsx
@@ -6,8 +6,10 @@ import Header from "@components/header"
 import { Inter } from "next/font/google"
 import { getMetadata } from "src/app/lib/metadata"
 import dynamic from "next/dynamic"
-
+import { cookies } from "next/headers"
 const inter = Inter({ subsets: ["latin"], variable: "--inter-font" })
+import { THEME_COOKIE, DEFAULT_THEME, SIGNED_IN_COOKIE } from "@lib/constants"
+import { Suspense } from "react"
 
 const CmdK = dynamic(() => import("@components/cmdk"), { ssr: false })
 
@@ -16,6 +18,10 @@ export default async function RootLayout({
 }: {
 	children: React.ReactNode
 }) {
+	const cookiesList = cookies()
+	const theme = cookiesList.get(THEME_COOKIE)?.value || DEFAULT_THEME
+	const isAuthenticated = Boolean(cookiesList.get(SIGNED_IN_COOKIE)?.value)
+
 	return (
 		// suppressHydrationWarning is required because of next-themes
 		
@@ -24,7 +30,9 @@ export default async function RootLayout({
 				
 					
 						
-						
+						Loading...>}>
+							
+						
 						{children}
 					
 				
diff --git a/src/app/components/cmdk/pages/home.tsx b/src/app/components/cmdk/pages/home.tsx
index d124c34b..9b116a09 100644
--- a/src/app/components/cmdk/pages/home.tsx
+++ b/src/app/components/cmdk/pages/home.tsx
@@ -2,6 +2,7 @@ import { Command } from "cmdk"
 import { useTheme } from "next-themes"
 import { useRouter } from "next/navigation"
 import { FilePlus, Moon, Search, Settings, Sun } from "react-feather"
+import { setDriftTheme } from "src/app/lib/set-theme"
 import { CmdKPage } from ".."
 import Item from "../item"
 
@@ -41,7 +42,7 @@ export default function HomePage({
 				-  {
-						setTheme(resolvedTheme === "dark" ? "light" : "dark")
+						setDriftTheme(resolvedTheme === "dark" ? "light" : "dark", setTheme)
 					}}
 					icon={resolvedTheme === "dark" ?  : }
 				>
diff --git a/src/app/components/header/buttons.module.css b/src/app/components/header/buttons.module.css
new file mode 100644
index 00000000..03cc6821
--- /dev/null
+++ b/src/app/components/header/buttons.module.css
@@ -0,0 +1,3 @@
+.active {
+	color: var(--fg) !important;
+}
diff --git a/src/app/components/header/buttons.tsx b/src/app/components/header/buttons.tsx
new file mode 100644
index 00000000..6ebb4fc8
--- /dev/null
+++ b/src/app/components/header/buttons.tsx
@@ -0,0 +1,179 @@
+"use client"
+
+import { useSelectedLayoutSegment } from "next/navigation"
+import FadeIn from "@components/fade-in"
+import { setDriftTheme } from "src/app/lib/set-theme"
+import {
+	Home,
+	Moon,
+	PlusCircle,
+	Settings,
+	Sun,
+	User,
+	UserX
+} from "react-feather"
+import { signOut } from "next-auth/react"
+import Button from "@components/button"
+import Link from "@components/link"
+import { useSessionSWR } from "@lib/use-session-swr"
+import { useTheme } from "next-themes"
+import styles from "./buttons.module.css"
+
+// constant width for sign in / sign out buttons to avoid CLS
+const SIGN_IN_WIDTH = 110
+
+type Tab = {
+	name: string
+	icon: JSX.Element
+	value: string
+	width?: number
+} & (
+	| {
+			onClick: () => void
+			href?: undefined
+	  }
+	| {
+			onClick?: undefined
+			href: string
+	  }
+)
+
+export function HeaderButtons({
+	isAuthenticated,
+	theme
+}: {
+	isAuthenticated: boolean
+	theme: string
+}) {
+	const { isAdmin } = useSessionSWR()
+
+	return (
+		<>
+			{getButtons({
+				isAuthenticated,
+				theme,
+				isAdmin
+			})}
+		>
+	)
+}
+
+function NavButton(tab: Tab) {
+	const segment = useSelectedLayoutSegment()
+	const isActive = segment === tab.value.toLowerCase()
+	const activeStyle = isActive ? styles.active : undefined
+	if (tab.onClick) {
+		return (
+			
+		)
+	} else {
+		return (
+			
+				
+			
+		)
+	}
+}
+
+function ThemeButton({ theme }: { theme: string }) {
+	const { setTheme } = useTheme()
+	return (
+		 : }
+			value="dark"
+			onClick={() => {
+				setDriftTheme(theme === "dark" ? "light" : "dark", setTheme)
+			}}
+			key="theme"
+		/>
+	)
+}
+
+/** For use by mobile */
+export function getButtons({
+	isAuthenticated,
+	theme,
+	// mutate: mutateSession,
+	isAdmin
+}: {
+	isAuthenticated: boolean
+	theme: string
+	// mutate: KeyedMutator
+	isAdmin?: boolean
+}) {
+	return [
+		}
+			value="home"
+			href="/home"
+		/>,
+		}
+			value="new"
+			href="/new"
+		/>,
+		}
+			value="mine"
+			href="/mine"
+		/>,
+		}
+			value="settings"
+			href="/settings"
+			key="settings"
+		/>,
+		,
+		isAuthenticated === true ? (
+			}
+				value="signout"
+				onClick={() => {
+					signOut()
+				}}
+				width={SIGN_IN_WIDTH}
+			/>
+		) : undefined,
+		isAuthenticated === false ? (
+			}
+				value="signin"
+				href="/signin"
+				width={SIGN_IN_WIDTH}
+			/>
+		) : undefined,
+		isAdmin ? (
+			
+				}
+					value="admin"
+					href="/admin"
+				/>
+			
+		) : undefined
+	].filter(Boolean)
+}
diff --git a/src/app/components/header/header.module.css b/src/app/components/header/header.module.css
index 2edc1b75..27efdb25 100644
--- a/src/app/components/header/header.module.css
+++ b/src/app/components/header/header.module.css
@@ -47,10 +47,6 @@
 	align-items: center;
 }
 
-.tabs .active {
-	color: var(--fg);
-}
-
 .contentWrapper {
 	background: var(--bg);
 	margin-left: var(--gap);
diff --git a/src/app/components/header/index.tsx b/src/app/components/header/index.tsx
index ba22fdf8..1a18cd2e 100644
--- a/src/app/components/header/index.tsx
+++ b/src/app/components/header/index.tsx
@@ -1,215 +1,32 @@
-"use client"
 import styles from "./header.module.css"
-
-// import useUserData from "@lib/hooks/use-user-data"
-import Link from "@components/link"
-import { usePathname } from "next/navigation"
-import { signOut } from "next-auth/react"
-import Button from "@components/button"
-import { useTheme } from "next-themes"
-import {
-	Home,
-	Loader,
-	Moon,
-	PlusCircle,
-	Settings,
-	Sun,
-	User,
-	UserX
-} from "react-feather"
-import { ReactNode, useEffect, useMemo, useState } from "react"
-import { useSessionSWR } from "@lib/use-session-swr"
-import FadeIn from "@components/fade-in"
+import { getButtons, HeaderButtons } from "./buttons"
 import MobileHeader from "./mobile"
-
-// constant width for sign in / sign out buttons to avoid CLS
-const SIGN_IN_WIDTH = 110
-
-type Tab = {
-	name: string
-	icon: ReactNode
-	value: string
-	// onClick?: () => void
-	// href?: string
-	width?: number
-} & (
-	| {
-			onClick: () => void
-			href?: undefined
-	  }
-	| {
-			onClick?: undefined
-			href: string
-	  }
-)
-
-const Header = () => {
-	const {
-		isAdmin,
-		isAuthenticated,
-		isLoading: isAuthLoading,
-		mutate: mutateSession
-	} = useSessionSWR()
-
-	const pathname = usePathname()
-	const { setTheme, resolvedTheme } = useTheme()
-	const [mounted, setMounted] = useState(false)
-
-	useEffect(() => setMounted(true), [])
-
-	// const buttons = pages.map(NavButton)
-
-	const buttons = useMemo(() => {
-		const NavButton = (tab: Tab) => {
-			const isActive = `${pathname}` === tab.href
-			const activeStyle = isActive ? styles.active : undefined
-			if (tab.onClick) {
-				return (
-					
-				)
-			} else {
-				return (
-					
-						
-					
-				)
-			}
-		}
-
-		const NavButtonPlaceholder = ({ width }: { width: number }) => {
-			return (
-