- Add GET /api/v1/indicators endpoint computing MACD (12/26/9) and Bollinger
Bands (20,2) via pandas-ta, aligned with chart candles
- Extract shared candle-fetching into gemini.fetch_stock_history_rows used by
both stockHistory and the indicators endpoint
- Add MACD/BB toggles to Technical Overlays toolbar
- Render Bollinger Bands on main chart and MACD as separate pane with histogram
- Enrich chart data with indicator series aligned by epoch timestamp (ts)
- Surface MACD/BB active indicators to AI analyst chat context
fix: add bottom padding to AI Analyst scroll container to prevent button cutoff
- LogoLoop.tsx: increase repeated icon sets from 2 to 4 to prevent empty trailing space on wide viewports
- LogoLoop.css: adjust slide keyframe translation from -50% to -25% for a seamless infinite loop
- WatchlistSidebar.tsx: change suggestion item click to populate input box and close dropdown
- WatchlistSidebar.tsx: add onMouseDown with e.preventDefault() to avoid premature dropdown unmounting on blur
fix: prevent chat input textarea from expanding indefinitely and align send button
- ChartChatbot.tsx: add overflowY: 'auto' and cap max height at 100px in styles and JS auto-resize script
- ChartChatbot.tsx: change form style to alignItems: 'flex-end' for correct alignment at max heights
feat: add subtle Logo watermark to Watchlist background
- AIAnalyst.tsx: rewrite formatReason to parse ###/##/# headings, */- bullets, **bold**, *italic*
- Headings render as styled cyan subheadings or white bold headers
- Bullets grouped into clean <ul> lists instead of raw * symbols
- TrendingHub.tsx: pre-populate gainers/losers/most_active with fallback data in useState initializer
- TrendingHub.tsx: remove 'Live · refreshes every 60s' text
- TrendingHub.tsx: add BarChart2 amber icon to Market Movers section header
feat: add live Market Movers section (Top Gainers, Top Losers, Most Active)
- TrendingHub.tsx: override glass-panel's overflow:hidden with visible on trend cards
- TrendingHub.tsx: set minHeight:160px to guarantee price row always has vertical space
- TrendingHub.tsx: remove gridAutoRows, fixed card height, and overflow:hidden — let cards size naturally
- TrendingHub.tsx: use justifyContent:space-between on cards for clean top/bottom layout alignment
fix: prevent vertical card overlapping in scrollable trending assets grid
- endpoints.py: add stocks/trending endpoint fetching live quotes and sorting by highest absolute change percent
- TrendingHub.tsx: fetch stocks/trending on mount and refresh active stock cards every 60 seconds
feat: add Yahoo Finance-style sparkline charts to Trending Hub and Watchlist
- StockChart.tsx: initialize chartType, showSMA, showEMA, showRSI from localStorage on mount
- StockChart.tsx: add effects to persist indicator state changes to localStorage per email+ticker
- StockChart.tsx: fallback markers load/save to cached quantiq_last_logged_in_email to survive async user loads
style: match chatbot delete confirmation modal styling with watchlist delete overlay
- StockChart.tsx: compute live SMA 20, EMA 20, and RSI 14 values and pass to ChartChatbot
- ChartChatbot.tsx: add liveData prop and include values in /analyst/chat POST request body
- endpoints.py: extract live indicators and append to Gemini system instructions context
feat: add clear chat button with confirmation overlay to chatbot panel
- ChartChatbot.tsx: import Trash2 icon from lucide-react
- ChartChatbot.tsx: add showConfirm state to manage dialog overlay visibility
- ChartChatbot.tsx: render clear chat button in header and confirmation modal overlay
- ChartChatbot.tsx: clear local state and localStorage history on clear confirmation
fix: prevent empty markdown bullet indicators from rendering as stray dot symbols
- Database: Add subscription_tier, messages_remaining, monthly_messages_used, and last_billing_date to User model
- Migration: Generate and apply Alembic migration with server_defaults for existing rows
- Backend: Enforce bearer token authorization and message limits on /analyst/chat endpoint
- Backend: Map Razorpay webhook payment capture to user subscription tiers and credit allocations
- Frontend: Implement live ticking 3-day countdown timer for Pro pack discount (₹10k vs ₹15k)
- Frontend: Show real-time remaining quota badge in Chatbot header and lock chat input when limit is reached
style: update Quant AI Advisor subtitle to be project-specific
- Update TrendingHub.tsx to set href fallback to undefined instead of '#'
- Add onClick preventDefault wrapper when item.link is missing
- Only apply target='_blank' when a valid link exists
- Remove glass-panel class from news cards (had overflow:hidden causing collapse)
- Add flexShrink: 0 to prevent flex shrinking in scroll container
- Replace div+onClick with native <a> tag for bulletproof click-to-open
- Add real URLs to all 6 fallback news items (Bloomberg, Reuters, CoinDesk, CNBC, WSJ, MarketWatch)
- Map link/url/article_url from live API response in parser
- Fix welcome banner alignment by removing glass-panel class inheritance
- Make Financial Feed scroll independently with maxHeight: 520px + overflowY: auto
- TrendingHub: remove glass-panel class (had overflow:hidden) from news cards
- TrendingHub: add flexShrink: 0 to news cards so they don't collapse in scroll container
- TrendingHub: add real URLs to all 6 fallback news items (Bloomberg, Reuters, CoinDesk, CNBC, WSJ, MarketWatch)
- TrendingHub: map link/url/article_url fields from live API news response
- TrendingHub: fix onClick handler to properly open articles in new tab
style: fix welcome banner alignment and enable separate scrolling for financial feed
- TrendingHub.tsx: Remove glass-panel class from welcome box to prevent height collapse.
- TrendingHub.tsx: Apply overflowY: auto and maxHeight: 520px on the trending news container.
style: enable scrollable view for TrendingHub panel