aboutsummaryrefslogtreecommitdiff
path: root/components
AgeCommit message (Collapse)Author
2026-05-15Fix peer comparison track slider visual issuesTyler
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-15Redesigned valuation tabsTyler
2026-05-14Completely refreshed Key Ratios, Historical Ratios, and DCF/MultiplesTyler
tab.
2026-05-14Move DCF sliders into left rail of canvas iframeTyler
The sliders live inside the canvas iframe (keeping live JS behavior) but are now in a narrow left rail column — the same visual layout as before the live-DCF refactor. The canvas uses a 272px + 1fr grid: left aside has the header, four range inputs, and the filings panel; right div has all output sections unchanged. Removes the horizontal va-controls bar added in the previous commit. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14Make DCF sliders live — no page reruns on dragTyler
Move all four DCF assumptions (WACC, TG, horizon, FCF growth) from st.slider widgets into the canvas iframe as native range inputs. A JavaScript runDCF() engine recomputes the full projection in the browser on every drag event, updating the verdict, bar chart (Plotly.react), cash-flow table, bridge, recon strip, and cross-check cell in place without a Streamlit round-trip. Python still runs run_dcf() once on page load (using session-state defaults) to populate dcf_intrinsic for the Multiples cross-check. The Recompute button in the rail clears API caches and reruns when fresh filing data is needed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13Add Multiples view; fix Recompute button text colorTyler
- Collapse model picker from 4 tabs → 2: DCF and Multiples, persisted in session_state["models_view"] - New Multiples view: summary band, interactive comparison grid (8 math rows × 3 methods), sensitivity strip, DCF cross-check, footer - In-canvas sliders with sector marker + typical-band shading; JS recomputes all derived values live without a Streamlit rerun - Sector medians computed from peer ratios via FMP; falls back to reasonable defaults when peer data is unavailable - DCF intrinsic stored in session_state["dcf_intrinsic"] so the cross-check on the Multiples tab reads the live DCF value - P/Book applicability shows ◐ + warning color for asset-light companies instead of the solid ● used for strong-fit methods - Fix Recompute button text: target inner <p>/<span> with color: var(--brass-ink) to override Streamlit's fg-2 default Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13Redesign DCF tab — inspector rail layout with HTML canvasTyler
Replaces the flat column layout with a two-column inspector design: left rail holds four st.slider inputs + "From the filings" reference panel + Reset/Recompute actions; right canvas renders verdict hero, projection card (Plotly.js bar chart + cash-flow table), EV bridge, per-share recon, and cross-check via a single components.v1.html block. Also fixes primary button text color app-wide by targeting the modern Streamlit selector (stBaseButton-primary) alongside the legacy one. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-13Apply Prism design system — brass/ink palette, EB Garamond + IBM Plex ↵Tyler
typography Implements the design kit: champagne brass accent (#C2AA7A), deep midnight backgrounds, EB Garamond italic headings, IBM Plex Sans/Mono body and numbers, terminal-density KPI cards, restyled sidebar brand mark, flat pill tabs, and a global Plotly theme so all charts inherit the dark palette automatically. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-03Make valuation models collapsibleTyler
2026-04-03Always show available P/B modelTyler
2026-04-03Show uncapped historical FCF growthTyler
2026-04-02Improve DCF model accuracyTyler
2026-04-02Fix valuation summary formattingTyler
2026-04-02Improve valuation model clarityTyler
2026-04-02Refactor valuation models tabTyler
2026-04-01Harden valuation edge casesOpenclaw
2026-03-31Add relative performance chart and refine top moversTyler
2026-03-31Add top movers section (gainers, losers, most active)Openclaw
2026-03-31Fix EBITDA consistency and minority interest bug in valuationTyler
- Use TTM EBITDA (from compute_ttm_ratios) as the single canonical source for both Key Ratios and DCF EV/EBITDA — eliminates disagreement between tabs - Remove "Total Equity Gross Minority Interest" from minority_interest fallback in get_balance_sheet_bridge_items; that yfinance row is total equity (not just minority portion) and would have massively over-deducted from DCF equity value Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Organize financial statements into grouped viewsOpenclaw
- add Organized/Raw toggle for income statement, balance sheet, and cash flow - group line items into expandable sections for easier navigation - add Prism Net Debt row to annual balance sheet using valuation bridge logic - keep full raw statement tables and CSV download support
2026-03-30Unify valuation calculations across PrismOpenclaw
- compute EV consistently as market cap + debt - cash - derive DCF/EV bridge inputs from balance-sheet rows - centralize latest price, shares outstanding, and computed market cap helpers - relabel negative net debt as net cash in valuation UI - self-compute historical ratios/key metrics instead of relying on vendor ratios - guard against nonsensical historical EV/EBITDA values - add methodology/source notes in DCF tab
2026-03-30Fix EV/EBITDA valuation tooltip using computed multiple instead of info dictTyler
The slider tooltip still read info["enterpriseToEbitda"] (the bad yfinance pre-computed value showing 4998x for DDOG). Now computed as enterpriseValue / income statement EBITDA, consistent with the Key Ratios tab fix. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Compute all Key Ratios from raw statements, eliminating FMP ratio callsTyler
Added compute_ttm_ratios() which derives all 16 TTM ratios directly from yfinance quarterly income statements, balance sheets, and cash flow: Valuation: P/E, P/S, P/B, EV/EBITDA, EV/Revenue Profitability: Gross/Operating/Net Margin, ROE, ROA, ROIC Leverage: D/E, Current Ratio, Quick Ratio, Interest Coverage Dividends: Yield, Payout Ratio get_key_ratios() no longer calls FMP's /ratios-ttm or /key-metrics-ttm endpoints, saving ~2 FMP API calls per ticker load (including each Comps peer). Forward P/E still comes from yfinance info dict (analyst estimate). This also fixes EV/EBITDA for all tickers (DDOG was 4998x from FMP/yfinance pre-computed values, now correctly 194x from income statement EBITDA). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Always compute EV/EBITDA from income stmt, never pre-computed multiplesTyler
FMP and yfinance both return the same bad EV/EBITDA value (4998x for DDOG) because their pre-computed multiples use a miscalculated EBITDA. Removed the FMP preference fallback — EV/EBITDA is now always computed directly as enterpriseValue / get_ebitda_from_income_stmt(). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Fix EV/EBITDA using income statement EBITDA instead of info dictTyler
yfinance's info["ebitda"] is a miscalculated TTM value for many tickers (e.g. DDOG shows $7.5M when the correct TTM EBITDA is $193.8M). Added get_ebitda_from_income_stmt() which reads directly from t.income_stmt, matching the annual and quarterly figures. Key Ratios and DCF EV/EBITDA valuation now both use this source, with FMP as the preferred override. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Fix inverse color coding across all three financial statementsTyler
- Corrected existing labels that didn't match yfinance output (e.g. 'research development' → 'research and development', 'income tax expense' → 'tax provision', 'selling general administrative' → 'selling general and administration') - Added balance sheet debt/liability rows: net debt, total debt, long/current debt, capital lease obligations, all liability subtotals, payables - Added cash flow rows: debt issuance (increase = bad), equity dilution (issuance of capital stock = bad), taxes/interest paid (more = bad), buybacks (repurchase of capital stock = inverse so more buybacks = green) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Add score card, 52W range bar, short interest, options tab, CSV exportsTyler
Overview: - Score card: green/yellow/red signals for valuation, growth, profitability, leverage, momentum (vs 52W high), and short interest - 52W high/low visual range bar with current price marker and % context - Short interest metrics row: % of float, days to cover, shares short vs prior month - Replaced static 52W High/Low metrics with volume and avg volume Options tab (new): - Expiry selector across all available expirations - Put/call ratio by volume and open interest with bullish/bearish label - IV smile chart (calls + puts) with ATM marker - Open interest by strike (calls above, puts mirrored below axis) - Full chain table (calls/puts) in expandable section CSV exports: - Download button on each financial statement (income, balance, cash flow) - Download button on earnings history table Also fix top padding cut-off: block-container padding-top 1rem → 3.5rem Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-30Fix forward estimates field name mismatch with FMP stable APITyler
FMP stable /analyst-estimates returns revenueAvg, epsAvg, ebitdaAvg, etc. but the code was looking for estimatedRevenueAvg, estimatedEpsAvg, etc. Updated _build_estimates_table and the EPS chart to read both field name variants so the Forward Estimates tab now renders correctly. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29Add yfinance fallback for historical ratios when FMP quota is exhaustedTyler
FMP free tier caps at 250 req/day; hitting the limit caused the Historical Ratios tab to show an error. get_historical_ratios_yfinance now computes margins, ROE, ROA, D/E, P/E, P/B, P/S, and EV/EBITDA directly from yfinance income statements, balance sheets, and price history. FMP functions fall back to this automatically when they receive an empty response. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29Migrate insiders and filings from FMP to yfinanceTyler
FMP v3 insider-trading and sec_filings endpoints are legacy-gated. Switch to yfinance (t.insider_transactions, t.sec_filings) which provides the same data for free with no API key required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29Add historical ratios, forward estimates, insider transactions, SEC filingsOpenclaw
- services/fmp_service.py: add get_historical_ratios, get_historical_key_metrics, get_analyst_estimates, get_insider_transactions, get_sec_filings - components/valuation.py: add Historical Ratios and Forward Estimates subtabs - components/insiders.py: new — insider buy/sell summary, monthly chart, detail table - components/filings.py: new — SEC filings with type filter and direct links - app.py: wire in Insiders and Filings top-level tabs
2026-03-29Color code financial statement YoY columnsTyler
Green for improvement, red for decline. Cost/expense rows use inverse logic (decline = green). Value cells retain neutral styling. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29Migrate FMP ratios and improve comps fallbacksOpenclaw
2026-03-29Improve UX and disable DCF for financialsOpenclaw
2026-03-29Fix valuation methodology and documentationOpenclaw
2026-03-29Add EV/EBITDA valuation, analyst targets, earnings history, and FCF growth ↵Tyler
override - DCF model: user-adjustable FCF growth rate slider (defaults to historical median) - EV/EBITDA valuation section with target multiple slider and implied price - Analyst Targets tab: price target summary + recommendation breakdown chart - Earnings History tab: EPS actual vs estimate table and line chart with next earnings date Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28Initial commit — Prism financial analysis dashboardTyler
Streamlit app with market bar, price chart, financial statements, DCF valuation engine, comparable companies, and news feed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>