<feed xmlns='http://www.w3.org/2005/Atom'>
<title>prism.git/services, branch master</title>
<subtitle>Webapp for stock analysis</subtitle>
<id>https://git.tylerhoang.xyz/prism.git/atom?h=master</id>
<link rel='self' href='https://git.tylerhoang.xyz/prism.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/'/>
<updated>2026-04-04T02:01:53Z</updated>
<entry>
<title>Show uncapped historical FCF growth</title>
<updated>2026-04-04T02:01:53Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-04-04T02:01:53Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=ba3fa0002205e6f15dbcd59b50d81715410547d3'/>
<id>urn:sha1:ba3fa0002205e6f15dbcd59b50d81715410547d3</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Improve DCF model accuracy</title>
<updated>2026-04-03T01:54:01Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-04-03T01:54:01Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=ccfbce79a66b2d8aa136fddbed7c61c7436f2733'/>
<id>urn:sha1:ccfbce79a66b2d8aa136fddbed7c61c7436f2733</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Improve valuation model clarity</title>
<updated>2026-04-03T01:11:18Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-04-03T01:11:18Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=0c146fec412fb99153fbb32fa90f0211aa0c8b32'/>
<id>urn:sha1:0c146fec412fb99153fbb32fa90f0211aa0c8b32</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Refactor valuation models tab</title>
<updated>2026-04-02T07:10:06Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-04-02T07:10:06Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=7a267bc3c28bc7a77e84eaa400667a7b4c0d5adf'/>
<id>urn:sha1:7a267bc3c28bc7a77e84eaa400667a7b4c0d5adf</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Harden valuation edge cases</title>
<updated>2026-04-02T06:32:01Z</updated>
<author>
<name>Openclaw</name>
<email>openclaw@mail.tylerhoang.xyz</email>
</author>
<published>2026-04-02T06:32:01Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=3806bd3b4d69917f3f5312acfa57bc4ee2886a49'/>
<id>urn:sha1:3806bd3b4d69917f3f5312acfa57bc4ee2886a49</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fix EBITDA consistency and minority interest bug in valuation</title>
<updated>2026-03-31T07:24:15Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-03-31T07:24:15Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=c5575a1760a88e486e354e56be68bdb75d053db6'/>
<id>urn:sha1:c5575a1760a88e486e354e56be68bdb75d053db6</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Unify valuation calculations across Prism</title>
<updated>2026-03-31T02:36:42Z</updated>
<author>
<name>Openclaw</name>
<email>openclaw@mail.tylerhoang.xyz</email>
</author>
<published>2026-03-31T02:36:42Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=2de6ae37b902e3632ea62b904164552538501ec3'/>
<id>urn:sha1:2de6ae37b902e3632ea62b904164552538501ec3</id>
<content type='text'>
- 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
</content>
</entry>
<entry>
<title>Compute all Key Ratios from raw statements, eliminating FMP ratio calls</title>
<updated>2026-03-31T02:09:45Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-03-31T02:09:45Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=92b7eae36866c3424f44b4b6a653833a65df91a9'/>
<id>urn:sha1:92b7eae36866c3424f44b4b6a653833a65df91a9</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix EV/EBITDA using income statement EBITDA instead of info dict</title>
<updated>2026-03-31T01:54:56Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-03-31T01:54:56Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=712bbf675cfcb32535d8c494505e566efa347feb'/>
<id>urn:sha1:712bbf675cfcb32535d8c494505e566efa347feb</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add score card, 52W range bar, short interest, options tab, CSV exports</title>
<updated>2026-03-31T01:19:50Z</updated>
<author>
<name>Tyler</name>
<email>tyler@tylerhoang.xyz</email>
</author>
<published>2026-03-31T01:19:50Z</published>
<link rel='alternate' type='text/html' href='https://git.tylerhoang.xyz/prism.git/commit/?id=f6b21398b8d9d13fa707955852f4e73158d7db19'/>
<id>urn:sha1:f6b21398b8d9d13fa707955852f4e73158d7db19</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
