-            {user.image && !imageLoadFailed && (
-              
-                

 setImageLoadFailed(true)}
-                />
+        {({ close }) => (
+          <>
+            {user && (
+              
+                {user.image && !imageLoadFailed && (
+                  
+                    

 setImageLoadFailed(true)}
+                    />
+                  
+                )}
+
+                
+                  
+                    {displayedName || ''}
+                  
+                  {displayedName !== user.email && (
+                    
+                      {user.email}
+                    
+                  )}
+                
 
               
             )}
-
-            
-              
+               {
+                  // since /settings is a nested route the sidebar doesn't close
+                  // automatically when navigating to it
+                  close()
+                  navigate(paths.SETTINGS)
+                }}
               >
-                {displayedName || ''}
-              
-              {displayedName !== user.email && (
-                
-                  {user.email}
-                
-              )}
+                Settings
+              
+              
 {
+                  setToken('')
+                  navigate(paths.SIGN_IN)
+                }}
+                icon={{
+                  icon: faSignOutAlt,
+                  bgClassName: 'bg-destroy-80',
+                  iconClassName:
+                    'text-destroy-20 group-hover:text-destroy-10 hover:text-destroy-10',
+                }}
+                className="border-transparent dark:border-transparent hover:border-destroy-40 dark:hover:border-destroy-60"
+              >
+                Sign out
+              
             
-          
+          >
         )}
-        
-          
-            Settings
-          
-          
 {
-              setToken('')
-              navigate('/signin')
-            }}
-            icon={{
-              icon: faSignOutAlt,
-              bgClassName: 'bg-destroy-80',
-              iconClassName:
-                'text-destroy-20 group-hover:text-destroy-10 hover:text-destroy-10',
-            }}
-            className="border-transparent dark:border-transparent hover:border-destroy-40 dark:hover:border-destroy-60"
-          >
-            Sign out
-          
-        
       
     
   )
diff --git a/src/index.css b/src/index.css
index db9ea24c0..f2f8b3ec9 100644
--- a/src/index.css
+++ b/src/index.css
@@ -11,15 +11,24 @@ body {
     sans-serif;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
-  @apply text-chalkboard-110 bg-chalkboard-10;
+  @apply text-chalkboard-110;
   overflow: hidden;
   scrollbar-width: thin;
   scrollbar-color: var(--color-chalkboard-20) var(--color-chalkboard-40);
 }
 
+.body-bg {
+  @apply bg-chalkboard-10;
+}
+
+.body-bg.dark,
+.dark .body-bg {
+  @apply bg-chalkboard-100;
+}
+
 body.dark {
   scrollbar-color: var(--color-chalkboard-70) var(--color-chalkboard-90);
-  @apply bg-chalkboard-100 text-chalkboard-10;
+  @apply text-chalkboard-10;
 }
 
 ::-webkit-scrollbar {
diff --git a/src/routes/Onboarding/index.tsx b/src/routes/Onboarding/index.tsx
index 131707006..fa5f73a37 100644
--- a/src/routes/Onboarding/index.tsx
+++ b/src/routes/Onboarding/index.tsx
@@ -1,29 +1,36 @@
 import { useHotkeys } from 'react-hotkeys-hook'
 import { Outlet, useNavigate } from 'react-router-dom'
 import { useStore } from '../../useStore'
-import { App } from '../../App'
 
 import Introduction from './Introduction'
 import Units from './Units'
 import Camera from './Camera'
 import Sketching from './Sketching'
 import { useCallback } from 'react'
+import { paths } from '../../Router'
+
+export const onboardingPaths = {
+  INDEX: '',
+  UNITS: 'units',
+  CAMERA: 'camera',
+  SKETCHING: 'sketching',
+}
 
 export const onboardingRoutes = [
   {
-    path: '',
+    index: true,
     element: 
,
   },
   {
-    path: 'units',
+    path: onboardingPaths.UNITS,
     element: 
,
   },
   {
-    path: 'camera',
+    path: onboardingPaths.CAMERA,
     element: 
,
   },
   {
-    path: 'sketching',
+    path: onboardingPaths.SKETCHING,
     element: 
,
   },
 ]
@@ -48,7 +55,7 @@ export function useDismiss() {
 
   return useCallback(() => {
     setOnboardingStatus('dismissed')
-    navigate('/')
+    navigate(paths.INDEX)
   }, [setOnboardingStatus, navigate])
 }
 
@@ -59,7 +66,6 @@ const Onboarding = () => {
   return (
     <>
       
-      
     >
   )
 }
diff --git a/src/routes/Settings.tsx b/src/routes/Settings.tsx
index b6158b5cd..3d7c91b1a 100644
--- a/src/routes/Settings.tsx
+++ b/src/routes/Settings.tsx
@@ -12,10 +12,11 @@ import { toast } from 'react-hot-toast'
 import { Toggle } from '../components/Toggle/Toggle'
 import { useNavigate } from 'react-router-dom'
 import { useHotkeys } from 'react-hotkeys-hook'
+import { paths } from '../Router'
 
 export const Settings = () => {
   const navigate = useNavigate()
-  useHotkeys('esc', () => navigate('/'))
+  useHotkeys('esc', () => navigate(paths.INDEX))
   const {
     defaultDir,
     setDefaultDir,
@@ -50,7 +51,7 @@ export const Settings = () => {
   async function handleDirectorySelection() {
     const newDirectory = await open({
       directory: true,
-      defaultPath: (defaultDir.base || '') + (defaultDir.dir || '/'),
+      defaultPath: (defaultDir.base || '') + (defaultDir.dir || paths.INDEX),
       title: 'Choose a new default directory',
     })
 
@@ -60,11 +61,11 @@ export const Settings = () => {
   }
 
   return (
-    <>
+    
       
          {
            {
               setOnboardingStatus('')
-              navigate('/')
+              navigate(paths.ONBOARDING.INDEX)
             }}
             icon={{ icon: faArrowRotateBack }}
           >
@@ -219,7 +220,7 @@ export const Settings = () => {
           
         
        
-    >
+    
 
   )
 }
 
diff --git a/src/routes/SignIn.tsx b/src/routes/SignIn.tsx
index 4aa31acfd..289ecc60c 100644
--- a/src/routes/SignIn.tsx
+++ b/src/routes/SignIn.tsx
@@ -6,6 +6,7 @@ import { invoke } from '@tauri-apps/api/tauri'
 import { useNavigate } from 'react-router-dom'
 import { VITE_KC_SITE_BASE_URL, VITE_KC_API_BASE_URL } from '../env'
 import { getSystemTheme } from '../lib/getSystemTheme'
+import { paths } from '../Router'
 
 const SignIn = () => {
   const navigate = useNavigate()
@@ -21,7 +22,7 @@ const SignIn = () => {
         host: VITE_KC_API_BASE_URL,
       })
       setToken(token)
-      navigate('/')
+      navigate(paths.INDEX)
     } catch (error) {
       console.error('login button', error)
     }
@@ -69,7 +70,9 @@ const SignIn = () => {
         ) : (