1.7 KiB
1.7 KiB
Tech Stack
Backend
- Python 3.12+
- FastAPI with Uvicorn
- SQLAlchemy 2.0 (async) with asyncpg
- PostgreSQL database
- Alembic for migrations
- APScheduler for scheduled jobs
- JWT auth (python-jose, passlib with bcrypt)
- Pydantic for validation and settings
Frontend
- React 18 with TypeScript
- Vite 5 (build tool)
- TanStack React Query v5 (server state)
- Zustand (client state, auth)
- React Router v6 (SPA routing)
- Axios with JWT interceptor
- Tailwind CSS 3 with custom glassmorphism design system
- Canvas 2D for candlestick charts
Testing
- Backend: pytest, pytest-asyncio, Hypothesis (property-based testing)
- Frontend: Vitest
- Test database: In-memory SQLite (no PostgreSQL needed for tests)
Common Commands
Backend
# Setup
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Database
createdb stock_data_backend
alembic upgrade head
# Run
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Test
pytest tests/ -v
Frontend
cd frontend
# Setup
npm install
# Run dev server (proxies /api/v1/ to backend)
npm run dev
# Build
npm run build
# Test
npm test # Single run
npm run test:watch # Watch mode
Environment Variables
Required in .env:
DATABASE_URL: PostgreSQL connection string (postgresql+asyncpg://...)JWT_SECRET: Random secret for JWT signingALPACA_API_KEY,ALPACA_API_SECRET: For OHLCV dataGEMINI_API_KEY: For sentiment analysisFMP_API_KEY: For fundamental data
See .env.example for full list with defaults.
API Documentation
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- All endpoints under
/api/v1/