diff --git a/.prettierrc.js b/.prettierrc.js
index 11b3592..b9485a3 100644
--- a/.prettierrc.js
+++ b/.prettierrc.js
@@ -6,7 +6,6 @@ const config = {
 	singleQuote: true,
 	trailingComma: 'es5',
 	bracketSpacing: true,
-	jsxBracketSameLine: false,
 	arrowParens: 'always',
 };
 
diff --git a/bun.lockb b/bun.lockb
new file mode 100755
index 0000000..38026de
Binary files /dev/null and b/bun.lockb differ
diff --git a/eslint.config.js b/eslint.config.js
new file mode 100644
index 0000000..1419aaf
--- /dev/null
+++ b/eslint.config.js
@@ -0,0 +1,31 @@
+import js from '@eslint/js';
+import { includeIgnoreFile } from '@eslint/compat';
+import svelte from 'eslint-plugin-svelte';
+import globals from 'globals';
+import { fileURLToPath } from 'node:url';
+import ts from 'typescript-eslint';
+const gitignorePath = fileURLToPath(new URL('./.gitignore', import.meta.url));
+
+export default ts.config(
+	includeIgnoreFile(gitignorePath),
+	js.configs.recommended,
+	...ts.configs.recommended,
+	...svelte.configs['flat/recommended'],
+	{
+		languageOptions: {
+			globals: {
+				...globals.browser,
+				...globals.node,
+			},
+		},
+	},
+	{
+		files: ['**/*.svelte'],
+
+		languageOptions: {
+			parserOptions: {
+				parser: ts.parser,
+			},
+		},
+	}
+);
diff --git a/flake.nix b/flake.nix
index c31fc3e..40e1cba 100644
--- a/flake.nix
+++ b/flake.nix
@@ -35,7 +35,7 @@
         packages = with pkgsFor.${system}; [
           nil
           alejandra
-          nodejs_23
+          bun
           svelte-language-server
           gh-markdown-preview
         ];
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 128baba..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,1085 +0,0 @@
-{
-	"name": "notohh.dev",
-	"version": "0.0.1",
-	"lockfileVersion": 3,
-	"requires": true,
-	"packages": {
-		"": {
-			"name": "notohh.dev",
-			"version": "0.0.1",
-			"devDependencies": {
-				"@sveltejs/adapter-auto": "^4.0.0",
-				"@sveltejs/kit": "^2.16.1",
-				"@sveltejs/vite-plugin-svelte": "^5.0.3",
-				"@tailwindcss/vite": "^4.0.1",
-				"autoprefixer": "^10.4.20",
-				"daisyui": "^5.0.0-beta.6",
-				"svelte": "^5.19.6",
-				"svelte-check": "^4.1.4",
-				"tailwindcss": "^4.0.1",
-				"tailwindcss-motion": "^1.0.1",
-				"typescript": "^5.7.3",
-				"vite": "^6.0.11"
-			}
-		},
-		"node_modules/@ampproject/remapping": {
-			"version": "2.3.0",
-			"dev": true,
-			"license": "Apache-2.0",
-			"dependencies": {
-				"@jridgewell/gen-mapping": "^0.3.5",
-				"@jridgewell/trace-mapping": "^0.3.24"
-			},
-			"engines": {
-				"node": ">=6.0.0"
-			}
-		},
-		"node_modules/@esbuild/linux-x64": {
-			"version": "0.24.2",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			],
-			"engines": {
-				"node": ">=18"
-			}
-		},
-		"node_modules/@jridgewell/gen-mapping": {
-			"version": "0.3.8",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@jridgewell/set-array": "^1.2.1",
-				"@jridgewell/sourcemap-codec": "^1.4.10",
-				"@jridgewell/trace-mapping": "^0.3.24"
-			},
-			"engines": {
-				"node": ">=6.0.0"
-			}
-		},
-		"node_modules/@jridgewell/resolve-uri": {
-			"version": "3.1.2",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6.0.0"
-			}
-		},
-		"node_modules/@jridgewell/set-array": {
-			"version": "1.2.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6.0.0"
-			}
-		},
-		"node_modules/@jridgewell/sourcemap-codec": {
-			"version": "1.5.0",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/@jridgewell/trace-mapping": {
-			"version": "0.3.25",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@jridgewell/resolve-uri": "^3.1.0",
-				"@jridgewell/sourcemap-codec": "^1.4.14"
-			}
-		},
-		"node_modules/@polka/url": {
-			"version": "1.0.0-next.28",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/@rollup/rollup-linux-x64-gnu": {
-			"version": "4.32.0",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			]
-		},
-		"node_modules/@rollup/rollup-linux-x64-musl": {
-			"version": "4.32.0",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			]
-		},
-		"node_modules/@sveltejs/adapter-auto": {
-			"version": "4.0.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"import-meta-resolve": "^4.1.0"
-			},
-			"peerDependencies": {
-				"@sveltejs/kit": "^2.0.0"
-			}
-		},
-		"node_modules/@sveltejs/kit": {
-			"version": "2.16.1",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@types/cookie": "^0.6.0",
-				"cookie": "^0.6.0",
-				"devalue": "^5.1.0",
-				"esm-env": "^1.2.2",
-				"import-meta-resolve": "^4.1.0",
-				"kleur": "^4.1.5",
-				"magic-string": "^0.30.5",
-				"mrmime": "^2.0.0",
-				"sade": "^1.8.1",
-				"set-cookie-parser": "^2.6.0",
-				"sirv": "^3.0.0"
-			},
-			"bin": {
-				"svelte-kit": "svelte-kit.js"
-			},
-			"engines": {
-				"node": ">=18.13"
-			},
-			"peerDependencies": {
-				"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0",
-				"svelte": "^4.0.0 || ^5.0.0-next.0",
-				"vite": "^5.0.3 || ^6.0.0"
-			}
-		},
-		"node_modules/@sveltejs/vite-plugin-svelte": {
-			"version": "5.0.3",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
-				"debug": "^4.4.0",
-				"deepmerge": "^4.3.1",
-				"kleur": "^4.1.5",
-				"magic-string": "^0.30.15",
-				"vitefu": "^1.0.4"
-			},
-			"engines": {
-				"node": "^18.0.0 || ^20.0.0 || >=22"
-			},
-			"peerDependencies": {
-				"svelte": "^5.0.0",
-				"vite": "^6.0.0"
-			}
-		},
-		"node_modules/@sveltejs/vite-plugin-svelte-inspector": {
-			"version": "4.0.1",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"debug": "^4.3.7"
-			},
-			"engines": {
-				"node": "^18.0.0 || ^20.0.0 || >=22"
-			},
-			"peerDependencies": {
-				"@sveltejs/vite-plugin-svelte": "^5.0.0",
-				"svelte": "^5.0.0",
-				"vite": "^6.0.0"
-			}
-		},
-		"node_modules/@tailwindcss/node": {
-			"version": "4.0.1",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"enhanced-resolve": "^5.18.0",
-				"jiti": "^2.4.2",
-				"tailwindcss": "4.0.1"
-			}
-		},
-		"node_modules/@tailwindcss/oxide": {
-			"version": "4.0.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">= 10"
-			},
-			"optionalDependencies": {
-				"@tailwindcss/oxide-android-arm64": "4.0.1",
-				"@tailwindcss/oxide-darwin-arm64": "4.0.1",
-				"@tailwindcss/oxide-darwin-x64": "4.0.1",
-				"@tailwindcss/oxide-freebsd-x64": "4.0.1",
-				"@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.1",
-				"@tailwindcss/oxide-linux-arm64-gnu": "4.0.1",
-				"@tailwindcss/oxide-linux-arm64-musl": "4.0.1",
-				"@tailwindcss/oxide-linux-x64-gnu": "4.0.1",
-				"@tailwindcss/oxide-linux-x64-musl": "4.0.1",
-				"@tailwindcss/oxide-win32-arm64-msvc": "4.0.1",
-				"@tailwindcss/oxide-win32-x64-msvc": "4.0.1"
-			}
-		},
-		"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
-			"version": "4.0.1",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			],
-			"engines": {
-				"node": ">= 10"
-			}
-		},
-		"node_modules/@tailwindcss/oxide-linux-x64-musl": {
-			"version": "4.0.1",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MIT",
-			"optional": true,
-			"os": [
-				"linux"
-			],
-			"engines": {
-				"node": ">= 10"
-			}
-		},
-		"node_modules/@tailwindcss/vite": {
-			"version": "4.0.1",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@tailwindcss/node": "^4.0.1",
-				"@tailwindcss/oxide": "^4.0.1",
-				"lightningcss": "^1.29.1",
-				"tailwindcss": "4.0.1"
-			},
-			"peerDependencies": {
-				"vite": "^5.2.0 || ^6"
-			}
-		},
-		"node_modules/@types/cookie": {
-			"version": "0.6.0",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/@types/estree": {
-			"version": "1.0.6",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/acorn": {
-			"version": "8.14.0",
-			"dev": true,
-			"license": "MIT",
-			"bin": {
-				"acorn": "bin/acorn"
-			},
-			"engines": {
-				"node": ">=0.4.0"
-			}
-		},
-		"node_modules/acorn-typescript": {
-			"version": "1.4.13",
-			"dev": true,
-			"license": "MIT",
-			"peerDependencies": {
-				"acorn": ">=8.9.0"
-			}
-		},
-		"node_modules/aria-query": {
-			"version": "5.3.2",
-			"dev": true,
-			"license": "Apache-2.0",
-			"engines": {
-				"node": ">= 0.4"
-			}
-		},
-		"node_modules/autoprefixer": {
-			"version": "10.4.20",
-			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/postcss/"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/autoprefixer"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"dependencies": {
-				"browserslist": "^4.23.3",
-				"caniuse-lite": "^1.0.30001646",
-				"fraction.js": "^4.3.7",
-				"normalize-range": "^0.1.2",
-				"picocolors": "^1.0.1",
-				"postcss-value-parser": "^4.2.0"
-			},
-			"bin": {
-				"autoprefixer": "bin/autoprefixer"
-			},
-			"engines": {
-				"node": "^10 || ^12 || >=14"
-			},
-			"peerDependencies": {
-				"postcss": "^8.1.0"
-			}
-		},
-		"node_modules/axobject-query": {
-			"version": "4.1.0",
-			"dev": true,
-			"license": "Apache-2.0",
-			"engines": {
-				"node": ">= 0.4"
-			}
-		},
-		"node_modules/browserslist": {
-			"version": "4.24.4",
-			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/browserslist"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/browserslist"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"dependencies": {
-				"caniuse-lite": "^1.0.30001688",
-				"electron-to-chromium": "^1.5.73",
-				"node-releases": "^2.0.19",
-				"update-browserslist-db": "^1.1.1"
-			},
-			"bin": {
-				"browserslist": "cli.js"
-			},
-			"engines": {
-				"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
-			}
-		},
-		"node_modules/caniuse-lite": {
-			"version": "1.0.30001695",
-			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/browserslist"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "CC-BY-4.0"
-		},
-		"node_modules/chokidar": {
-			"version": "4.0.3",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"readdirp": "^4.0.1"
-			},
-			"engines": {
-				"node": ">= 14.16.0"
-			},
-			"funding": {
-				"url": "https://paulmillr.com/funding/"
-			}
-		},
-		"node_modules/clsx": {
-			"version": "2.1.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/cookie": {
-			"version": "0.6.0",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">= 0.6"
-			}
-		},
-		"node_modules/daisyui": {
-			"version": "5.0.0-beta.6",
-			"dev": true,
-			"license": "MIT",
-			"funding": {
-				"url": "https://github.com/saadeghi/daisyui?sponsor=1"
-			}
-		},
-		"node_modules/debug": {
-			"version": "4.4.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"ms": "^2.1.3"
-			},
-			"engines": {
-				"node": ">=6.0"
-			},
-			"peerDependenciesMeta": {
-				"supports-color": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/deepmerge": {
-			"version": "4.3.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/detect-libc": {
-			"version": "1.0.3",
-			"dev": true,
-			"license": "Apache-2.0",
-			"bin": {
-				"detect-libc": "bin/detect-libc.js"
-			},
-			"engines": {
-				"node": ">=0.10"
-			}
-		},
-		"node_modules/devalue": {
-			"version": "5.1.1",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/electron-to-chromium": {
-			"version": "1.5.88",
-			"dev": true,
-			"license": "ISC"
-		},
-		"node_modules/enhanced-resolve": {
-			"version": "5.18.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"graceful-fs": "^4.2.4",
-				"tapable": "^2.2.0"
-			},
-			"engines": {
-				"node": ">=10.13.0"
-			}
-		},
-		"node_modules/esbuild": {
-			"version": "0.24.2",
-			"dev": true,
-			"hasInstallScript": true,
-			"license": "MIT",
-			"bin": {
-				"esbuild": "bin/esbuild"
-			},
-			"engines": {
-				"node": ">=18"
-			},
-			"optionalDependencies": {
-				"@esbuild/aix-ppc64": "0.24.2",
-				"@esbuild/android-arm": "0.24.2",
-				"@esbuild/android-arm64": "0.24.2",
-				"@esbuild/android-x64": "0.24.2",
-				"@esbuild/darwin-arm64": "0.24.2",
-				"@esbuild/darwin-x64": "0.24.2",
-				"@esbuild/freebsd-arm64": "0.24.2",
-				"@esbuild/freebsd-x64": "0.24.2",
-				"@esbuild/linux-arm": "0.24.2",
-				"@esbuild/linux-arm64": "0.24.2",
-				"@esbuild/linux-ia32": "0.24.2",
-				"@esbuild/linux-loong64": "0.24.2",
-				"@esbuild/linux-mips64el": "0.24.2",
-				"@esbuild/linux-ppc64": "0.24.2",
-				"@esbuild/linux-riscv64": "0.24.2",
-				"@esbuild/linux-s390x": "0.24.2",
-				"@esbuild/linux-x64": "0.24.2",
-				"@esbuild/netbsd-arm64": "0.24.2",
-				"@esbuild/netbsd-x64": "0.24.2",
-				"@esbuild/openbsd-arm64": "0.24.2",
-				"@esbuild/openbsd-x64": "0.24.2",
-				"@esbuild/sunos-x64": "0.24.2",
-				"@esbuild/win32-arm64": "0.24.2",
-				"@esbuild/win32-ia32": "0.24.2",
-				"@esbuild/win32-x64": "0.24.2"
-			}
-		},
-		"node_modules/escalade": {
-			"version": "3.2.0",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/esm-env": {
-			"version": "1.2.2",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/esrap": {
-			"version": "1.4.3",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@jridgewell/sourcemap-codec": "^1.4.15"
-			}
-		},
-		"node_modules/fdir": {
-			"version": "6.4.3",
-			"dev": true,
-			"license": "MIT",
-			"peerDependencies": {
-				"picomatch": "^3 || ^4"
-			},
-			"peerDependenciesMeta": {
-				"picomatch": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/fraction.js": {
-			"version": "4.3.7",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": "*"
-			},
-			"funding": {
-				"type": "patreon",
-				"url": "https://github.com/sponsors/rawify"
-			}
-		},
-		"node_modules/graceful-fs": {
-			"version": "4.2.11",
-			"dev": true,
-			"license": "ISC"
-		},
-		"node_modules/import-meta-resolve": {
-			"version": "4.1.0",
-			"dev": true,
-			"license": "MIT",
-			"funding": {
-				"type": "github",
-				"url": "https://github.com/sponsors/wooorm"
-			}
-		},
-		"node_modules/is-reference": {
-			"version": "3.0.3",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@types/estree": "^1.0.6"
-			}
-		},
-		"node_modules/jiti": {
-			"version": "2.4.2",
-			"dev": true,
-			"license": "MIT",
-			"bin": {
-				"jiti": "lib/jiti-cli.mjs"
-			}
-		},
-		"node_modules/kleur": {
-			"version": "4.1.5",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/lightningcss": {
-			"version": "1.29.1",
-			"dev": true,
-			"license": "MPL-2.0",
-			"dependencies": {
-				"detect-libc": "^1.0.3"
-			},
-			"engines": {
-				"node": ">= 12.0.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/parcel"
-			},
-			"optionalDependencies": {
-				"lightningcss-darwin-arm64": "1.29.1",
-				"lightningcss-darwin-x64": "1.29.1",
-				"lightningcss-freebsd-x64": "1.29.1",
-				"lightningcss-linux-arm-gnueabihf": "1.29.1",
-				"lightningcss-linux-arm64-gnu": "1.29.1",
-				"lightningcss-linux-arm64-musl": "1.29.1",
-				"lightningcss-linux-x64-gnu": "1.29.1",
-				"lightningcss-linux-x64-musl": "1.29.1",
-				"lightningcss-win32-arm64-msvc": "1.29.1",
-				"lightningcss-win32-x64-msvc": "1.29.1"
-			}
-		},
-		"node_modules/lightningcss-linux-x64-gnu": {
-			"version": "1.29.1",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MPL-2.0",
-			"optional": true,
-			"os": [
-				"linux"
-			],
-			"engines": {
-				"node": ">= 12.0.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/parcel"
-			}
-		},
-		"node_modules/lightningcss-linux-x64-musl": {
-			"version": "1.29.1",
-			"cpu": [
-				"x64"
-			],
-			"dev": true,
-			"license": "MPL-2.0",
-			"optional": true,
-			"os": [
-				"linux"
-			],
-			"engines": {
-				"node": ">= 12.0.0"
-			},
-			"funding": {
-				"type": "opencollective",
-				"url": "https://opencollective.com/parcel"
-			}
-		},
-		"node_modules/locate-character": {
-			"version": "3.0.0",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/magic-string": {
-			"version": "0.30.17",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@jridgewell/sourcemap-codec": "^1.5.0"
-			}
-		},
-		"node_modules/mri": {
-			"version": "1.2.0",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=4"
-			}
-		},
-		"node_modules/mrmime": {
-			"version": "2.0.0",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=10"
-			}
-		},
-		"node_modules/ms": {
-			"version": "2.1.3",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/nanoid": {
-			"version": "3.3.8",
-			"dev": true,
-			"funding": [
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"bin": {
-				"nanoid": "bin/nanoid.cjs"
-			},
-			"engines": {
-				"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-			}
-		},
-		"node_modules/node-releases": {
-			"version": "2.0.19",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/normalize-range": {
-			"version": "0.1.2",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/picocolors": {
-			"version": "1.1.1",
-			"dev": true,
-			"license": "ISC"
-		},
-		"node_modules/postcss": {
-			"version": "8.5.1",
-			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/postcss/"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/postcss"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"dependencies": {
-				"nanoid": "^3.3.8",
-				"picocolors": "^1.1.1",
-				"source-map-js": "^1.2.1"
-			},
-			"engines": {
-				"node": "^10 || ^12 || >=14"
-			}
-		},
-		"node_modules/postcss-value-parser": {
-			"version": "4.2.0",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/readdirp": {
-			"version": "4.1.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">= 14.18.0"
-			},
-			"funding": {
-				"type": "individual",
-				"url": "https://paulmillr.com/funding/"
-			}
-		},
-		"node_modules/rollup": {
-			"version": "4.32.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@types/estree": "1.0.6"
-			},
-			"bin": {
-				"rollup": "dist/bin/rollup"
-			},
-			"engines": {
-				"node": ">=18.0.0",
-				"npm": ">=8.0.0"
-			},
-			"optionalDependencies": {
-				"@rollup/rollup-android-arm-eabi": "4.32.0",
-				"@rollup/rollup-android-arm64": "4.32.0",
-				"@rollup/rollup-darwin-arm64": "4.32.0",
-				"@rollup/rollup-darwin-x64": "4.32.0",
-				"@rollup/rollup-freebsd-arm64": "4.32.0",
-				"@rollup/rollup-freebsd-x64": "4.32.0",
-				"@rollup/rollup-linux-arm-gnueabihf": "4.32.0",
-				"@rollup/rollup-linux-arm-musleabihf": "4.32.0",
-				"@rollup/rollup-linux-arm64-gnu": "4.32.0",
-				"@rollup/rollup-linux-arm64-musl": "4.32.0",
-				"@rollup/rollup-linux-loongarch64-gnu": "4.32.0",
-				"@rollup/rollup-linux-powerpc64le-gnu": "4.32.0",
-				"@rollup/rollup-linux-riscv64-gnu": "4.32.0",
-				"@rollup/rollup-linux-s390x-gnu": "4.32.0",
-				"@rollup/rollup-linux-x64-gnu": "4.32.0",
-				"@rollup/rollup-linux-x64-musl": "4.32.0",
-				"@rollup/rollup-win32-arm64-msvc": "4.32.0",
-				"@rollup/rollup-win32-ia32-msvc": "4.32.0",
-				"@rollup/rollup-win32-x64-msvc": "4.32.0",
-				"fsevents": "~2.3.2"
-			}
-		},
-		"node_modules/sade": {
-			"version": "1.8.1",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"mri": "^1.1.0"
-			},
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/set-cookie-parser": {
-			"version": "2.7.1",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/sirv": {
-			"version": "3.0.0",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@polka/url": "^1.0.0-next.24",
-				"mrmime": "^2.0.0",
-				"totalist": "^3.0.0"
-			},
-			"engines": {
-				"node": ">=18"
-			}
-		},
-		"node_modules/source-map-js": {
-			"version": "1.2.1",
-			"dev": true,
-			"license": "BSD-3-Clause",
-			"engines": {
-				"node": ">=0.10.0"
-			}
-		},
-		"node_modules/svelte": {
-			"version": "5.19.6",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@ampproject/remapping": "^2.3.0",
-				"@jridgewell/sourcemap-codec": "^1.5.0",
-				"@types/estree": "^1.0.5",
-				"acorn": "^8.12.1",
-				"acorn-typescript": "^1.4.13",
-				"aria-query": "^5.3.1",
-				"axobject-query": "^4.1.0",
-				"clsx": "^2.1.1",
-				"esm-env": "^1.2.1",
-				"esrap": "^1.4.3",
-				"is-reference": "^3.0.3",
-				"locate-character": "^3.0.0",
-				"magic-string": "^0.30.11",
-				"zimmerframe": "^1.1.2"
-			},
-			"engines": {
-				"node": ">=18"
-			}
-		},
-		"node_modules/svelte-check": {
-			"version": "4.1.4",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@jridgewell/trace-mapping": "^0.3.25",
-				"chokidar": "^4.0.1",
-				"fdir": "^6.2.0",
-				"picocolors": "^1.0.0",
-				"sade": "^1.7.4"
-			},
-			"bin": {
-				"svelte-check": "bin/svelte-check"
-			},
-			"engines": {
-				"node": ">= 18.0.0"
-			},
-			"peerDependencies": {
-				"svelte": "^4.0.0 || ^5.0.0-next.0",
-				"typescript": ">=5.0.0"
-			}
-		},
-		"node_modules/tailwindcss": {
-			"version": "4.0.1",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/tailwindcss-motion": {
-			"version": "1.0.1",
-			"dev": true,
-			"license": "MIT",
-			"peerDependencies": {
-				"tailwindcss": ">=3.0.0 || insiders"
-			}
-		},
-		"node_modules/tapable": {
-			"version": "2.2.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/totalist": {
-			"version": "3.0.1",
-			"dev": true,
-			"license": "MIT",
-			"engines": {
-				"node": ">=6"
-			}
-		},
-		"node_modules/typescript": {
-			"version": "5.7.3",
-			"dev": true,
-			"license": "Apache-2.0",
-			"bin": {
-				"tsc": "bin/tsc",
-				"tsserver": "bin/tsserver"
-			},
-			"engines": {
-				"node": ">=14.17"
-			}
-		},
-		"node_modules/update-browserslist-db": {
-			"version": "1.1.2",
-			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/browserslist"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/browserslist"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
-			"dependencies": {
-				"escalade": "^3.2.0",
-				"picocolors": "^1.1.1"
-			},
-			"bin": {
-				"update-browserslist-db": "cli.js"
-			},
-			"peerDependencies": {
-				"browserslist": ">= 4.21.0"
-			}
-		},
-		"node_modules/vite": {
-			"version": "6.0.11",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"esbuild": "^0.24.2",
-				"postcss": "^8.4.49",
-				"rollup": "^4.23.0"
-			},
-			"bin": {
-				"vite": "bin/vite.js"
-			},
-			"engines": {
-				"node": "^18.0.0 || ^20.0.0 || >=22.0.0"
-			},
-			"funding": {
-				"url": "https://github.com/vitejs/vite?sponsor=1"
-			},
-			"optionalDependencies": {
-				"fsevents": "~2.3.3"
-			},
-			"peerDependencies": {
-				"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
-				"jiti": ">=1.21.0",
-				"less": "*",
-				"lightningcss": "^1.21.0",
-				"sass": "*",
-				"sass-embedded": "*",
-				"stylus": "*",
-				"sugarss": "*",
-				"terser": "^5.16.0",
-				"tsx": "^4.8.1",
-				"yaml": "^2.4.2"
-			},
-			"peerDependenciesMeta": {
-				"@types/node": {
-					"optional": true
-				},
-				"jiti": {
-					"optional": true
-				},
-				"less": {
-					"optional": true
-				},
-				"lightningcss": {
-					"optional": true
-				},
-				"sass": {
-					"optional": true
-				},
-				"sass-embedded": {
-					"optional": true
-				},
-				"stylus": {
-					"optional": true
-				},
-				"sugarss": {
-					"optional": true
-				},
-				"terser": {
-					"optional": true
-				},
-				"tsx": {
-					"optional": true
-				},
-				"yaml": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/vitefu": {
-			"version": "1.0.5",
-			"dev": true,
-			"license": "MIT",
-			"workspaces": [
-				"tests/deps/*",
-				"tests/projects/*"
-			],
-			"peerDependencies": {
-				"vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
-			},
-			"peerDependenciesMeta": {
-				"vite": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/zimmerframe": {
-			"version": "1.1.2",
-			"dev": true,
-			"license": "MIT"
-		}
-	}
-}
diff --git a/package.json b/package.json
index 448e692..6738e65 100644
--- a/package.json
+++ b/package.json
@@ -9,20 +9,29 @@
 		"preview": "vite preview",
 		"prepare": "svelte-kit sync || echo ''",
 		"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
-		"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
+		"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
+		"lint": "eslint ./ & npx depcheck",
+		"lint:fix": "eslint ./src --fix"
 	},
 	"devDependencies": {
+		"@eslint/compat": "^1.2.5",
+		"@eslint/js": "^9.19.0",
 		"@sveltejs/adapter-auto": "^4.0.0",
 		"@sveltejs/kit": "^2.16.1",
 		"@sveltejs/vite-plugin-svelte": "^5.0.3",
 		"@tailwindcss/vite": "^4.0.1",
+		"@typescript-eslint/parser": "^8.22.0",
 		"autoprefixer": "^10.4.20",
 		"daisyui": "^5.0.0-beta.6",
+		"eslint-plugin-svelte": "^2.46.1",
+		"prettier": "^3.4.2",
+		"prettier-eslint": "^16.3.0",
 		"svelte": "^5.19.6",
 		"svelte-check": "^4.1.4",
 		"tailwindcss": "^4.0.1",
 		"tailwindcss-motion": "^1.0.1",
 		"typescript": "^5.7.3",
+		"typescript-eslint": "^8.22.0",
 		"vite": "^6.0.11"
 	}
 }