Files

12 KiB

Invest Copilot — Architecture

Tech Stack

Frontend (SPA + Mobile-First PWA)

Layer Choice Why
Framework Next.js 15 (App Router) SSR for SEO, API routes for BFF, mature ecosystem
Language TypeScript 5 Type safety across all layers
Styling TailwindCSS + Radix UI Design system foundation, accessible primitives
State Zustand Lightweight, no boilerplate, perfect for PWA
Charts Lightweight Charts (TradingView) Professional-grade financial charts
Real-time Server-Sent Events (SSE) Push alerts to browser, simpler than WebSockets
PWA next-pwa Offline support, installable, service worker
AI/LLM OpenAI GPT-4o / Claude Sonnet Context-aware copilot, SEC filing analysis

Backend (Node.js + Python Microservices)

Service Language Why
API Gateway / BFF Node.js + Fastify TypeScript, fast, handles auth + routing
Data Pipeline Python 3.12+ yfinance, SEC EDGAR, sentiment analysis, ML
Strategy Engine Python 3.12+ Backtesting, signal generation, portfolio analytics
Alert Agent Python + APScheduler Scheduled monitoring, notification dispatch
Cache Redis Session store, rate limiting, hot data cache

Data Layer

Source Storage Purpose
Market data (OHLCV) PostgreSQL + TimescaleDB Time-series price data, efficient queries
SEC filings PostgreSQL (JSONB) Structured filing data, full-text search
Alternative data PostgreSQL Sentiment scores, insider trades, institutional data
User data PostgreSQL Watchlists, strategies, screeners, preferences
Cache/realtime Redis Session state, rate limiting, real-time alerts
File storage S3-compatible (MinIO) SEC filing PDFs, backtest reports, exports

Infrastructure

Component Choice Why
Container Docker Compose (dev), K8s (prod) Dev simplicity, prod scalability
CI/CD GitHub Actions Free, mature, integrates with everything
Monitoring Prometheus + Grafana Metrics, alerting, dashboards
Logging Loki (via Docker Compose) Structured logs, queryable
Domain Self-hosted Full control, no vendor lock-in

Architecture Diagram (Text)

┌─────────────────────────────────────────────────────────────────┐
│                        CLIENT LAYER                              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────────┐ │
│  │  Web App │  │  Mobile  │  │  Tablet  │  │  Desktop (PWA)  │ │
│  │  (PWA)   │  │  (PWA)   │  │  (PWA)   │  │   (installable) │ │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────────┬────────┘ │
│       │              │              │                  │         │
│       └──────────────┴──────────────┴──────────────────┘         │
│                            │ HTTPS / SSE                         │
├──────────────────────────────────────────────────────────────────┤
│                     API GATEWAY (Node.js + Fastify)              │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────────┐ │
│  │  Auth    │  │  Routing │  │  Rate    │  │  Request        │ │
│  │  (JWT)   │  │          │  │  Limit   │  │  Validation     │ │
│  └──────────┘  └──────────┘  └──────────┘  └─────────────────┘ │
├──────────────────────────────────────────────────────────────────┤
│                     SERVICE LAYER                                 │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────────────────┐  │
│  │  Stock       │  │  Strategy    │  │  Watchlist & Alert    │  │
│  │  Service     │  │  Engine      │  │  Agent Service        │  │
│  │  (Node.js)   │  │  (Python)    │  │  (Python + APSched)   │  │
│  └──────┬───────┘  └──────┬───────┘  └──────────┬────────────┘  │
│         │                  │                      │               │
│  ┌──────┴──────────────────┴──────────────────────┴──────────┐  │
│  │                     DATA ACCESS LAYER                       │  │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌───────────┐  │  │
│  │  │PostgreSQL│  │ Timescale│  │  Redis   │  │  MinIO    │  │  │
│  │  │(user)    │  │ (prices) │  │ (cache)  │  │ (files)   │  │  │
│  │  └──────────┘  └──────────┘  └──────────┘  └───────────┘  │  │
│  └───────────────────────────────────────────────────────────┘  │
├──────────────────────────────────────────────────────────────────┤
│                     DATA SOURCE LAYER                             │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────────┐  │
│  │  Massive │  │ Finnhub  │  │  SEC     │  │  Alternative    │  │
│  │  /       │  │          │  │  EDGAR   │  │  Data Sources   │  │
│  │  Polygon │  │  (free)  │  │          │  │  (Reddit,       │  │
│  └──────────┘  └──────────┘  └──────────┘  │   GDELT,        │  │
│                                            │   yfinance)     │  │
│                                            └─────────────────┘  │
├──────────────────────────────────────────────────────────────────┤
│                     AI / LAYER                                    │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────────┐  │
│  │  SEC     │  │  Sentiment│ │  Copilot │  │  Sector         │  │
│  │  Filing  │  │  Analysis │ │  Chat    │  │  Rotation       │  │
│  │  Parser  │  │  (NLP)    │  │  Agent  │  │  Detection      │  │
│  └──────────┘  └──────────┘  └──────────┘  └─────────────────┘  │
└──────────────────────────────────────────────────────────────────┘

Data Flow

Stock Search & Profile

User searches "AAPL"
  → API Gateway validates request
  → Stock Service checks Redis cache (TTL: 5 min)
  → If miss: fetches from Massive/Polygon API
  → Enriches with:
      - SEC filings (last 4 quarters)
      - Insider trades (last 90 days)
      - Institutional ownership
      - News + sentiment (Finnhub)
      - Peer group relative strength
  → Returns to frontend
  → AI Copilot generates summary analysis

Watchlist Monitoring

User creates watchlist "AI Winners" with 10 stocks
  → Alert Agent subscribes to each ticker
  → Every 5 minutes:
      - Check price vs strategy triggers
      - Scan for new SEC filings (8-K, 4)
      - Check news sentiment shift
      - Check options unusual activity
  → If trigger fires:
      - Generate alert message via AI
      - Push via SSE to frontend
      - Store alert in DB
      - Optional: email/push notification

Sector Rotation Detection

Every 24 hours at 6:00 AM UTC:
  → Fetch OHLCV for 11 sector ETFs
  → Compute: 20-day, 50-day, 200-day momentum
  → Rank sectors by relative strength vs SPY
  → Compare to previous day's ranking
  → If rank change ≥ 3: rotation detected
  → Generate analysis:
      - What sector entered/rotated out
      - Macro context (yield curve, inflation)
      - Recommended ETF allocations
  → Store rotation event
  → Push to users with active sector rotation alerts

Migration Strategy (Design → TDD → DDD)

Phase 1: Design-Driven (Weeks 1-3)

  • Use Open Design to generate UI mockups and visual directions
  • Build frontend shell with static data
  • Define API contracts (OpenAPI/Swagger)
  • Set up CI/CD pipeline
  • Deliverable: Clickable prototype, API spec, deployed pipeline

Phase 2: Backend Foundation (Weeks 4-6)

  • Implement data ingestion pipeline (Python)
  • Build PostgreSQL + TimescaleDB schema
  • Implement core API (Node.js/Fastify)
  • Set up Redis cache layer
  • Deliverable: Working data pipeline, REST API with real data

Phase 3: TDD Frontend (Weeks 7-10)

  • Implement stock search + profile (with tests)
  • Implement watchlist management (with tests)
  • Implement charting (with tests)
  • Implement strategy engine (with tests)
  • Deliverable: Functional SPA with 80%+ test coverage

Phase 4: DDD Domain Layer (Weeks 11-14)

  • Define domain models (Stock, Watchlist, Strategy, Screener)
  • Implement aggregate roots and bounded contexts
  • Implement domain events (RotationDetected, AlertTriggered)
  • Implement CQRS for read/write separation
  • Deliverable: Clean architecture with DDD primitives

Phase 5: AI Integration (Weeks 15-18)

  • SEC filing parser + NLP analysis
  • Copilot chat interface
  • Sentiment analysis pipeline
  • Alternative data fusion
  • Deliverable: AI-powered analysis on every stock page

Phase 6: Alert Engine (Weeks 19-22)

  • Watchlist monitoring agents
  • Strategy trigger evaluation
  • SSE notification system
  • Email/push notification dispatch
  • Deliverable: Real-time intelligent alerts

Phase 7: Polish & Scale (Weeks 23-26)

  • Performance optimization
  • Load testing
  • Security hardening
  • UX polish
  • Mobile PWA optimization
  • Deliverable: Production-ready invest-copilot