Product changelog

The story so far.

From the first prototype to the partner program and 10X launch — every shipped release, in chronological order. Latest at the top.

CurrentV4Live Signals Overhaul, Notification Reliability & Guide v2
0Releases
0Improvements
V4Sep 24, 2026LATEST

Live Signals Overhaul, Notification Reliability & Guide v2

Live signal cards get a proper 3-band layout with a price ladder. TP/SL push notifications are deduplicated and routed through a shared dispatcher. The guide is rewritten as a customer-facing tour of every App Drawer page. Veronica stays online when the Groq core is down.

Cards breathe. Notifications arrive once.
DESIGNhome.live_signals_3band

Live signal card rebuilt as three horizontal bands — header strip (engine tag + pair + direction + entry + status pill + pnl), price ladder (SL → Entry → TP1 → TP2 → TP3 → TP4 as a horizontal rail with pip-distance labels), and footer strip (signal age + tap hint). Live signals pulse with a cyan glow + accent top edge so they read as "this is moving".

TRADINGhome.price_ladder

Replaced the cramped TP chip row with a connected price ladder. SL sits at 5%, Entry at 26%, TP1–4 fan out at 42/58/74/95% so neither edge clips against the card. Hit levels glow green; pip text turns green to match.

FIXEDhome.tp_chip_cascade

TP1/TP2/TP3/TP4 chips now turn green when their hit flag is true, even when the signal status is tp2_hit or higher. Previously TP1 stayed grey because the status-based fallback only matched the latest TP — cascade inference fixes it.

FIXEDnotify.dispatch_dedup

TP/SL pushes no longer fire twice when the engine bot retries the same event. /api/signals/[id]/event diffs the row state before and after the update and only fires the dispatcher on a real false → true transition. Retry POSTs are silent no-ops.

IMPROVEDnotify.sl_pnl_sanitize

Trade-closed push body now sanitizes the bot payload. Even if the bot stuffs -50 pips 💢 | P&L: -50 pips into pnl_pips, the template extracts the first signed number and renders P&L: −50 pips exactly once. Pipes → middle-dots, emojis stripped from reason_label / tps_secured.

ADMINnotify.force_refire_endpoint

New /api/admin/signals/notify-direct lets ops re-fire a notification for an already-closed signal — used to backfill user phones after a missed TP/SL. Accepts type, tp_hit, pips_secured + auth via service token.

NEWguide.customer_rewrite

/guide rewritten from scratch as a customer-facing tour of the App Drawer pages only. Plain English (no <code> tags, no route text, no game-speak). "Genesis FX" replaced with "Pulse Markets" everywhere. Grouped by drawer category: Home, Tools, Learn, OS 10X.

NEWguide.broker_setup

New Section 2 "Getting your broker set up" — interactive partner dropdown replaces the deleted /get-started wizard. Live list of active partners from /api/partners/qualified, copy-to-clipboard link + popup window for sign-up. Includes a 5-method funding walkthrough (crypto BTC/ETH/USDT, Trust Wallet, Google Pay, App Store, Play Store).

IMPROVEDguide.partner_popup

Picking a partner auto-opens their Pulse Markets signup link in a centered 520×760 popup window. The signup happens in the popup while the guide stays open underneath. The link row also exposes a "Open signup link" button to re-launch the popup if it was dismissed.

IMPROVEDai.veronica_fallback

Veronica AI chat stays alive even when the Groq core is offline. A rules-based fallback answers the four structured intents the LLM handles — trade-idea signal cards built from live Yahoo prices, curriculum glossary lookups, account context reads, and a structured-intent helper message. Responses are tagged with a "Local fallback" badge so the user knows the AI core is down.

EDUCATIONedu.ordering_arrows

Ordering quiz questions replaced HTML5 drag-and-drop with up/down arrow buttons. Touch devices couldn't reliably grab the 14×14 grip handle — large 34×34 buttons work on every input device. Desktop long-press drag still works via pointer events.

FIXEDdashboard.collapsed_routes

/dashboard/trading and /dashboard/profile now redirect to their collapsed home pages instead of returning 404. The Next.js edge cache no longer holds stale 404s for deleted routes — SW cache bumped + force-dynamic on the redirect handlers.

ADMINsignals.backfill_script

scripts/fix-nitro-signal.sh reads INTERNAL_API_TOKEN from env, peeks recent NITRO signals via /api/admin/signals/peek, and prints the exact curl template to backfill TP/SL hit state on missed events. Used to repair trades whose engine fired the event to /api/signals/notify instead of /api/signals/[id]/event.

PERFORMANCEhome.scroll_boxes

Live Positions and Trade History tabs got the same fixed-height scroll box treatment as Live Signals — 420px desktop / 320px mobile, custom dark scrollbar, top/bottom fade shadows via the local + scroll background-attachment trick.

V3Aug 16, 2026

Partner Program & 10X Launch

A complete partner program pass plus the launch of 10X — instant amplified capital on every account.

OS 10X is live. Deposit once, trade ten times.
PARTNERpartner.referral_chain

Fixed referral links dropping codes on mobile redirects. The param: Promise<{code:string}> Next.js 15+ signature is now properly awaited.

PARTNERpartner.onboarding_modal

First-time partners see an onboarding modal that collects the genesis_fx_link and confirms the Verstige referral link before they continue.

MOBILEmobile.ios_zoom_fix

iOS Safari no longer auto-zooms when focusing form inputs on /get-started. Applied font-size: 16px to .gs-input-wrap input and .gs-select-wrap select.

NEWos10x.marketing_surface

New landing-page section presents 10X as a native Verge product — three-tier pitch: marketing → comparison → CTA. No broker name surfaced.

NEWos10x.dashboard_route

New /dashboard/os10x route with a tier-aware cheat sheet (T1–T4). Drawer entry under the Trading group.

IMPROVEDlanding.genesys_sweep

Swept every broker-name mention off the public landing page. Brand lockup collapsed to single identity. CSS class names left alone to preserve the GSAP scroll trigger.

IMPROVEDeducation.nextup_widget

Continue Learning widget rewritten to use the DashboardCard shell. Removes bespoke styling — matches the rest of the dashboard family.

ADMINadmin.notification_audit

New endpoint /api/admin/notification-audit runs a full push pipeline diagnostic for any user. Returns user, vapid, subscriptions, smoke_test, and a flat verdict.issues array.

ADMINadmin.task_office_notifications

When a partner task is assigned to a known office user, a web-push notification fires with the task title and a deep-link to /dashboard/tasks. Non-fatal if VAPID is unconfigured.

V3.1Aug 22, 2026V3 → 1

Trader Signals & Profile Polish

Trader signals become a real product. Profile, wallet, and the home dashboard get the full Verstige OS treatment.

TRADINGtrader.signal_card_prestige

Trader signal cards redesigned as prestige trading cards — profile pic, TP1/TP2/TP3, SL, chosen symbol, with a confirmation animation on send.

TRADINGtrader.send_signal_from_trading

Compose signals from the trading page itself. The SendSignalModal is the canonical send surface — /dashboard/trader-hub and /dashboard/trader are gone.

TRADINGtrader.tp_sl_actions

TP1, TP2, TP3, custom TP, and SL actions live on every trader signal card — one tap to update or close.

NEWtrader.push_fanout

When a trader sends a signal, every follower gets a PWA push notification with the symbol and entry price. Non-blocking if VAPID is unconfigured.

ADMINadmin.trader_access_toggle

Admin can flip any user to trader from the Access tab in Customer 360. Independent of the separate enable-trader flag.

ADMINadmin.manual_os_points

Manual OS-points adjustment in the admin Clients/Manage drawer. Writes to both the new os_points_ledger and the legacy os_point_ledger for idempotency.

FIXEDtrader.user_aware_rate_limit

Trader actions use a per-user rate bucket — 300 POST / 600 GET per minute keyed by JWT hash. No more "Too many requests" storms.

DESIGNprofile.overview_gorgeous

Overview tab redesigned with a hero card, gradient tier badge, animated progress bar, and a 2x2 stats grid.

DESIGNprofile.experience_rewards_engines

Experience, Rewards, and Engines tabs got the same animation treatment — staggered entrance, hover lift, conic-gradient tier rings, shimmer overlays.

MOBILEmobile.iphone_avatar_pwa

iPhone HEIC/HEIF photos upload correctly from the PWA. Service worker, manifest scope, and Supabase bucket mime-types all updated.

DESIGNwallet.debit_card_design

Wallet cards redesigned to look like debit cards — V brandmark, contactless icon, EMV chip, monospace card number, cardholder name, valid-thru.

FIXEDtrading.forex_solusd_pnl

P&L pricing is correct for every symbol — non-JPY forex at 100000 contracts, JPY at 667, BTC at 1, SOLUSD at 1000, NAS100/US30 at 10, XAUUSD at 100.

FIXEDquiz.server_authoritative_points

Quiz points now award through the server. Pass/fail popup fires reliably on every quiz completion.

FIXEDstreak.utc_dates_end_to_end

Daily streak compares UTC dates end-to-end so the popup stops re-firing on the same day.

IMPROVEDwins_view_redesign

WinsView tab redesigned end-to-end. Data accuracy fixes, new layout, real numbers.

V3.2Aug 23, 2026V3 → 2

Onboarding Lifecycle & Email Pipeline

New customers get a guided 7-step onboarding that gates the trading floor. Every level-up, engine unlock, and OS-points milestone fires a confirmation email.

Onboarding is no longer optional — it gates the trading floor.
NEWonboarding.7_step_wizard

New customers walk through a 7-step onboarding wizard: profile, accent theme, risk disclaimer, connect broker, link TradeLocker, enable push, walkthrough.

NEWonboarding.gate_trading_floor

Until onboarding is complete, /dashboard is locked. The wizard lives inline on /dashboard so the user can finish it without leaving home.

NEWonboarding.product_tour

An interactive 12-stop spotlight tour walks new users through the live app. Skip/Next/Back controls, ESC to exit, anchored to real UI elements.

PARTNERpartner.lifecycle_column

The downline table gets a Lifecycle column — green / yellow / red pills show each referred customer's onboarding progress. Click any row to see the full checklist.

NEWemail.level_up

A confirmation email fires automatically the moment a user crosses an OS level threshold.

NEWemail.engine_unlock

Every engine unlock triggers an email — know the moment a new instrument goes live.

NEWemail.os_points_milestone

OS-points milestones (100, 250, 500, 1000, 1500, 2500, 5000, 10000) each send a milestone email. UNIQUE-protected so duplicates never fire.

NEWemail.rank_upgrade

When a partner ranks up, they get an email confirming the new IB lot rate and any cash bonus.

FIXEDauth.cookie_mirror

The supabase-js session now mirrors to a document cookie on login, so internal SPA navigations carry auth to the middleware.

FIXEDmiddleware.bearer_fallback

Middleware accepts Authorization: Bearer as a fallback when no session cookie is present. PWA users no longer get bounced on internal navigations.

V3.3Aug 24, 2026V3 → 3

Partner Portal v3 & Onboarding Reliability

The Partner Portal is rebuilt as a true portal — sticky tab bar, sidebar widgets, and the full Verstige OS visual language. Onboarding no longer glitches on PWA cold-start.

DESIGNpartner.portal_v3

Partner Portal redesigned as a true portal: header strip, KPI row, sticky segmented tab bar, content column, sticky sidebar with rank hero + share card. Montserrat + Outfit + JetBrains Mono. Conic-gradient progress rings. Scanline overlays. Per-rank accent theming.

FIXEDonboarding.no_false_glitch

OnboardingHero no longer claims "Welcome to Verstige OS" while data is loading. useUser().profile.onboardingComplete is the synchronous source of truth — if you're already onboarded, you see the done pill immediately. Only unknown users see a slim shimmer placeholder.

FIXEDonboarding.no_redirect_loop

The page-level gate replaces the middleware gate, so closing + reopening the PWA no longer bounces you in a loop. Trading Floor is reachable the moment onboarding is complete.

FIXEDonboarding.dragon_reference_removed

Onboarding copy no longer references the DRAGON engine — it now reads as setting up the Verstige OS system, your risk profile, and your TradeLocker connection.

FIXEDpartner.lifecycle_pill_local

LifecyclePill is now defined locally inside PartnerPortal so the downline cards never crash on a missing export.

DESIGNpartner.outfit_montserrat

The whole portal — rank hero, ladder, downline table, share chips, status pills — now uses the Verstige OS typography stack: Outfit for headings, Montserrat for body, JetBrains Mono for numbers and codes.

V2.2Aug 14, 2026V2 → 2

Education & Polish

Real curriculum instead of placeholder content. Profile nav matches the rest of the system.

EDUCATIONeducation.curriculum_phases

Phase 1-3 audit fixes — real curriculum, module quiz, server-side gate. Glossary now tracks seen and unseen terms.

EDUCATIONeducation.points_rpc_fix

Server-side points award no longer loses auth context. Switched from HTTP fetch to a direct sb.rpc("os_award", ...) call.

IMPROVEDprofile.next_unlocks

Profile: Next Unlocks sorted ascending, closest highlighted, distance shown. New Engines tab and Experience Level tab.

V2.1Aug 12, 2026V2 → 1

Trading Goes Live

The trading terminal moves out of prototype mode. Real orders, real fills, real-time position updates.

No more mocks. The terminal is real.
NEWtrading.terminal_live

Trading terminal moves out of prototype mode. Real orders, real fills, real-time position updates.

TRADINGtrading.optimistic_orders

Submit feels instant, reconcile on response. Order state updates locally before the broker confirms.

TRADINGtrading.live_pnl_sl_tp

Live P&L and SL/TP shown on dashboard position cards. Reads broker.positions over SSE and re-renders on every tick.

FIXEDtrading.close_order_canonical

Close button now uses the canonical broker close semantics — type=market, validity=GTC, parentId linking to the position. Verifies the close actually settled before returning success.

PERFORMANCEtrading.instruments_cache

DB-backed instruments cache eliminates the broker rate-limit window. Five-minute server-side TTL with stale fallback.

MOBILEmobile.connect_account

Connect Account button hides once balance is loaded. Dropdown click-to-toggle on mobile (no more hover-only menus).

V2Aug 10, 2026

Real-Time Trading Surfaces

Real-time market data goes live. The trading surface becomes a real product, not a prototype.

TRADINGtrading.sse_stream

SSE real-time market stream with shared broker connection. Server-sent events over /api/trading/stream for live price ticks.

TRADINGtrading.live_chart

Live chart with proper sizing, candle rollover, and a real cache badge. Server-side chart cache stops the rate-limit cascade.

TRADINGtrading.symbol_picker

Symbol picker expanded to seven instruments (SOLUSD, EURUSD, XAUUSD, NAS100, US30, GBPJPY).

IMPROVEDtrading.dropdown_overflow

Symbol dropdown no longer clipped by header overflow. Proper z-index stacking on the trading page.

PERFORMANCEtrading.chart_cache_key

Chart cache key drops lookback window — fixes the always-miss bug that was hitting GET /api/chart on every render.

V1.2May 21, 2026V1 → 2

Reliability & Real-Time Foundations

Foundational infrastructure work — broker integration hardening, reliability fixes, early real-time plumbing.

COREinfra.centralized_client

Centralized database client — single import surface across the app. Eliminates duplicated createClient(...) boilerplate.

SECURITYauth.access_guards

Dashboard access guards — route-level auth checks. Conditional navigation for unauthenticated users.

COREinfra.env_safety

Build-time safety for missing environment variables. Surfaces a clear error instead of crashing at runtime.

COREinfra.local_fonts

Local font loading via fontsource — no CDN dependency at build time.

FIXEDinfra.cors_resolved

CORS resolved across all routes. Standardized API URLs — no more environment-specific bugs.

FIXEDinfra.suspense_login

Suspense boundary around login form. Resolves Netlify prerender error on first paint.

V1.1Feb 18, 2026V1 → 1

Signals Engine & Brand

The signals engine ships. Auth becomes brand-consistent. The foundation becomes production-ready.

NEWsignals.engine

Real signal engine with authentication — no more stubs. Debug logging for signal execution paths.

DESIGNauth.brand_login

Brand-consistent login page. Refined authentication flow with proper session lifecycle via the layout-level provider.

IMPROVEDsignals.types

Centralized signal types — SwipeSignalCard uses the shared model. No more inline type definitions across components.

V1Feb 14, 2026

The Foundation

Verstige stops being a prototype and starts being a product. Trading dashboard overhaul, profile redesign, first real signals surface.

Where it all started.
DESIGNtrading.dashboard_overhaul

New Chart, Journal, Calculator, and Indicator tabs. Premium glass-morphism UI across the trading surface.

DESIGNprofile.institutional_hero

Institutional hero on the profile page. Integrated accounts management inside the profile. Restored genealogy experience with holding tank and drag-and-drop.

NEWtrading.auto_trader

Premium Auto Trader view with futuristic neural background. Auto Trader integrated into the Trading page. socket.io-client runtime import — no SSR breakage.

COREprofile.performance_goals

Performance Goals relocated to the Career Level section. Single source of truth for trader progression.