Skip to content
investiDocs

Changelog

What changed in Investi and when, from the project's commit history, newest first.

On this page

Notable changes to Investi, grouped by day and written from the commit history. Dates are in US Central time.

November 7, 2026#

  • Sync cleanup and page recovery. Daily snapshot retention now groups history once, runs after current account data, and has a bounded database execution time. Deferred cleanup keeps records and does not fail an otherwise completed sync. Try again re-fetches the failed page before rendering it again.
  • Open pages stay current. Completed syncs, position imports and saved basis corrections refresh the open app automatically. Stopped syncs cease showing as active when their deadline expires, even before the next scheduled job records the failure.
  • Broker totals and editable basis. Settings defaults the reporting start date to January 1, 2026. Expand a missing-basis transaction to enter its total basis and optional acquisition date. Corrections are audited, recalculated across reports, and removable. Broker snapshot valuation is now the default; live valuation remains selectable. An unknown acquisition date stays unclassified for tax term.
  • Faster foreground work. Home and Holdings can render complete broker marks without waiting for quotes. Day P/L shows Quotes pending until the whole book is available. Holdings order checks and risk panels, and Settings connectivity and basis checks, stream separately. Search reuses its ticker map, formats displayed matches only, and drops the fixed keystroke delay. Orders reads avoid building the entire portfolio. API timing headers and a reproducible benchmark expose remaining latency; no universal sub-5 ms guarantee is claimed.
  • More reliable sync. Manual sync returns promptly and continues in the background. Every account's balances and positions are saved before historical backfills; symbols, orders, fills and cash are batched. Empty accounts keep a real observation time. Overnight reconciliation retries between 2 and 6 a.m. Central, including weekends, with the browser closed.
  • Trading-history checks. Sold prefers corrected or matched basis over a remaining-position average, labels average-based estimates, and nets positive and negative left-on-table values. Partial matches allocate cents consistently. Nasdaq Composite (ONEQ ETF) and Dow Jones (DIA ETF) join the benchmark comparisons as explicit price-return proxies.
  • Sorting and filters. All table columns support direct two-direction sorting, with Shift for another key. Holdings captures live display values when sorting. Discover separates history inclusion from excluding holdings/open orders; Research has independent exclusions. A durable background queue refreshes never-analyzed or seven-day-old research with retries and status. Calendar has saved past-event and table toggles, with notable earnings and economic releases off by default. Markets covers $500M and above without an upper limit.

November 6, 2026#

  • Less repeated work, the same data. API and MCP requests share repeated portfolio reads and re-read after writes. Holdings fetch the latest snapshots directly through their indexes, and Schwab syncs write orders in batches. AI page answers keep their existing ten-minute lifetime across server restarts; changed inputs and Refresh still generate new answers. Sync schedules, quote freshness, the AI model and recovery history are unchanged.

November 5, 2026#

  • Logo coverage and loading fixed across the app. Bitmap ICO favicons now decode, and a square-logo fallback covers companies whose official assets are unsuitable for ticker tiles. Pending lookups update visible logos without reloading; repeated copies share one request. Old missing-logo caches retry with the improved resolver. Owner replacements and monogram choices remain authoritative, including when a lookup finishes later. See Company logos.
  • The AI panel on every page, and it knows all of Investi. Actions, Holdings, Orders and Sold today now have their own analysis, from the same functions as the pages (the action groups and crash cap, totals and losers, open orders and flags, the day's sales with ?date=). Pages with no figures, such as Downloads or a docs page, say so in one line and keep the chat. The chat and the analysis carry a site map of every page, shortcut and Settings section, and the docs sections that match each question, so "where do I import my tracker" gets the page, the control and the /docs link. The nav list is now shared with the panel, and a test fails if a page is ever left out. See AI page analysis.
  • A Sold today screen. Sold today (/sold, g then s, and the command palette) lists every sale on a trading day from your Schwab transactions: shares, average sell, proceeds, Schwab's cost basis, realized $ and %, days held, the 4:00 PM close (the live price, tagged Live, before the close), how the sale compares with the close in green or red, what was left on the table (only when positive), shares still held and any working re-buy order. A symbol sold in several fills is one row; expand it for each fill's time, shares and price. The footer totals shares, proceeds, realized and left on table. A date picker and arrows reach any past trading day, the day is in the URL so it can be bookmarked, and a weekend or market holiday says No session. GET /api/v1/sold and get_sold_on now include session. See Sold today.
  • History in pictures. History now opens with four big numbers (realized, win rate, average days held, round trips), a bar chart of realized P/L by month (it sums to the realized total) and the top 10 symbols by realized $. Below them, one table of round trips (symbol, buy date, sell date, days, shares, buy, sell, realized $ and %) that sorts and filters on every column, including date range, symbol, account, win or loss and held days. Fills, Tax, realized by lot method and the weekly review are tabs beside it, each a sortable table without explanation paragraphs. Lot-method notes, legacy-basis notes, data checks, imports and CSV downloads moved into one Data notes drawer with a count. See History.
  • Holdings and Open orders screens. Two new tables in the nav. Holdings lists every position for triage, biggest % loss first: Schwab-basis avg cost, unrealized with a bar, breakeven distance, lot ages as colored buckets, verdict chips with reasons, earnings, ex-dividend, the 52-week range, analyst targets, the nearest working sell and buy, sector, concentration bucket and dividends received, under a strip with total value, unrealized, count under water, underwater over 60 days and the five biggest losers. Open a row for its lots, a one-year chart with your buys and sells, and the verdict reason. Open orders lists every working order with distance to fill, session, age, verdict, earnings, ex-dividend, the 52-week low, analyst target and sector, with flags as icons (earnings inside 10 trading days on a GTC+EXT order, verdict changed since entry, open over 60 days, more than 15% from the limit, the same order twice), verdict chips that filter, open buys and sells, and the crash-cap bar with its 60% and 75% lines. Probe lots and orders are dimmed, tagged and never flagged. GET /api/v1/holdings and the MCP tool get_holdings are new; GET /api/v1/orders and get_open_orders add a count per flag, a flag filter and opt-in include=flags,research fields, with nothing renamed. See Holdings and Open orders.
  • Actions, one line each. The action list is now one line per thing to do, such as SELL MCD 300 @ 269.89 · +0.8% or EARNINGS NRG Nov 9 · switch to GTC, grouped Do now, This week and Watch with a count on each. The reason sits behind the arrow on each line. Every line has Done, Snooze 1d (back on the next trading day) and Dismiss (hidden until the order, verdict, report date or number changes; a replaced order shows again), with Undo and a Hidden list to restore from. They are saved for your account and the get_action_list MCP tool honors them; POST /api/v1/actions/{key}/state sets them. The crash cap is a bar with the 60% and 75% lines and the level chooser. Probe lots never make a line. See Action list.
  • Discover tables you can sort and filter by every column. New entrants and the 52-week-low screen use the app's standard table: every column sorts and filters, the Verdict column shows reason cards, and every row arrives with the page and scrolls smoothly, a thousand or more. One filter panel (ticker or name, within X% of the 52-week low, sector, liquidity) now applies to both tables and combines with the source buttons and the column filters, and the address bar holds the whole view. The methodology moved into How this works. See Discover.
  • Fewer words, bigger numbers. Home, Portfolio, Analytics, Calendar, Markets, Notebook, Settings and every company page drop their explanation paragraphs: each explanation now sits behind an (i) beside the thing it explains, or in a How this works drawer. Repeated "never places orders" lines are gone from the cards (the footer says it once), and the sample-data banner is one short line. No visible sentence on those screens runs past about 12 words.
  • Portfolio's header is five large numbers. Equity, Cash, Day P/L, Realized today and Unrealized, each with a small trend arrow (equity: today's move; cash: the change since the last balance before today; P/L: its own sign), and a Data badge with the Schwab state: LIVE, DELAYED, STALE, FAILED or REAUTH. Margin, buying power, open order dollars, deposits, dividends and net P/L moved into a collapsed More row. Working orders became a summary (open count, buy and sell dollars, orders resting through earnings) linking to /orders, and the positions panel links to /holdings. See Portfolio.
  • Home, at a glance. The same five figures; What needs attention is one line per item (icon, symbol, verb, number) with the reason behind its (i); the Today panel shows the day's fills and a Sold today summary (symbols, proceeds, realized, left on the table) linking to /sold. See Home.
  • Every table sorts and filters by every column. Home's fills, positions, opportunities and briefing; Portfolio's scenarios and covered calls; Analytics' benchmarks, by-symbol, missed exits and underwater lots; Calendar's events, notable earnings and economic releases; Markets' movers; Notebook's notes, alerts and watchlist; Settings' tables; and the company page's fills, round trips, open lots, orders, rule checks, filings, research history and analyst history now use the same table as Portfolio positions, with the view kept in the URL, CSV export and column choice.
  • Discover tells you why a source shows 0. Each source button now shows when it last ran, or not run before its first scheduled pass. On the night candidates shipped, Big drop and Strict read 0 only because the candidates job, which runs on weekdays from 9:00 AM to 7:45 PM New York time, had not run since the deploy. Hover a button for its definition with your own thresholds: Near low is within X% of the 52-week low; Big drop is down X% or more over N sessions, $2B+ and profitable; Strict 1 passes all 11 Finviz Strict 1 filters; Uploaded comes from your screener files. A selected source with no names says why, and a filter that hides every name says how many it hides, with Clear filters. See Discover.
  • The whole New entrants list, with a reason per row. Discover no longer stops at the newest 200: the rest load behind the first page and the footer says how many have arrived. A new Why column says why each name is there ("-18.2% in 5d", "new 52W low", "Strict 1: 11/11", "uploaded Nov 4"), and a verdict menu filters the list. Both are in GET /api/v1/candidates (why, verdict, sourceStatus).
  • Big drop over N sessions, and a fallback when the feed fails. A new setting, Candidates: big drop over (sessions), measures the drop over 1 to 20 sessions from stored daily closes. When Nasdaq's same-session change feed fails, the failure is recorded with its time and reason, the one-day change comes from the last two stored daily closes, and Discover marks Big drop fallback. Each run's status note keeps the gate's field values for ten names. See Candidate sources.
  • 1-share probe lots are ignored. A new strategy rule, Ignore positions and orders at or under N shares (1 by default), keeps probe and tracking lots listed (tagged probe) but leaves them out of the action list, Home's attention items, portfolio risk and the crash-cap count, portfolio-aware verdict caps, below-cost warnings, the order risk sweep, the earnings blackout, the weekly review's to-dos and Sold today. See Probe lots.
  • Sold today, from Schwab transactions. GET /api/v1/sold?date=YYYY-MM-DD and the MCP tool get_sold_on list what was sold on any New York day: shares, average sell, proceeds, cost basis (Schwab's when a position snapshot before the sale has it, otherwise lot-matched, and which), realized, days held, the 4:00 PM close (the live price before the close), how the sale compares with the close, what was left on the table, shares still held, any working re-buy order, and every fill. A sale imported by CSV and synced later is one row. Home's Sold today: end position now reads from it. See REST API.

November 4, 2026#

  • New candidates, continuously. Discover now opens with New entrants: names from four sources, with the new ones first. Near low is every name within 10% of its 52-week low (the distance is a setting, like a Schwab "Near Price Lows" screen at 10%). Big drop is a one-day fall of 10% or more on a $2B+ name with positive trailing net income and operating margin, captured every 15 minutes in the session and after the close. Strict is the Finviz Strict 1 screen recomputed from SEC filings and daily bars, with all eleven filters shown per name as pass, fail or unknown. Uploaded is any Schwab Stock Screener or Finviz CSV export. Investi remembers when each source first saw a name, so a name is new only if no source saw it in the last 7 days or it has not been evaluated under your current rules; owned names never count, and a dismissed name comes back only after a new low. New entrants are evaluated automatically after each scan and close, Home counts the new ones since your last visit, and the list is at GET /api/v1/candidates, POST /api/v1/candidates/{ticker}/dismiss, POST /api/v1/screens/import and the MCP tools get_new_candidates and dismiss_candidate. See Candidate sources and Discover.

  • Chat, uploads, playbook and memory. The analysis panel now takes follow-up questions: a thread per screen that reopens with its history, answers that stream in, and files attached with a paperclip or dropped on the panel. Upload any file up to 20 MB there or under Settings > Uploads: Investi checks what it is from its bytes, imports Schwab exports exactly like Import history, saves Schwab and Finviz screener exports as candidates, reads a strategy document into your playbook (proposed settings changes wait for your Apply), and summarizes anything else so the chat can use it. Every upload, playbook rule and "remember that..." becomes part of your account's memory, sent with every analysis and editable, removable and undoable in Settings, with optional Supermemory recall. New REST endpoints under /api/v1/uploads, /playbook, /memory and /ai/chat, and MCP tools list_uploads, get_upload, get_playbook, list_memory, add_memory, remove_memory and ask_investi. See Uploads, playbook and memory and AI page analysis.

  • Company logos. Real logos next to every ticker: the research header, hover cards, search, positions and orders, Discover, Markets, History, Calendar, Home, Notebook, the analysis panel and the extension card. They come from Wikimedia Commons and the companies' own websites, are stored once and served from Investi, so no logo provider sees your browsing. Tickers without a logo show a monogram. Each research page credits its logo source, and the account owner can switch a ticker to its monogram or upload a replacement from the logo on its research page. See Data sources.

  • Schwab sync you can trust. The Nov 4 report: Settings said "connected" and "syncs every hour" while the last sync was your own Sync now 26 hours earlier, because the hourly schedule had been merged that evening and had never run. Portfolio then showed sold positions, filled orders as working, an old BROS basis, "Unknown" buying power, and "Reconciled" on every row. What changed:

    • Syncs every minute in market hours, every 5 minutes from 4:00 to 9:30 and from the close to 20:00, and a full run at 9:00 and 20:05 New York time (every GTC order, fresh account hashes, transactions since the last one ingested). While the app is open, a fill, cancel or replace at Schwab starts a sync at once. Each part retries on its own, one slow account never holds up another, two runs never overlap, and a run that dies is marked as such.
    • Connection state comes from finished runs only: Live, Delayed, Stale, Failed or Sign-in needed, never from "a token exists". Settings shows it with the reason, the last good sync per account, the last 12 runs with each request's result, and Sync now with its result inline. Portfolio, GET /api/v1/portfolio, the MCP freshness block and the weekly digest carry the same state. A red banner sits on every page while a sync has failed or Schwab needs you to sign in again; an in-app alert fires then, and when no sync has finished for 15 minutes in market hours. From day 6 of Schwab's 7-day authorization, Settings warns before it lapses.
    • No more stale data labeled live or reconciled. Portfolio shows quote freshness and share-count freshness separately, and the worse one sets the headline. "Reconciled" now needs fresh broker data and fills synced through it; otherwise the row says "Unverified: broker data 26 h old". Filled, canceled, replaced, expired and rejected orders leave the working list on the next sync, and a stale order list is flagged on open-buy notional and the crash-cap ratio.
    • Schwab's own numbers: cost basis is the figure Schwab shows (BROS reads $36,469.14 when Schwab says so), with the basis from your fills in its own column and any difference flagged; buying power and the margin debit come from Schwab's balance; the interest line names the balance it was charged on.
    • Fills, dividends and interest without a CSV. Every scheduled run reads new transactions, so the day's realized P/L appears on its own. Importing a CSV of the same fills before or after a sync never counts them twice. Sync now remains the five-year backfill.
    • Realized, dividends and net are the same on Portfolio, Home, History, Analytics, the REST API, every MCP tool and the weekly digest; a test now checks all of them against one breakdown. See Connect Schwab and Portfolio.
  • Back and Next buttons in the top bar, left of the search box, on every screen: the page history as buttons, dimmed when there is nowhere to go. Made for the desktop app, available in the browser too.

  • Clearer pass, watch and fail marks on the research gates and data checks: a bolder check, a solid warning triangle and a bold cross.

  • Trebuchet is now the app's text face, in the web app, the extension card and the desktop fallback page. Numbers in columns keep their tabular setting; the wordmark stays in its serif.

  • Data freshness. Daily bars now refresh on a schedule after every close for every ticker you hold, watch, alert on or researched in the last 30 days. Until a session's bar lands, its live quote counts as a provisional, labeled bar for the 52-week low, its date, the distance above it and the new-low count, so a price is never "below the 52-week low" and an old low no longer reads "(0 days ago)". The bid-ask spread check runs only in the regular session and otherwise reads "not applicable". Every API response and MCP tool now stamps each dataset with observedAt and source (orders and fills per source), and Portfolio and company pages show a one-line freshness summary. Schwab syncs on a schedule so fills from the API reach the ledger without an import (now every minute in market hours; see the Schwab sync entry above). See Data sources and Connect Schwab.

  • Tax tools. History has a Tax section: realized short-term and long-term by year, wash sales (same account and stock, within 30 days either side) with the disallowed loss and the lots whose basis rises, loss-harvest candidates before Dec 31 with an estimated tax saving at the rates you set in Settings, and the one-year date of every open lot (also on Research's open lots). Estimates, not tax advice. Also at GET /api/v1/tax/summary, GET /api/v1/tax/harvest and the MCP tools get_tax_summary and get_harvest_candidates. See History.

  • Margin calls in the stress test. Enter your maintenance requirement (0 to 100%) or choose Schwab's from your synced balance, and every scenario shows the requirement in dollars, the margin call and a forced-sale estimate, with the formulas printed under the table. A new scenario fills all open buys and then drops the market 20%. See Portfolio.

  • Covered calls. Portfolio screens held names with 100+ shares for calls at or above your average cost that expire before the next earnings date, with mid premium, percent of the position, annualized and open interest. Chains come only from your Schwab connection (GET /api/v1/options/chain/{ticker}, GET /api/v1/options/covered-calls, MCP get_option_chain and screen_covered_calls). Investi never places orders. See Portfolio.

  • Claude connector: built for large order books. get_open_orders now filters by ticker, side, session (GTC, GTC_EXT, DAY), minimum notional, earnings within N days and verdict, pages 50 rows at a time (up to 200), and leads with a summary: count, notional by side, GTC+Ext count, names reporting within 10 days and orders on RED or FLAGGED names. A 371-order book now answers in under 20,000 characters instead of 150,000. GET /api/v1/orders takes the same parameters and now returns this shape (summary, rows, page) instead of the raw list. See Claude MCP server.

  • Order risk sweep. The new order_risk_sweep tool and GET /api/v1/orders/sweep give each working order its earnings date and days to it, verdict, session, distance from the last price and a suggested action: cancel, switch to plain GTC, review the gate, or OK, most urgent first. They are suggestions for you to act on at your broker; Investi never places, changes or cancels orders.

  • Alerts and notes from Claude. New tools list_alerts (with how often each alert fired), delete_alert, create_near_low_alerts (one near-low alert per ticker, duplicates skipped and reported; also POST /api/v1/alerts/near-low), list_notes and get_research_notes. GET /api/v1/notes adds kind, since and limit.

  • Catalysts match the right company. News must name the company or print its ticker in a stock context. Indicator articles ("RSI overbought") no longer land on Rush Street Interactive, and SPX index option headlines no longer land on SPX Technologies. The catalysts tool and route take kind, since, until and limit.

  • Weekly review: earnings split. The review now separates reportingToday, reportingThisWeek (company-confirmed) and estimatedDates, and lists heldThroughPrint with shares, market value and weight for each held name that reports in the window.

  • Missed exits, with the method and a runner. Strategy health names the method (20-day peak after exit), totals what was left on the table across every missed exit, and models keeping a 25% runner on each closed trip, sold at the 20-day peak and at the 20th session's close. The totals also show under Missed exits on Analytics.

  • Weekly digest by webhook. GET /api/v1/digest and the get_digest tool return the weekly review, the P/L breakdown and the order risk sweep as one document. Register an HTTPS webhook in Settings, Digest and Investi POSTs it every Sunday at 22:00 UTC, signed with HMAC-SHA256. Managing webhooks needs portfolio and research read access as well as write access, revoking the token that registered one pauses it, and each delivery has a hard 10-second limit. See Digest and webhooks.

  • Total P/L, corrected and broken down. Sells of shares bought before your imported history starts (for example holdings sold on the first day of the history) are now legacy sales with unknown basis: excluded from realized P/L and listed with their proceeds, never treated as zero cost and never as a short. Earlier, the ledger and the cumulative P/L curve treated them as short sales marked against later prices, which pushed the curve on Home far below the true figure and put losses from covering those phantom shorts into realized P/L. Home, Analytics, Portfolio, GET /api/v1/portfolio and the MCP tools get_positions and evaluate_strategy_health now share one P/L breakdown: realized, unrealized, dividends, margin interest, interest earned, account fees and net, with legacy sales, cash dated before your history and unclassified cash listed beside it. See Canonical numbers and The ledger.

  • Cost basis reconciliation. Portfolio compares the broker's cost basis with the basis rebuilt from your fills for every position, flags any that differ by more than 1% or $100, and totals the broker snapshot (basis, market value and unrealized at the snapshot time) against unrealized at current quotes.

  • Realized by method. History shows realized P/L per year under FIFO, average cost and your chosen lot method side by side, and says that Schwab's own lot method is not in its export files.

  • Performance line. Analytics shows the account's gain net of deposits and withdrawals, a daily time-weighted return (with Modified Dietz as a cross-check) and RSP, the equal-weight S&P 500, next to your benchmark, from daily equity rebuilt backwards from your latest Schwab balance. The cumulative P/L chart now draws RSP beside your benchmark.

  • Verdicts automate the manual checks (policy v3). A fall of more than 10% across the last report caps a verdict at YELLOW for 10 sessions ("newly revealed, wait 5-10 sessions") unless you mark it known. The revealed check now shows the latest EPS guidance against the prior release and consensus, the drop against the cut, and a suggested label. Solvency reads free cash flow and earnings together and shows capex, so positive earnings no longer pass a company burning cash. The legal check carries evidence from 8-K items, results releases and company headlines. You can save answers to the Kodak, legal and revealed checks with an expiry, and verdicts include them. New portfolio-aware rules apply your caps (consumer discretionary, rate-sensitive cluster, casinos, two miners, one Latin American financial), the no-second-lot rule, the wash-sale window and the crash cap after the buy, with the numbers. Working buys that would rest through a report are flagged on the research verdict, in the Portfolio working orders table and in the weekly review. Foreign filers reporting under IFRS (Stevanato) and filers whose only debt line is a revolver (Sprouts) now get net debt and EBITDA. See Strategy rules.

  • Action list. A new screen at /actions (nav Actions, g then l, linked from Home) lists what to do now, each as a sentence with its numbers: GTC+EXT orders to switch to plain GTC before earnings, open orders on RED or FLAGGED names, held names reporting within the earnings window, caps and clusters over their limit, and the crash-cap ratio against the 60% and 75% lines with a control to choose your level and the ratio if every open buy fills. Also GET /api/v1/actions and the get_action_list MCP tool. See Action list.

  • Schwab links on every order. Working orders on Portfolio, the action list and a company page's Orders tab link to Schwab's Order Status page in a new tab, with the order's Schwab number beside the link, so a change is one click away. Investi still never places, changes or cancels orders. See Schwab links.

  • Verdict history import. Settings, Import verdict history takes your tracker as .xlsx or .csv (Ticker, Verdict, optional Date and Notes; GREEN, YELLOW, RED, DORMANT, FLAGGED and common synonyms, any case). Each row becomes your dated review of that name, so Discover shows it as Unchanged while today's verdict matches and Changed once it differs, and the research page lists it in the verdict history. Rows that cannot be imported are listed with the reason. Your verdict, imported or set by hand, now carries across fresh analyses with the engine's verdict shown beside it until you choose Clear imported verdict; the report carries it as userVerdict. Also POST /api/v1/imports/verdicts. See Import history.

  • Analysis panel, second cut. The panel is docked and no longer blocks the page; the screen's key figures appear within a second from the server's own rules, and the model's answer follows as a one-line headline, a call (Hold, Add, Trim, Exit, Wait, Watch, Pass or No move, with its levels and size) where one is due, at most three points and a next step. Every screen now sends the model who you are as an investor (book, cash, sizing, track record, recent activity, notes) and a company page adds your lots, trips, fills, orders, alerts and notes in that name. See AI page analysis.

  • Analyze any screen. A new Analyze button in the top bar opens a panel that summarizes the screen you are on, lists what stands out with its numbers, and gives one research recommendation tied to your verdicts, the 52-week-low rules and the risk lines. It is written only from the figures the screen shows, names the model and the data it used, and is also available at POST /api/v1/ai/page. See AI page analysis.

  • New mark. The Investi logo is now the Candle I: a serif capital I whose stem is a candlestick, drawn in the accent colour in the app and the extension card, and on a mint tile for the browser tab, the desktop app icon and the extension icon. The dot-matrix tile is retired.

  • Desktop swipe navigation. A two-finger swipe left or right on a Mac trackpad goes back or forward through the pages you visited, as in Chrome (Investi Desktop 0.1.3; Windows touch screens too). See Desktop app.

  • Draggable hover card. In the app and in Investi for Chrome 0.1.10, drag the hover card by its header to any spot on the screen; every card opens there from then on, until you double-click the header to put it back beside the ticker. A card at a remembered spot waits longer before closing and keeps waiting while the pointer heads toward it. The extension still never lets the card cover a trade control. See Research and Chrome extension.

  • Hover card in the app. Every ticker in the app opens the same card as the extension: the quote, your position, the verdict, earnings, analysts, catalysts, intraday, lots, round trips and fills.

November 2, 2026#

  • Investi for Chrome 0.1.6. The extension, renamed from Investi for Schwab, now shows its card on Yahoo Finance, Google Finance, TradingView, Robinhood, Seeking Alpha, MarketWatch, Finviz, Morningstar, Fidelity and E*TRADE as well as Schwab, and the card scrolls to earnings and analyst insights. See Chrome extension.
  • Documentation site. These docs, at /docs: Markdown sources with a search index, a copy-as-Markdown button on every page, /llms.txt, /llms-full.txt and a .md URL for every page. The strategy rules and the MCP tool reference are generated from the code at build time.
  • Open sign-up. Anyone can create an account at /setup; each account is a private workspace. The earlier setup token, email allowlist and invite links are gone. See Create an account.
  • Quality-Velocity Framework v5. The default strategy policy is now quality-velocity version 2: a solvency and leverage quality bar, filing flags (FLAGGED), an entry gate scaled to 14-day ATR, sizing from market cap, liquidity and the market regime, an exit target on every verdict, a 7-day estimate, portfolio risk lines and a weekly review. Three MCP tools were added: get_market_regime, get_portfolio_risk and get_weekly_review. See Strategy rules.
  • Dot-matrix icon system across the web app, the extension and the desktop app, plus layout refinements to Settings, Analytics and Calendar.
  • Desktop app 0.1.0 and 0.1.1 published. A signed and notarized universal macOS build and a Windows installer, both available from /downloads. 0.1.1 carries the new icon. See Desktop app.

November 1, 2026#

  • Landing page rebuild and a fix for a production error on the landing page.
  • Desktop release pipeline. The release workflow creates a draft release, notarizes and staples the macOS disk image, verifies it, and only then publishes.
  • Security fixes. The login redirect collapses leading slashes so a crafted next value cannot leave the site, the login next parameter must be same-origin, and the OpenAPI document uses a relative server URL instead of trusting the request host.
  • Continuous integration. Every push runs the core, web and extension tests, the web typecheck and a production build.
  • Terminal interface, extension and desktop shell. The dark terminal-style interface, the landing and downloads pages, the Chrome extension with its hover card, the Tauri desktop app, the OpenAPI document and one-click extension connect.
  • The full app. Portfolio, Discover, History, Analytics, Calendar, Markets and Notebook; Schwab OAuth sync; the OAuth 2.1 server and the remote MCP server for Claude; a lock that serializes first-account setup; login rate limits.
  • Web foundation. The data layer (Postgres, or embedded PGlite locally), market and SEC data providers, authentication, portfolio, research, delayed live quotes, the price chart, and the Home and Research pages.
  • Calculation engine. The ledger (FIFO, LIFO and HIFO lot matching, round trips, splits, shorts), indicators, the versioned policy evaluator, risk, live quote handling, importers and the report schema.