Skip to main content

Changelog

Every update to the platform — new features, fixes, performance wins, and security hardening.

v1760

Copy-settings safety overhaul & multi-account isolation

  • Smart Entry now respects your settings. The MT5 and MT4 Copier EAs were placing pending limit orders even when smart entry was disabled, AND ignoring the user-configured pip threshold. Now strictly gated on both flag and threshold (MT5 v3.16, MT4 v3.15).
  • Copy-settings parity end-to-end. Lot mode (proportional/risk-based), day-of-week filter, session-hour window, and signal-expire-after-N-minutes all reach the EA correctly — previously the server emitted them under different JSON keys than the EA read, silently bypassing every one. Affected lot sizing, time-of-day filters, and stale-signal rejection.
  • MT4 Provider JSON escape parity. Broker server names containing C0 control bytes (rare but real) no longer cause silent signal-broadcast failures — now matches the strip-rather-than-escape behaviour the MT5 EAs already had.
  • Spread filter end-to-end. Provider EAs now report spread_points with each signal so the copier-side max_spread_filter setting actually fires server-side.
  • Same trader subscribed on multiple broker accounts is now fully isolated. Trade-open dedup, close lookup, race recovery, max_trades count, re-subscribe orphan cleanup, and cron PnL aggregation all respect broker_connection_id. Previously a multi-broker follower could see broker B’s open report rejected as duplicate, broker B’s close close broker A’s trade, or daily PnL double-counted across both accounts (triggering premature auto-pause).
  • Multi-strategy subscriptions to the same trader no longer cross-contaminate max_concurrent_positions and correlation filter state. Each subscription’s filters fire only against its own strategy’s open trades.
  • Account-scoped EA polls (?account=N) now fail closed on transient DB error instead of returning all accounts’ signals — prevents a wrong-broker signal leak during a DB blip.
  • Stale public/ea/ directory was serving 1-day-old EA files even after source updates — users were downloading the OLD broken EAs. Sync ritual added to deploy process.
  • EA version constants (EA_VERSIONS in downloads endpoint) refactored to per-platform map — was single value per type, so MT4 and MT5 versions couldn’t both be reported correctly when they diverged.
  • Downloads page version pills (Quick-Start banner, EA cards, install prerequisites) updated to show actual current versions — were lagging multiple releases.
  • Admin add-note button stayed permanently stuck on “Saving…” after success — reset only happened on error.
  • Admin approve-payouts button stayed permanently stuck on “Processing…” if the verification-code prompt was cancelled.
  • chat.html DELETE button and admin.html health-check fetch could hang indefinitely — now bounded by fetchWithTimeout.
  • aria-label added to icon-only dismiss/unpin/delete buttons (dashboard alert, chat pinned message, trader-dashboard trade template).
  • Status page entrance animations honour prefers-reduced-motion.
  • EA listing thumbnails on Provider Hub now have descriptive alt text + lazy loading + async decoding.
  • stripe-connect endpoint validates SITE_URL with the same regex as stripe-checkout/downloads — defence-in-depth across all Stripe-redirect callers.
v1464

Email system overhaul & SEO sitemap upgrades

  • Newsletter drip campaign — 5-email automated sequence for subscribers (Welcome, Social Proof, Trader Spotlight, Profit Calc, Final Push) plus 4 broadcast templates (Demo Copying, Strategy Builder, EA Builder AI, Become a Provider).
  • Weekly Top 10 Traders email — ranked discovery blast every weekend to all marketing-opted-in users + newsletter subscribers, with medals and tailored intros per recipient type.
  • Branded email design system — every email (26 templates) now uses the platform’s exact dark-theme tokens (#030711 bg, #6366f1 accent, #a78bfa accent-2, #10b981 green) for visual consistency with the platform UI.
  • Admin email preview — preview any of 26 templates in-browser (iframe) or send to your inbox (TAN-gated) from the Email Templates tab.
  • Newsletter funnel dashboard — admin sees signup totals, conversion rate, drip stage distribution, top sources. CSV export for off-platform analytics.
  • Dynamic SEO sitemaps/sitemap-traders.xml + /sitemap-strategies.xml auto-generated from D1 with slug-based vanity URLs when available. Sitemap index ties them together.
  • Public landing pages indexable — /affiliate and /settings-store now reachable by search engines (were blocked in robots.txt by mistake).
  • Chat sidebar showed empty rooms — fetch() was passing only cookies but the platform uses JWT bearer auth.
  • Sending a chat message would 401 silently — same bearer-token bug.
  • Earnings statement PDF download from Provider Hub would 401.
  • Newsletter unsubscribe links were dead-ending at the login page for non-account subscribers (CAN-SPAM compliance issue).
  • Newsletter signup form was overwriting custom CTA labels with “Subscribe” on success.
  • Hidden strategies (force_hide) were still exposed in the SEO sitemap — privacy/SEO leak fixed.
  • HTTP Link: preload header was pointing at a stale CSS/JS version (404 then re-fetch).
  • Admin Browser Preview button used wrong token storage key (would 401).
  • Admin disable-2FA / change-role didn’t invalidate the user’s existing JWT or push subscriptions.
  • Stripe transfer.failed async events weren’t handled — failed transfers stuck silently.
  • Password minimum aligned to 10 chars across the whole stack (frontend HTML attrs, frontend JS, backend) — was inconsistent (frontend 10, backend 8) so API direct-callers could create weaker passwords.
  • Backup code consumption now sends a security-alert email so users notice unauthorized access immediately.
  • Email-scoped HMAC tokens for newsletter unsubscribe (separate from user-scoped tokens to prevent cross-type reuse).
  • Cleanup cron now purges expired admin trusted sessions and long-unsubscribed newsletter subscribers (GDPR data minimization).
  • Sitemaps cached at the edge for 1 hour — crawlers don’t hit D1 on every request.
  • Newsletter subscriber stats endpoint parallelizes 4 aggregate queries.
v1377

Payout approval gate & ledger reconciliation

  • Admin-gated provider payouts — trader transfers now require explicit admin approval, no longer auto-executed.
  • 30-minute trusted IP session for admin approvals — email 2FA once, then approve/decline freely.
  • Drawdown alerts — copiers automatically notified when their subscription enters >15% drawdown.
  • Trial engagement emails — welcome on Day 1, nudge on Day 7, final warning before expiry.
  • Affiliate commission reconciliation — daily cron audits billing periods vs payouts for drift.
  • Admin impersonate — support can log in as a user to reproduce reported bugs (fully audited).
  • Support button opens the correct chat thread (was showing a generic error).
  • “Provider Hub → My Strategies” link lands on the strategies tab.
  • HWM now resets correctly when a copier stops and re-subscribes.
  • Negative ending_equity no longer poisons future billing (clamped to 0).
  • Trial expiry now enforced at the signal level — no more free riding past trial end.
  • Stripe account.deauthorized events correctly flip onboarding status.
  • 1¢ underpayment loophole tightened — exact amount required.
  • Orphaned open trades auto-cleaned when a copier re-subscribes.
  • Health endpoint latency: 150-300ms → ~40ms (parallel DB queries + edge caching).
  • 10 new database indexes covering affiliate, login audit, billing, notifications, follower trades, signals, strategies, broker connections, and platform fees.
  • Signal poll freshness: just-cancelled signals filtered within 500ms to prevent mid-execution races.
  • Stripe API version pinned across all calls — no more silent breakage on API updates.
  • Webhook secret rotation has an expiry window — deprecated secrets auto-reject past their grace period.
  • Stripe disputes (fraud, product_not_received) auto-flag trader for review and freeze pending payouts.
  • Multi-currency destination check blocks silent FX conversion on provider transfers.
  • Affiliate fee floor: skip payouts where fees would consume >90% of commission.
  • JWT refresh timing edge-case closed (>>= on password-change check).
  • Forgot-password timing jitter widened to defeat statistical enumeration.
v1350

Premium UI overhaul & visual polish

  • “Unlock Public Listing” checklist card on Provider Hub showing email verification + Stripe Connect progress.
  • Premium empty states across dashboard, strategy builder, EA builder, FAQ, brokers, and marketplace.
  • Pulse animation on EA download cards when deep-linked from dashboards.
  • Stripe Connect status cards with 3 variants (empty / onboarding / connected).
v1292

Google OAuth & unified registration

  • One-click Google Sign-In on register & login pages.
  • Unified account model — register once, activate Strategy Provider later from settings.
  • Dual-role support: traders can copy other traders while providing their own strategies.