AddedFeedback form — send suggestions, bug reports, or general feedback directly from the app header via email (powered by Resend)
AddedCustom domain — DLMM Alert is now live at dlmmalert.app
FixedPnL column now works for Google OAuth users — was only reading from wallet adapter, now uses unified auth hook
FixedAlert settings now display rules in consistent order across all positions — no more shuffled thresholds
FixedWallet login reduced to a single approval — module-level singleton prevents duplicate sign requests across components
FixedPage reload no longer prompts wallet approval — existing Supabase Web3 session is reused after hydration
ImprovedLanding page now shows two side-by-side cards explaining Wallet Connect vs Google Sign-in differences
ImprovedWallet address modal shows current address and cancel/close buttons when changing wallet (first-time setup remains guided)
ImprovedAlert Settings and Alert Defaults now include an info panel explaining what cooldown means
v0.3.5
AddedGoogle OAuth sign-in — users can now sign in with Google alongside Solana wallet connection
AddedTracked wallet input for Google users — enter any Solana wallet address to monitor positions (read-only)
AddedTelegram Bot notifications for non-wallet users — direct alerts via @DLMMAlertBot with the same alert content as Dialect
AddedTelegram deep-link flow — one-click connect from the app, press Start in Telegram, done
AddedTelegram connect/disconnect UI in header for Google users with connection status indicator
AddedTest alerts endpoint now supports Telegram — pass ?wallet=ADDRESS to send test alerts via bot
ImprovedUnified auth hook (useAuth) — single interface for wallet and Google authentication across the app
ImprovedSign-in modal redesigned — shows both Google and wallet options with clear visual separation
ImprovedCron monitor now dual-dispatches — Telegram Bot API for connected users, Dialect for wallet users
ImprovedWallet button shows email for Google users with option to change tracked wallet address
v0.3.0
AddedServer-side Supabase service role client — cron and API routes now use a dedicated admin client that bypasses RLS, with automatic fallback to anon key on client-side
AddedRow Level Security enabled on cron_lock table — only the service role can access it, preventing unauthorized lock manipulation
Improved/api/alerts endpoint now requires Bearer token authentication — unauthenticated requests are rejected with 401
ImprovedInput length validation on /api/alerts — message, rule label, rule ID, and token symbols are all size-limited to prevent abuse
ImprovedRequest body size limit (10KB) on /api/alerts and /api/test-alerts endpoints
ImprovedUser-controlled fields sanitized before sending to Dialect notifications — prevents injection in notification titles and bodies
ImprovedRate limiter switched from setInterval cleanup to lazy cleanup — more serverless-friendly, no module-level timer
ImprovedRemoved unsafe-eval from Content Security Policy script-src — tighter CSP against XSS attacks
FixedPosition status badges now match consumed % — low % is Safe, 50%+ is Warning, 80%+ is Critical (was inverted near edges)
FixedBinMap progress bar and active bin text colors aligned with new directional status thresholds
FixedNegative PnL now displays correctly — shows -$0.08 instead of $0.08 for losses
FixedDashboard no longer reloads every 60 seconds — background refreshes skip loading state and only update UI when data actually changes
FixedMonitor polling (12s) no longer triggers full page re-renders — active bins use fingerprint comparison, poll timestamp isolated from page component
ImprovedRebrand from Meteora Notify to DLMM Alert — new logo, updated branding across header, landing page, security page, and changelog
ImprovedNew favicon and Apple touch icon generated from DLMM Alert logo
ImprovedAlert threshold sliders now allow up to 95% (was capped at 50%) for both per-position and global alert defaults
v0.2.6
AddedClosed position auto-cleanup — server-side cron verifies positions on-chain and automatically removes closed ones from monitoring
AddedClient-side stale position detection — closed positions are auto-unmonitored within 60 seconds without page reload
ImprovedDialect notification bell — broadened CSP to support all Dialect SDK domains, fixing panel not loading in mobile wallet browsers
ImprovedDialect bell retry — if SDK fails to load (e.g. slow connection), tapping the bell retries instead of permanently failing
ImprovedPosition sorting — same-pool positions now group by token pair, then pool, then bin range for natural flow
ImprovedInactive (upper OOR) bin map now shows green bins to differentiate from red Out of Range (lower OOR)
ImprovedMobile notification bell — shows setup instructions dialog instead of broken Dialect popup in wallet browsers
FixedStale notifications for closed positions — cron was alerting on positions that no longer exist on-chain
FixedPositions now auto-refresh every 60 seconds — closed positions disappear without page reload
FixedBin Movement alerts no longer fire on out-of-range positions — only triggers when position is active
FixedBin Movement baseline resets while out of range — prevents false alert when position re-enters range
v0.2.5
AddedPnL column on dashboard — shows USD % and SOL values for each position, color-coded green/red
AddedTake Profit alerts — get notified via Telegram when position PnL reaches your target % (USD or SOL)
AddedStop Loss alerts — get notified when position PnL drops below your threshold % (USD or SOL)
AddedUSD / SOL unit selector for TP/SL thresholds — choose which PnL metric to track per rule
AddedTP/SL configurable in both global Alert Defaults and per-position Monitor Settings
AddedDedicated Security page — explains why your funds are safe, infrastructure trust, and security measures
ImprovedTelegram TP/SL notifications include both USD and SOL PnL, target vs current %, and bin map overview
ImprovedSecurity headers on all responses (CSP, HSTS, X-Frame-Options, Referrer-Policy)
ImprovedRate limiting and input validation on all API endpoints
ImprovedFetch timeouts on all external API calls (Dialect, Meteora) to prevent hangs
ImprovedConsole logs stripped in production — no wallet addresses or sensitive data leaked
FixedNotifications now route to the correct wallet only — previously all subscribers received every alert
FixedTest alerts endpoint now requires authentication — was previously open to anyone
v0.2.4
FixedMonitor toggle now persists across browser reloads — added Zustand localStorage persistence with Supabase merge strategy
FixedSupabase writes no longer fail when optional columns (strategy_shape) are missing — automatic retry without unsupported fields
ImprovedRange consumed progress bar restored to filled bar style — fills from right to left showing how much range has been consumed
ImprovedWallet disconnect no longer clears monitor data — settings survive wallet reconnection on page reload
v0.2.3
AddedDirectional out-of-range status — OOR below lower edge shows red "Out of Range" (full IL), OOR above upper edge shows blue "Inactive" (position not yet active)
ImprovedRange consumed % now measures distance from nearest edge — 0% at edge (safe/early), ~50% at center (deep into range)
ImprovedProgress bar replaced with position marker showing where the active bin sits in the range
ImprovedAlert thresholds rescaled for new 0–50% range — Early Warning at 20%, Critical at 40%, slider max capped at 50%
FixedNew alert rule types (Bin Movement) now auto-merge into existing monitored positions without re-toggling
v0.2.2
AddedBin Movement alert — get notified every N bins of price movement with direction (toward upper or lower edge)
AddedConfigurable bin distance threshold (1–20 bins) per position and in global alert defaults
AddedNotification messages now include position info (e.g. "70 bins · Spot", "136 bins · BidAsk")
ImprovedAlert percentage calculation switched to linear (0–100% from lower to upper edge) — thresholds now match intuition
ImprovedStrategy shape detection uses DLMM positionLiquidity instead of raw token amounts — correct even when out of range
FixedOut-of-range arrow direction for positions at the upper boundary (e.g. active bin = upper bin)
FixedSpot positions no longer misidentified as Curve or BidAsk when fully one-sided
v0.2.1
ImprovedSwitched back to compact Unicode bin map (░▓) for Telegram — more precise and less clunky than emoji on mobile
ImprovedOut-of-range (above upper) now shows empty bar ░░░░░░░░░░░░░░░░░░░░ — liquidity was NOT consumed, so bins stay gray
ImprovedOut-of-range (below lower) shows filled bar ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ — liquidity was fully consumed as price moved through
ImprovedIn-range example: ░░░░░░░░░░░▓░░░░░░░░ ↑ 55% consumed — single marker shows active bin position