diff --git a/.gitignore b/.gitignore index cff1e8f..cd1c23c 100644 Binary files a/.gitignore and b/.gitignore differ diff --git a/backend/app/db.py b/backend/app/db.py index 4e3754e..1d8bae9 100644 --- a/backend/app/db.py +++ b/backend/app/db.py @@ -3,10 +3,11 @@ import os DATABASE_URL = os.getenv("DATABASE_URL") + if not DATABASE_URL: - raise RuntimeError("DATABASE_URL is required and must point to a PostgreSQL database, e.g. postgresql://user:password@localhost:5432/stockvision") + raise ValueError("DATABASE_URL environment variable is required") -engine = create_engine(DATABASE_URL, pool_pre_ping=True, echo=False) +engine = create_engine(DATABASE_URL, pool_pre_ping=True) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() diff --git a/backend/env.example b/backend/env.example index 9e62f90..6ade0a3 100644 --- a/backend/env.example +++ b/backend/env.example @@ -16,6 +16,8 @@ REDIS_URL=redis://localhost:6379/0 # External APIs ALPHA_VANTAGE_API_KEY=your_alpha_vantage_api_key YAHOO_FINANCE_API_KEY=your_yahoo_finance_api_key +POLYGON_API_KEY=your_polygon_api_key +FINNHUB_API_KEY=your_finnhub_api_key # Security SECRET_KEY=your_secret_key_here diff --git a/backend/main.py b/backend/main.py index 9e3f5b2..038b9f1 100644 --- a/backend/main.py +++ b/backend/main.py @@ -6,7 +6,7 @@ from dotenv import load_dotenv # Import routers -from app.routers import stocks, market, portfolios, auth +from app.routers import stocks, market, portfolios, auth, chatbot # Import database from app.db import engine, Base @@ -43,6 +43,13 @@ app.include_router(portfolios.router) app.include_router(auth.router) # Auth routes added +# Include routers +app.include_router(auth.router, prefix="/api", tags=["Authentication"]) +app.include_router(stocks.router, prefix="/api", tags=["Stocks"]) +app.include_router(market.router, prefix="/api", tags=["Market"]) +app.include_router(portfolios.router, prefix="/api", tags=["Portfolios"]) +app.include_router(chatbot.router, prefix="/api", tags=["Chatbot"]) + # Create all DB tables Base.metadata.create_all(bind=engine) diff --git a/backend/requirements.txt b/backend/requirements.txt index 57ff23f..b1a40ab 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -21,4 +21,5 @@ pandas>=2.1.0 numpy>=1.25.0 yfinance>=0.2.0 requests>=2.31.0 -aiofiles>=23.2.0 \ No newline at end of file +aiofiles>=23.2.0 +aiohttp>=3.8.0 \ No newline at end of file diff --git a/frontend/app/HomeClient.tsx b/frontend/app/HomeClient.tsx index 350b66d..1b4170e 100644 --- a/frontend/app/HomeClient.tsx +++ b/frontend/app/HomeClient.tsx @@ -1,22 +1,25 @@ "use client"; import { useEffect, useState } from "react"; import Landing from "@/components/Landing"; +import SimpleLanding from "@/components/SimpleLanding"; import Preloader from "@/components/Preloder"; let hasShownPreloader = false; export default function HomeClient() { - const [isLoading, setIsLoading] = useState(!hasShownPreloader); + // Temporarily disable preloader for debugging + const [isLoading, setIsLoading] = useState(false); useEffect(() => { if (!hasShownPreloader) { const timer = setTimeout(() => { setIsLoading(false); hasShownPreloader = true; - }, 2500); + }, 500); // Reduced to 0.5 seconds for testing return () => clearTimeout(timer); } }, []); + // Use original Landing component return isLoading ? : ; } diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx index 0f8b887..b4796de 100644 --- a/frontend/app/layout.tsx +++ b/frontend/app/layout.tsx @@ -3,6 +3,7 @@ import { ThemeProvider } from "@/components/theme-provider"; import { Toaster as Sonner } from "@/components/ui/sonner"; import { Toaster } from "@/components/ui/toaster"; import { TooltipProvider } from "@/components/ui/tooltip"; +import Chatbot from "./components/chatbot"; import "@/styles/globals.css"; import { Analytics } from '@vercel/analytics/react'; import { Inter } from "next/font/google"; @@ -50,6 +51,7 @@ export default function RootLayout({ {children} +