- 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: remove unused onnx_sessions import in metadata endpoint
fix: filter out flat closed-market candles in both ingestion worker and graphql stock_history resolver to prevent horizontal flat-line 1D charts when market is closed
Frontend (LandingPage):
- Swap 'Market Movers' and 'The Stack' positions in the header navigation bar
- Add anchor redirection IDs (#market-movers and #news) for smooth scroll navigation
- Remove 'Live feed · updates every 5 min' indicator from the Financial Feed section
- Set header z-index to z-20 to ensure all Reach Us dropdown links are fully clickable
Backend Telemetry (Prometheus & FastAPI Instrumentator):
- Initialize prometheus-fastapi-instrumentator to expose HTTP and latency metrics at /metrics
- Create metrics.py configuration file defining custom collectors for LLM tokens, ReAct agent reasoning steps, execution latencies, and tool call success rates
- Instrument gemini.py to extract token counts from usage metadata, track reasoning turns, and trace tool execution
- Instrument endpoints.py to collect statistics on processed Razorpay webhook captures by package
- Instrument schema.py to monitor active stock-tick streaming clients, compute ingestion delays, and log yfinance A…
feat: add live Market Movers section (Top Gainers, Top Losers, Most Active)
- 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: supply live stock price and calculated indicator coordinates to Chatbot context
- 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 strict entry/exit plan formatting guidelines to AI Analyst system prompt
- 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
feat: implement real-time price alerts via email with 2-minute reminder loops
- models.py: Add is_triggered and last_notified_at columns to the Alert database model.
- crud.py: Add trigger_alert and update_alert_notification_time database handlers.
- crud.py: Check active alerts and immediately notify on crossover during insert_stock_candle execution.
- email_service.py: Create SMTP email dispatcher with professional HTML template and terminal log fallback.
- celery_app.py: Implement process_triggered_alerts task scheduled to run every 120 seconds.
- Alembic: Generate and execute database migrations to apply schema updates on Postgres.
feat: add drag-to-zoom support for maximized stock chart
- StockChart.tsx: Import ReferenceArea from recharts and define index-based zoom states.
- StockChart.tsx: Slice processedData and rsiData dynamically based on zoomIndex selection bounds.
- StockChart.tsx: Bind onMouseDown, onMouseMove, and onMouseUp gesture listeners to ComposedChart with type guards.
- StockChart.tsx: Add floating glassmorphic Reset Zoom button overlay.