HBG Markets
⌘K

Changelog

Lo que se ha shipeado en Mesa. Sin deadlines inventados — releases por trigger.

v1.42026-05-02
Lead → Cliente cycle live · pricing surface · agent handoff
  • feat
    /mesa/pricing — anti-pitch en números
    Cockpit USD 0, APIs absorbidas USD 2k/mes (APIs institucionales), torneos $5/$30/$100 con split 80/20, 'lo que no te vamos a vender' explícito (no prop firm, no curso de USD 3k, no offshore, no challenge funded). Cross-sell mezcal a /mesa/insurgentes.
  • feat
    /api/payment/simulate · deposit → credits real
    Cookie-auth, ≤ USD 1000, 5/min/account. POSTea desde DepositPicker: applyLedger con kind=topup + actor=simulate:<rail>. TournamentDetail levanta banner '+$X acreditados vía MercadoPago/Clip/Binance/Bitso' al volver con ?deposited=1, mutate de /api/trading/credits, URL clean. Cierra el ciclo Lead → cuenta paper → entrada a torneo.
  • feat
    OrderTicket hotkeys para chained execution
    B/S → flip side, M/L → flip type, ↑↓ → qty ±10%, Enter → submit (funciona desde inputs). Submit lee canSubmit + handleSubmit por ref para no quedar stale. Cheatsheet inline en QuickTradeModal.
  • feat
    ShortcutHelpOverlay (?) — discoverable cheatsheet
    Press ? en el cockpit → modal que lista los 4 sistemas de hotkeys (g+letter nav, trade modal, chart drawings, ⌘K). Esc o ? para cerrar. Cierra el gap de discoverability del cockpit.
  • feat
    Disciplina pill en TopBar + URL-driven tab
    Pill 'LIMIT $X / $Y · NN%' aparece sólo cuando hay daily-loss-limit en localStorage. Mute → mesa-info ≥80% → mesa-down ≥100%. Click va a /mesa/account?tab=discipline. AccountTabs lee ?tab= de window.location (sin Suspense flash).
  • feat
    StatusFooter chrome refresh
    Versión bumped a v1.3 (link al changelog), hint ? para shortcut overlay, tag 'gratis para LATAM · APIs absorbidas' en xl. La línea estratégica vive en el chrome del cockpit.
  • feat
    feed unificado WS live · 515 instrumentos
    mesa-stream/src/slate.ts connecta WS a slate-labs.com cuando SLATE_API_KEY está set. Mirror a Redis tick:<cockpitId> + tick:slate:<bare>. /api/slate/quote ahora lee Redis primero (source: slate) y cae a market para missings (source: eodhd-fallback). Verificado en producción: BTC + EUR/USD + USD/MXN + Oro con bid/ask reales desde feed.
  • feat
    Shared CORS para mesa.hbg.markets
    src/lib/api/cors.ts con allowlist (terminal/mesa/cretalabs/local). /api/eodhd/{quote,intraday,eod,sparklines} y /api/slate/quote ahora son reachable desde el SPA Terminal sin proxy.
  • feat
    /mesa/welcome · founder voice + receipts
    Reescrito en voz fundador: 'Why it's free' lead con APIs absorbidas USD 2k/mes, receipts (10+ años · MT5 bots · Ultency engines · 800-employee CRMs · 18-system BI), tournaments inline ($5/$30/$100), Creta Labs ↔ Fraktal explícito. Cards reordenadas: Trade → Compete → Fund.
  • feat
    /mesa/about — Estructura · cómo se sostiene Mesa
    Section nueva ata Creta Labs (brazo de tech) ↔ Fraktal Wealth Management ↔ Mesa+Terminal públicos free ↔ paid arm bespoke (Ultency engines, CRMs, BI). Header bumped v1.3 / 47 surfaces / feed live. Origen linkea Insurgentes 1446.
  • feat
    /mesa/data-sources adds feed unificado
    Entry oficial: 515 instrumentos, ~1870 ticks/s, bid/ask reales, subscription absorbida por Creta Labs. Coherente con el 'APIs absorbed' framing del pricing page.
  • feat
    TournamentsHome · Tres velocidades tier explainer
    Daily $5 / Weekly $30 / Monthly $100 cards arriba del listado. Voz chilango sin slurs. El Monthly menciona watch-party físico en Insurgentes 1446 al cierre.
  • feat
    docs/AGENT_NOTES.md
    280 líneas — strategic context (Creta = tech powerhouse fueling Fraktal), voice rules, anti-patterns (sin funded program, sin time anchors), open user-action gates, hot state, where-to-look-when-broken, contract for the next agent. CLAUDE.md ahora apunta primero a AGENTS.md + AGENT_NOTES.md + MARKETING_STRATEGY.md.
  • fix
    AccountTabs reads window.location, drops Suspense flash
    El useSearchParams() forzaba el tab UI a flashear empty durante hydration. Switch a useEffect + window.location.search post-mount: SSR + tab chrome render inmediato, deep-links siguen funcionando.
  • fix
    Funded-program revert
    Ship anterior creó /mesa/funded + waitlist + comparativa siguiendo PM_BACKLOG_V2 item 8. La estrategia (MARKETING_STRATEGY.md §1, §6.7) explícitamente posiciona Mesa CONTRA prop firms. Reverted; reemplazado con /mesa/insurgentes (piso físico CDMX). Memoria saved: feedback_anti_prop_firm.md.
  • feat
    Share-on-X en leaderboard / trader profile / Hall of Fame
    Strategy doc §4.2 — el leaderboard es el funnel. Ahora cada row del global leaderboard tiene un X-icon que pre-compone tweet con rank + return + URL del perfil. /trader/[id] header tiene su propia variante. /winners tiene el share por cada top-3. Un click → tweet completo, sin retipear.
v1.32026-05-02
Hero chart — drawing tools, draggable SL/TP, P&L watermark, Terminal bridge
  • feat
    Drawing tools en el hero chart (TL · HL · FIB)
    Toolbar al lado del IndicatorMenu, persiste los trazos por símbolo en localStorage, Delete/Backspace borra el seleccionado. Pointer-events pasan al chart cuando no hay herramienta activa, así pan/zoom siguen libres.
  • feat
    Price lines en vivo: entry · TP · SL · limit · OCO
    useChartOrderLines lee /api/trading/orders + /api/trading/positions cada 5s y pinta líneas horizontales: entrada (blanco con axis label), TP (verde, sólo si el limit cierra la posición), SL (rojo dashed), limit suelto (cyan), grupos OCO (naranja). Tear-down + re-attach en cada cambio.
  • feat
    Floating SL/TP draggable handles
    DraggablePriceHandles overlay con un pill de grab al borde derecho por cada stop/limit working. Drag vertical → preview line dashed, drop → PATCH /api/trading/orders/:id. Tick rounding por magnitud (≥1000 → 0.1, ≥100 → 0.05, ≥1 → 0.01, <1 → 0.0001) hasta que aterrice metadata por instrumento.
  • feat
    Per-second tick splice + 1m timeframe
    La última vela hace splice con cada tick SSE (high/low/close se mueven sin re-allocar la barra). secondsVisible: true en el time axis. Nuevo timeframe '1m' como primer pill (default sigue 1D para safety cross-asset).
  • feat
    P&L watermark flotante
    Cuando hay posición abierta sobre el símbolo activo, un número grande mid-right muestra unrealized P&L USD + % + qty. Verde positivo, rojo negativo, mute en cero. 55% opacidad — los candles siguen legibles. Polls /api/trading/positions cada 3s.
  • feat
    Terminal bridge en el TopBar
    Pill con dot pulsante junto al Trade button abre mesa.hbg.markets en pestaña nueva. Mismo backend feeds institucionales, surface separado optimizado para active trading.
  • feat
    Disciplina pill en el TopBar
    Cuando hay daily-loss-limit configurado en /mesa/account → Disciplina, el TopBar muestra LIMIT $X / $Y · NN%. Mute por default, mesa-info ≥80%, mesa-down ≥100%. Click → tab discipline. AccountTabs ahora lee ?tab= del URL.
  • feat
    feeds institucionales REST CORS para mesa.hbg.markets
    Shared CORS allowlist en src/lib/api/cors.ts. /api/eodhd/{quote,intraday,eod,sparklines} reachable desde el SPA terminal. Nuevo /api/slate/quote — REST stub que cae a market con source=eodhd-fallback hasta que mesa-stream wire la WS de feed unificado (515 instrumentos · ~1870 ticks/s).
v1.22026-05-02
Conversion surface — legal, onboarding, Insurgentes 1446
  • feat
    /legal/terms · /legal/privacy · /legal/risk-disclosure
    Tres páginas legales completas en ES + EN. Términos cubren tournaments, paper-trading scope, governing law (México). Privacidad lista sub-procesadores (infra hosts + market data + AI provider) y datos de retención. Aviso de riesgo desglosa los límites del simulador y la naturaleza informacional de los reports AI.
  • feat
    /mesa/insurgentes — el piso físico
    Sala de trading en Insurgentes Sur 1446. El día que cierra un Monthly, los participantes lo ven en vivo en las pantallas. Mezcal de la casa, traders de verdad, no un cowork con vitrales y cerveza barata.
  • feat
    /mesa/welcome onboarding tras signup
    Tres cards de primera acción (torneo abierto / cockpit / alertas) + reference links. Auth callback redirige a /mesa/welcome al confirmar email para colapsar el funnel de activación.
  • feat
    Disciplina tab en /mesa/account
    Loss limit diario, posición máxima como % de equity, cooldown después de N pérdidas seguidas, auto-pausa de torneos por 30/90/180 días. Honor system hoy (localStorage); el motor lo aplica end-to-end cuando v2 lleve dinero real al rail.
  • feat
    Signup acepta términos antes de submit
    Checkbox bloquea el submit hasta que el usuario acepta Términos + Privacidad + Aviso de riesgo. emailRedirectTo corregido para incluir el locale.
  • feat
    Auth shell Bloomberg-grade
    /signup y /login con shell propia: Creta lockup, kicker-eyebrow, tipografía tight, trust band (Auth via Supabase / Paper · 18+ / No data sale), legal links footer. ES + EN inline.
  • feat
    Hero retail CTA + Mesa nav locale-aware
    Hero homepage añade un secondary CTA 'Crear cuenta paper gratis · Mesa' debajo del pill principal. Navbar Mesa dropdown respeta el locale activo y prioriza Crear cuenta + Torneos + Insurgentes 1446 como primary entries.
  • feat
    Footer legal links + MesaSurfaces strip Insurgentes 1446
    Footer del sitio principal añade Términos / Privacidad / Riesgo. Landing-strip de Mesa pasa de cuatro entradas a nueve, incluyendo el piso físico de Insurgentes 1446 como entry distinta.
  • feat
    Public roadmap (/mesa/roadmap)
    Versiones gateadas por triggers operativos, no por fechas. v1.0–v1.2 live, v1.3 en curso (email pipeline, G6), v1.4 next (G2 Supabase migration), v1.5+ con multi-asset y real-money execution.
  • fix
    Vercel deploys (Turbopack ENOENT middleware.js.nft.json)
    Next 16.2.4 con Turbopack no emite el .nft.json del middleware, breaking la finalización de Vercel. Todos los deploys de las últimas 3+ horas estaban fallando silenciosamente. Build script cambia a 'next build --webpack' hasta que upstream lande el fix. Dev sigue corriendo Turbopack.
v1.12026-04-30
Trading engine v2 — live, end-to-end
  • feat
    Crypto WS feed swap
    Switched mesa-stream's crypto channel to a free public WS with native USD pairs (no USDT basis) and real best_bid/best_ask alongside the trade price for proper-spread fills.
  • feat
    Redis last-tick cache + engine hot path
    mesa-stream mirrors every ingested tick to Redis (tick:<symbol> TTL 60s). priceMarketFill, the tick-orders cron, the snapshot cron, /api/trading/positions, and the leaderboard now all read cache-first and fall back to market HTTP only for non-crypto cold-cache misses. Crypto with cold cache rejects when REDIS_URL is set.
  • feat
    Real bid/ask in matching engine
    market forex/metals carry a (ask) and b (bid) — derive p = (a+b)/2 mid and persist both to Redis. priceMarketFill uses the real spread when available (ask + slippage on buy, bid - slippage on sell), falls back to the synthesized half-spread model otherwise.
  • feat
    OCO orders (one-cancels-other)
    POST /api/trading/orders/oco creates a TP+SL pair sharing oco_group_id. tick-orders fill path cancels every sibling in the same group inside the fill TX. PositionsTable gets an OCO button that opens a bracket dialog with live RR ratio + per-leg P&L preview.
  • feat
    Order modify (PATCH)
    PATCH /api/trading/orders/:id replaces limit/stop/qty in place — no cancel + reissue. Validates type-aware required fields, refuses to drop qty below qty_filled. OpenOrders gets an inline Edit strip with Replace + Cancel.
  • feat
    Tournament product loop
    Snapshot cron now drives lifecycle transitions (upcoming → live → closed) and runs settleTournament() on every freshly-closed tournament. Payouts: 1st 50%, 2nd 18%, 3rd 12%, 4-10 split 20%, credited via the credit ledger so the round-trip is auditable. Idempotent — checks credit_ledger ref_id before paying.
  • feat
    Credits v0
    account_credits + credit_ledger tables (append-only ledger, denormalized balance maintained transactionally). /api/admin/credits POST grants USD; /api/trading/credits GET reads balance + ledger; tournament register debits entry_fee_usd, rolls back the entry on debit failure. Settings → Créditos panel + TopBar credit chip surface the balance.
  • feat
    Quick trade modal (T)
    Press bare 't' anywhere in the cockpit to open a floating order ticket pre-filled with the currently selected symbol. Auto-closes 800ms after a successful fill so chained orders don't need an explicit re-open.
  • feat
    Notifications tray + OCO chain badge
    Bell icon in TopBar with red badge that surfaces terminal events (filled/rejected/cancelled/expired) the user hasn't acknowledged. OpenOrders rows show a ⛓ icon next to symbol when orders are part of an OCO group.
  • feat
    Account stats dashboard
    Win rate, expectancy, profit factor, avg hold time, largest win/loss, best/worst %, last 20 closed trades. Lives on /mesa/account behind a Stats / Riesgo tab strip alongside the existing risk cockpit.
  • feat
    Equity curve windows + Tournament countdown + Display name nag + Share
    EquityCurve gets 1D/1W/1M/3M/ALL pills. TournamentDetail gets a live HH:MM:SS countdown banner when the next tournament starts <24h. Inline display-name editor when null so leaderboard shows handle vs Trader #abc12345. Native share button uses navigator.share() on mobile, clipboard fallback on desktop.
  • feat
    Options chain (gated by market addon)
    /api/eodhd/options + /mesa/research/options surface CALLS / Strike / PUTS side-by-side with ATM highlight. Returns 'options_not_enabled' with a clear empty state when the market Options Data addon isn't on the plan.
  • feat
    Tournament history filter + final podium
    TournamentsHome adds Activos / Historial / Todos pills with live counts. Closed tournaments render an inline final podium (top 3 with return %) below their stat row, pulled from the existing leaderboard endpoint cached at refreshInterval=0.
  • feat
    Positions one-click close + tighter cron + faster LB
    PositionsTable gets a Cerrar button that fires a market sell of the full qty inline. tick-orders cron runs an inner 5s loop for ~55s per Vercel-cron-min instead of waiting 60s between fires (~5s effective fill latency for triggered orders). Live tournament leaderboard polls @ 3s with a pulsing dot.
  • infra
    scripts/loadout.sh credential loader
    One-shot 'source scripts/loadout.sh' exports every Mesa credential (infra hosts, AI provider, DB, cache, market + macro feeds) plus VERCEL_ORG_ID alias and useful helper variables. Idempotent + redacted load summary.
  • infra
    scripts/smoke-trading.mjs end-to-end
    Walks the full engine flow: bootstrap account → seed tournament → register → live BUY → position delta → SELL → snapshot cron → leaderboard. Verified green against mesa.cretalabs.io with real live ticks.
v1.02026-04-29
Mesa is a product (40 surfaces)
  • feat
    20 research dashboards live
    Yield curve, credit spreads, México macro, sectores SPDR, earnings scoreboard, cross-asset correlation, insider flow, peer comparables, macro pulse, dividend yield, momentum scoreboard, earnings drift (PEAD), short interest, regime detector, mexican equities, FX, commodities, global sovereign yields, crypto majors, earnings this week.
  • feat
    Position Sizing Calculator
    Fixed risk %, Kelly criterion (full + half), volatility-adjusted (ATR). Tres modelos lado a lado. /mesa/tools/sizing.
  • feat
    Tools index + Docs index + Status page + Data Sources page
    Discoverability + observability surfaces para que devs/LP/visitors encuentren lo que existe sin spelunking en git.
  • feat
    Strategy Library
    6 plantillas curadas (Golden Cross, Fast SMA, RSI clásico, RSI agresivo, Donchian 20, Donchian 55) que pre-llenan el backtester con un click.
  • feat
    Backtest comparison page
    Misma estrategia sobre 12 símbolos en paralelo, ranking sortable, presets curados (SPDR, Mexican blue chips, crypto majors). /mesa/backtest/compare.
  • feat
    Strategy backtester
    SMA crossover / RSI mean revert / Donchian breakout sobre cualquier símbolo. Sharpe + max DD + trade log + URL compartible para deep-link a resultados.
  • feat
    Global leaderboard cross-tournament
    Top 50 traders paper agregando todas las inscripciones. Linkea de vuelta al torneo individual con scoring compuesto completo.
  • feat
    Crypto Aggregator (CCXT)
    Bid/ask del mismo par en 8 exchanges + arbitraje cross-exchange en bps. Best-of-show por venue.
  • feat
    Mesa Today digest
    Composición de cinco endpoints: top sector, mayor beat, cluster insider, sorpresa macro. Cinco tiles, refresh 5 min.
  • feat
    Trade desk paper completo
    Cuenta paper anónima con $100k + demo seed, OrderTicket con segmented controls + live quote splice, OpenOrders + cancel, PositionsTable, FillsTape, Account reset.
  • feat
    Risk cockpit + equity curve
    Beta vs SPY, VaR 95% paramétrico, Sharpe 60d, max drawdown, sector concentration, equity al costo derivada de fills.
  • feat
    Tournaments con composite scoring
    Schema completo, register/leaderboard endpoints, snapshot cron 15 min, scoring retorno − ½×|DD|, 3 contests pre-sembrados.
  • feat
    v2 routing scaffold
    trading_routing_outbox + LP adapter trait + Bitso/Alpaca/cTrader stubs. TRADING_MODE=shadow|live activa el cron route-orders cuando lleguen LP keys.
  • feat
    9 dashboards de research
    Yield curve, credit spreads, México deep-dive, sector heatmap, earnings scoreboard, cross-asset correlation, insider flow, peer comparables, macro pulse.
  • feat
    Mesa cockpit i18n (ES/EN/PT)
    Sidebar + status footer + tagline traducidos. Page bodies siguen ES baseline; expansión per-page con la mismo dict.
  • feat
    PWA + offline shell
    Manifest + service worker (network-first HTML, cache-first static, network-only API), install pill en Chromium.
  • feat
    Symbol detail · Earnings tab
    Beat rate histórico, sorpresa promedio, próximo reporte, tabla últimos 12 reportes con surprise % coloreada.
  • feat
    Mesa Live real positions
    house_positions seedeada (NVDA/AAPL/BTC/GLD/TLT). El widget muestra source: house con allocation real y day P&L marcado a vivo.
  • feat
    Watchlist persistencia per-account
    trading_watchlists JSONB sincroniza con la cookie account. Mismo watchlist te sigue entre dispositivos.
  • feat
    AI Daily Wrap (Claude Opus 4.7)
    Narrativa generada por Claude con prompt caching 12h. Fallback a plantilla determinística si AI offline.
  • feat
    Admin UI house-book
    /mesa/admin/positions con token gate, idempotente sobre símbolo, robots noindex.
  • feat
    API Reference page
    Listado de 50+ endpoints públicos con method, path, descripción, auth badge. Para LP onboarding y devs externos.
  • feat
    Mesa About page
    Manifesto, stack, 3 garantías ACID, version-by-trigger roadmap, what Mesa is/isn't.
  • feat
    Vercel Analytics + Speed Insights
    Visitor counts y core web vitals sin tracking pixels invasivos.
  • feat
    Compliance disclaimer permanente
    "Paper · sin manejo de dinero · no es asesoría" en el status footer en lg+.
  • fix
    realized_pnl aggregation
    Bug en account + leaderboard que devolvía 0 hardcoded. Ahora suma desde trading_positions.
  • fix
    Hydration mismatch en StatusFooter
    Initial state null hasta useEffect — SSR y first paint quedan idénticos.
  • fix
    PathIndicator + market chrome leak
    La pildora de la landing y el badge market ya no aparecen sobre la cockpit.
  • perf
    Calendar API trim 96%
    Server-side projection a sólo los campos que la UI usa: 3.5MB → 142KB con default limit.
  • perf
    Capabilities slim payload
    getCapabilitiesList retorna CapabilityCard (7 fields) en vez del shape completo. Index page ~75% más liviano.
  • perf
    ccxt externalize
    ccxt es ~30MB. serverExternalPackages evita que Turbopack lo bundle y rompa el deploy.
  • infra
    Whitepaper técnico (~7,500 palabras)
    15 secciones: ACID guarantees, deterministic replay, audit completeness, compliance posture, version-by-trigger roadmap. Disponible en GitHub.
  • docs
    Tournaments rules page
    Score formula explicada, anti-cheat por categoría, tiebreakers, status states, deferred payments roadmap.
Filosofía: ship + push + verify. Cada item de arriba está en producción y fue verificable end-to-end al momento de su commit. Releases anteriores se reconstruyen desde git log en el repo.
· CDMX