Near 52-wk lowEarnings ≤7dHas signalsFair value set
Ticker
Price
Earnings
% from High
% from Low
52-wk Range
P/E 2y avg
P/S 2y avg
ROIC
Analyst Target
Signals
Score ▾
Funds have no earnings, insiders, P/E, ROIC or reverse-DCF — so they get only the columns that apply, and are excluded from Expectations Score ranking.
Fund
Price
Day
% from High
% from Low
52-wk Range
Position sizingWeights come from config/watchlist.yaml — currently equal-weight across all 74. Edit them there, or use python -m src.watchlist weights.
🥧 Allocation by position top 15 + other
🏭 Allocation by sector
📐 Risk & concentration weighted by your position sizes
Asset type split
How these are computed —Beta from 5 years of daily returns vs. SPY. 30-day volatility is annualised stdev of daily returns.
Sharpe = (portfolio return − risk-free) ÷ total volatility; Sortino uses downside deviation only, so it
doesn't penalise upside — generally the more useful of the two for a long-only book. Risk-free rate is the 3-month
T-bill (DGS3MO) from FRED, free and keyless.
⚠️ Weighted volatility is Σ(wᵢ·σᵢ) and ignores correlation, so it overstates true portfolio
risk — meaning these Sharpe and Sortino figures are conservative and your real ratios are likely better.
The covariance-matrix fix is free (we already pull 5 years of history) and is the top v1.1 item.
⚠️ Concentration flags rules-based
⚠️ What this tab is — and what it is not
This applies Buffett's publicly stated, written criteria — durable moat, high returns on
capital, low leverage, consistent cash generation, circle of competence, margin of safety — as a
deterministic checklist. It is not a prediction of what
Buffett would do, not affiliated with Berkshire, and not investment advice. No LLM is involved, which keeps it free,
reproducible and auditable — and means it never invents a rationale.
Thresholds are editable in config/buffett.yaml.
📋 Portfolio-level observations rules-based
✅ Seven-test checklist click a row for the full breakdown
Ticker
Moat
ROIC
D/E
FCF margin
Stability
Circle
Margin of safety
Passes
🧠 Mauboussin Lens — on-demand, rendered when you open this tab
Paste a free Google AI Studio key once. It is stored in your browser's localStorage —
never committed, never in the repo, never sent anywhere except Google. Analysis is generated live and cached
24h per ticker. Free tier is ~1,500 requests/day on Flash, no credit card. The app tries gemini-flash-latest first and falls back through other Flash models if one is quota-limited.
The key is per-device, and Google may use free-tier inputs to improve their models —
only public market data is sent, never your weights or positions.
Get a free key at aistudio.google.com/apikey — Google account only, no card.
Analysis cached 24h per ticker
Watchlist tickers autocomplete and use live metrics from this dashboard. Any other US ticker
works too — it is fetched on demand, and if we cannot price it the prompt still runs with
whatever is known.
📝 The prompt exactly what gets sent — edit before running if you want
Edits apply to the next Analyse. Template lives in
config/prompts/mauboussin.md.
💼 Conviction clusters ≥3 tracked managers buying the same name
Ticker
Conviction
Managers
📈 Recent superinvestor activity Dataroma · refreshed every 72h
Ticker
Manager
Action
Period
Detail
🗣 r/wallstreetbets sentiment context — not a signal
Mention counts require Reddit's OAuth API (free, non-commercial). Add REDDIT_CLIENT_ID and
REDDIT_CLIENT_SECRET as repo secrets to enable the daily summary — unauthenticated .json
has returned 403 from datacenter IPs since May 2026. Deliberately excluded from the Expectations Score and alerts.
🔗 Research & manual follow login-walled or no free data source
Excluded from automation: Value Line (redirects to an authenticated account page — nothing scrapeable),
PCM_bio (X API ~$100/mo), Joseph Carlson (M1 is a JS app needing headless Chromium),
Michael Burry (Scion deregistered from the SEC on 10 Nov 2025 — no 13Fs exist to read).
Ideas you spot manually go in config/manual_ideas.yaml.
Add ticker to watchlist
Validated against the quote provider before commit.
How this persists → a static site has no backend, so submitting opens a
pre-filled GitHub issue containing the exact YAML block for
config/watchlist.yaml. Git-tracked, versioned, survives cache clears and device changes.
⚠️ Never add cost basis or share counts — this repo is public.