Release notes
What changed on Picks, week by week.
Week 42, 2026
For you
New
- Checkpoints: a new page that lists every checkpoint that passed or failed, across all picks, newest first, with the test, the outcome, the totals (passed, failed, pass rate and pending) and a filter for passed or failed. This week on the home page and each company's Checkpoints section link to it
Under the hood
New
- A prerendered /checkpoints/ page (in the sitemap) fed by a new `virtual:profile-scorecard` module (`buildScorecard` in `lib/companyProfiles/digest.ts`): the decided checkpoints with their company and the pending count, so the page loads no profile
Week 41, 2026
For you
New
- Thoughts: a new section next to Research and Commentary for longer essays, starting with a mental model of who pays for the AI buildout when tokens become cheap, seen from the shareholder and bondholder side, with scenarios, tables and a chart, and every Picks company named in each scenario
- A second Thought, on interest rates: why the 10-year Treasury yield passed 5%, and which picks it hurts through debt, loans and valuation, with tables of rates and of the most exposed companies
- Share a Thought or a Commentary note with one button; links show a social card and a title and description in link previews, and an RSS feed lists new posts
- Sign in with a code sent by email, in the same window, as an alternative to Google
- Fair values from more than the analysts: a value from another source names it everywhere it shows (Management, Analysts' mean target (LSEG) or AI estimate), and the company page explains how it was worked out under Valuation. Brookfield (BN) now shows management's plan value of US$67 per share, and Sucro (SUGR) an AI estimate from its filings, so both appear on the valuation map and sort by discount
- A short "second opinion" on a company page where an AI estimate and the value from the analysts disagree a lot (a different moat, or a fair value 30% or more apart): one line labelled AI estimate with its moat and fair value range, and a closed "How the AI estimate was made" with the method, date and sources. Other companies show none
- Balance sheets show their main figures as tiles and bars (cash against debt, leverage on a low to high scale, when the debt is due, credit ratings), with a shorter paragraph for what the numbers cannot show. Broadcom was first, and 46 more companies followed; four (AutoZone, Charles Schwab, Reckitt and Marex) keep only the paragraph, because their filings do not give comparable cash and debt figures
Changed
- Picks no longer loads Cloudflare's Web Analytics script. It counts a few more actions on its own server, with no account, IP address or cookie: setting a buy price or your own estimate, pressing Share and opening how the AI estimate was made. The privacy page says so
- Pages no longer move sideways when you go between a short page and a long one
- Seven companies are no longer picks (Costco, Qualcomm, Constellation Energy, Viper Energy, Denison Mines, Ouster and MDA Space). They left the main list, the valuation map, the earnings calendar, This week and the commentary views. Their pages and history stay, with a notice that says since when they are no longer picks and why. A new section at the bottom of the home page, No longer picks, lists them, and a star or an Own mark on one still shows in My picks with a small label
- Every company refreshed on October 7, 2026 with the October 6 closes, checked news and earnings dates, and a thesis that looks ahead to the next test (for example, Marvell's now looks to its third quarter, since the Investor Day has passed, and Costco's adds its September sales)
- Earnings dates checked against company sources on October 11, 2026: Pool, AppLovin, Hershey, Brookfield and British American Tobacco are now confirmed, and 25 other estimates moved to match each company's report date last year (for example, Copart to November 19 and PepsiCo to February 2, 2027)
- Commentary notes show when they were last updated
- Thoughts have one share button, footnotes with a way back to the text, and tables and charts
- A tidier All picks page: the list and Recent updates scroll with the page instead of in boxes of their own (Recent updates shows the latest five, with Show all), the table's column headings stay under the site header, the table fits at desktop widths with a short Next earnings date, and the page no longer ends in blank space
- Star, Own and Pass: tooltips on the icon buttons, one line above the list that explains them, and a short notice after each tap (for example "Passed YUMC. Undo") that lets you take it back
- Filters: every count reads the same way (Starred 0, Hide passed 0) and "To review" is now "Not marked yet"
- A pass now lasts until the company's research, ratings or earnings date change: a new price alone no longer brings it back to review, and "Updated since you marked it" only shows for those changes
Under the hood
New
- Retired picks: `retiredPicks` in `src/data/retired.ts` (date and reason by ticker) marks a company as no longer a pick without touching `picks.ts`, its profile or its history. `activePicks`, `isRetired`, `retirementOf` and `retiredList` in `lib/picks.ts` feed the lists, the chart, the calendar, the commentary views and the suggestions; the company pages, the history, the sitemap, the marks and the notes keep every company. The LLM files add `retired` to the JSON, a notice in the Markdown and a No longer picks section in `/llms.txt` and `/llms-full.txt`
- A prerendered /thoughts/ index and /thoughts/<slug>/ pages in the sitemap and the LLM files, from a typed `thoughts` data file with a check that its links, footnotes and companies resolve
- A shared ShareRow, article SEO (structured data, canonical links) and per-article social cards for Thoughts and Commentary notes, plus an RSS feed built at build time
- An admin panel at /admin for admins only, with a Users section: GET /api/admin/users lists everyone with a synced record or a non-empty note, most recently active first, joined with auth's POST /api/admin/users (getAdminUsers over the AUTH binding); it never returns a user id, a note's body or which companies anyone marked
- Fair value, moat and uncertainty are each optional and carry a source (`sources`: analysts, management, lseg-target or ai-estimate; missing means analysts) with an optional `valuation` paragraph on the company profile (history schema 1.5.0, old entries read as the analysts'). The check for a rating is now `hasFairValue`, `sourceLabel` names a source on screen, history diffs show a change of source, and the LLM files spell out each value's source
- The AI second opinion: `disagreesWithAnalysts` (`lib/secondOpinion/rule.ts`) picks the picks with an analysts' value whose AI moat differs or whose AI fair value is 30% or more away; the build writes each one into its own `second-opinion-<TICKER>` chunk (`virtual:second-opinions`, `useSecondOpinion`, preloaded in the prerender), so the 3 KB paragraphs stay out of the shared chunk and other companies' pages, and the LLM files and exports leave it out
Changed
- Removed the Cloudflare Web Analytics beacon from the root route; added the `buy_price_set`, `valuation_set`, `share_pressed` (page: home, company, thought or commentary) and `second_opinion_opened` events to `EVENTS.picks`, fired in `useMarks`, `ShareButton` and `SecondOpinion`
- html has scrollbar-gutter: stable from sm up, so pages with and without a scrollbar have the same content width
- `scroll-box` is `position: relative` (it removed 2,160 px of blank space below the footer); the All picks list and Recent updates lose their max-height scroll boxes; the table box scrolls sideways only below `lg` and clips from `lg`, where the headings are `sticky` under the header; `formatShortDateThisYear` for Next earnings; `MarkNotice` (an aria-live status fed by `announceMark` in `lib/marks/notice.ts`) with Undo
- The admin panel moved to admin.kamadorueda.com: /admin, the account menu's Admin item and the admin-preview script are gone, and Kevin's admin app reads the same /api/admin endpoints over a service binding
- Unit tests run on vmThreads, and each end to end preview server picks its own port
- Marks compare against each company's latest history version (`virtual:history-changes`, built with the digest) instead of the pick's `updatedAt`, so price-only refreshes keep dating the price without lifting passes
Week 40, 2026
For you
New
- A clearer first look: Research now opens with one sentence on what Picks is, the latest commentary note with three takeaways that link deeper, and a This week strip of the earnings reports and checkpoints due in the next 7 days. The valuation map explains fair value, the LSEG rating, moat, uncertainty and gap type in one tap, keeps the moat, uncertainty and research filters under More filters, and a switch (remembered on this device) hides the gaps that will probably not close on the map and in the table. Company pages open with In short: the thesis in one sentence, the gap type with its reason and the next test, and the balance sheet shows two sentences with Read more
- Every company page has three new parts: a Balance sheet paragraph on how the company is financed (with the date of its figures and its sources), Checkpoints (the dated tests of the thesis, each Pending, Passed or Failed, and marked Due or Overdue when its date comes), and Similar companies (other picks with the same themes, with their discount, LSEG rating and gap type). Owned cards show each holding's next checkpoint
- Commentary: a new section next to Research, with dated notes across all companies, a card per theme (with how many you own or starred), which gaps to fair value can close, where the fair value and Wall Street analysts disagree, and the coming earnings weeks by theme. Company pages show their themes, and the table, the company page and the valuation map mark a gap that will probably not close
- Owned: a new section next to Research and My picks, with a count in its tab. Mark the companies you hold with Own, and see a card for each: price and value, next earnings, the latest event, the main risk and what changed since you marked it. A "This week" box lists earnings in the next 7 days and new research, and the cards sort by earnings, change, discount or risk. Only the mark is kept, never shares or costs
- An Own mark next to Star and Pass. An owned company counts as starred everywhere and never lapses; the Research filters gain Owned
- Short guides instead of empty pages: My picks, Owned and the Starred, Owned, To review and Hide passed filters explain what they are for, how to use them with the real Star, Own and Pass buttons, and what you get
- My picks: write down the price you would buy at, what you think a company is worth and by when, and see each one on a map of return per year and distance to your buy price
- Added McDonald's (MCD) with sourced research
- Plain-text copies of the research for AI tools: /llms.txt, a Markdown page per company and JSON data
Changed
- My picks no longer has an All / Owned choice: the Owned tab replaces it, and My picks still lists your owned companies
- Every company refreshed on October 1, 2026 with the September 30 closes, checked news and earnings dates
- Every company updated on October 2, 2026 with its balance sheet and checkpoints. Corrections: AutoZone's debt risk now uses the company's own measure (2.5 times EBITDAR, within its target), Wynn's 2027 maturities are about $1.35 billion after the September refinancing, S&P Global's year-end leverage is marked as a report of the earnings call, and Broadridge's thesis uses fiscal 2026 closed sales of $305 million and the new $290-330 million guidance
Under the hood
New
- One FeatureGuide component, with a Storybook story per guide, for every empty section and filter
- A prerendered /owned/ route, kept out of search results like /my-picks/
- Prerendered /commentary/ and /commentary/<date>/ routes in the sitemap; themes, gap type and the latest note in the LLM files, plus /commentary.md
- A one-sentence `oneLiner` on every company lens (presentation, not part of history, so marks do not lapse), also as In short in the LLM files; optional `takeaways` on commentary notes, anchors on the Commentary cards, and a pure, clock-injectable `weekAhead` for the This week strip
- Optional `balanceSheet` and `checkpoints` on company profiles (history schema 1.4.0): history diffs and summaries name the checkpoint that passed, failed, moved or was added, the LLM files carry both with field descriptions, and a pure `similarCompanies` ranks peers by shared themes, then sector words
Changed
- Investment research sub-agents run on a stronger model, and prices come from market data
- Tests read live values from the data, or from the data as of a fixed day, so refreshes do not break them
Week 39, 2026
For you
New
- Private notes on every company: sign in and write your own thoughts in the box on its page. They save as you type, follow you to every device, and only you can read them
- Star or pass on any company: on its page (at the top, and again at the end so you can read it through and move on to the next one, or with the s and p keys), from its row in the table, and it shows on the valuation map. A pass lasts until the company's next update, then it's back to review with a note on what changed
- Show all picks, hide the ones you passed on, only your starred ones, or only those left to review; the valuation map, the table and the Previous/Next links follow the choice
- Sign in to keep your stars and passes on every device; anything marked before signing in moves into your account
- Starred companies get a star in the earnings calendar and in recent updates
- Added company profiles for Brookfield Corporation (BN), Wynn Resorts (WYNN), Waste Management (WM), and Yum! Brands (YUM)
- Valuation map: an As of menu redraws the map with any past day's data
- Earnings calendar: see recent earnings reports alongside upcoming ones
- Company changes view: shows how the discount moved when price or fair value changed
- Every company page has its own share preview card and a richer title and description for search and link previews
- Stocks without an analyst rating can now be listed with just their price and LSEG rating, starting with Brookfield Corporation (BN); they sit in a strip under the valuation map
- Added 12 new picks: HSY, CPB, RELX, PEP, EXPGY, COST, BR, RBGLY, OTIS, HONA, YUM, and others, with a full write-up for Yum! Brands (YUM)
- Breadcrumb navigation in the header shows where you are (Picks › NVDA › History › Sep 23, 2026 › Changes) and replaces the Back buttons
- Company pages end with Previous and Next links that step through the picks by discount
- All picks: filter by ticker or company name; on phones, a card per stock with a Sort by menu
- Valuation map on phones: fits the screen, and the first tap on a bubble shows its details with a link to open it
- Company changes show numbers as before → after with the change, e.g. $212.42 → $224.87 (+5.9%)
Changed
- Every company refreshed on September 27, 2026: new prices, recent events, risks and earnings dates, and a rewritten thesis that explains why the stock trades at a discount or premium, what must happen for the gap to close, and when
- Pages always load fresh after an update: the app no longer keeps an offline copy of pages, which is what used to show stale data
- The selected filter, a star and a pass are clearly highlighted, and the filter works with the arrow keys
- The filter buttons keep their place while the page loads instead of shifting when their counts appear
- Stars and passes sync more reliably between devices: two devices syncing at once can't undo each other's changes, a device with a wrong clock can't win every conflict, and signing out clears them from that device
- A pass is lifted by any later update, even one the same day
- Recent updates lists every recorded change, not just the latest 10
- Valuation map no longer animates
- Company page toolbar keeps its labels on phones and wraps instead of squeezing the back link
- Refreshed price, LSEG rating, and fair value across most picks
- Share button sends a summary of the stock's valuation instead of just its ticker
- Refreshed the Meta Platforms (META) write-up with its Q2 2026 results, data center financing, and legal settlements
- App icon and favicon now use the site's violet accent
- Dates read relative to today, like "Updated 2 days ago · Sep 23"
- Home page: a shorter header, and the same order on every screen: the valuation map first, then the earnings calendar and the picks list
- All picks on phones: every stock in a list that scrolls in place, instead of a Show all button that made the page jump
- Company pages: a little more room between the header, the numbers and each section
- Release notes: the technical details under each week are folded away until you open them, and weeks no longer show a commit count
- Company pages lead with the company name, show the update date up top, and say whether the discount is below or above fair value
- History: each change is one tappable row with a two-line summary; the Updated field no longer shows up as a change
- Glossary terms and Recent updates are collapsible; the earnings calendar labels past reports "Reported"
- Disclaimer, Release notes, and Feedback moved to a footer on every page
Under the hood
New
- Notes live in D1 (a notes table, one row per user and company) behind /api/notes; every save is conditional on the version it edited, so two devices editing one note get a choice instead of a silent overwrite
- Test coverage is enforced: at least 90% overall and 70% per file, checked by the stop hook
- A snapshot script records a pick's history before it is edited
- Open Graph images are generated at build time with an embedded font
Changed
- Picks: a thesis convention (why the gap exists, what closes it, when; never its size), documented in apps/picks/CLAUDE.md and checked by a data test
- Sign-in and per-user sync come from shared workspace packages, also used by Coro; synced records live in D1, each write conditional on the version it read
- No service worker: a self-destroying one removes earlier installs, and hashed assets are cached by HTTP (immutable) instead
- API responses are never cacheable, and /api/* always reaches the Worker first
- Tooling files (configs, scripts, Storybook) are type-checked, with shared TypeScript and ESLint settings
- Tightened stop hook to require main and use quiet checks
- Updated dependencies to latest versions
- Froze past history snapshots so later profile edits can't rewrite them
- Split history logic into focused modules; data files hold data only
- Shared date/money formatters, pill buttons, back links, not-found state, and theme colors
- Moved build-time jobs out of the router config and deleted unused config files
- Prerendered pages no longer depend on the build machine's date or time zone
- Analyst fields on a pick are optional as a group, enforced by the type system
- The icon generator reads its colors from the shared theme module
- Removed the converge skill
Week 38, 2026
For you
New
- Added company profiles for the remaining tracked picks, plus CLX, BABA, SPGI, and BTI as new picks
- Made the valuation chart's legend chips act as filters
- Added a last-updated date to each pick
- Added the next earnings date to each pick
- Added a share button to the home page and each company page
- Added an upcoming-earnings strip to the home page
- Added a versioned update history and timeline for each company, with a recent-updates summary on the home page
Changed
- Deepened the TSM and CLX profiles with more research detail
- Made the valuation chart and its legend easier to use on mobile
- Refreshed price, LSEG rating, and updated dates across several picks
- Switched to live last price instead of the analyst report price for several picks
- Fixed the valuation chart's axis bounds hiding CLX and BTI
- Reworked the history timeline into separate per-version and per-diff pages
Under the hood
New
- Added a Cloudflare Web Analytics beacon
- Migrated to React Router's Framework Mode for static prerendering
Changed
- Made the Stop hook verify origin/main has the branch's commits
- Linked directly to canonical trailing-slash URLs
- Updated the root lockfile for the new diff dependency
Week 37, 2026
For you
New
- Added a financial disclaimer page
- Added a valuation chart to the home page
- Added a dedicated page for each company
- Added company profiles for SAP, CPRT, AZO, GOOGL, META, MRVL, and TSM
Changed
- Switched to a dark theme, then redesigned it with a fresh palette and layout
- Redrew the app icon
- Added explanations for what the chart's attributes mean
- Rewrote site text in Simplified Technical English for clarity
- Made ticker links visually distinct and limited them to tickers with a profile
- Trimmed repeated numbers from the thesis text
- Expanded the disclaimer to cover standard legal ground
Under the hood
Changed
- Set up the project skeleton
- Updated dependencies to their latest versions