Files
invest-copilot/README.md
T

245 lines
11 KiB
Markdown

# Invest Copilot
> AI-native stock research and investment copilot. Mobile-first PWA.
>
> **Status:** Phase 1 Complete — Foundation + Core Features
> **Created:** 2025-05-26
---
## What Is This
A single-page application (SPA) that gives retail investors institutional-grade research tools:
- **Stock research** — prices, fundamentals, SEC filings, institutional ownership, peer comparison
- **Watchlists** — create, manage, and apply strategies to lists of stocks/ETFs/index funds
- **Sector rotation detection** — monitor ETFs/index funds for market/sector rotation signals
- **Strategy builder** — create technical and fundamental strategies, apply to watchlists
- **Automated alerts** — agents that watch your watchlists and notify on strategy triggers
- **Stock screener** — TradingView-style screening with your custom criteria
- **Backtesting** — SMA/RSI signal generation with trade execution and performance metrics
- **Real-time streaming** — SSE-based price and alert updates
## Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Frontend (Next.js) │
│ SPA · Mobile-first PWA · Offline support · Push alerts │
│ Tailwind CSS · shadcn/ui · TanStack Query · Zustand │
└───────────────────────────┬─────────────────────────────────┘
│ REST + SSE
┌───────────────────────────▼─────────────────────────────────┐
│ Backend (FastAPI) │
│ API Gateway · Auth (JWT) · Rate Limiting · Real-time │
│ Celery workers · Redis broker · Background tasks │
└───────────────────────────┬─────────────────────────────────┘
│
┌───────────────────────────▼─────────────────────────────────┐
│ Data Layer │
│ PostgreSQL + TimescaleDB (timeseries + relational) │
│ Redis (cache + rate limiting) │
│ MinIO (file storage: PDFs, transcripts, images) │
└─────────────────────────────────────────────────────────────┘
```
## Tech Stack
| Layer | Technology |
|-------|-----------|
| Frontend | Next.js 16, React 19, TypeScript |
| Styling | Tailwind CSS, shadcn/ui, clsx, tailwind-merge |
| State | Zustand (global), TanStack Query (server state) |
| Forms | React Hook Form + Zod validation |
| Charts | Lightweight Charts (TradingView) |
| Backend | FastAPI (Python 3.12+), asyncpg, Pydantic v2 |
| Auth | Hand-rolled HS256 JWT, bcrypt password hashing |
| Database | PostgreSQL 16 + TimescaleDB (extension) |
| Cache | Redis 7 |
| Object Storage | MinIO (S3-compatible) |
| Task Queue | Celery + Redis broker |
| Real-time | Server-sent events (SSE) via sse-starlette |
| Container | Docker Compose |
## Project Structure
```
invest-copilot/
├── AGENT.md # AI agent philosophy & operational rules
├── HEART.md # Agent identity & epistemic discipline
├── BRAIN.md # Architecture & tech stack mapping
├── docker-compose.yml # Full stack orchestration
├── init.sql # TimescaleDB initialization script
├── .env.example # Environment variable template
├── docs/
│ ├── data-edge-research.md # Comprehensive data sources & edge analysis
│ └── architecture.md # System architecture
├── design-systems/
│ └── financial/ # Design tokens, components, prototypes
├── src/
│ ├── backend/
│ │ ├── main.py # FastAPI app, lifespan, middleware
│ │ ├── config.py # Settings with JWT secret validation
│ │ ├── database.py # asyncpg connection pool
│ │ ├── cache.py # Redis cache layer
│ │ ├── storage.py # MinIO S3 storage
│ │ ├── celery_app.py # Celery configuration
│ │ ├── seed_data.py # Database seeding script
│ │ ├── routers/ # API route handlers (10 modules)
│ │ ├── schemas/ # Pydantic v2 request/response models
│ │ ├── models/ # SQLAlchemy/asyncpg models
│ │ ├── services/ # Business logic (auth, backtest, etc.)
│ │ ├── tasks/ # Celery background tasks
│ │ ├── Dockerfile
│ │ └── requirements.txt
│ └── frontend/
│ ├── src/
│ │ ├── app/ # Next.js App Router pages
│ │ ├── components/ # React components
│ │ ├── contexts/ # Auth context
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Utils, API client, query client
│ │ ├── store/ # Zustand stores
│ │ └── types/ # TypeScript type definitions
│ ├── Dockerfile
│ └── package.json
└── README.md
```
## Quick Start
### Prerequisites
- Docker & Docker Compose
- Node.js 20+ (for local frontend development)
- Python 3.12+ (for local backend development)
### Docker Compose (Recommended)
```bash
# 1. Clone and configure
cd invest-copilot
cp .env.example .env
# Edit .env with your API keys and secrets
# 2. Start all services
docker compose up -d
# 3. Seed the database (first time only)
docker compose exec backend python seed_data.py
# 4. Open
# Frontend: http://localhost:3000
# Backend API docs: http://localhost:8000/docs
# MinIO Console: http://localhost:9001
```
### Local Development
```bash
# Backend
cd src/backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# Set environment variables from .env
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
# Frontend
cd src/frontend
npm install
npm run dev
# Celery worker (optional, for background tasks)
celery -A celery_app worker --loglevel=info --concurrency=4
```
## API Endpoints
| Method | Path | Description | Auth |
|--------|------|-------------|------|
| POST | `/api/v1/auth/register` | Register new user | ❌ |
| POST | `/api/v1/auth/login` | Login (returns JWT) | ❌ |
| GET | `/api/v1/auth/me` | Get current user | ✅ |
| POST | `/api/v1/auth/logout` | Logout | ✅ |
| GET | `/api/v1/dashboard` | Dashboard summary | ✅ |
| GET | `/api/v1/stocks` | List/search stocks | ✅ |
| GET | `/api/v1/stocks/{ticker}` | Stock profile | ✅ |
| GET | `/api/v1/stocks/{ticker}/prices` | Price history | ✅ |
| GET | `/api/v1/stocks/{ticker}/peers` | Peer comparison | ✅ |
| GET | `/api/v1/stocks/{ticker}/sentiment` | Sentiment signals | ✅ |
| GET | `/api/v1/stocks/{ticker}/filings` | SEC filings | ✅ |
| GET | `/api/v1/stocks/{ticker}/insider_trades` | Insider trades | ✅ |
| POST | `/api/v1/stocks/search` | Search stocks | ✅ |
| GET | `/api/v1/watchlists` | List watchlists | ✅ |
| POST | `/api/v1/watchlists` | Create watchlist | ✅ |
| GET | `/api/v1/watchlists/{id}` | Watchlist details | ✅ |
| POST | `/api/v1/watchlists/{id}/items` | Add item | ✅ |
| DELETE | `/api/v1/watchlists/{id}/items/{ticker}` | Remove item | ✅ |
| GET | `/api/v1/screeners` | List screeners | ✅ |
| POST | `/api/v1/screeners` | Create screener | ✅ |
| POST | `/api/v1/screeners/run` | Run screener | ✅ |
| GET | `/api/v1/strategies` | List strategies | ✅ |
| POST | `/api/v1/strategies` | Create strategy | ✅ |
| POST | `/api/v1/strategies/{id}/backtest` | Run backtest | ✅ |
| GET | `/api/v1/alerts` | List alerts | ✅ |
| POST | `/api/v1/alerts` | Create alert | ✅ |
| POST | `/api/v1/alerts/check-all` | Check all alerts | ✅ |
| POST | `/api/v1/sync/ticker/{ticker}` | Sync ticker data | ✅ |
| POST | `/api/v1/sync/ticker/{ticker}/enrich` | Enrich ticker | ✅ |
| GET | `/api/v1/sync/status` | Data source status | ✅ |
| POST | `/api/v1/sync/sector-etfs` | Seed sector ETFs | ✅ |
| GET | `/api/v1/sectors` | List sectors | ✅ |
| GET | `/api/v1/events` | SSE alert stream | ✅ |
| GET | `/api/v1/stream/prices` | SSE price stream | ✅ |
| GET | `/api/v1/stream/watchlist` | SSE watchlist stream | ✅ |
## Security
- **JWT Authentication**: HS256 tokens with configurable secret key (required at startup)
- **Rate Limiting**: Sliding window limiter (public: 100/min, auth: 5/min, heavy: 10/min)
- **Ownership Verification**: All mutations verify resource ownership via `_require_*_owner` helpers
- **SQL Safety**: All queries use parameterized placeholders ($1, $2, ...)
- **Password Hashing**: bcrypt with auto-generated salt
## Phases
| Phase | Status | Description |
|-------|--------|-------------|
| **0 — Design** | ✅ Complete | Design system, prototypes, data research |
| **1 — Foundation** | ✅ Complete | Database, API scaffold, auth, Docker, rate limiting, JWT validation |
| **2 — Data Pipeline** | 🚧 In Progress | API integrations, Celery workers, seed data, backtesting engine |
| **3 — Core Features** | ✅ Complete | Stock search, watchlists, strategies, screeners, alerts |
| **4 — Strategies & Alerts** | ✅ Complete | Strategy builder, alert engine, backtesting |
| **5 — Sector Rotation** | 🚧 In Progress | ETF monitoring, rotation detection |
| **6 — Screener** | ✅ Complete | Custom screeners with operator support |
| **7 — Polish & PWA** | 📋 Planned | Offline, push notifications, install prompts |
## Data Sources
See `docs/data-edge-research.md` for the complete analysis of data sources, APIs, and the "edge" hierarchy.
### MVP Data (Free Tier)
- **Prices/Fundamentals:** yfinance / Finnhub Free
- **Macro:** FRED (free, official government)
- **SEC Filings:** SEC EDGAR API (free, official)
- **Options:** Polygon.io Free tier
- **Sentiment:** Alpha Vantage Free
### Scale Data (Paid)
- **Institutional:** Dataroma, InsiderMonkey
- **Consumer:** YipitData, Earnest Research
- **Supply Chain:** Project44
- **Web Traffic:** SimilarWeb
## Design
All design tokens, components, and prototypes live in `design-systems/financial/`.
The design system follows a dark-first, mobile-first approach with:
- OKLch color space for perceptual uniformity
- Monospace typography for all numeric data
- Progressive disclosure (summary → drill-down)
- Color semantics: green=positive, red=negative, blue=accent
Open the HTML files in a browser to explore the prototypes.