diff --git a/.env b/.env new file mode 100644 index 0000000..e9f09e1 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres" +NODE_ENV=development diff --git a/client/src/App.tsx b/client/src/App.tsx index 3fc08f7..bcecb25 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,36 +1,38 @@ import { Switch, Route, Redirect } from "wouter"; import { queryClient } from "./lib/queryClient"; import { QueryClientProvider } from "@tanstack/react-query"; -import { Toaster } from "@/components/ui/toaster"; -import { TooltipProvider } from "@/components/ui/tooltip"; -import { FloatingVoiceControl } from "@/components/voice/FloatingVoiceControl"; -import { AuthProvider, useAuth } from "@/context/AuthContext"; -import { ThemeProvider } from "@/context/ThemeContext"; -import { AdaptiveThemeProvider } from "@/context/AdaptiveThemeContext"; -import { VoiceProvider } from "@/context/VoiceProvider"; -import { NotificationProvider } from "@/context/NotificationProvider"; -import { TourManagerProvider } from "@/components/onboarding/TourManager"; -import { MoodDetector } from "@/components/MoodDetector"; -import { RTLProvider } from "@/components/RTLProvider"; -import { Skeleton } from "@/components/ui/skeleton"; -import LandingPage from "@/pages/LandingPage"; -import DashboardPage from "@/pages/DashboardPage"; -import LoginPage from "@/pages/LoginPage"; -import ProfessionalDirectory from "@/pages/ProfessionalDirectory"; -import OnboardingPage from "@/pages/OnboardingPage"; -import TasksPage from "@/pages/TasksPage"; -import FinancesPage from "@/pages/FinancesPage"; -import VoicePage from "@/pages/VoicePage"; -import AIPage from "@/pages/AIPage"; -import AnalyticsPage from "@/pages/AnalyticsPage"; -import SystemMonitoringPage from "@/pages/SystemMonitoringPage"; -import SettingsPage from "@/pages/SettingsPage"; -import FocusPage from "@/pages/FocusPage"; -import ThemePage from "@/pages/ThemePage"; -import BenchmarkPage from "@/pages/BenchmarkPage"; -import ChatPage from "@/pages/ChatPage"; -import ComfortHubPage from "@/pages/ComfortHubPage"; -import NotFound from "@/pages/not-found"; +import { Toaster } from "./components/ui/toaster"; +import { TooltipProvider } from "./components/ui/tooltip"; +import { FloatingVoiceControl } from "./components/voice/FloatingVoiceControl"; +import { AuthProvider, useAuth } from "./context/AuthContext"; +import { ThemeProvider } from "./context/ThemeContext"; +import { AdaptiveThemeProvider } from "./context/AdaptiveThemeContext"; +import { VoiceProvider } from "./context/VoiceProvider"; +import { NotificationProvider } from "./context/NotificationProvider"; +import { TourManagerProvider } from "./components/onboarding/TourManager"; +import { MoodDetector } from "./components/MoodDetector"; +import { RTLProvider } from "./components/RTLProvider"; +import { Skeleton } from "./components/ui/skeleton"; + +// Page imports +import LandingPage from "./pages/LandingPage"; +import DashboardPage from "./pages/DashboardPage"; +import LoginPage from "./pages/LoginPage"; +import OnboardingPage from "./pages/OnboardingPage"; +import TasksPage from "./pages/TasksPage"; +import FinancesPage from "./pages/FinancesPage"; +import VoicePage from "./pages/VoicePage"; +import AIPage from "./pages/AIPage"; +import AnalyticsPage from "./pages/AnalyticsPage"; +import SystemMonitoringPage from "./pages/SystemMonitoringPage"; +import SettingsPage from "./pages/SettingsPage"; +import FocusPage from "./pages/FocusPage"; +import ThemePage from "./pages/ThemePage"; +import BenchmarkPage from "./pages/BenchmarkPage"; +import ChatPage from "./pages/ChatPage"; +import ComfortHubPage from "./pages/ComfortHubPage"; +import ProfessionalDirectory from "./pages/ProfessionalDirectory"; +import NotFound from "./pages/not-found"; // Protected Route wrapper function ProtectedRoute({ component: Component }: { component: React.ComponentType }) { diff --git a/client/src/index.css b/client/src/index.css index 29a0cca..b2aef9f 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -19,6 +19,7 @@ --secondary-foreground: 222.2 84% 4.9%; --muted: 210 40% 96%; --muted-foreground: 215.4 16.3% 46.9%; + --border: 214.3 31.8% 91.4%; --accent: 210 40% 96%; --accent-foreground: 222.2 84% 4.9%; --destructive: 0 84.2% 60.2%; diff --git a/client/src/pages/BenchmarkPage.tsx b/client/src/pages/BenchmarkPage.tsx index d3ed2c6..540d512 100644 --- a/client/src/pages/BenchmarkPage.tsx +++ b/client/src/pages/BenchmarkPage.tsx @@ -6,7 +6,7 @@ import { Badge } from '@/components/ui/badge'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { PerformanceBenchmark } from '@/components/PerformanceBenchmark'; import { Header } from '@/components/layout/Header'; -import { Sidebar } from '@/components/layout/Sidebar'; +import Sidebar from '@/components/layout/Sidebar'; import { Activity, BarChart3, diff --git a/client/vite.config.ts b/client/vite.config.ts new file mode 100644 index 0000000..77c4c1c --- /dev/null +++ b/client/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import path from "path"; + +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + "@": path.resolve(__dirname, "src"), + }, + }, +}); diff --git a/package-lock.json b/package-lock.json index 4ccfe4e..777ba57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -49,6 +49,7 @@ "compression": "^1.8.0", "connect-pg-simple": "^10.0.0", "date-fns": "^3.6.0", + "dotenv": "^16.5.0", "drizzle-orm": "^0.39.1", "drizzle-zod": "^0.7.0", "embla-carousel-react": "^8.6.0", @@ -4137,9 +4138,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001677", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001677.tgz", - "integrity": "sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==", + "version": "1.0.30001721", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz", + "integrity": "sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ==", "dev": true, "funding": [ { @@ -4787,6 +4788,18 @@ "csstype": "^3.0.2" } }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, "node_modules/drizzle-kit": { "version": "0.30.4", "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.30.4.tgz", diff --git a/package.json b/package.json index b8c5573..656dcfa 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "compression": "^1.8.0", "connect-pg-simple": "^10.0.0", "date-fns": "^3.6.0", + "dotenv": "^16.5.0", "drizzle-orm": "^0.39.1", "drizzle-zod": "^0.7.0", "embla-carousel-react": "^8.6.0", diff --git a/server/index.ts b/server/index.ts index f432e44..f5680ee 100644 --- a/server/index.ts +++ b/server/index.ts @@ -1,3 +1,4 @@ +import 'dotenv/config'; import express, { type Request, Response, NextFunction } from "express"; import { registerRoutes } from "./routes"; import { taskScheduler } from "./services/taskScheduler"; diff --git a/server/vite.ts b/server/vite.ts index 95395a0..cafe4b7 100644 --- a/server/vite.ts +++ b/server/vite.ts @@ -1,11 +1,14 @@ import express, { type Express } from "express"; import fs from "fs"; import path from "path"; +import { fileURLToPath } from 'node:url'; import { createServer as createViteServer, createLogger } from "vite"; import { type Server } from "http"; import viteConfig from "../vite.config"; import { nanoid } from "nanoid"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const viteLogger = createLogger(); export function log(message: string, source = "express") { @@ -46,7 +49,7 @@ export async function setupVite(app: Express, server: Server) { try { const clientTemplate = path.resolve( - import.meta.dirname, + __dirname, "..", "client", "index.html", @@ -68,7 +71,7 @@ export async function setupVite(app: Express, server: Server) { } export function serveStatic(app: Express) { - const distPath = path.resolve(import.meta.dirname, "public"); + const distPath = path.resolve(__dirname, "public"); if (!fs.existsSync(distPath)) { throw new Error( diff --git a/tailwind.config.ts b/tailwind.config.ts index 22ccd6c..59b6fb6 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -2,7 +2,12 @@ import type { Config } from "tailwindcss"; export default { darkMode: ["class"], - content: ["./client/index.html", "./client/src/**/*.{js,jsx,ts,tsx}"], + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + "./client/index.html", + "./client/src/**/*.{js,ts,jsx,tsx}" + ], theme: { extend: { borderRadius: { @@ -10,9 +15,13 @@ export default { md: "calc(var(--radius) - 2px)", sm: "calc(var(--radius) - 4px)", }, + borderColor: { + DEFAULT: "hsl(var(--border))", + }, colors: { background: "hsl(var(--background))", foreground: "hsl(var(--foreground))", + border: "hsl(var(--border))", card: { DEFAULT: "hsl(var(--card))", foreground: "hsl(var(--card-foreground))", @@ -41,7 +50,6 @@ export default { DEFAULT: "hsl(var(--destructive))", foreground: "hsl(var(--destructive-foreground))", }, - border: "hsl(var(--border))", input: "hsl(var(--input))", ring: "hsl(var(--ring))", chart: { diff --git a/vite.config.ts b/vite.config.ts index d56b0ec..7a98aa2 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,8 +1,11 @@ import { defineConfig } from "vite"; import react from "@vitejs/plugin-react"; import path from "path"; +import { fileURLToPath } from 'node:url'; import runtimeErrorOverlay from "@replit/vite-plugin-runtime-error-modal"; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + export default defineConfig({ plugins: [ react(), @@ -18,14 +21,14 @@ export default defineConfig({ ], resolve: { alias: { - "@": path.resolve(import.meta.dirname, "client", "src"), - "@shared": path.resolve(import.meta.dirname, "shared"), - "@assets": path.resolve(import.meta.dirname, "attached_assets"), + "@": path.resolve(__dirname, "client", "src"), + "@shared": path.resolve(__dirname, "shared"), + "@assets": path.resolve(__dirname, "attached_assets"), }, }, - root: path.resolve(import.meta.dirname, "client"), + root: path.resolve(__dirname, "client"), build: { - outDir: path.resolve(import.meta.dirname, "dist/public"), + outDir: path.resolve(__dirname, "dist/public"), emptyOutDir: true, }, });