From fe3dabe3b7d9286a16560a9c7bc46eecb308b601 Mon Sep 17 00:00:00 2001 From: gibbyb Date: Mon, 13 Jan 2025 16:36:01 -0600 Subject: [PATCH] Set up for docker --- .eslintrc.cjs | 0 .gitignore | 0 .prod/Dockerfile | 0 .prod/update.sh | 0 README.md | 0 components.json | 0 docker/development/Dockerfile | 53 +++++++++++ docker/development/compose.yaml | 17 ++++ docker/production/Dockerfile | 54 +++++++++++ docker/production/compose.yaml | 16 ++++ drizzle.config.ts | 0 env.example | 0 next.config.js | 67 +++++++------ package.json | 0 pnpm-lock.yaml | 0 postcss.config.cjs | 0 prettier.config.js | 0 public/favicon.ico | Bin public/images/default_user_pfp.png | Bin public/images/exit_fullscreen.svg | 0 public/images/fullscreen.svg | 0 public/images/gitea_logo.svg | 0 public/images/microsoft_logo.png | Bin public/images/tech_tracker_appicon.png | Bin public/images/tech_tracker_favicon.png | Bin public/images/tech_tracker_logo.png | Bin scripts/files_to_clipboard.py | 105 +++++++++++++++++++++ scripts/next.config.build.js | 18 ++++ scripts/next.config.default.js | 13 +++ scripts/reload_container.sh | 7 ++ src/app/api/auth/[...nextauth]/route.ts | 0 src/app/api/get_paginated_history/route.ts | 0 src/app/api/get_technicians/route.ts | 0 src/app/api/update_status_by_id/route.ts | 0 src/app/api/update_status_by_name/route.ts | 0 src/app/layout.tsx | 0 src/app/page.tsx | 0 src/auth.ts | 0 src/components/auth/client/Sign_In.tsx | 0 src/components/auth/client/Sign_Out.tsx | 0 src/components/auth/server/Sign_In.tsx | 0 src/components/auth/server/Sign_Out.tsx | 0 src/components/context/TVModeContext.tsx | 0 src/components/ui/Header.tsx | 0 src/components/ui/History_Drawer.tsx | 0 src/components/ui/Loading.tsx | 0 src/components/ui/No_Session.tsx | 0 src/components/ui/TV_Toggle.tsx | 0 src/components/ui/Tech_Table.tsx | 0 src/components/ui/scroll-area.tsx | 0 src/components/ui/shadcn/button.tsx | 0 src/components/ui/shadcn/calendar.tsx | 0 src/components/ui/shadcn/checkbox.tsx | 0 src/components/ui/shadcn/combobox.tsx | 0 src/components/ui/shadcn/command.tsx | 0 src/components/ui/shadcn/date-picker.tsx | 0 src/components/ui/shadcn/dialog.tsx | 0 src/components/ui/shadcn/drawer.tsx | 0 src/components/ui/shadcn/dropdown-menu.tsx | 0 src/components/ui/shadcn/form.tsx | 0 src/components/ui/shadcn/input.tsx | 0 src/components/ui/shadcn/label.tsx | 0 src/components/ui/shadcn/pagination.tsx | 0 src/components/ui/shadcn/popover.tsx | 0 src/components/ui/shadcn/progress.tsx | 0 src/components/ui/shadcn/radio-group.tsx | 0 src/components/ui/shadcn/scroll-area.tsx | 0 src/components/ui/shadcn/select.tsx | 0 src/components/ui/shadcn/switch.tsx | 0 src/components/ui/shadcn/table.tsx | 0 src/components/ui/shadcn/toaster.tsx | 0 src/components/ui/shadcn/toggle-group.tsx | 0 src/components/ui/shadcn/toggle.tsx | 0 src/components/ui/shadcn/tooltip.tsx | 0 src/env.js | 0 src/lib/utils.ts | 0 src/middleware.ts | 0 src/server/db/index.ts | 0 src/server/db/schema.ts | 0 src/server/functions.ts | 0 src/styles/globals.css | 0 tailwind.config.ts | 0 tsconfig.json | 0 83 files changed, 323 insertions(+), 27 deletions(-) mode change 100644 => 100755 .eslintrc.cjs mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .prod/Dockerfile mode change 100644 => 100755 .prod/update.sh mode change 100644 => 100755 README.md mode change 100644 => 100755 components.json create mode 100644 docker/development/Dockerfile create mode 100644 docker/development/compose.yaml create mode 100644 docker/production/Dockerfile create mode 100644 docker/production/compose.yaml mode change 100644 => 100755 drizzle.config.ts mode change 100644 => 100755 env.example mode change 100644 => 100755 next.config.js mode change 100644 => 100755 package.json mode change 100644 => 100755 pnpm-lock.yaml mode change 100644 => 100755 postcss.config.cjs mode change 100644 => 100755 prettier.config.js mode change 100644 => 100755 public/favicon.ico mode change 100644 => 100755 public/images/default_user_pfp.png mode change 100644 => 100755 public/images/exit_fullscreen.svg mode change 100644 => 100755 public/images/fullscreen.svg mode change 100644 => 100755 public/images/gitea_logo.svg mode change 100644 => 100755 public/images/microsoft_logo.png mode change 100644 => 100755 public/images/tech_tracker_appicon.png mode change 100644 => 100755 public/images/tech_tracker_favicon.png mode change 100644 => 100755 public/images/tech_tracker_logo.png create mode 100755 scripts/files_to_clipboard.py create mode 100644 scripts/next.config.build.js create mode 100644 scripts/next.config.default.js create mode 100755 scripts/reload_container.sh mode change 100644 => 100755 src/app/api/auth/[...nextauth]/route.ts mode change 100644 => 100755 src/app/api/get_paginated_history/route.ts mode change 100644 => 100755 src/app/api/get_technicians/route.ts mode change 100644 => 100755 src/app/api/update_status_by_id/route.ts mode change 100644 => 100755 src/app/api/update_status_by_name/route.ts mode change 100644 => 100755 src/app/layout.tsx mode change 100644 => 100755 src/app/page.tsx mode change 100644 => 100755 src/auth.ts mode change 100644 => 100755 src/components/auth/client/Sign_In.tsx mode change 100644 => 100755 src/components/auth/client/Sign_Out.tsx mode change 100644 => 100755 src/components/auth/server/Sign_In.tsx mode change 100644 => 100755 src/components/auth/server/Sign_Out.tsx mode change 100644 => 100755 src/components/context/TVModeContext.tsx mode change 100644 => 100755 src/components/ui/Header.tsx mode change 100644 => 100755 src/components/ui/History_Drawer.tsx mode change 100644 => 100755 src/components/ui/Loading.tsx mode change 100644 => 100755 src/components/ui/No_Session.tsx mode change 100644 => 100755 src/components/ui/TV_Toggle.tsx mode change 100644 => 100755 src/components/ui/Tech_Table.tsx mode change 100644 => 100755 src/components/ui/scroll-area.tsx mode change 100644 => 100755 src/components/ui/shadcn/button.tsx mode change 100644 => 100755 src/components/ui/shadcn/calendar.tsx mode change 100644 => 100755 src/components/ui/shadcn/checkbox.tsx mode change 100644 => 100755 src/components/ui/shadcn/combobox.tsx mode change 100644 => 100755 src/components/ui/shadcn/command.tsx mode change 100644 => 100755 src/components/ui/shadcn/date-picker.tsx mode change 100644 => 100755 src/components/ui/shadcn/dialog.tsx mode change 100644 => 100755 src/components/ui/shadcn/drawer.tsx mode change 100644 => 100755 src/components/ui/shadcn/dropdown-menu.tsx mode change 100644 => 100755 src/components/ui/shadcn/form.tsx mode change 100644 => 100755 src/components/ui/shadcn/input.tsx mode change 100644 => 100755 src/components/ui/shadcn/label.tsx mode change 100644 => 100755 src/components/ui/shadcn/pagination.tsx mode change 100644 => 100755 src/components/ui/shadcn/popover.tsx mode change 100644 => 100755 src/components/ui/shadcn/progress.tsx mode change 100644 => 100755 src/components/ui/shadcn/radio-group.tsx mode change 100644 => 100755 src/components/ui/shadcn/scroll-area.tsx mode change 100644 => 100755 src/components/ui/shadcn/select.tsx mode change 100644 => 100755 src/components/ui/shadcn/switch.tsx mode change 100644 => 100755 src/components/ui/shadcn/table.tsx mode change 100644 => 100755 src/components/ui/shadcn/toaster.tsx mode change 100644 => 100755 src/components/ui/shadcn/toggle-group.tsx mode change 100644 => 100755 src/components/ui/shadcn/toggle.tsx mode change 100644 => 100755 src/components/ui/shadcn/tooltip.tsx mode change 100644 => 100755 src/env.js mode change 100644 => 100755 src/lib/utils.ts mode change 100644 => 100755 src/middleware.ts mode change 100644 => 100755 src/server/db/index.ts mode change 100644 => 100755 src/server/db/schema.ts mode change 100644 => 100755 src/server/functions.ts mode change 100644 => 100755 src/styles/globals.css mode change 100644 => 100755 tailwind.config.ts mode change 100644 => 100755 tsconfig.json diff --git a/.eslintrc.cjs b/.eslintrc.cjs old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.prod/Dockerfile b/.prod/Dockerfile old mode 100644 new mode 100755 diff --git a/.prod/update.sh b/.prod/update.sh old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/components.json b/components.json old mode 100644 new mode 100755 diff --git a/docker/development/Dockerfile b/docker/development/Dockerfile new file mode 100644 index 0000000..b4e79ab --- /dev/null +++ b/docker/development/Dockerfile @@ -0,0 +1,53 @@ +# syntax=docker.io/docker/dockerfile:1 + +FROM node:18-alpine AS base + +# 1. Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat + +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./ +RUN \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \ + else echo "Lockfile not found." && exit 1; \ + fi + +# 2. Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +# This will do the trick, use the corresponding env file for each environment. +COPY .env .env.production +RUN npm run build + +# 3. Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production + +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +COPY --from=builder /app/public ./public + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 + +CMD HOSTNAME="0.0.0.0" node server.js diff --git a/docker/development/compose.yaml b/docker/development/compose.yaml new file mode 100644 index 0000000..3a39657 --- /dev/null +++ b/docker/development/compose.yaml @@ -0,0 +1,17 @@ +services: + techtracker: + build: + context: ../../ + dockerfile: docker/development/Dockerfile + image: with-docker-multi-env-development + container_name: techtracker + networks: + - node_apps + ports: + - "3004:3000" + tty: true + restart: unless-stopped +networks: + node_apps: + external: true + diff --git a/docker/production/Dockerfile b/docker/production/Dockerfile new file mode 100644 index 0000000..5a1e113 --- /dev/null +++ b/docker/production/Dockerfile @@ -0,0 +1,54 @@ +# syntax=docker.io/docker/dockerfile:1 + +FROM node:18-alpine AS base + +# 1. Install dependencies only when needed +FROM base AS deps +# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. +RUN apk add --no-cache libc6-compat + +WORKDIR /app + +# Install dependencies based on the preferred package manager +COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* .npmrc* ./ +RUN \ + if [ -f yarn.lock ]; then yarn --frozen-lockfile; \ + elif [ -f package-lock.json ]; then npm ci; \ + elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \ + else echo "Lockfile not found." && exit 1; \ + fi + + +# 2. Rebuild the source code only when needed +FROM base AS builder +WORKDIR /app +COPY --from=deps /app/node_modules ./node_modules +COPY . . +# This will do the trick, use the corresponding env file for each environment. +COPY .env .env.production +RUN npm run build + +# 3. Production image, copy all the files and run next +FROM base AS runner +WORKDIR /app + +ENV NODE_ENV=production + +RUN addgroup -g 1001 -S nodejs +RUN adduser -S nextjs -u 1001 + +COPY --from=builder /app/public ./public + +# Automatically leverage output traces to reduce image size +# https://nextjs.org/docs/advanced-features/output-file-tracing +COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ +COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static + + +USER nextjs + +EXPOSE 3000 + +ENV PORT=3000 + +CMD HOSTNAME="0.0.0.0" node server.js diff --git a/docker/production/compose.yaml b/docker/production/compose.yaml new file mode 100644 index 0000000..9d93904 --- /dev/null +++ b/docker/production/compose.yaml @@ -0,0 +1,16 @@ +services: + techtracker: + build: + context: ../../ + dockerfile: docker/production/Dockerfile + image: with-docker-multi-env-development + container_name: techtracker + networks: + - node_apps + ports: + - "3004:3000" + tty: true + restart: unless-stopped +networks: + node_apps: + external: true diff --git a/drizzle.config.ts b/drizzle.config.ts old mode 100644 new mode 100755 diff --git a/env.example b/env.example old mode 100644 new mode 100755 diff --git a/next.config.js b/next.config.js old mode 100644 new mode 100755 index 5b8f488..1d2bbfb --- a/next.config.js +++ b/next.config.js @@ -2,36 +2,49 @@ * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful * for Docker builds. */ -await import("./src/env.js"); - -const cspHeader = ` - default-src 'self'; - script-src 'self' 'unsafe-eval' 'unsafe-inline'; - style-src 'self' 'unsafe-inline'; - img-src 'self' blob: data:; - font-src 'self'; - object-src 'none'; - base-uri 'self'; - form-action 'self'; - frame-ancestors 'none'; - upgrade-insecure-requests; -` +import './src/env.js'; /** @type {import("next").NextConfig} */ const config = { - async headers() { - return [ - { - source: "/(.*)", - headers: [ - { - key: "Content-Security-Policy", - value: cspHeader.replace(/\n/g, ''), - }, - ], - }, - ]; - }, + output: 'standalone', }; export default config; +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ +//await import("./src/env.js"); + +//const cspHeader = ` + //default-src 'self'; + //script-src 'self' 'unsafe-eval' 'unsafe-inline'; + //style-src 'self' 'unsafe-inline'; + //img-src 'self' blob: data:; + //font-src 'self'; + //object-src 'none'; + //base-uri 'self'; + //form-action 'self'; + //frame-ancestors 'none'; + //upgrade-insecure-requests; +//` + +//[>* @type {import("next").NextConfig} <] +//const config = { + //async headers() { + //return [ + //{ + //source: "/(.*)", + //headers: [ + //{ + //key: "Content-Security-Policy", + //value: cspHeader.replace(/\n/g, ''), + //}, + //], + //}, + //]; + //}, +//}; + +//export default config; + diff --git a/package.json b/package.json old mode 100644 new mode 100755 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml old mode 100644 new mode 100755 diff --git a/postcss.config.cjs b/postcss.config.cjs old mode 100644 new mode 100755 diff --git a/prettier.config.js b/prettier.config.js old mode 100644 new mode 100755 diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 diff --git a/public/images/default_user_pfp.png b/public/images/default_user_pfp.png old mode 100644 new mode 100755 diff --git a/public/images/exit_fullscreen.svg b/public/images/exit_fullscreen.svg old mode 100644 new mode 100755 diff --git a/public/images/fullscreen.svg b/public/images/fullscreen.svg old mode 100644 new mode 100755 diff --git a/public/images/gitea_logo.svg b/public/images/gitea_logo.svg old mode 100644 new mode 100755 diff --git a/public/images/microsoft_logo.png b/public/images/microsoft_logo.png old mode 100644 new mode 100755 diff --git a/public/images/tech_tracker_appicon.png b/public/images/tech_tracker_appicon.png old mode 100644 new mode 100755 diff --git a/public/images/tech_tracker_favicon.png b/public/images/tech_tracker_favicon.png old mode 100644 new mode 100755 diff --git a/public/images/tech_tracker_logo.png b/public/images/tech_tracker_logo.png old mode 100644 new mode 100755 diff --git a/scripts/files_to_clipboard.py b/scripts/files_to_clipboard.py new file mode 100755 index 0000000..7654166 --- /dev/null +++ b/scripts/files_to_clipboard.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python3 + +import os +import sys +import argparse +from pathlib import Path +import pyperclip +import questionary + +# List of directories to exclude +EXCLUDED_DIRS = {'node_modules', '.next', '.venv', '.git', '__pycache__', '.idea', '.vscode', 'ui'} + +def collect_files(project_path): + """ + Collects files from the project directory, excluding specified directories and filtering by extensions. + Returns a list of file paths relative to the project directory. + """ + collected_files = [] + + for root, dirs, files in os.walk(project_path): + # Exclude specified directories + dirs[:] = [d for d in dirs if d not in EXCLUDED_DIRS] + + for file in files: + file_path = Path(root) / file + relative_path = file_path.relative_to(project_path) + collected_files.append(relative_path) + + return collected_files + +def main(): + # Parse command-line arguments + parser = argparse.ArgumentParser(description='Generate Markdown from selected files.') + parser.add_argument('path', nargs='?', default='.', help='Path to the project directory') + args = parser.parse_args() + + project_path = Path(args.path).resolve() + if not project_path.is_dir(): + print(f"Error: '{project_path}' is not a directory.") + sys.exit(1) + + # Collect files from the project directory + file_list = collect_files(project_path) + + if not file_list: + print("No files found in the project directory with the specified extensions.") + sys.exit(1) + + # Sort file_list for better organization + file_list.sort() + + # Interactive file selection using questionary + print("\nSelect the files you want to include:") + selected_files = questionary.checkbox( + "Press space to select files, and Enter when you're done:", + choices=[str(f) for f in file_list] + ).ask() + + if not selected_files: + print("No files selected.") + sys.exit(1) + + # Generate markdown + markdown_lines = [] + markdown_lines.append('') + + for selected_file in selected_files: + file_path = project_path / selected_file + try: + with open(file_path, 'r', encoding='utf-8') as f: + content = f.read() + # Determine the language for code block from file extension + language = file_path.suffix.lstrip('.') + markdown_lines.append(f'{selected_file}') + markdown_lines.append(f'```{language}') + markdown_lines.append(content) + markdown_lines.append('```') + markdown_lines.append('') + except Exception as e: + print(f"Error reading file {selected_file}: {e}") + + markdown_text = '\n'.join(markdown_lines) + + # Write markdown to file + output_file = 'output.md' + with open(output_file, 'w', encoding='utf-8') as f: + f.write(markdown_text) + print(f"\nMarkdown file '{output_file}' has been generated.") + + # Copy markdown content to clipboard + pyperclip.copy(markdown_text) + print("Markdown content has been copied to the clipboard.") + +if __name__ == "__main__": + # Check if required libraries are installed + try: + import questionary + import pyperclip + except ImportError as e: + missing_module = e.name + print(f"Error: Missing required module '{missing_module}'.") + print(f"Please install it by running: pip install {missing_module}") + sys.exit(1) + + main() diff --git a/scripts/next.config.build.js b/scripts/next.config.build.js new file mode 100644 index 0000000..6ec99c0 --- /dev/null +++ b/scripts/next.config.build.js @@ -0,0 +1,18 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ +import './src/env.js'; + +/** @type {import("next").NextConfig} */ +const config = { + output: 'standalone', + typescript: { + ignoreBuildErrors: true, + }, + eslint: { + ignoreDuringBuilds: true, + }, +}; + +export default config; diff --git a/scripts/next.config.default.js b/scripts/next.config.default.js new file mode 100644 index 0000000..ffbf3fa --- /dev/null +++ b/scripts/next.config.default.js @@ -0,0 +1,13 @@ +/** + * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. This is especially useful + * for Docker builds. + */ +import './src/env.js'; + +/** @type {import("next").NextConfig} */ +const config = { + output: 'standalone', +}; + +export default config; + diff --git a/scripts/reload_container.sh b/scripts/reload_container.sh new file mode 100755 index 0000000..e002453 --- /dev/null +++ b/scripts/reload_container.sh @@ -0,0 +1,7 @@ +git pull +mv ~/Documents/Web/Tech_Tracker_Web/next.config.js ~/Documents/Web/Tech_Tracker_Web/scripts/next.config.default.js +cp ~/Documents/Web/Tech_Tracker_Web/scripts/next.config.build.js ~/Documents/Web/Tech_Tracker_Web/next.config.js +sudo docker compose -f docker/development/compose.yaml down +sudo docker compose -f docker/development/compose.yaml build +sudo docker compose -f docker/development/compose.yaml up -d +cp ~/Documents/Web/Tech_Tracker_Web/scripts/next.config.default.js ~/Documents/Web/Tech_Tracker_Web/next.config.js diff --git a/src/app/api/auth/[...nextauth]/route.ts b/src/app/api/auth/[...nextauth]/route.ts old mode 100644 new mode 100755 diff --git a/src/app/api/get_paginated_history/route.ts b/src/app/api/get_paginated_history/route.ts old mode 100644 new mode 100755 diff --git a/src/app/api/get_technicians/route.ts b/src/app/api/get_technicians/route.ts old mode 100644 new mode 100755 diff --git a/src/app/api/update_status_by_id/route.ts b/src/app/api/update_status_by_id/route.ts old mode 100644 new mode 100755 diff --git a/src/app/api/update_status_by_name/route.ts b/src/app/api/update_status_by_name/route.ts old mode 100644 new mode 100755 diff --git a/src/app/layout.tsx b/src/app/layout.tsx old mode 100644 new mode 100755 diff --git a/src/app/page.tsx b/src/app/page.tsx old mode 100644 new mode 100755 diff --git a/src/auth.ts b/src/auth.ts old mode 100644 new mode 100755 diff --git a/src/components/auth/client/Sign_In.tsx b/src/components/auth/client/Sign_In.tsx old mode 100644 new mode 100755 diff --git a/src/components/auth/client/Sign_Out.tsx b/src/components/auth/client/Sign_Out.tsx old mode 100644 new mode 100755 diff --git a/src/components/auth/server/Sign_In.tsx b/src/components/auth/server/Sign_In.tsx old mode 100644 new mode 100755 diff --git a/src/components/auth/server/Sign_Out.tsx b/src/components/auth/server/Sign_Out.tsx old mode 100644 new mode 100755 diff --git a/src/components/context/TVModeContext.tsx b/src/components/context/TVModeContext.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/Header.tsx b/src/components/ui/Header.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/History_Drawer.tsx b/src/components/ui/History_Drawer.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/Loading.tsx b/src/components/ui/Loading.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/No_Session.tsx b/src/components/ui/No_Session.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/TV_Toggle.tsx b/src/components/ui/TV_Toggle.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/Tech_Table.tsx b/src/components/ui/Tech_Table.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/button.tsx b/src/components/ui/shadcn/button.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/calendar.tsx b/src/components/ui/shadcn/calendar.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/checkbox.tsx b/src/components/ui/shadcn/checkbox.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/combobox.tsx b/src/components/ui/shadcn/combobox.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/command.tsx b/src/components/ui/shadcn/command.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/date-picker.tsx b/src/components/ui/shadcn/date-picker.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/dialog.tsx b/src/components/ui/shadcn/dialog.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/drawer.tsx b/src/components/ui/shadcn/drawer.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/dropdown-menu.tsx b/src/components/ui/shadcn/dropdown-menu.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/form.tsx b/src/components/ui/shadcn/form.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/input.tsx b/src/components/ui/shadcn/input.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/label.tsx b/src/components/ui/shadcn/label.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/pagination.tsx b/src/components/ui/shadcn/pagination.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/popover.tsx b/src/components/ui/shadcn/popover.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/progress.tsx b/src/components/ui/shadcn/progress.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/radio-group.tsx b/src/components/ui/shadcn/radio-group.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/scroll-area.tsx b/src/components/ui/shadcn/scroll-area.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/select.tsx b/src/components/ui/shadcn/select.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/switch.tsx b/src/components/ui/shadcn/switch.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/table.tsx b/src/components/ui/shadcn/table.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/toaster.tsx b/src/components/ui/shadcn/toaster.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/toggle-group.tsx b/src/components/ui/shadcn/toggle-group.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/toggle.tsx b/src/components/ui/shadcn/toggle.tsx old mode 100644 new mode 100755 diff --git a/src/components/ui/shadcn/tooltip.tsx b/src/components/ui/shadcn/tooltip.tsx old mode 100644 new mode 100755 diff --git a/src/env.js b/src/env.js old mode 100644 new mode 100755 diff --git a/src/lib/utils.ts b/src/lib/utils.ts old mode 100644 new mode 100755 diff --git a/src/middleware.ts b/src/middleware.ts old mode 100644 new mode 100755 diff --git a/src/server/db/index.ts b/src/server/db/index.ts old mode 100644 new mode 100755 diff --git a/src/server/db/schema.ts b/src/server/db/schema.ts old mode 100644 new mode 100755 diff --git a/src/server/functions.ts b/src/server/functions.ts old mode 100644 new mode 100755 diff --git a/src/styles/globals.css b/src/styles/globals.css old mode 100644 new mode 100755 diff --git a/tailwind.config.ts b/tailwind.config.ts old mode 100644 new mode 100755 diff --git a/tsconfig.json b/tsconfig.json old mode 100644 new mode 100755