recently shipped.
We ship constantly. This page is the receipt — every meaningful change in plain language, newest first. If you want the raw engineering log, that lives in git.
- featurePro Dashboard — your alert history, fill log, captured edge
New /dashboard page for Pro subscribers. Lifetime stats (alerts received, captured edge, fills logged, pro since), date-window filter, full alert history with inline fill logging — record what size you actually filled at on each arb. Brand-new Pros get a guided what-to-expect panel showing their current alert config and links to /sandbox + /track-record while they wait for the first alert.
- featurePost-checkout setup wizard at /onboarding
New Pros used to land on /account with a green banner and zero next-step guidance. They now flow through a 3-step wizard: set your alert threshold, optionally connect a Slack/Discord webhook, then a summary screen with curated links. Existing Pros who haven't been through it get a 'finish setup' CTA on /account. Skippable from any step.
- feature/arbs page — clearer hierarchy, bigger edge readout
Each row now has a real two-column structure: market title + venue tags on the left, the edge % as a big mono numeral on the right. New header summary line shows N active · best edge · best size at a glance. The information was right before; the visual weight wasn't.
- pageLanding — inline FAQ section
Six honest Q&As between How-It-Works and Pricing: how much capital you actually need, is this legal in the US, why the list is sometimes empty, do you place trades for me, what's the catch, how is this different from doing it myself. No fake testimonials.
- featureSandbox — click any historical arb to replay it
The four cards under the featured replay are now interactive: click one and that arb becomes the featured replay with a fresh animation. The featured slot is no longer locked to the first arb in the list.
- featureTrack-record — expandable rows show every capture
Multi-capture rows used to collapse N captures of the same market into one summary. Click the chevron and you now see every individual capture's timestamp, edge, size, profit, duration. Single-capture rows are unchanged.
- pageFive new /learn field guides
Is Polymarket legal in the US (post-CFTC update). Kalshi fees, explained with a worked table. How much capital do you actually need to start. Prediction markets vs sports betting — what's actually different. How Tellmarket detects an arb (full pipeline walkthrough). Brings the /learn library from 4 to 9 pages.
- featureScanner-heartbeat email on quiet days
If no arbs cleared the gates in 24 hours, the daily digest used to silently skip. Subscribers who haven't received any digest in 7+ days now get a one-line 'still scanning' email with current scanner state (markets scanned, matched pairs, hours since last arb). Cap of one per UTC day per subscriber stays.
- featureSocial-share preview cards for every page
When someone shares a tellmarket.app link on Twitter / Slack / iMessage, the preview now renders a branded card with the page's headline — not the bare URL.
- fixLogin + watchlist render cascades fixed
Two client-side bugs that caused an extra render on mount: the guest-checkout claim flow on /login pre-set OTP state from inside an effect, and the /markets star button rehydrated its localStorage on mount via the same anti-pattern. Both now use the correct React primitives (useState initializer and useSyncExternalStore).
- page/security — public security disclosure page
What we use Stripe / Supabase / HTTPS / signed webhooks for. What we don't have yet (SOC 2, bug bounty). How to report a vulnerability. The kind of page investors and security-curious customers actually want to see.
- page/.well-known/security.txt + /humans.txt
RFC 9116 vulnerability-disclosure pointer plus the humansTXT credits file. Tiny signals that a real team works here.
- opsIngestion memory bumped 512 MB → 1 GB
The bot was OOM-killed twice overnight after yesterday's matcher upgrades added headroom pressure. Doubled the budget; ~$2/month more on Fly. No more kernel kills, snapshots flowing continuously.
- featureDaily-digest email
If any arbs cleared the gates in the previous 24h, every confirmed subscriber gets a single digest email at 8am ET. One per day per subscriber, deduped at the database. Doesn't fire when there's nothing to report.
- featureMatcher now runs TWO independent LLM passes
A 0.92+ similarity match used to activate as soon as gpt-4o-mini said "same." Now it gets a second opinion from gpt-5-mini and both verdicts are stored for audit. Until we trust the agreement rate, every new pair still queues for human review.
- fixSelf-heal for transient network blips
Cloudflare HTTP/2 stream terminations used to stall the ingestion loop indefinitely — required a manual restart. The loop now detects connection-class errors and rebuilds the database client inline.
- page/learn/the-math — fee derivation page
Exact Kalshi + Polymarket fee formulas with a worked numerical example. Matches the constants the scanner actually uses. Linked from /faq and the /learn hub.
- featurePro hero tile on /arbs
When a live arb exists, Pro users now see the best-current opportunity in a prominent featured card above the row list — with both exchange CTAs and a stake-size slippage estimator inline.
- featureColor-graded size badge on /arbs rows
Green ≥ $500 capturable, amber ≥ $50, gray below. Glanceable signal for which arbs are worth a real position vs a token one.
- featureSlippage estimator on the market detail card
Enter a stake; see the profit that survives at that size. Capped honestly at the depth resting at best quotes (we don't pretend the edge scales infinitely past the visible book).
- fixWeb users can finally delete their account
The /account delete endpoint used to accept only an iOS-style Bearer token; web sessions are cookie-based, so web users couldn't trigger the delete. Now accepts either. GDPR/CCPA matter regardless of platform.
- fixDNS-resolved SSRF guard on Pro webhooks
When a Pro user configures a Slack/Discord webhook URL, we now resolve its hostname and refuse to call it if it points at a private/loopback/cloud-metadata address. Closes a class of attack common against new SaaS.
- fixStripe webhook hardening
Webhook processing is now insert-first (one delivery wins the race, others see duplicate). The billing-portal session URL is bucketed every 15 minutes so re-opening the portal hours later doesn't hand the user a stale link.
- fixThe Polymarket parse bug — fixed
We'd been treating Polymarket's best bid/ask as the FIRST entry in their CLOB book; it's actually the LAST. Every Polymarket leg looked like a 98¢-spread illiquid book and our liquidity gate rejected everything. Fixing this surfaced the first real cross-exchange arb the scanner has ever caught.
- fixAccount deletion cancels the Stripe subscription first
Used to delete the account row and orphan the subscription — card kept getting billed with nothing left to reconcile. Now we cancel first; abort the delete if Stripe errors so we never strand a paying customer.
- pagetellmarket.app launched
Web-only launch. Stripe live at $29/month or $199/year. Email alerts via Resend. iOS app paused until we hit $1k MRR.