aboutsummaryrefslogtreecommitdiff
path: root/readme
diff options
context:
space:
mode:
Diffstat (limited to 'readme')
-rw-r--r--readme210
1 files changed, 0 insertions, 210 deletions
diff --git a/readme b/readme
deleted file mode 100644
index cfeedf3..0000000
--- a/readme
+++ /dev/null
@@ -1,210 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="UTF-8">
-<style>
- * { box-sizing: border-box; margin: 0; padding: 0; }
- body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
- max-width: 900px;
- line-height: 1.7;
- color: #333;
- background: #fafafa;
- padding: 2rem;
- margin: 0 auto;
- }
- h1, h2, h3, h4 { color: #0f2346; margin-top: 1.5em; margin-bottom: 0.5em; font-weight: 700; }
- h1 { font-size: 2.2em; margin-top: 0; }
- h2 { font-size: 1.6em; border-bottom: 2px solid #c9a84c; padding-bottom: 0.5em; }
- h3 { font-size: 1.2em; color: #1a3560; }
- p { margin-bottom: 1em; }
- ul, ol { margin-left: 1.5em; margin-bottom: 1em; }
- li { margin-bottom: 0.5em; }
- hr { border: none; border-top: 1px solid #ddd; margin: 2em 0; }
- a { color: #234a8a; text-decoration: none; font-weight: 500; }
- a:hover { text-decoration: underline; }
- blockquote {
- border-left: 4px solid #c9a84c;
- padding-left: 1em;
- margin-left: 0;
- color: #666;
- font-style: italic;
- background: #f5f5f5;
- padding: 0.75em 1em;
- }
- code {
- font-family: 'Courier New', Courier, monospace;
- background: #f5f5f5;
- padding: 0.2em 0.4em;
- border-radius: 3px;
- color: #d73a49;
- font-size: 0.9em;
- }
- pre {
- background: #1e1e1e;
- color: #e0e0e0;
- padding: 1em;
- border-radius: 5px;
- overflow-x: auto;
- margin-bottom: 1em;
- border-left: 4px solid #c9a84c;
- }
- pre code {
- background: none;
- padding: 0;
- color: #e0e0e0;
- font-size: 0.95em;
- }
- table {
- border-collapse: collapse;
- width: 100%;
- margin-bottom: 1.5em;
- border: 1px solid #ddd;
- }
- th, td {
- border: 1px solid #ddd;
- padding: 0.75em;
- text-align: left;
- }
- th {
- background: #0f2346;
- color: #fff;
- font-weight: 600;
- }
- tr:nth-child(even) { background: #f9f9f9; }
- tr:hover { background: #f0f0f0; }
-</style>
-</head>
-<body>
-<h1>🔷 Prism</h1>
-<p>A local financial analysis dashboard. Enter any stock ticker to get a formatted view of financial statements, valuation metrics, a DCF model, and a news feed — all in your browser.</p>
-<hr />
-<h2>Features</h2>
-<ul>
-<li><strong>Market Bar</strong> — Live S&amp;P 500, NASDAQ, DOW, and VIX at the top of every page</li>
-<li><strong>Overview</strong> — Price chart (1M / 3M / 6M / 1Y / 5Y), key stats (market cap, P/E, 52W range, beta)</li>
-<li><strong>Financials</strong> — Annual and quarterly Income Statement, Balance Sheet, and Cash Flow Statement with year-over-year % change columns</li>
-<li><strong>Valuation</strong> — Key ratios grid (P/E, EV/EBITDA, margins, ROE, etc.), DCF model with adjustable WACC/growth/years, EV/EBITDA implied price, comparable companies table, analyst price targets, and earnings history (EPS actual vs. estimate)</li>
-<li><strong>News</strong> — Recent articles with heuristic Bullish / Bearish / Neutral tags and a 7-day sentiment summary</li>
-</ul>
-<hr />
-<h2>Setup</h2>
-<h3>1. Clone / navigate to the project</h3>
-<pre><code class="language-bash">cd ~/Work/prism
-</code></pre>
-<h3>2. Activate the virtual environment</h3>
-<pre><code class="language-bash">source .venv/bin/activate
-</code></pre>
-<h3>3. Add API keys</h3>
-<pre><code class="language-bash">cp .env.example .env
-</code></pre>
-<p>Open <code>.env</code> and fill in your keys:</p>
-<pre><code>FMP_API_KEY=your_key_here
-FINNHUB_API_KEY=your_key_here
-</code></pre>
-<p>Both are <strong>free</strong>:
-- <strong>FMP</strong> (Financial Modeling Prep) — <a href="https://financialmodelingprep.com/developer/docs">financialmodelingprep.com</a> — 250 requests/day
-- <strong>Finnhub</strong> — <a href="https://finnhub.io">finnhub.io</a> — 60 requests/minute</p>
-<blockquote>
-<p><strong>No keys?</strong> The app still works. Price data, financials, and market indices are sourced from <code>yfinance</code> (no key required). Ratios, comps, and news won't load until keys are added.</p>
-</blockquote>
-<h3>4. Run the app</h3>
-<pre><code class="language-bash">streamlit run app.py
-</code></pre>
-<p>Opens at <code>http://localhost:8501</code></p>
-<hr />
-<h2>Daily Usage</h2>
-<pre><code class="language-bash">cd ~/Work/prism
-source .venv/bin/activate
-streamlit run app.py
-</code></pre>
-<hr />
-<h2>Project Structure</h2>
-<pre><code>prism/
-├── app.py # Entry point
-├── requirements.txt
-├── .env # Your API keys (not committed)
-├── .env.example # Key template
-├── .streamlit/
-│ └── config.toml # Dark theme + layout settings
-├── services/
-│ ├── data_service.py # yfinance — price, financials, indices
-│ ├── fmp_service.py # FMP API — ratios, peers
-│ ├── news_service.py # Finnhub — news + sentiment
-│ └── valuation_service.py # DCF engine (Gordon Growth Model)
-├── components/
-│ ├── market_bar.py # Index metrics row
-│ ├── overview.py # Company header + price chart
-│ ├── financials.py # Statement tables
-│ ├── valuation.py # Ratios, DCF, comps
-│ └── news.py # News feed
-└── utils/
- └── formatters.py # Number formatting helpers
-</code></pre>
-<hr />
-<h2>DCF Model Notes</h2>
-<p>The DCF model uses historical <strong>Free Cash Flow</strong> from yfinance, computes a capped median growth rate from valid positive-FCF periods, and then projects forward using your chosen assumptions:</p>
-<table>
-<thead>
-<tr>
-<th>Input</th>
-<th>Default</th>
-<th>Range</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>WACC</td>
-<td>10%</td>
-<td>5–20%</td>
-</tr>
-<tr>
-<td>Terminal Growth Rate</td>
-<td>2.5%</td>
-<td>0.5–5%</td>
-</tr>
-<tr>
-<td>Projection Years</td>
-<td>5</td>
-<td>3–10</td>
-</tr>
-<tr>
-<td>FCF Growth Rate</td>
-<td>Historical median</td>
-<td>-20–30%</td>
-</tr>
-</tbody>
-</table>
-<p>The model uses the <strong>Gordon Growth Model</strong> for terminal value. It first estimates <strong>enterprise value</strong>, then bridges to <strong>equity value</strong> using debt and cash before calculating value per share. Terminal growth must remain below WACC. The FCF growth slider defaults to the historical median but can be freely overridden.</p>
-<p>The <strong>EV/EBITDA</strong> tab derives an implied price by applying a target multiple to trailing EBITDA, subtracting net debt, and dividing by shares outstanding. The slider defaults to the company's current market multiple.</p>
-<hr />
-<h2>API Rate Limits</h2>
-<table>
-<thead>
-<tr>
-<th>Source</th>
-<th>Limit</th>
-<th>Used For</th>
-</tr>
-</thead>
-<tbody>
-<tr>
-<td>yfinance</td>
-<td>None</td>
-<td>Price, financials, indices</td>
-</tr>
-<tr>
-<td>FMP (free)</td>
-<td>250 req/day</td>
-<td>Ratios, comps, news</td>
-</tr>
-<tr>
-<td>Finnhub (free)</td>
-<td>60 req/min</td>
-<td>News, sentiment</td>
-</tr>
-</tbody>
-</table>
-<p>Data is cached in-memory per session to minimize API calls (financials: 1h, news: 10min, indices: 5min).</p>
-</body>
-</html> \ No newline at end of file