You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New components: <Delta>, <CompanyLogo>, <FundLogo>, <GlobalSearch>, <FundCell>, sector pills, YFinanceClassificationTreeVisual
Sidebar redesign with sliding active indicator, section hairlines, live data dot, dynamic version footer
Layout extended to max-w-screen-2xl across all pages; mobile-friendly header reflow + SidebarTrigger
Default tab By Value on /stocks; URL sync ?tab= on StockBrowser and QuarterlyTrends (back/forward navigable)
Chunked pagination 500-per-step on Alphabetical + By Value; reset on tab switch
Unified delta visualization (icon + signed value + colour) across Dashboard, QuarterlyTrends, FundPortfolio holdings
Star button inline in Company cells across all tables
Company name typography overhauled (sans, full-contrast)
Fund favicon + manager line everywhere a fund appears
CUSIP + CIK now searchable in the global search bar
Centralized version (__APP_VERSION__ via package.json), centralized cursor:pointer on buttons
Backend
GICS replaced by Yahoo Finance Classification (sector_hierarchy.csv + stocks.csv Industry-only)
New app/stocks/classification.py: yfinance β same-Company β Groq fallback
New /api/funds-missing-quarters and /api/apply-ticker-changes endpoints
/health now reports the version
CSP relaxed for Google Fonts (style-src + font-src)
app/utils/version.py with lru_cache as single source-of-truth
Critical bug fixes
/database page lock: CusipAutocompleteonValidChange-in-deps loop with inline parent callbacks. Fixed via ref-pattern (matching TickerAutocomplete)
GH Pages /quarterly 404: sector_hierarchy.csv was not in the static deploy copy list. Added + regression test grepping dataService.ts for every fetched CSV
CI pandas 2.2 dtype error: TickerResolver.assign_cusip now coerces the CUSIP column to object dtype
AppSidebar/funds vs /funds-config double-highlight (word-boundary match)
AbortController on streaming Database operations
Logo tile bg-neutral-200 so both dark and white logos remain visible
ModelSelector ref-pattern (preventive)
StockBrowser setState-in-effect β render-time state adjustment
Tests
86 β 94 frontend tests
352 β 359 backend tests
Shared vitest setup with IntersectionObserver polyfill
Regression guard on the GH Pages copy script (copy-database.test.ts)