diff --git a/Unbinder/.storybook/main.ts b/Unbinder/.storybook/main.ts
new file mode 100644
index 0000000..8b5fbd2
--- /dev/null
+++ b/Unbinder/.storybook/main.ts
@@ -0,0 +1,57 @@
+import type { StorybookConfig } from "@storybook/html-webpack5";
+import path from 'path';
+import postcss from 'postcss';
+import tailwindcss from 'tailwindcss';
+import autoprefixer from 'autoprefixer';
+
+const config: StorybookConfig = {
+ stories: [
+ "../wwwroot/ts/stories/**/*.mdx",
+ "../wwwroot/ts/stories/ui/**/*.stories.@(js|jsx|mjs|ts|tsx)",
+ ],
+ addons: [
+ "@storybook/addon-links",
+ "@storybook/addon-essentials",
+ "@storybook/addon-interactions",
+ {
+ name: "@storybook/addon-postcss",
+ options: {
+ cssLoaderOptions: {
+ importLoaders: 1
+ },
+ postcssLoaderOptions: {
+ implementation: postcss
+ }
+ }
+ }
+ ],
+ webpackFinal: async (config) => {
+ if (!config.module || !config.module.rules) {
+ throw new Error("Encountered an error during webpack configuration\nAt .storybook/main.ts\nAt webpackFinal");
+ }
+
+ config.module.rules.push({
+ test: /\.css$/,
+ use: [{
+ loader: 'postcss-loader',
+ options: {
+ postcssOptions: { plugins: [tailwindcss, autoprefixer] }
+ }
+ }],
+ include: path.resolve(__dirname, '../')
+ })
+ return config;
+ },
+ framework: {
+ name: "@storybook/html-webpack5",
+ options: {
+ builder: {
+ useSWC: true,
+ },
+ },
+ },
+ docs: {
+ autodocs: "tag",
+ },
+};
+export default config;
diff --git a/Unbinder/.storybook/preview.ts b/Unbinder/.storybook/preview.ts
new file mode 100644
index 0000000..c4d3def
--- /dev/null
+++ b/Unbinder/.storybook/preview.ts
@@ -0,0 +1,16 @@
+import type { Preview } from "@storybook/html";
+import "../wwwroot/lib/tailwind.css";
+
+const preview: Preview = {
+ parameters: {
+ actions: { argTypesRegex: "^on[A-Z].*" },
+ controls: {
+ matchers: {
+ color: /(background|color)$/i,
+ date: /Date$/i,
+ },
+ },
+ },
+};
+
+export default preview;
diff --git a/Unbinder/BuildTools/build.ps1 b/Unbinder/BuildTools/build.ps1
index 3a13edc..d66c62e 100644
--- a/Unbinder/BuildTools/build.ps1
+++ b/Unbinder/BuildTools/build.ps1
@@ -1,2 +1,61 @@
-npm run build
-docker compose build
\ No newline at end of file
+function RebuildJS {
+ echo "Rebuilding JS..."
+
+ # check for node modules
+ if (!(Test-Path ./node_modules)) {
+ echo "Installing node modules..."
+ npm install
+ }
+
+ # delete old JS files if they exist
+ if (Test-Path ./wwwroot/js) {
+ echo "Removing old build files..."
+ ri -r -fo ./wwwroot/js
+ }
+
+ echo "Compiling..."
+ npx tsc
+
+ echo "Adjusting import statements..."
+
+ # find import statements based on regex and append ".js" file ending to each
+ $regex = "import\s+.*\s+from\s+['""](.*)['""]"
+
+ $files = Get-ChildItem -Path ./wwwroot/js -Recurse -Include *.js -File
+ $adjustedFiles = 0
+
+ foreach ($file in $files) {
+ $content = Get-Content $file.FullName
+ $importMatches = $content | Select-String -Pattern $regex -AllMatches
+
+ $adjustedFiles += $importMatches.Matches.Count
+
+ foreach ($match in $importMatches.Matches) {
+ $import = $match.Groups[1].Value
+ $newImport = $import + ".js"
+ $content = $content -replace $import, $newImport
+ }
+
+ $content | Set-Content $file.FullName
+ }
+
+ echo "Adjusted $adjustedFiles import statements."
+}
+
+function BuildStorybook {
+ echo "Building Storybook..."
+ npm run build-storybook
+}
+
+
+# option for only compiling JS
+if ($args[0] -eq "-js") {
+ RebuildJS
+ echo "Done."
+# run full build
+} else {
+ RebuildJS
+ BuildStorybook
+ # to do: include Docker?
+ echo "Done."
+}
diff --git a/Unbinder/BuildTools/build.sh b/Unbinder/BuildTools/build.sh
deleted file mode 100644
index 3a13edc..0000000
--- a/Unbinder/BuildTools/build.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-npm run build
-docker compose build
\ No newline at end of file
diff --git a/Unbinder/Unbinder.csproj b/Unbinder/Unbinder.csproj
index 5f7ae34..e2e22b5 100644
--- a/Unbinder/Unbinder.csproj
+++ b/Unbinder/Unbinder.csproj
@@ -26,7 +26,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Unbinder/Views/Shared/_Layout.cshtml b/Unbinder/Views/Shared/_Layout.cshtml
index 74fa64a..d17b2bd 100644
--- a/Unbinder/Views/Shared/_Layout.cshtml
+++ b/Unbinder/Views/Shared/_Layout.cshtml
@@ -14,5 +14,5 @@