Full documentation covering all 10 pages, 5 valuation models, architecture diagram, API endpoints, tech stack, Terminal Noir design system, and project evolution from Streamlit to Next.js. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ATLAS TERMINAL
Personal Bloomberg Terminal — Institutional-Grade Financial Analysis for Everyone
What is ATLAS Terminal?
ATLAS Terminal is a full-stack financial analysis platform that brings institutional-grade equity research tools to a single, unified interface. It combines AI-driven qualitative analysis of SEC 10-K filings with quantitative valuation models, real-time market data, and portfolio management — all wrapped in a sleek, dark-themed terminal UI.
Design philosophy: LLM for text interpretation, Python for numbers. This eliminates hallucination risk on financial figures while delivering nuanced qualitative insights from SEC filings.
Pages & Features
📊 Overview
Company snapshot at a glance — current price, sector, industry, market cap, P/E ratio, beta, dividend yield, 52-week range, Altman Z-Score (safe/grey/distress zones), and DuPont decomposition (ROE → NPM × Asset Turnover × Equity Multiplier).
🔬 Research
AI-powered deep-dive analysis using Google Gemini. Ask natural-language questions about any company and receive structured financial insights with context from SEC filings, financial statements, and market data.
💰 Valuation — 5 Analytical Models
| Tab | Description |
|---|---|
| DCF Model | 2-stage discounted cash flow with smart defaults from CAPM/Beta. Adjustable WACC, terminal growth, and FCF growth sliders. Analyst consensus (target price, recommendation) displayed alongside. |
| Sensitivity | WACC × Terminal Growth Rate matrix table. Center cell highlighted to show base-case intrinsic value. Instantly see how assumptions shift fair value. |
| Monte Carlo | 5,000-simulation DCF with randomized inputs. Histogram visualization (red below / green above current price). Statistics: mean, median, P10/P90, probability of upside. |
| Tornado | Variable impact ranking chart. Shows which input assumption (WACC, growth rate, terminal growth, margins) has the largest effect on valuation — sorted by sensitivity range. |
| Reverse DCF | Solves for the implied growth rate the market is pricing in. Compares market-implied growth vs. your assumption and analyst consensus. Uses scipy's Brent root-finding method. |
📈 Technical Analysis
- Candlestick chart with volume histogram (TradingView Lightweight Charts)
- Period selector: 1MO, 3MO, 6MO, 1Y, 2Y
- RSI(14) with overbought/oversold classification
- MACD with signal line and histogram
- Bollinger Bands — %B, bandwidth, current position
- Moving Averages table — SMA/EMA 20/50/100/200 with ABOVE/BELOW signals
- Fibonacci retracement levels with "near current price" highlighting
- ATR (Average True Range) for volatility measurement
- ADX for trend strength detection
🌍 Financial Statements
Institutional-style financial data table with:
- Income Statement, Balance Sheet, Cash Flow tabs
- Up to 5 annual periods with proper date headers
- YoY Growth badges (green for positive, red for negative)
- Margin % rows (Gross Margin, Operating Margin, Net Margin)
- Row groups: Revenue, COGS, Gross Profit, SG&A, R&D, Operating Income, EBITDA, Net Income, EPS
- Pipe-separated multi-key lookup to handle both yfinance and yahooquery column naming conventions
📅 Earnings
- Next earnings date card with countdown
- EPS Beat/Miss visual history — green bars for beats, red for misses, with surprise percentage
- Revenue & Earnings estimates vs. actuals
- Quarterly breakdown cards
📰 News Feed
Split-view news aggregator:
- Left panel: Scrollable article list (40+ articles from Finviz & Google News) with source badges and timestamps
- Right panel: Article header bar + iframe embedding of original content
- "Open Original ↗" button for sites that block iframe embedding
- Ticker-specific filtering
💼 Portfolio
Position tracking with multi-currency support (USD, KRW, GBP, EUR, JPY, CNY). P&L calculation, FX-adjusted returns, and risk metrics including:
- VaR (Value at Risk)
- Sharpe Ratio & Sortino Ratio
- Maximum Drawdown
- Beta & Correlation to benchmark
📑 SEC Filings (EDGAR)
Inline 10-K filing viewer:
- Downloads and parses latest 10-K from SEC EDGAR
- 5 section tabs: Risk Factors (1A), MD&A (7), Financial Statements (8), Legal Proceedings (3), Controls & Procedures (9A)
- Intelligent content formatting — headers detected and styled, bullets indented, paragraphs separated
- Word count per section
- AI Summary button — sends section text to Gemini for key risk/trend extraction
- Section caching to avoid repeat downloads
⚙️ Settings
- Google Gemini API key configuration
- SEC EDGAR email for fair-access compliance
- Persistent storage via localStorage
Architecture
┌─────────────────────────────────────────────────────────────────┐
│ ATLAS TERMINAL │
├────────────────────────────┬────────────────────────────────────┤
│ Next.js 14 Frontend │ FastAPI Backend │
│ (Port 3000) │ (Port 8000) │
│ │ │
│ ┌──────────────────┐ │ ┌──────────────────────┐ │
│ │ App Router Pages │ │ │ 13 API Routers │ │
│ │ • Overview │────────▶ │ • /api/market │ │
│ │ • Research │ proxy │ • /api/financials │ │
│ │ • Valuation │ /api/* │ • /api/valuation │ │
│ │ • Technical │ │ │ • /api/technical │ │
│ │ • Markets │ │ │ • /api/earnings │ │
│ │ • Earnings │ │ │ • /api/edgar │ │
│ │ • News │ │ │ • /api/news │ │
│ │ • Portfolio │ │ │ • /api/portfolio │ │
│ │ • Filings │ │ │ • /api/insider │ │
│ │ • Settings │ │ │ • /api/analysis │ │
│ └──────────────────┘ │ │ • /api/crypto │ │
│ │ │ • /api/fx │ │
│ ┌──────────────────┐ │ │ • /api/estimates │ │
│ │ Components │ │ └──────────┬───────────┘ │
│ │ • Sidebar │ │ │ │
│ │ • Ticker Bar │ │ ┌──────────▼───────────┐ │
│ │ • Chat Panel │ │ │ 15 Service Modules │ │
│ │ • useTicker() │ │ │ • dcf_engine │ │
│ └──────────────────┘ │ │ • monte_carlo │ │
│ │ │ • sensitivity │ │
│ ┌──────────────────┐ │ │ • risk_metrics │ │
│ │ Design System │ │ │ • technical_analysis│ │
│ │ Terminal Noir │ │ │ • sec_parser │ │
│ │ #0A0A0F bg │ │ │ • news_aggregator │ │
│ │ #00D4AA accent │ │ │ • gemini_service │ │
│ │ #FF4757 red │ │ │ • market_data │ │
│ └──────────────────┘ │ └──────────┬───────────┘ │
│ │ │ │
│ │ ┌──────────▼───────────┐ │
│ │ │ Data Sources │ │
│ │ │ • yfinance │ │
│ │ │ • yahooquery │ │
│ │ │ • SEC EDGAR API │ │
│ │ │ • Google Gemini │ │
│ │ │ • Finviz / RSS │ │
│ │ └──────────────────────┘ │
└────────────────────────────┴────────────────────────────────────┘
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | Next.js 14 (App Router), TypeScript, Tailwind CSS |
| Charts | TradingView Lightweight Charts (candlestick, volume) |
| Backend | Python 3.12+, FastAPI, Pydantic v2, Uvicorn |
| AI / LLM | Google Gemini 2.0 Flash (google-generativeai) |
| Financial Data | yfinance (primary), yahooquery (fallback) |
| Technical Indicators | ta library (RSI, MACD, Bollinger, Ichimoku, ADX) |
| Valuation Engine | NumPy (Monte Carlo), SciPy (Brent root-finding for Reverse DCF) |
| SEC Data | sec-edgar-downloader, EDGAR REST API, BeautifulSoup4 + lxml |
| Database | SQLite (local) / PostgreSQL (production) via asyncpg |
| News | Finviz scraping + Google News RSS via feedparser |
| Design System | Terminal Noir — custom dark theme (#0A0A0F, #00D4AA, #FF4757) |
Project Structure
atlas-terminal/
│
├── apps/web/ # Next.js 14 Frontend
│ ├── src/app/
│ │ ├── page.tsx # Overview (home)
│ │ ├── research/page.tsx # AI Research
│ │ ├── valuation/page.tsx # DCF + Sensitivity + Monte Carlo + Tornado + Reverse DCF
│ │ ├── technical/page.tsx # Technical Analysis (TradingView charts)
│ │ ├── markets/page.tsx # Financial Statements table
│ │ ├── earnings/page.tsx # Earnings history & calendar
│ │ ├── news/page.tsx # News feed (split-view)
│ │ ├── portfolio/page.tsx # Portfolio tracker
│ │ ├── filings/page.tsx # SEC EDGAR filing viewer
│ │ ├── settings/page.tsx # API keys configuration
│ │ ├── components/
│ │ │ ├── sidebar.tsx # Navigation sidebar
│ │ │ ├── ticker-bar.tsx # Live market indices bar
│ │ │ └── chat-panel.tsx # AI Copilot chat interface
│ │ └── lib/
│ │ ├── use-ticker.ts # Ticker state hook (localStorage + CustomEvent)
│ │ └── api.ts # API helper functions
│ ├── next.config.mjs # API proxy: /api/* → localhost:8000
│ ├── tailwind.config.ts # Terminal Noir color system
│ └── package.json
│
├── server/ # FastAPI Backend
│ ├── main.py # App entry + CORS + router mounting
│ ├── routers/ # 13 API route handlers
│ │ ├── market_data.py # Stock quotes, indices, overview
│ │ ├── financials.py # Income statement, balance sheet, cash flow
│ │ ├── valuation.py # DCF, sensitivity, Monte Carlo, tornado, reverse DCF
│ │ ├── technical.py # RSI, MACD, Bollinger, moving averages, Fibonacci
│ │ ├── earnings.py # EPS history, calendar, quarterly data
│ │ ├── insider.py # Insider transactions, institutional holders
│ │ ├── edgar.py # SEC 10-K section extraction
│ │ ├── analysis.py # Gemini AI analysis endpoints
│ │ ├── news.py # News aggregation
│ │ ├── portfolio.py # Position CRUD + risk metrics
│ │ ├── estimates.py # Analyst estimates
│ │ ├── crypto.py # Cryptocurrency prices
│ │ └── fx.py # FX rates and history
│ ├── services/ # 15 business logic modules
│ │ ├── dcf_engine.py # Excel-style DCF, 2-stage DCF, reverse DCF (scipy brentq)
│ │ ├── monte_carlo.py # Monte Carlo simulation (5000 runs, numpy)
│ │ ├── sensitivity.py # WACC × TG matrix, tornado data
│ │ ├── risk_metrics.py # VaR, Sharpe, Sortino, MDD, Beta, Correlation
│ │ ├── technical_analysis.py # All indicators via `ta` library
│ │ ├── sec_parser.py # SEC EDGAR download, HTML parse, section cache
│ │ ├── news_aggregator.py # Finviz + Google News RSS
│ │ ├── gemini_service.py # Gemini API wrapper
│ │ ├── gemini_analysis.py # Structured AI analysis prompts
│ │ ├── market_data.py # Market overview, sector data
│ │ ├── financial_metrics.py # DuPont, Altman Z, ratio calculations
│ │ └── ... # crypto, fx, screenshot OCR, text chunker
│ ├── models/ # Pydantic schemas
│ ├── db/ # SQLite + PostgreSQL repositories
│ ├── ai/ # LLM router, context builder
│ └── utils/ # safe_float, ticker utilities
│
├── tests/ # pytest test suite
├── supabase/migrations/ # Database schema
└── requirements.txt # Python dependencies
API Endpoints
| Prefix | Methods | Description |
|---|---|---|
/api/market |
GET | Stock quotes, company info, market overview, sector data |
/api/financials |
GET | Income statement, balance sheet, cash flow, highlights, ratios |
/api/valuation |
GET, POST | DCF defaults, sensitivity matrix, Monte Carlo, tornado, reverse DCF |
/api/technical |
GET | RSI, MACD, Bollinger, moving averages, Fibonacci, ATR, ADX |
/api/earnings |
GET | EPS history, earnings calendar, quarterly data |
/api/insider |
GET | Insider transactions, institutional holders |
/api/edgar |
GET | SEC 10-K section extraction, Item 7 MD&A, filing comparison |
/api/analysis |
POST | Gemini AI analysis (MD&A, risk factors, financial health) |
/api/estimates |
GET | Analyst consensus estimates |
/api/news |
GET | Financial news aggregation (Finviz + Google News) |
/api/portfolio |
GET, POST, DELETE | Position management, risk metrics |
/api/crypto |
GET | Cryptocurrency prices (BTC, ETH, SOL, etc.) |
/api/fx |
GET | FX rates and historical data |
/health |
GET | Liveness probe with DB status |
Full interactive API documentation available at http://localhost:8000/docs (Swagger UI).
Quick Start
Prerequisites
- Python 3.12+
- Node.js 18+
- Google Gemini API Key (for AI features)
- Email address for SEC EDGAR fair-access compliance
Installation & Launch
# Clone the repository
git clone https://github.com/shawnkim1997/All-in-one-Financial-Analysis.git
cd "All-in-one-Financial-Analysis/atlas-terminal"
# ── Backend ──
pip install -r requirements.txt
PYTHONPATH="." uvicorn server.main:app --port 8000
# ── Frontend (new terminal) ──
cd apps/web
npm install
npm run dev
Open http://localhost:3000 in your browser.
Configure your Gemini API Key and SEC EDGAR email in the Settings page, then search for any ticker (e.g., MSFT, AAPL, GOOGL) to explore.
Design System — Terminal Noir
ATLAS Terminal uses a custom dark theme inspired by professional trading terminals:
| Token | Value | Usage |
|---|---|---|
bg-primary |
#0A0A0F |
Main background |
bg-card |
#12121A |
Card surfaces |
bg-elevated |
#1A1A2E |
Hover states, elevated panels |
border |
#2A2A3E |
Borders and dividers |
accent-green |
#00D4AA |
Positive values, CTAs, active states |
accent-red |
#FF4757 |
Negative values, warnings |
accent-blue |
#4A9EFF |
Informational badges, links |
accent-yellow |
#FFD93D |
Caution, highlights |
text-primary |
#E8E8ED |
Primary text |
text-secondary |
#A0A0B0 |
Secondary text |
text-muted |
#6B6B80 |
Muted labels |
Evolution: Streamlit → Next.js + FastAPI
This project began as a Streamlit prototype (app.py, 3,909 lines) and has been fully migrated to a modern full-stack architecture:
| Aspect | Streamlit (v1-v3) | Next.js + FastAPI (v4) |
|---|---|---|
| Frontend | Streamlit widgets | Next.js 14 App Router + Tailwind |
| Backend | Embedded in Streamlit | Dedicated FastAPI with 13 routers |
| Charts | Plotly (Sankey, Radar) | TradingView Lightweight Charts |
| State | st.session_state |
React hooks + localStorage |
| Routing | Tab-based (7 tabs) | File-based (10 pages) |
| API | Monolithic | RESTful with OpenAPI docs |
| Caching | @st.cache_data |
SQLite/PostgreSQL persistence |
| Deployment | Single process | Frontend + Backend independently scalable |
The original Streamlit version remains functional at the project root (app.py) for reference.
Technical Highlights
Hybrid AI Architecture
Gemini handles text interpretation only (MD&A analysis, risk factor extraction, industry outlook). All financial figures come from yfinance/yahooquery — zero hallucination risk on numbers.
Multi-Source Data Resilience
Primary source (yfinance) with automatic yahooquery fallback. Pipe-separated multi-key column lookups handle naming differences between providers ("TotalRevenue|Total Revenue|Revenue").
Quantitative Valuation Suite
Five interconnected valuation models — DCF serves as the base, Sensitivity shows assumption impact, Monte Carlo quantifies uncertainty, Tornado ranks variable importance, and Reverse DCF reveals market-implied expectations.
SEC EDGAR Integration
Full pipeline: sec-edgar-downloader → HTML parsing with BeautifulSoup → section extraction (Items 1A, 3, 7, 8, 9A) → local caching → AI summarization via Gemini.
Requirements
See atlas-terminal/requirements.txt for the full Python dependency list. Key packages:
fastapi,uvicorn— Web frameworkyfinance,yahooquery— Financial datagoogle-generativeai— Gemini AIsec-edgar-downloader,beautifulsoup4,lxml— SEC filing parsingta— Technical analysis indicatorsnumpy,scipy— Monte Carlo simulation, optimizationpandas— Data manipulation
Frontend: next, react, tailwindcss, lightweight-charts
License & Disclaimer
This project is built for learning, research, and portfolio demonstration purposes. Nothing in this application constitutes investment advice. Comply with SEC EDGAR policy when accessing SEC data, and with Google's terms of service for the Gemini API.
Built with ☕ and late nights — @shawnkim1997