Changelog
What's shipped on sma200.trade. Updated when meaningful things change: new content, methodology revisions, infrastructure, open-source releases. Build-in-public ethos. Subscribe to the articles RSS or research RSS if you want to be notified.
2026-05-31
- Monitoring and auto-revive so silent failures do not happen again. The Friday weekly newsletter is now backed by a layered watch system: external probes hit the app every 5/10/60 minutes, the worker process heartbeats every 60 seconds, every scheduled job records success or failure into an audit table, and overdue jobs trigger an operator email. On startup the worker also runs a catch-up pass for any job that should have fired while it was down (up to a 7-day grace window), with a clear banner in the email body explaining the delay. If the worker stops, the system tries to restart it automatically via the Fly Machines API.
2026-05-29
- Auth rewrite: signup-primary layout, context-aware copy that remembers what visitors were trying to track, password option alongside magic links. Clicking "Get alerts for TQQQ" on a ticker page now lands on /auth with a "Your TQQQ alert is ready" headline, and after signup the subscription is created automatically, no re-clicking the original button. Sign-in is a small link instead of a parallel form; password (argon2id) sits alongside the magic-link option. /account grew a password-management block.
2026-05-28
- Daily Reddit auto-post pipeline. New
/_generate_dailyendpoint returns Reddit-formatted status of all 9 major ETFs. Consumed by a desktop cron that pushes to local WordPress, FS-Poster auto-shares to r/sma200.
2026-05-24
- Per-ticker SMA200 alerts. Signed-in users can subscribe on any ticker page for an email when that ticker crosses its 200-day moving average. Direction-aware (above, below, or both), 7-day cooldown per subscription to suppress whipsaws, one-click unsubscribe.
- Personal watchlist. Add any ticker to your watchlist from its page; view all of them in one card grid at /watchlist. Independent of alerts (watch without subscribing, or vice versa).
- /account grew. Lists active alerts with per-row direction edit and remove, plus a watchlist count summary.
- IndexNow integration. New articles and research notes ping Bing + Yandex within minutes of going live (instead of waiting for natural crawl). Wired into the publish-gate cron so scheduled-future content gets indexed as soon as it reveals.
- Ticker page share row expanded. Share to X, Reddit, email, or copy link — all from one row. Same blurb across channels.
2026-05-23
- Auth foundation. Sign in to sma200.trade via emailed magic link. No password to remember, no signup form. Foundation for upcoming per-ticker alerts and watchlist features.
2026-05-20 → 2026-05-22
- /learn renamed to /articles. Clearer split vs /research (our research vs explainer posts). 301 redirects preserve all old links.
- Write-ahead publishing. Articles and research notes now ship into the repo with a
published_at:frontmatter timestamp and auto-reveal on schedule. Three articles already queued for the next 10 days. - Hover-preview cards on internal links. Wikipedia-style tooltips fetched from a small
/api/previewendpoint. Skipped on touch devices. - Public /oembed endpoint. Substack, Notion, Discord, Ghost, WordPress and other oEmbed-aware clients render rich preview cards when anyone pastes an sma200.trade URL.
- Market-closed banner on the homepage. NYSE holiday calendar through 2030 surfaces a "markets closed today for X. Next close: Y" notice on weekday holidays so visitors aren't confused by the prior Friday's close date showing as the latest.
- Weekend-aware data fetcher. Skips yfinance refetch on Saturdays and Sundays when the cache already has Friday's close. ~28% reduction in upstream API hits, zero user-facing change.
- Weekly newsletter time shift: Fri 15:30 ET → 17:00 ET. The old time fired 30 min before the close, so yfinance returned Thursday's bar. Moved to 1h post-close so subscribers get Friday's actual settle.
- Content-Signal directive restored in robots.txt body in addition to the HTTP header — covers AEO audit tools that parse the body and AI engines that read the header.
2026-05-19
- Public research library at /research. 9 backtest study write-ups plus 10 "durable findings" — cross-study claims with linked evidence. Includes a methodology correction for synthetic LETF backtests (see below).
- Methodology correction: synthetic LETF borrow cost. The synthetic-LETF formula used in earlier research notes omitted the daily borrow cost real leveraged ETFs pay. Calibration vs real TQQQ showed the old numbers overstated returns by 62% over 2015-2024. Fixed formula tracks real TQQQ to within 5%. All affected studies marked with supersession notes.
- Open source: sma200-bt. The corrected harness extracted as a standalone MIT-licensed Python package. Six pytest cases pin the formula. Pip-installable.
- New article: The Hidden Cost Every Leveraged-ETF Backtest Ignores. Walks through the bug, the fix, and the refined SMA200 framing that comes out of the corrected numbers.
- Self-hosted newsletter cron. Replaced external cron-job.org trigger with a dedicated Fly worker process. No shared secret leaves Fly infrastructure.
- Email share blocks. Welcome + recap emails now include one-click share targets (X, Reddit, mailto) plus a "forwarded by a trusted trader? subscribe" CTA for recipients.
- Monthly newsletter cadence. Signup form now offers weekly (Fridays) or monthly (last Friday of month) frequency.
- RSS + JSON Feed. /articles/feed.xml, /research/feed.xml, /feed.json auto-discovered from every page.
- SEO + AEO infrastructure pass. Internal article cross-linking, llms.txt with curated content index for AI crawlers, sitemap lastmod hygiene.
2026-05-15 → 2026-05-18
- Inline TradingView affiliate link on ticker pages. One small affiliate disclosure under each ticker's close-explainer.
- Cadence-aware welcome emails. Different subject lines and intro copy for weekly vs monthly subscribers.
- Always-on Fly machine. Bumped
min_machines_runningfrom 0 to 1 to eliminate cold-start tax on first-byte latency.
2026-05-11 → 2026-05-14
- Initial launch of sma200.trade. Homepage, per-ticker pages, OG share images, /articles section with two articles, /about, /disclaimer, /brokers, /support pages.
- Agent-readiness layer. agent-card.json, RFC 9727 API catalog, WebMCP fragments, markdown content negotiation. Designed for AI answer engines from day one.
- SMA200 convention pin. Switched yfinance to
auto_adjust=Falseafter a visitor reported our SPY SMA200 didn't match TradingView. The chart-standard convention now has a regression test.
What's next
Building in public. Major candidates in the queue:
- Public HTTP API for the synthetic LETF harness (currently Python-only)
- Drop-in
embed.jswidget so any blog or research site can decorate its sma200.trade links with our hover preview cards (one-line script include, no integration required)
Suggestions or requests: [email protected] or support page.