Bharat Charts PHP New — Version log

Track of what shipped. Live charts: /charts

S.No Version Particulars (what changed) Expected output
1 0.5.59 First PHP charts stack: landing, Google/dev login, TradingView Advanced Charts, Dhan tip.php (~21 sessions) then history.php. Live path pointed at empty wsUrl and SSE /api/stream.php (synthetic ticks, named SSE events the client did not read). Phase 3 wrapped TradingView UDF against /api/tip.php (not a UDF server). Chart HTML and historical tip could load when Dhan token was set. Forming candle / live LTP did not update. Browser WebSocket never opened.
2 0.5.60 Stock Hunter live pattern, Dhan instead of Kite: CLI daemon cron/dhan_ticker_daemon.php polls Dhan LTP and writes data/cache/ticks.json. Charts poll /api/ticks.php (~400ms) and subscribeBars builds the current IST candle from LTP. Custom datafeed only: tip first, then full history on scroll/warm — UDF wrapper removed. systemd unit bc-dhan-ticker started on VPS deploy. Empty data/dhan.json no longer hides the token in config/env.php. Header live badge moves to Live when ticks are fresh (<2s). Current 5m (or selected TF) candle updates with real Dhan LTP during market hours. First paint still comes from tip; left-scroll uses history API. Token is read from data/dhan.json or config/env.php. If Dhan returns 401, paste a fresh daily token at /admin/dhan.php (the wipe backup did not contain a live token; a leftover JWT from 21 Sep was expired).
3 0.5.61 CRUDE OIL / MCX: TradingView session is now 0900-2330 (not NSE 09:15–15:30). Dhan status: failed (401/429) is treated as an error instead of an empty successful cache. Empty Dhan payloads are not written to tip cache. Health treats MCX as open until 23:30 IST. /charts?symbol=CRUDE OIL can paint evening candles. After a valid Dhan token, tip + live LTP work through the MCX session. Invalid token still shows a fallback tip instead of the empty UFO screen.
4 0.5.62 Live ticks: Dhan marketfeed was called as one mixed body with string IDs (IDX_I + MCX_COMM) → HTTP 814 Invalid Request. Now one request per segment with integer security IDs, using /v2/marketfeed/ohlc first (same as KI ticker), LTP as fallback. Header badge Live, CRUDE OIL last candle updates, watchlist LTP when quotes are in ticks.json.
5 0.5.63 One Dhan OHLC call per loop (integer IDs, all segments together) so MCX CRUDE is not dropped after the index call hits rate-limit 429. Removed extra LTP fallback spam. ticks.json includes CRUDE OIL LTP; chart badge Live; forming candle moves.
6 0.5.64 CRUDE OIL is Dhan security 569900 (CRUDEOIL OCT FUT). Forming 5m candle now comes from Dhan /v2/charts/intraday today (open/high/low/volume), with LTP only updating close/wicks — not a new bar built from snapshot session OHLC. Chart title shows the October contract name. Last candle O/H/L/C/V should track Dhan’s OCT FUT 5m (small lag ~1–6s). Volume on the forming bar is non-zero. Live LTP still from marketfeed OHLC.
7 0.5.70 Live path is one PHP CLI process talking to DhanHQ MarketFeed WebSocket (wss://api-feed.dhan.co v2 binary packets). Same process builds 1/3/5/10/15/30/60m candles in memory and fans out to browsers on /ws/live. getBars (tip + history) returns closed Dhan candles only — open bucket is stripped so history and live meet on the same candle. Session/weekend holes no longer return false noData. File ticks.json is a snapshot for watchlist/fallback only. No Python. Chart first paint still from tip cache. After subscribe, the current candle moves tick-by-tick with Dhan Quote/Full volume. Switching 5m→15m→1m reuses the same MarketFeed. Badge Live / Live WS. PHP CLI + a valid daily Dhan token. No Python.
8 0.5.71 Same MarketFeed now covers the full watchlist (indices + sectors + F&O, cap 250) and live candles for 1 / 3 / 5 / 10 / 15 / 30 / 60 / 1D from each tick. Daily history uses Dhan /v2/charts/historical. Watchlist LTP comes from the live quote map. Instrument map is segment:security_id so NIFTY 13 and ABB 13 do not collide. 23 Sep 2026 ~22:45 IST on VPS: feed dhan-marketfeed-ws, n=229 instruments (watchlist catalog). CRUDE OIL LTP 8796, security 569900, CRUDEOIL OCT FUT, tick seq=273, quote age 13ms. Live bars present for 1m / 5m / 15m / 60m / 1D (1D bucket distinct from intraday). One Dhan socket; timeframe switch does not reconnect. Watchlist rows pick up LTP from the same quotes.
9 0.5.72 Fast paint: tip returns last ~160 bars; FILE cache 4h; no session lock on tip/history; Redis connect fail is 150ms then skipped for 60s. Browser MEM/sessionStorage paints symbol/TF switch instantly. 3/10/30m (and thin 60m) are aggregated from Dhan native 1/5/15/60 — Dhan does not serve a full 30m series. Prewarm NIFTY / BANK NIFTY / CRUDE for 5/15/30/60 after first chart. Dropped LogBot + candle-monitor from the chart page. Cold tip target ≤250ms when FILE/MEM hits. Crude → NIFTY should paint from session cache after first visit. 30m/60m should show a full session history (aggregated 5m), not a handful of Dhan 30m bars. Header cache metric: FILE / MEM / SESS / DHAN+AGG30.
10 0.5.73 VC-style chart boot without a MySQL warehouse. First paint: MEM → sessionStorage → IndexedDB (≤80ms) → Dhan REST tip (FILE then /v2/charts/intraday|historical). charts.php releases the PHP session before HTML. APIs skip sessions. Cron warm_history.php refreshes FILE packs for NIFTY / BANK / CRUDE / SENSEX native 1/5/15/60 from Dhan REST every 10 minutes. Service worker caches charting_library only. Live Log HUD restored (ki_logbot.js, header Log). Repeat visits and symbol switches paint from IDB/MEM without waiting on Dhan. Closed history still matches Dhan REST (never SQL). Header cache: IDB / MEM / SESS / FILE / DHAN. Live Log overlay tracks tip ms and ticks. Library second load is cache/SW.
11 0.5.74 Cold path is one FILE tip, not a chain. Live Bot COLD LOG no longer records prewarm/scroll/Dhan paging as “cold”. TradingView left-scroll no longer fires 90-day Dhan REST on open. Debug beacons only on errors. Logbot script loads after first paint so it does not sit on the critical path. Header tip is time-to-first-candle after the TV library. FILE/SESS/MEM should stay in ms–low hundreds of ms. COLD LOG gets one row per symbol open, then stops. Scroll past the FILE pack is noData, not a multi-minute Dhan wait.
12 0.5.75 Live Bot auto-test wiring: setSymbol actually switches the widget; tv.speed is switch latency not page-age; page.tv_ready / first-candle marks; subscribe attaches a seed forming tip; WS flags __kiWsConnected. Auto-test pool is indices+sectors (FILE-warmed), not 200 F&O names that miss FILE and sit on Dhan REST for tens of seconds. Start on Live Bot should get page tv.ready, hist in ms on FILE hits, live seed while NSE is closed, scroll pages that return immediately at pack edge. Header tip on symbol change is ms since the switch, not 30–80s of wall clock.
13 0.5.76 First paint uses the last ~220 FILE bars; the rest stay in MEM for left-scroll. Emits tv.deep.prefetch + scroll getBars.ok with count/first_t. Logbot loads after the TV library. Guest /charts skips PHP session. Auto-test prefetch wait 800ms; pan timestamp is set before setVisibleRange. Live Bot Start: page libs/tv.ready without an 18s logbot parse; hist FILE/MEM; live seed; scroll pages return older MEM bars instead of 14s timeout_no_scroll_bars. Full run should be tens of seconds, not ~200s.
14 0.5.77 Tip always last 3 trading days from shared 5m pack (agg to 15/30) so CRUDE 5m/15m match. Block DEMO synthetic paint. History backfills incomplete FILE slices; deep HIST-FILE warm. Diag rebuilt: version badge, tip/history/feed/speed cards, symbol×TF matrix with gaps + fallback flags. IDB tip store bumped to v2. Header /charts and /diag.php both show v0.5.77. CRUDE 15m tip = 3 trading days, same OHLC family as 5m. Diag matrix: tip OK + hist OK, fallback=none, same-day gaps=0. Scroll-left continuous without DEMO candles.
15 0.5.78 60m tip/history also aggregates from the shared 5m FILE (no separate cold Dhan 60m pack). Fixes diag matrix red cells for CRUDE / FIN NIFTY / sectors on 60m. Diag matrix: all symbols green tip+hist on 5/15/30/60. Charts header v0.5.78.
16 0.5.79 History bridge loads before older chunks; hole detector backfills gaps >4d; resetData after bridge so 15m NIFTY no longer jumps Sep 4→21. Scroll refuses sparse MEM pages until the bridge is fetched. NIFTY 50 15m: tip 3 days continuous with prior sessions (7,8,9…18 then 21). Header v0.5.79.
17 0.5.80 Day-break marks on the time axis (getTimescaleMarks + session breaks). Diag adds Continuity card + matrix cont pill (last-before-tip ↔ tip-first, max 4d gap). Bridge window in diag widened to 40d; client clears stale tip session cache. NIFTY 50 15m scroll: …18 Sep then tip 21–23. Diag Continuity = YES (not only tip/hist green). Day numbers visible on the timescale. Header v0.5.80.
18 0.5.81 Match VC Stocks charts: tip/history always load continuous 5m, then client-aggregate 15/30/60 (same trading days on every TF). Freeze chart LTP before NSE 09:15 (watchlist can still update). Live-health market_open is NSE-only (not MCX 09:00). IDB tip store v3. 15m scroll shows the same days as 5m (…11,15,16,17,18 then 21–23). Candles do not move before 09:15. Badge shows Pre-open. Real FILE/DHAN bars only (no DEMO). Header v0.5.81.
19 0.5.82 Freeze watchlist LTP outside session (not only chart candles). Day breaks via VC sessions.vertlines.sessBreaks overrides + weekday session string. Nifty watchlist LTP static until 09:15; vertical day-break lines on the chart. Header v0.5.82.
20 0.5.83 Watchlist: integer LTP for indices/sectors/F&O; % change vs previous close; alias shared security IDs (BANK NIFTY↔BANK, FIN NIFTY↔FINANCIAL SERVICES); OHLC seed on marketfeed connect so chg is available at open. Every watchlist row shows LTP (no decimals) and +/−%. Live WS already running before/at 09:15. Header v0.5.83.
21 0.5.84 Calmer live tip (VC Stocks style): coalesce chart onTick to ~500ms, skip unchanged price for 900ms, build OHLC from smoothed LTP (not every Dhan packet / server bar). WS broadcast soft-throttle ~4 Hz/symbol. Forming candle moves like TradingView / VC — not tick-by-tick jitter. Header v0.5.84.
22 0.5.85 Fix overnight gap-fill: new session bar opens at day open / LTP, not previous close. Heals the giant red candle that spanned yesterday close → today open. Gap down shows empty space like TradingView/Dhan; first candle is a normal open bar. Header v0.5.85.
23 0.5.86 Live switch fix: WS broadcast matches alias labels (BANK NIFTY↔BANK, FIN NIFTY↔FINANCIAL SERVICES) so Bank Nifty candles move without refresh. Switching Indices → Bank Nifty keeps Live updates. Header v0.5.86.
24 0.5.87 No DEMO/STALE/synthetic candle paint. Tip miss or error falls through to history.php only. Parallel hist prefetch for faster scroll-left; hybrid LTP coalesce ~150ms; Live Bot CANDLES/HIST panel (days, bridge, prefetch). Empty tip never paints stagnant DEMO. Chart fills from history API. Crude/indices scroll-left warms faster. Header v0.5.87.
25 0.5.88 Disable stacked timescale day circles. Add 45m + 4h. Live Bot TF matrix (1/3/5/15/30/45/60/240/1D) with tip-day + bar-count audit. Live tip accepts server/ltp-smooth. Scroll not gated on live; soft reset only once when first paint was sparse (less flicker). Clean bottom dates on 60m. Auto-test covers all TFs. Live/scroll no longer false-fail when WS is live. Header v0.5.88.
26 0.5.89 Watchlist click always invalidates tip cache, fetches fresh tip, then setSymbol+resetData. Removed MEM-TRIM lagged paint. During session, tip must include today's recent bars (matches Dhan day candles). LTP path unchanged. Clicking any WL symbol paints full current-day candles without needing a browser refresh. No empty/lagged MEM-TRIM panes. Header v0.5.89.
27 0.5.90 Tip FILE TTL 90s in session (was 4h) + stale-last-bar re-fetch. WL switch uses tip?refresh=1. Warm cron every 2m. Current-day 5m candles stay close to Dhan without a hard refresh. Header v0.5.90.
28 0.5.91 Bank Nifty ticks only alias to BANK/BANK NIFTY (not PSU BANK). Symbol switch replaces tip (sanitize wild OHLC), no softReset flicker. Autobot AGG short_days soft-only. PSU BANK chart stays ~8k; no Bank Nifty high spike. WL clicks no longer flicker wrong↔right. Header v0.5.91.
29 0.5.92 First paint = tip→history only (no SESS/IDB/AGG authority). Clear all local tip caches on switch. No LTP seed/realtime bar until same-symbol hist exists. Reject cross-symbol LTP vs hist close. Watchlist click always shows real candles (or hist fallback), never a blank one-candle cliff. Header v0.5.92.
30 0.5.93 Tip→hist continuity: histNet merges fresh 5m before AGG; scroll serves warm pool without waiting on bridgeReady; TF switch reuses 5m/1m pool; no wipe of shared 5m on setSymbol; soft-reset after bridge; faster 1m parallel prefetch; 1m hist lookback 60d. 10m/15m/… scroll shows Sep18 continuously after tip (not jump to Sep11/Jul). 1m left-scroll warms faster. All symbols. Header v0.5.93.
31 0.5.94 Live Bot Start: full TF matrix incl. 10m; tip 3d → bridge wait → auto scroll←; fails on day gaps (tip→Sep11 style); random WL indices/sectors/custom/FNO; Copy test log + ingest auto-test.report. Click Live Bot → Start for automatic tip/scroll/speed audit across all TFs. Header v0.5.94.
32 0.5.95 Baseline checkpoint — working well, minor known issues. Live Bot scroll scoring fixes; Redis tip middleware; option-chain modal on charts (click CE/PE → OPT:{sid}); Sensex options on BSE_FNO; tighter LTP/sanitize guards against Nifty-into-equity High spikes; OC under-switch Redis TTL + prefetch. Minor: occasional cold scroll wait before deep hist is warm; rare cross-tick heal until refresh. Charts, live ticks, tip, option chain pop-up, and Sensex premium tip work in production. Header v0.5.95. Use as the last “stable enough” line before warehouse warm.
33 0.5.96 Architecture: fast tip (~3 trading days) unchanged for first paint. On every symbol open, background /api/warm.php ensures a ~30 trading-day 5m warehouse target (check FILE/Redis → fetch only if short → store). Client merges warm 5m into MEM/AGG; scroll/TF prefer local warehouse. Warm never resets TradingView live series. Open any chart → tip paints immediately → ~30d 5m warms quietly for that symbol. Left-scroll / TF change read warm store when ready. Header v0.5.96.
34 0.5.97 Diagnostics UI for the tip→warm architecture: live “Simulate chart open” (tip then /api/warm), warehouse warm card, multi-symbol open board, speed includes warm ms. Use in incognito to verify first paint + background warm. Open /diag — green steps = tip fast + warm ready. Header v0.5.97.
35 0.5.98 First paint uses last 3 trading days (not last 220 bars) so 15m/30m/60m no longer open on a deep left edge (e.g. 4 Sep). Full diag simulation table: indices + sectors + F&O — tip cold/warm per TF, dates vs calendar, gaps, warm 30d, history continuity, live WS. Button Simulate all symbols. Switch TF → tip window ~22–24 Sep. Diag table shows PASS/FAIL per symbol. Header v0.5.98.
36 0.5.99 Trading-day continuity framework (holiday-aware, incl. 14 Sep Ganesh): warm/Pass now requires continuous IST sessions, not just day-count. Client REPLACEs all AGG TFs (15/30/60…) from the full 5m warehouse after tip/warm (fixes tip-only AGG race that left date gaps on Crude / PSU Bank / Realty). Faster left-scroll (60d extend, no bridgeReady gate). Diag Cont column lists missing trading days per TF — PASS fails if any TF has holes. 15m/30m scroll shows continuous trading days (weekends/holidays only). Diag Cont = CONT with no miss …. Header v0.5.99.
37 0.5.100 Never paint tip→hist holes on chart (e.g. Sep 4 → Sep 22 blank on 15m). continuousRightSegment drops the gappy left edge until warm fills; then forced resetData. Clears stale session/IDB (bc_bridge_v=100, IDB v4). Spike sanitize on scroll. Header must show v0.5.100 (hard refresh). 15m NIFTY: continuous days after tip→warm; no blank mid-chart; no ~7k wick. Old v0.5.89 clients auto-clear cache on load.
38 0.5.101 History coverage now detects internal trading-day holes (not only edges) and Dhan-fills them (+HOLEFILL), persisting native 5m. Diag Cont fails on tip→hist blanks. WL symbol switch always tip?refresh=1 and force-reloads candles (fixes FIN NIFTY flat/tiny 5m bars until F5). 15m/30m: no Sep4→Sep22 gap after scroll. Switch Sensex→FIN NIFTY: proper 5m OHLC without refresh. Header v0.5.101.
39 0.5.102 Stop discarding REDIS-STALE/FILE-STALE tip bars on first paint (regex treated STALE like DEMO). That forced hist fallback and broken 5m until hard refresh. Middleware stale tip is real OHLC — paint it; only block DEMO/SYNTH. FIN NIFTY 5m: correct candles on open/switch without F5 (header may still show REDIS-STALE). Overnight Sep23→Sep24 open gap is real market gap-down (~470pts), not a hole.
40 0.5.103 Expert architecture: generation-tokened tip/hist/warm/subscribe (stale gen dropped); merge only at canonical 5m then REPLACE AGG (no independent 15m/30m merge); diag splits SERVER PASS vs CHART PASS (5m bridge + AGG15/30 + OHLC); header shows gen / bridge / holes. Symbol/TF switch never applies old async results. Diag Pass requires chart_path ok. Header v0.5.103 with gen counter ticking on switch.
41 0.5.104 Align watchlist-switch presentation with hard refresh: after setSymbol and canonical data replacement, focus the visible range on the current IST session. TradingView then autoscales to today's candles. Overnight gap data remains unchanged. Sensex/NIFTY → FIN NIFTY switch shows normal-sized current-session 5m candles without F5; zooming out still shows the legitimate Sep23→Sep24 price gap.
42 0.5.105 Apply current-session focus on both chart startup (gen —) and symbol switches. Reapply once after the initial TradingView paint settles. Direct URL / hard refresh and watchlist switching now use the same current-day viewport and price autoscale.
43 0.5.106 Rollback: restored the exact chart frontend and chart-page configuration from the recorded v0.5.95 working baseline. Removed the later warehouse/generation/viewport chart lifecycle changes. Compatibility retained for valid current FILE-STALE/REDIS-STALE OHLC. Tip-first candles, history scroll, symbol switching, and live subscription follow the v0.5.95 production behavior.
44 0.5.107 Frontend watchlist trace: pointer-down, click, switch generation/path, tip request/response, cache source, TradingView apply, first bar paint, and live subscription. Trace ring is exposed as window.__BC_SWITCH_TRACE and mirrored into Live Bot. Header immediately shows LOADING after a click. Repeated clicks on the same pending symbol are ignored instead of restarting its request.
45 0.5.108 Tight cache: fresh tip is authoritative for the right edge — MEM bars from the tip's first bar onward are replaced (not merged) on 5m and all derived TFs; deep history is kept. History pages only fill missing times. MEM paint on switch-back requires a fresh last bar; after paint the chart is verified against the refreshed tip and reset once if the latest day differs. Local cache schema bumped so old stale tips are dropped. Switching away and back shows correctly formed latest-day candles without F5. Trace events: cache.mem.reject, cache.edge.verify, cache.edge.reset.
46 0.5.122 TypeScript migrate: chart shell source of truth is frontend/src/charts/ (session.ts, bars.ts, bc_idb.ts, main.ts). esbuild emits public/assets/js/charts.js + bc_idb.js. deploy.sh runs npm run build before rsync. Do not edit the built JS by hand. Header shows v0.5.122. Chart behavior unchanged vs prior tip/L1 path; hard-refresh loads the built bundle (banner comment in charts.js).
47 0.5.123 Hotfix: TS migrate strip dropped histCache, TICKS_URL, and LIVE_WS_URL declarations — getBars threw ReferenceError: histCache is not defined so tip never painted (blank chart, tip —). Hard-refresh → tip ms + cache label populate; CRUDE/NIFTY candles paint again.
48 0.5.124 MCX candle continuity: enable session gap-fill for CRUDE (09:00–23:30 IST) after price-regime trim; client fillSessionGaps + intraday hole detect/backfill so missing 5m prints pad like TradingView instead of leaving a cliff between sparse tip bars. CRUDE 5m shows a bar every 5m through the session (flat vol=0 pads only where Dhan/L1 skipped). Overnight 23:30→09:00 still gaps. Tip denser after refresh.
49 0.5.125 MCX session collapse: replace 24x7 with 0900-2330:23456 on BC_MCX so Charting Library collapses overnight (no blank 24:00→02:00 runway) while keeping evening bars in-session. Subsession matches regular MCX hours. CRUDE chart axis ends near session close; next open abuts prior close. Hard-refresh v0.5.125.
50 0.5.126 CRUDE right-edge fix + 2-cache tip: PG/L1 stopped at 21:50; warehouse-only blocked Dhan today-fill so tip invented vol=0 flats at 9031 while LTP recovered (~9125) — visual cliff. Now: always DHAN-TODAY when edge/vol0 stale; no forward invent; strip trailing flats; tip read path is L1 Redis + PG only. Logbot candle.gap audits holes / vol0 / LTP divergence. Hard-refresh CRUDE: tip past 21:50 has real volume bars matching recovery; cache like L1-REDIS+TODAY(DHAN-TODAY); Live Bot flags gap if edge lags LTP.
51 0.5.127 Live orphan-bar guard: after play/zoom, tip could lag (~22:30) while LTP kept painting a lone far-right candle. TickHub now tip-first reconcileSymbol, 15s edgeIsLagging watch, and blocks inventing a new bucket more than 1.5 steps ahead of tip. Hard-refresh v0.5.127. Play/zoom CRUDE: no orphan tick far right of tip; Live Bot candle.gap / ws.reconcile when edge heals.
52 0.5.128 Universal TF candles + OpenAlgo CandleBuilder: tip heal always pulls base 5m (or 1m), derives 3/10/15/30/45/60/240 from the same window, syncs lastBars + builders for every TF, fires TV onResetCacheNeededCallback. Live LTP uses session-aligned CandleBuilder (day-delta volume, open-from-prev-close, maxJump 1.5). Hard-refresh v0.5.128. Switch 5→15→30 on CRUDE: same timeline, no TF-specific right-edge gap; logbot edge_healed_universal.
53 0.5.129 Anti-flicker first paint: commit tip edge once (commitPaintBars + paint.committed) before live seed; defer subscribeBars seed and TickHub reconcile; suppress resetData / tip.refresh force-reset during 2.2s paint grace — fixes the ~250ms wrong tall candle → snap. Hard-refresh v0.5.129. Reload CRUDE 5m: first candle should stay stable (no flash then correct). Logbot paint.committed / paint.grace.*.
54 0.5.153 Fri 25 Sep 2026 — path confirmed working (prod audit). Universal mid-session continuity (all symbols): tip/history stitch open → prev.close + live openFromPrevClose; overnight / session-open gaps stay real. Depth hist is Dhan charts → Kite Connect fallback (kite_ready). Continuity watch heals full watchlist (PG promote + broker). Live path: Dhan marketfeed WS → go-relay → chart; no Dhan charts for live candles. Multi-TF from shared 5m tip pool (1/3/5/15/30/60… derived client-side). Verified on VPS 25 Sep evening: tip cache TIP for core symbols in ~40–100ms (NIFTY/BANK/SBIN/INFY/TCS/CRUDE); NIFTY/BANK/RELIANCE/SBIN/INFY/TCS 30 trading-day 5m tip; mid-session open/close jumps = 0 after stitch (incl. CRUDE 14:10–14:15); multi-TF tip OK (e.g. NIFTY 15m/30m from tip); sector stocks largely warm (235/328 at 30d, rest ~20–24d usable); Kite + Dhan creds both live; ticker + go-relay + continuity timer active. Hard-refresh v0.5.153.
55 0.5.155 Fri 25 Sep 2026 — Admin Data Warehouse + aggregate-only multi-TF. New /admin/warehouse.php: categories Sector analysis / F&O / Nifty 50 / Nifty 500; per-symbol Download of 5m OHLCV into Postgres only (range 2026-01-01 → today); status = Data downloaded only at ~full-window coverage; month-chunk progress bar. Charts tip depth raised so warehouse symbols paint the full downloaded year. Multi-TF policy (space-safe): store 5m only in PG; aggregate 10 / 15 / 30 / 45 / 60 / 240 on tip/client (ms); leave 1m / 3m for later (not derived from 5m). No multi-TF materialize into DB. Admin → Data warehouse → Download a symbol → status reaches Data downloaded when days ≈ need (≥90%). Open that symbol on /charts: ~1y of 5m; switch 15m–4h stays fast via aggregate from 5m tip (no extra PG rows). Hard-refresh v0.5.155.
56 0.5.156 Sat 26 Sep 2026 — Fast tip shelf (~45d) + all-TF Redis + year on scroll. Redis tip no longer ships the full warehouse year on first paint. Hot shelf = ~45 trading days for every offered TF (5/10/15/30/45/60/240…) pre-built in Redis so TF switches hit tip directly. Full year stays in Postgres; history.php loads deeper pages when you pan left (deferred prefetch so first paint stays snappy). Hard-refresh v0.5.156. Open a warehouse symbol on /charts: first paint should feel near-instant (~45d tip); switch 15m/30m/1h without lag; scroll left to load the rest of the year from HIST.
57 0.5.157 Sat 26 Sep 2026 — Warehouse Indices + single smooth tip paint. Data Warehouse category Indices: Nifty 50, Bank Nifty, Fin Nifty, Sensex, Crude Oil (download 5m Jan 1 → today into Postgres). Charts: deep tip (~45d) paints once — no second resetData / bridge flicker on weekend or thin-today. Admin → Data warehouse → Indices → Download each index. Hard-refresh v0.5.157 on /charts: symbol open should paint once smoothly (no double load).
58 0.5.158 Sat 26 Sep 2026 — Drop 1m/3m; fast Postgres scroll past tip. Chart resolutions = 5 / 10 / 15 / 30 / 45 / 60 / 240 / 1D (all from 5m warehouse clock). Removed 1m and 3m. Scroll left past ~45d tip: HIST loads from Postgres in ~50-day pages (no Redis year cache); gap-fill skipped on wide pages for snappy pan. Hard-refresh v0.5.158. Confirm 1m/3m gone from TF menu. Open a warehouse symbol, pan left past tip — deeper history should appear quickly in steps from Postgres.
59 0.5.163 Sat 26 Sep 2026 — WL tip quotes; Live|Market closed; no double tip. Watchlist LTP / day-% from tip Redis/file (works when Dhan/Kite WS is down). Header badge = market session only (Live | Market closed); feed/WS detail stays on backend (market on /api/watchlist.php). Layout restore skips re-setSymbol when the boot symbol already matches. Hard-refresh v0.5.163. With WS disconnected, watchlist still shows LTP/%. Badge never says Feed wait / WS reconnect. Reload chart once (not twice).
60 0.5.164 Sat 26 Sep 2026 — No refresh blink; orange accent trial. First paint = last ~3 sessions (no post-paint setVisibleRange jump). Boot layout restore skips w.load sector state (was full candle blink). Accent swatch next to theme: blue ↔ orange chrome. Hard-refresh v0.5.164: reload page — candles should not flash/redraw. Click the round accent swatch to try orange buttons.
61 0.5.165 Sat 26 Sep 2026 — Search, +/✓ custom, closed WL tab, slim header. Header: removed active-symbol chip; added DB symbol search; TV Compare disabled. Watchlist +: stays on tab, becomes ✓ (click again to remove). Closed dock = vertical blue WATCHLIST edge tab. Accent swatch removed. Header shorter. Hard-refresh v0.5.165. Search RELIANCE from header. Add stock with + without jumping to Custom. Collapse WL — right edge shows WATCHLIST tab.
62 0.5.166 Sat 26 Sep 2026 — WL overlay + TradingView symbol search. Watchlist floats over the chart (right edge) — no longer shrinks chart width. Collapsed = vertical WATCHLIST tab. Symbol search uses Charting Library header search (searchSymbols → catalog API). Custom header search removed. Hard-refresh v0.5.166. Open/close WL — chart stays full-bleed underneath. Use TV toolbar search magnifier for symbols.
63 0.5.167 Sat 26 Sep 2026 — Side-docked WATCHLIST rail (not overlay). Collapsed watchlist is a 40px rail beside the chart (chart shrinks). Vertical WATCHLIST label + expand arrow. Open panel is flex sibling, not absolute overlay. Hard-refresh v0.5.167. Collapse WL — price axis stays clear; rail sits to the right of the chart. Click rail to expand.
64 0.5.168 Narrower WATCHLIST rail (26px) and open panel (~300px). Hard-refresh v0.5.168 — collapsed right bar is thinner.
65 0.5.169 Sat 26 Sep 2026 — Volume always on; smooth left-pan; responsive. Volume study forced on chart ready. First paint ~15 sessions + non-blocking HIST on scroll-left. Breakpoints: desktop / laptop / tablet side-dock / phone bottom sheet. Hard-refresh v0.5.169. Volume histogram visible. Pan left should feel continuous. Check phone + tablet layouts.
66 0.5.170 Sat 26 Sep 2026 — Fix Volume: one pane + real bars. Stop stacking Volume on refresh (dedupe + no default create). Enable ohlcv plots; range proxy when tip volume is 0 (indices). Hard-refresh v0.5.170. Exactly one Volume pane with histogram bars (FINNIFTY / equities). Refresh must not add more Volume panes.
67 0.5.171 Sat 26 Sep 2026 — Mobile header + watchlist sheet. Slim 40px phone header. Watchlist is a compact push bottom sheet (no overlay); tap handle to expand; auto-closes after picking a symbol. Hard-refresh v0.5.171 on phone. Header should be one tight row. Open WL → chart shrinks above sheet; pick a symbol → sheet closes.
68 0.5.172 Sat 26 Sep 2026 — Dhan-style watchlist dropdown. List picker (Indices / Sectors / F&O + custom lists). Create / rename / copy / clear / delete. Columns Symbol · LTP · Chg · Chg%. Custom quotes via ?symbols=. Hard-refresh v0.5.172. Open list dropdown, switch lists, create “My List”, add via +, confirm LTP/Chg/Chg% on equities.
69 0.5.173 Sat 26 Sep 2026 — WL names + custom tabs 1/2/3. Wider symbol column (full names). Custom lists as numbered tabs under search; dropdown keeps Indices / Sectors / F&O only. Hard-refresh v0.5.173. Names readable (e.g. FINNIFTY). Tabs 1·2·3 under search switch custom lists.
70 0.5.174 Sat 26 Sep 2026 — Custom list add UX + rename. Smaller 1/2/3 tabs; double-click (or Rename) to name a list. Empty list shows Add symbol CTA + search suggestions to add stocks. Hard-refresh v0.5.174. Open tab 1 → Add symbol → type RELIANCE → tap result. Double-click tab to rename.
71 0.5.175 Sat 26 Sep 2026 — Indicator favorites, strict autosave, OC header. ★ float dock (bottom-right) + stars in Indicators dialog. Autosave shows Saving… / ✓ Saved popup. Option chain sticky header no longer overlaps on scroll. Hard-refresh v0.5.175. Tap ★ → apply EMA. Change interval → see Saving popup. Open option chain and scroll — header stays clean.
72 0.5.176 Sat 26 Sep 2026 — Solid OC header + autosave toast fix. Option chain header uses fully opaque backgrounds (no bleed-through). Autosave forced always-on; center Saving… / ✓ Saved popup above modals. Hard-refresh v0.5.176. Scroll option chain — header solid. Change timeframe or add indicator — center Saving popup appears.
73 0.5.177 Sat 26 Sep 2026 — Autosave on all page changes. Indicators add/remove, layouts, watchlist add/remove/rename, favorites, theme & settings all trigger Saving / ✓ Saved (or Watchlist/Favorites saved). Hard-refresh v0.5.177. Add EMA → Saving. Remove from watchlist → Watchlist saved. Star/unstar favorite → Favorites saved.
74 0.5.178 Sat 26 Sep 2026 — Restore on refresh + header autosave badge. Saved indicators/drawings restore after refresh. Autosave status shows in the header (not over the chart). Hard-refresh v0.5.178. Add EMA → wait for ✓ Saved in header → refresh — EMA still there. Saving text appears next to Live badge.
75 0.5.179 Sat 26 Sep 2026 — Small header save + smooth theme boot. Compact Saving/Saved in header. Theme loads once without light↔dark flicker on refresh (boot mask + single layout restore). Hard-refresh v0.5.179 on light and dark. Chart should appear in the correct theme without flashing the other.
76 0.5.180 Sat 26 Sep 2026 — Fix empty chart on theme toggle. Theme switch no longer leaves charts blank (boot hide mask was sticking). Hard-refresh v0.5.180. Toggle light ↔ dark — chart stays visible with indicators. Refresh still smooth.
77 0.5.181 Sat 26 Sep 2026 — Fast option-chain chart open. OC strike/CE/PE click paints instantly from LTP, then merges tip+history so available bars show (not empty / seed-only). Stock/index + live WS unchanged. Hard-refresh v0.5.181. Open option chain → click ATM CE — chart appears immediately, then fills with history when available.
78 0.5.182 Sat 26 Sep 2026 — Fix OC “No data here” + ATM tip prefetch. Option seed paint bypasses equity continuity gates. Prefetch tip for ATM±wing while OC is open. OTM with 0 LTP still seeds (bid/ask/0.05) instead of blank. Hard-refresh v0.5.182. Open OC (wait ~1s) → click ATM CE (instant). Click far OTM — should still show a chart, not “No data here”.
79 0.5.183 Sat 26 Sep 2026 — OC weekend blank + click logs. Option seed uses last weekday session buckets (Sat/Sun no longer blank TV). OC clicks force sector pane. Skip OPT hist.bridge storm. Beacon [oc] click/paint/noData to js_debug.log. Hard-refresh v0.5.183. Open OC → click ATM CE. Chart should paint immediately even on weekend. Check console for [oc] click / [oc] path.opt-quote / [oc] paint.
80 0.5.184 Sat 26 Sep 2026 — OC click speed. Removed warm.php + ticks.php from option click (were 2–9s). OPT paints LTP seed immediately; tip uses warm (no refresh=1); skip OPT hist year-page storm. Hard-refresh v0.5.184. Open OC → click any CE/PE — chart should appear in under ~200ms, then deepen quietly.
81 0.5.185 Sat 26 Sep 2026 — OC tip batch cache. Opening option chain preloads ATM±wing CE/PE tips into browser MEM via /api/oc-tip-batch.php. Click uses OPT-MEM (cached tip) instead of a 2-bar quote seed. Hard-refresh v0.5.185. Open OC, wait ~2–3s for cache (console [oc] cache.ready), then click any nearby CE/PE — should paint instantly from cache.
82 0.5.186 Sat 26 Sep 2026 — Intraday WebSocket Logbot. New green badge above Live Bot: Intraday WS. Auto-logs live MarketFeed WS, option-chain WS, and OC click→path→paint (also idws.* in LATEST.jsonl). Hide with ?wsbot=0. Hard-refresh v0.5.186. Click green Intraday WS badge (above Live Bot) → open OC → click CE/PE → watch path / tip ms / WS status.
83 0.5.187 Sat 26 Sep 2026 — Stop OPT scroll storm + HIST hang. Option left-scroll returns noData outside tip MEM (no more OPT-MEM-EDGE loop). OPT histNet hard-timeout 1.5s. Click deepen is tip-only (no 11–19s HIST + resetData). Hard-refresh v0.5.187. Open OC → click CE/PE. Intraday WS should show path OPT-MEM quickly; no flood of OPT-MEM-EDGE; no 10s+ HIST on click.
84 0.5.188 Sat 26 Sep 2026 — OPT seed→tip redraw + OC click debounce. Tip deepen now resetData when seed (≤8) → real tip (≥20). Never overwrite richer MEM with 2-bar seed. OC pickSide debounced 400ms. Intraday WS no longer logs every oc.tick. Hard-refresh v0.5.188. Click one CE — single select in logs; chart should show candles after tip (~200ms), not blank loading.
85 0.5.189 Sat 26 Sep 2026 — OPT viewport like Nifty/Crude. After OPT-MEM / tip deepen, fit visible range to last tip bars (not empty weekend “today”). Skip thin LIVE-SEED overwriting seed. ATM CE/PE should show candles the same way index charts open. Hard-refresh v0.5.189. Open OC → click ATM CE. Expect viewport.fit + candles on last session (Fri if weekend).
86 0.5.190 Sat 26 Sep 2026 — OPT tip weekend seed → “No data here”. Option tips were stamped Sat (outside NSE session). Seed last trading day (Fri) like Nifty; drop weekend bars server + client. Hard-refresh v0.5.190. Click any CE/PE — candles on Friday session (not blank “No data here”).
87 0.5.191 Sat 26 Sep 2026 — Watchlist/ticker day % + slower tape. After-hours Dhan glued session close onto prev_close (chg 0%). Fill % from tip prior-day close; blue up / dark-red down; tape ~110s + polish. Hard-refresh v0.5.191. Watchlist + market tape show real day % (not +0.00%); up blue, down dark red; tape scrolls slower.
88 0.5.192 Sat 26 Sep 2026 — Bullish green = #4caf50. Drop blue day-% / mint candle mix. Candles, watchlist %, ticker %, CTAs use TV picker green; mint kept only as soft secondary token. Hard-refresh v0.5.192. Up candles + % should be #4caf50 green (not blue).
89 0.5.193 Sat 26 Sep 2026 — OC click noise. Keep option chain open on strike pick (no WS close/remount). Remove listeners on destroy so clicks don’t stack. Stronger pick debounce. Hard-refresh v0.5.193. Click several CE/PE with OC open — one oc.select each, no oc.ws.close between picks.
90 0.5.194 Sat 26 Sep 2026 — Landing / settings / privacy green. Front page, settings, privacy & terms, onboarding use charts dark (#121212) + bullish green #4caf50 (no blue/gold accents). Hard-refresh /, /settings, /privacy — green CTAs and headings on dark panels.
91 0.5.195 Sat 26 Sep 2026 — OC closes on pick; OPT tip = 3 sessions. Strike click closes the chain and shows the CE/PE chart. Prefetch + tip seed last 3 trading days (~225×5m) for the ATM wing — full sessions, not a half day. Hard-refresh v0.5.195. Click CE → OC closes, chart shows Wed–Fri (or last 3 sessions).
92 0.5.196 Sat 26 Sep 2026 — Bar Replay. Header Replay button: click a candle to start, then play / pause / step / speed (0.5×–8×). Live ticks muted until you hit Live. Hard-refresh v0.5.196. Replay → click a bar → play. Esc or Live exits to realtime.
93 0.5.197 Sat 26 Sep 2026 — OPT tip-first, no 2↔228 fit race. Cold CE/PE loads tip (3 sessions) before paint — no OPT-QUOTE flash. Viewport fit ignores thin seeds. ATM±5 get 3d batch; outer wing 1d. Hard-refresh v0.5.197. Click CE → one paint ~228 bars, stable zoom (no 2-bar then jump).
94 0.5.198 Sat 26 Sep 2026 — Replay pick line + truncate right side. Green vertical line follows hover while picking. On click, bars to the right are cleared (histCache truncate + resetData) so play advances. Hard-refresh v0.5.198. Replay → hover (green line) → click bar → right side disappears → play.
95 0.5.199 Sat 26 Sep 2026 — OPT batch: kill Sat poison, force 3 weekdays. L1 tips mixed Sat bars → client strip left 2 days or blank charts. Batch/tip now drop weekends and reseed every wing strike to 3 sessions. Hard-refresh v0.5.199. Open OC → wait cache.ready → click any CE/PE — ~3 weekday days, no blank strikes.
96 0.5.200 Sat 26 Sep 2026 — Replay: thin line only, no auto-play. Drop TV vertical_line shape (was painting a green fill on the right). Hover guide is a 2px line; after pick wait for Play. Hard-refresh v0.5.200. Replay → thin green line → click → right clears (no green block) → press Play.
97 0.5.207 Sat 26 Sep 2026 — Warehouse futures & commodities. Admin Data warehouse categories: Index futures, Stock futures, Commodities (MCX). Front-month seeds from instrument master; click category → table → Download into Postgres. Open /admin/warehouse → pick Index futures / Stock futures / Commodities → rows load with Download. Version v0.5.207.
98 0.5.222 Sun 27 Sep 2026 — Staging (.tech) and Production (.com) split. bharatcharts.tech is now the staging / testing site: every change is deployed there first (deploy/deploy.sh). bharatcharts.com is the production site: it only changes when a release verified on .tech is promoted (deploy/deploy-prod.sh, rollback with --rollback). Separate folders on the VPS: /var/www/bharat-charts-php (.tech) and /var/www/bharat-charts-prod (.com).

Separate per site: code folder, config/env.php (site URL, Google login callback, dev login off on .com), user accounts data/users.json (.com seeded once from .tech), login sessions, PHP worker pool, logs, SSL certificate.
Shared (market data only): Redis, Postgres price bars, data/cache, data/warehouse, stock logos and the Dhan / Kite tokens — one Dhan feed per VPS (Dhan limits live connections per account).

Both domains moved to Cloudflare (real visitor IPs restored in nginx). PHP workers raised 5 → 40 and nginx connections 768 → 4096 (fixes "This site can't be reached / took too long" when all 5 workers were busy). .tech sends noindex so Google only lists .com. Footers show the current domain instead of a hardcoded .tech.
https://bharatcharts.com serves the same app as .tech (response header X-BC-Env: production; .tech sends staging). Changes appear on .tech after a deploy and on .com only after "deploy to production". Existing users can sign in on .com with Google; accounts created on one site do not appear on the other.
99 0.5.223 Sun 27 Sep 2026 — Two brokers: primary + standby per job (phase 1). Roles: Kite = primary for live prices (WebSocket) and option chain, Dhan = primary for historical candles; each job keeps the other broker on standby. Roles live in data/broker_roles.json and are changed from /admin/providers.php (new Data providers page).

Automatic failover: 3 outage errors in a row (bad/expired token, rate limit, server error, timeout) → that broker sits out 5 min and the standby serves; then one retry. Per-symbol "no data" errors (Dhan DH-905) do not trigger a switch. Tokens with an expiry countdown (Dhan from the token itself, Kite at 06:00 IST) and a red admin banner when a token expires within 2 h or a job runs on standby.

Broker logins only on bharatcharts.tech: Kite "Log in with Kite" returns to /admin/kite-callback.php and saves the token automatically; production (bharatcharts.com) uses the same shared token files and its broker pages are read-only.
Phase 2 (Kite option chain) and phase 3 (Kite live WebSocket) not built yet — until then live prices and option chain run on their standby, Dhan.

Promoted to production (bharatcharts.com) on Sun 27 Sep 2026 16:09 IST — first release served from /var/www/bharat-charts-prod.
/admin/providers.php shows both tokens with expiry, the order and active broker per job, and health. "Test history" probes RELIANCE 5m. Charts history comes from Dhan, and from Kite when Dhan is down or rate-limited. On .com the admin broker pages link to .tech instead of offering forms.
100 0.5.224 Sun 27 Sep 2026 — Clean production charts; version moved to admin. New APP_ENV setting (staging on .tech, production on .com, set automatically by deploy-prod.sh). On bharatcharts.com the charts page no longer shows the test tools: KI Live Bot, Intraday WebSocket bot, the top-right version pill and the top-right "Market closed / Live" badge. bharatcharts.tech keeps all of them for testing.
The version is now shown in the admin sidebar on both sites (version · Staging/Production · domain · link to this log).
.com /charts: no Live Bot / WS bot panels, no version or market badge in the header, and no bot traffic to /api/logbot/ingest. .tech /charts unchanged. Admin sidebar (both) shows e.g. v0.5.224 · Production.
101 0.5.225 Sun 27 Sep 2026 — Replay close / mobile fixes; mobile watchlist scroll. Bar replay: the Pause button is now white instead of red. New ✕ close button on the replay bar and on the "pick a candle" hint. Esc now also works when the chart itself has keyboard focus (it used to be swallowed by the chart frame). On phones a single tap on a candle starts replay, and the replay bar sits above the bottom navigation.
Mobile watchlist: scrolling the list no longer opens the stock your finger started on — a stock opens only on a real tap. Desktop mouse clicks still switch instantly.
Desktop: Replay → pick candle → Play (white Pause) → Esc or ✕ returns to live, even after clicking the chart. Phone: Replay → tap candle → ✕ closes. Watchlist tab: swipe through the list without opening stocks.
102 0.5.226 Sun 27 Sep 2026 — Market ticker: top gainers / losers with logos. The scrolling ticker under the header now shows the indices first, then the day's top 20 gainers and top 20 losers from F&O and Nifty 50 stocks, alternating gainer / loser. Stock logos appear next to the symbol wherever one has been uploaded in admin; stocks without a logo just show the name. The mover list is re-picked every 5 minutes and swapped in when the tape loops, so it doesn't jump. /charts: ticker shows logos + a green / red alternating mix; clicking an item still opens the chart.
PROD: 0.5.225 + 0.5.226 promoted to bharatcharts.com on 27 Sep 2026 18:37.
103 0.5.227 Sun 27 Sep 2026 — Default watchlist page + ad slot. The watchlist now always opens on a locked Default page with NIFTY 50, FIN NIFTY, BANK NIFTY, SENSEX and CRUDE OIL (fixed order). Your own pages sit beside it: tap + to create one (up to 5), double-click a page to rename it, and use the list menu to clear or delete it. Old empty "1 / 2 / 3" slots are removed; lists that had stocks or a custom name are kept.
A Stock Hunter display-ad placeholder (300 × 250) sits at the bottom of the Default page; the real ad is wired in later.
Reload /charts → Default is selected even if another list was open last time; + adds a page.
104 0.5.228 Sun 27 Sep 2026 — Smooth page load. Opening /charts without a symbol now starts directly on your saved layout's chart instead of loading NIFTY 50 first and switching. The loading cover fades out instead of popping, the chart reveals sooner when there is no saved layout, and the top ticker fades in on first load. Moving between Home, Charts, Option chain, Settings, Privacy and Onboarding now cross-fades (View Transitions) instead of flashing.
On short screens the Stock Hunter ad box on the Default watchlist shrinks rather than squeezing the rows.
Open /charts from the home page → chart eases in on the saved symbol; click between pages → soft fade.
PROD: 0.5.227 + 0.5.228 promoted to bharatcharts.com on 27 Sep 2026 18:55.
105 0.5.229 Sun 27 Sep 2026 — Backup broker. Dhan stays the main source for live prices and the option chain, and Kite (Zerodha) is now a live backup. If Dhan disconnects or stops sending prices, the live feed switches to Kite straight away and moves back to Dhan once it recovers. The option chain does the same on any Dhan error.
The option chain no longer opens a second Dhan connection, which was triggering Dhan's "too many requests" block; its strike prices now stream through the main live feed.
The Dhan access token renews itself automatically. Kite needs one click each morning ("Log in with Kite"); the token is then saved automatically, and admin shows a reminder until it's done. Admin → Data providers shows which broker is serving each job right now, plus a log of every switch, renewal and login.
Admin → Data providers → "Right now" shows Dhan; the activity log lists each token renewal and Kite login.
PROD: promoted to bharatcharts.com on 27 Sep 2026 19:39; .com reads the same broker logins, roles and activity log as .tech.
106 0.5.230 Sun 27 Sep 2026 — Steadier option chain. Option chain calls to Dhan are now spaced safely inside Dhan's once-every-3-seconds limit across every process on the server, so Dhan stops answering "too many requests". If Dhan does refuse a single call, the chain fetched a few seconds earlier is shown instead of briefly switching to the Kite backup. Admin → Data providers activity log no longer shows Dhan ⇄ Kite option-chain flips every ~2 minutes.
PROD: promoted to bharatcharts.com on 27 Sep 2026 19:46.
107 0.5.231 Sun 27 Sep 2026 — Option chain LTP beside strike + 3-day option charts. In the option chain, the Call LTP and Put LTP columns now sit right next to the Strike column instead of at the far edges (desktop and mobile, on the Option chain page and the charts panel).
Clicking any strike, Call or Put, now opens a chart with the last three full trading sessions of 1-minute candles, not just the time since the strike was first streamed. Every strike of the two nearest expiries for NIFTY, BANK NIFTY, FIN NIFTY and SENSEX is filled in the background after the close and before the open, so charts open straight from the cache; any other strike is filled on its first click. Live candles continue from the live feed.
Option chain → click any strike → chart shows three sessions (e.g. 23, 24, 25 Sep) plus live.
108 0.5.232 Sun 27 Sep 2026 — Complete history for every option strike. Option strikes are no longer limited to three days. Every traded Call and Put of the five nearest expiries for NIFTY, BANK NIFTY, FIN NIFTY and SENSEX is downloaded from its first trading day and saved in our database, then topped up after each session. Clicking a strike opens the last seven sessions straight from the cache; scrolling left loads older candles from our database, back to the contract's first trade. Expired expiries are deleted automatically and new ones are downloaded as they appear; every download, deletion and futures roll is recorded in the Data Warehouse log. Broker calls are now paced across all jobs (Dhan up to 4 per second, Kite up to 3 per second). Option chain → NIFTY 29 Sep → 23200 CE → chart opens with seven sessions; scroll left to reach early July.
109 0.5.233 Sun 27 Sep 2026 — Option chains served from our own store. The option chains for NIFTY, BANK NIFTY, FIN NIFTY and SENSEX (nearest five expiries each) are now kept up to date in the background, so switching index or expiry opens instantly from the store instead of waiting on the broker, and a failed load retries on its own. Live prices stream for the strikes around the money on every chain, not just the last one opened. During market hours a snapshot of each chain (20 strikes either side of the money) is saved every five minutes and kept for 30 days.
Admin → Data warehouse has a new “Option chain” section: every chain with its strike count, how fresh it is, how much strike history is downloaded, plus “Download now” buttons and an activity log of every automatic download, expiry deletion, new expiry and futures roll.
Option chain → switch between the four indices and expiries → each opens at once with live prices. Admin → Data warehouse → Category “Option chain” → table + log.
110 0.5.234 Sun 27 Sep 2026 — Option strikes load on demand; no bulk downloads. The complete-history download from 0.5.232 is removed and everything it saved has been deleted. Clicking a strike now fetches its last seven sessions from the broker history API once and keeps them in the cache, so the next open is instant; today’s candles come from the live feed. Scrolling further back loads older candles straight from the broker API without saving them. Cached strike candles older than seven sessions are cleaned up automatically. Option chain → click any strike → seven sessions plus live; scroll left for older days.
111 0.5.235 Sun 27 Sep 2026 — Near-the-money strikes pre-cached. The last seven sessions of the ten strikes either side of the money (Calls and Puts) on the two nearest expiries of NIFTY, BANK NIFTY, FIN NIFTY and SENSEX are cached before the market opens and topped up every 30 minutes during the day as the market moves, so those charts open instantly with today’s candles continuing from the live feed. The Option chain section in Admin → Data warehouse has been removed. Option chain → NIFTY nearest expiry → click any strike near the money → chart opens at once.
PROD — promoted to bharatcharts.com on 27 Sep 2026, 21:28 IST.
112 0.5.236 Sun 27 Sep 2026 — Option chain opens without waiting for the expiry list. The list of expiry dates is now kept for six hours (it only changes weekly) and refreshed before the open and after the close, so opening the option chain for any index no longer waits on the broker. Option chain → switch to FIN NIFTY or SENSEX → opens at once.
PROD — promoted to bharatcharts.com on 27 Sep 2026, 21:33 IST.
113 0.5.237 Sun 27 Sep 2026 — Broker load cut and balanced between Dhan and Kite. The 2-minute background job that re-downloaded the same index and stock candles day and night is gone — the live feed already builds and saves every 1-minute candle. Background history (gap repair, option pre-cache) now uses Kite first; Dhan keeps live prices, the option chain and your chart clicks. A Dhan rate limit now pauses that kind of Dhan request briefly (Kite fills in) instead of retrying, and change % uses Dhan's own previous-close figure for every stock (92 stocks were missing it). Stock prices in the watchlist no longer flip to the futures price, and the option chain asks Dhan at a gentler pace.
PROD: promoted to bharatcharts.com on 27 Sep 2026, 22:37 IST.
Admin → Data providers → "Requests today" shows how many calls each broker made.
114 0.5.238 Mon 28 Sep 2026 — Smooth market ticker + live market test. The ticker under the header no longer jumps or flickers when prices refresh: it scrolls at a steady speed, keeps its place when a price gets wider, and swaps in new gainers/losers only while the indices are on screen. Logos no longer blink on refresh. The Intraday WS panel (bottom right) has a new "Live market test" tab that checks option strikes around ATM, indices, F&O, sectors, Nifty 50 and Nifty 500 in one run: page load speed, live WebSocket, one year of candles in the database, candles saved from the live feed today (gaps and lag), chart load time, and a real chart open on a sample. Stock charts such as RELIANCE, SBIN and HDFCBANK now load the stock's own history — they were loading the September future's candles underneath the stock's live price. /charts → Intraday WS (bottom right) → Live market test → Run test (or open /charts?livetest=1).
115 0.5.239 Mon 28 Sep 2026 — Every symbol live, history from 1 Jan 2026. The live feed now streams all Nifty 500 stocks plus every index, stock and commodity future (about 1,370 instruments; 230 Nifty 500 names and all futures were missing before). Postgres was filled with 5-minute candles from 1 Jan 2026 for every watchlist and warehouse symbol; futures start at their contract listing. Stock charts no longer mix in futures candles (78 stocks had futures rows under their name from July). Missed live minutes are re-fetched from broker 1-minute history every 10 minutes in market hours, and the whole warehouse is topped up every evening. Since August, F&O stocks stop at 15:15 (closing auction); the live test and repair jobs no longer count 15:15–15:30 as missing, and charts stop re-downloading them after 15:15. A deploy during market hours no longer restarts the live feed unless its code changed. 15 Jan 2026 (Maharashtra election) added as an NSE holiday. /charts → Intraday WS → Live market test → Run test: depth is now counted from 1 Jan 2026.
116 0.5.239 Mon 28 Sep 2026 — PROD: 0.5.239 live on bharatcharts.com. Every symbol on the live feed, history from 1 Jan 2026, stock charts free of futures candles, automatic gap repair, and F&O stocks ending at 15:15 (closing auction). bharatcharts.com/charts
117 0.5.240 Mon 28 Sep 2026 — New homepage hero. The homepage is less green: buttons are white/outline and the secondary accent is soft indigo; green is kept for the logo, "free", ₹0 and rising prices. The globe and the tilted terminal mockup are gone — the right side now shows five feature tiles (unlimited indicators with a live-ticking chart, option chain OI, multiple grids, bar replay, price alerts). The description talks about benefits, the buttons read "Open terminal" and "Login to charts" (also top right), and the feature strip lists ₹0 forever, Unlimited indicators, Multiple grids, Dedicated watchlist, Replay, Alerts and Option chain. bharatcharts.tech (signed out)
118 0.5.241 Mon 28 Sep 2026 — Homepage: terminal photo and feature cards. The right side of the homepage now shows the Bharat Charts trader-desk photo, blended into the page (it fades into the background instead of sitting in a box). The background looks like a trading terminal: faint candles, price levels with a last-price tag and a session time axis. "Login to charts" has a login icon, the top menu says "Features" instead of "The workspace", and the feature list is eight cards in two rows of four with colourful icons — Heatmap added. bharatcharts.tech (signed out)
119 0.5.242 Mon 28 Sep 2026 — Homepage: motion and live prices. The terminal photo sits further in, lined up with the page instead of hugging the right edge, and it now moves: it fades in on load, drifts slowly, catches a passing light sweep and tilts gently with the mouse. Floating cards on the photo show live NIFTY 50 and BANK NIFTY prices and how many instruments are streaming. The background candles scroll slowly, and the eight feature icons animate when they come into view, on hover, and one after another while the section is on screen. bharatcharts.tech (signed out)
120 0.5.243 Mon 28 Sep 2026 — Homepage: clearer headline. The moving candles no longer run behind the headline and buttons, so the text on the left stands out on a clean background; the candles now show only around the terminal photo. The word "free" in the headline uses a teal-to-lime green gradient with a soft shine that passes over it every few seconds. bharatcharts.tech (signed out)
121 0.5.244 Mon 28 Sep 2026 — First candle of the day fixed. The 09:15 candle had a huge wick (NIFTY 50 low 22,495 instead of 22,972) because prices from the 09:00–09:08 pre-open auction were counted in it. Pre-open prices now only move the quote, never a candle. Today's 09:15–09:19 candles for every symbol were replaced with the broker's own candles. The live-gap repair no longer spends a broker call on every quiet minute of thinly traded stocks. /charts → NIFTY 50 → 1m or 5m → the 09:15 candle matches the broker.
122 0.5.245 Mon 28 Sep 2026 — Live prices stay tick by tick. The live feed kept losing its broker connection every 20–60 seconds because it could not read prices fast enough, which caused missing minutes and candles that differed from the broker. The feed now does far less work per price and gets priority over background jobs, so it stays connected and candles match the broker minute for minute. Real new highs are no longer mistaken for bad prices. After each session, today's candles are also re-checked against the broker's own candles. /charts → NIFTY 50 → 1m — the price moves several times a second without refreshing.
123 0.5.246 Mon 28 Sep 2026 — Watchlist live, candles match the broker, no holes. Every symbol in the watchlist and the scrolling market tape now updates live (about four times a second) instead of every 12 seconds. Candles are no longer reshaped to start at the previous candle's close, so open, high, low and close are the broker's own, and the chart keeps moving even while it fills a gap. Restarting the live feed no longer loses the minute in progress, and minutes lost market-wide are re-fetched from the broker for every symbol, options included. Indices, sector indices and NIFTY 50 stocks are re-checked against the broker's own 1-minute candles every 10 minutes. /charts — watch the right-hand watchlist prices change without refreshing; the chart's last candle matches the watchlist price.
124 0.5.247 Mon 28 Sep 2026 — Charts open in well under a second. Opening a stock used to download its candles twice, one after the other. It now downloads them once, so a chart appears in about a third of a second instead of about one second. On a computer, resting the mouse on a watchlist or ticker row starts loading that chart, so clicking it shows the chart almost instantly. Option contracts that had silently dropped out of the live feed are back, and the list they are kept in can no longer be wiped by two updates at once. /charts — click any stock in the watchlist; the candles appear almost immediately.
125 0.5.248 Mon 28 Sep 2026 — Chart candles keep moving with the watchlist. The last candle on a chart could stop updating while the watchlist prices kept changing. The chart now follows the same live prices without stalling: if a candle goes quiet for more than two seconds while the price is moving, it is pushed onto the chart straight away, and if a chart doesn't finish loading in three seconds it reloads itself. After a lost connection the chart reloads cleanly. Crude Oil (and other symbols the feed sends under a different name) now update on the chart, not just in the watchlist. Minutes with no trades are now left empty, exactly like the broker's own charts, instead of being filled with flat candles. The admin overview shows, for each symbol, how many missed minutes were repaired today. /charts — open any stock at 5m or 15m; the last candle moves together with the watchlist price.
126 0.5.249 Mon 28 Sep 2026 — Charts no longer stop updating until you refresh. After a short internet drop, or when the chart's history was topped up in the background, a chart could stop receiving live prices: the price kept moving in the watchlist but the candle stayed put until the page was refreshed. The chart now reconnects itself every time, and if it is ever left without live prices for three seconds it reloads on its own. Coming back to a tab you had left open catches the chart up straight away. Watchlist prices now show two decimals, the same as the chart, so 22,832.95 no longer reads as 22833. /charts — open NIFTY 50 at 5m, turn Wi-Fi off for ten seconds and back on; the candle keeps moving without a refresh.
127 0.5.250 Mon 28 Sep 2026 — Faster option chain with live prices, and live option charts. The option chain opens with the table already filled in, instead of waiting for two separate loads. Prices update smoothly many times a second without the page stuttering, and the rest of the table (OI, volume, IV, bid/ask) refreshes every five seconds without jumping. Before, prices that weren't getting live updates never changed at all. Switching between NIFTY, BANK NIFTY, FIN NIFTY and SENSEX takes one load, and reopening the option chain from a chart is instant. Option charts (a Call or Put opened from the chain) are now live: their candles used to sit still between refreshes. Links that open a chart for a specific symbol (for example clicking a strike on the option chain page) now open that symbol instead of your last saved chart. If the main live-price connection keeps getting cut off, prices now switch to the backup source within seconds instead of stopping for minutes. /option-chain — prices near the ATM strike change every second; click a Call price and its chart candle moves with it.
142 0.5.265 · PROD Mon 28 Sep 2026 — PROD: chart alerts now reach you even when Bharat Charts is closed. Once you allow notifications, every alert you create is also watched by the server, which checks it against live prices every 3 seconds (indicator alerts use the same 5-minute candles as the chart). When it triggers you get a notification on this device and on your other signed-in devices, even with the browser closed. If the chart is open at the time you still get only one notification. Alerts sent while you were away appear in the alert Log. The admin Push notifications page shows how many alerts are being watched, how many were sent today and whether the alert checker is running. Alert pop-ups now also work on Android.
141 0.5.264 · PROD Mon 28 Sep 2026 — PROD: alerts stay on, and notifications that reach you with the site closed. An alert you create now stays active until you delete it; it no longer switches itself off after the first trigger. The Trigger choice is now "Every time" or "Once a day". The first time you open /charts the browser asks whether to allow notifications; once allowed, your device is registered for push notifications. Admins can send a notification to all subscribed users (or one user) from the new Admin → Push notifications page. Mentions of other charting products were removed from the alerts panel, and the Stock Hunter ad box at the bottom of the watchlist is gone for now.
140 0.5.263 · PROD Mon 28 Sep 2026 — PROD: the new homepage is live on bharatcharts.com. The headline now reads "completely FREE" in capital letters, and the address shown on the feature screenshots is simply "bharatcharts.com". This release also takes everything from 0.5.255 to 0.5.262 to the main site: the new homepage (problem section, Introducing Bharat Charts, seven feature rows with real screenshots, reviews, FAQ, Contact us form, new Register panel and glass footer) and the fresher option chain prices from 0.5.255. bharatcharts.com — homepage headline and feature screenshots; bharatcharts.tech shows the same.
139 0.5.262 Mon 28 Sep 2026 — Homepage: real screenshots for all seven features, with motion. Each feature row now shows a real Bharat Charts screenshot inside a browser-style window: Multiple grids, Unlimited indicators, Dedicated watchlist, Heatmap, Option chain, Alerts and Replay. When you scroll to a row the window opens from top to bottom, the picture gently zooms into place, a soft shine passes across it and a small glass label pops up (for example "4 charts, 1 screen" or "Live OI and IV"). A coloured glow in each feature's colour breathes behind the window. On a computer the window tilts slightly as you move the mouse over it. The picture side is now a bit wider so the screenshots are easier to see. Phones get a smaller window and label. / (homepage) — scroll through the feature rows under "Introducing Bharat Charts".
138 0.5.261 Mon 28 Sep 2026 — Homepage: Contact us form, clean section edge, better mobile layout. New "Contact us" section above the final Register panel: name, email, phone (optional), topic and message. Messages are saved and can be read in Admin → Contact messages. "Contact" is added to the top menu (desktop and mobile) and "Contact us" to the footer. The white problem section no longer fades into the dark part; it now ends with clean rounded corners, like the white Reviews section. Mobile and tablet checked from 320px to 1280px wide: no sideways scrolling, the "developed by Vardhan Capital" line wraps neatly, empty picture boxes are smaller on tablets, and the Register buttons stack only on phones. / (homepage) — scroll to Contact us and send a test message; /admin/contact.php to read it.
137 0.5.260 Mon 28 Sep 2026 — Homepage: softer fade, tighter spacing, glass chips on the picture, premium CTA and footer. The white problem section now ends with a short, soft fade into the dark part (no more big blue band), and the empty space around it and between the feature rows is smaller. The "Introducing Bharat Charts" picture now has four small floating glass labels: Live NSE prices, 8 charts on one screen, 100+ indicators and Free forever. The final "Register" panel has a new look: a slowly moving glowing border, soft coloured light, a faint chart in the background, a "Free forever · No card needed" tag and three ticks (Sign in with Google, No credit card, Works in your browser). The footer is now a frosted-glass card like the top menu, with links (Features, Reviews, FAQ, What's new, Privacy & terms, Help center), a Register button and a short "not investment advice" note. / (homepage) — scroll from the problem section into "Introducing", then to the bottom of the page.
136 0.5.259 Mon 28 Sep 2026 — Homepage: reviews carousel, new FAQ, smoother fade into "Introducing". After the golden "₹0 forever" card there is now a white section with 11 review cards (star ratings of 4, 4.5 and 5) that slowly scroll from right to left and pause when you hover. These are sample reviews for now, marked as such, until real user reviews are added. Below them is a new FAQ with 8 questions: what Bharat Charts is, is it really free, what features you get, how many indicators, live prices, markets covered, install, and investment advice. Then the final "Register" panel and the footer. The old "How it starts" and "The offer" sections were removed, and the top menu now shows Features, Reviews and FAQ. The white problem section now fades slowly through a soft blue-violet into the dark "Introducing Bharat Charts" part instead of turning black suddenly. / (homepage) — scroll past the problem section (smooth fade), then past the golden card to Reviews and FAQ.
135 0.5.258 Mon 28 Sep 2026 — Homepage: red warning on the problem section, eight feature rows, golden ₹0 forever. When you scroll to "Most free charts show you only half the picture", the section now flashes red like a warning: a blinking warning sign, the sample chart card shakes and glows red, the ✕ marks pulse and a red line scans across the chart. The white section now fades smoothly into the dark "Introducing Bharat Charts" part instead of ending with a hard edge. Under "Introducing Bharat Charts" it now says "A proud charting platform developed by Vardhan Capital" (the "Features" label was removed). The feature list below is now eight rows, one per feature, with a short heading, a line of text and three points each: Multiple grids, Unlimited indicators, Dedicated watchlist, Heatmap, Option chain, Alerts, Replay, and a golden "₹0 forever" card with a shining ₹0. The picture space on each row is kept empty for now; the real pictures will be added later. / (homepage) — scroll to the white section (red warning), then down through the eight feature rows.
134 0.5.257 Mon 28 Sep 2026 — Homepage: real product picture, simpler words, tighter spacing, scroll motion. "Introducing Bharat Charts" now shows the real picture of a trader using Bharat Charts. The problem section uses simple words ("Most free charts show you only half the picture") and shows a sample free-plan chart with its limits: 15 minutes late, 1 chart only, an "Indicator limit reached" message and a "Pay to see more" lock. The four points under the picture have coloured icons. Buttons now say "Register for Bharat Charts" and "Register now for the terminal". Less empty space between the feature cards, the white section and the features below. New motion while scrolling: the product picture tilts up into place, the sample chart draws itself, text comes in from a soft blur and the feature pictures move gently. / (homepage) — scroll slowly from the feature cards down to the features.
133 0.5.256 Mon 28 Sep 2026 — Homepage: "the gap" on white, and a new "Introducing Bharat Charts" block. After the feature cards, the page now moves from dark to a white section that explains why most free charts leave you flying blind: other chart platforms lock tools behind a paid plan and broker charts have limited functions. Next to it, a greyed-out "Other charts" card lists what you miss (one chart at a time, capped indicators, delayed data, paid replay and alerts) with an "incomplete picture" bar. The features section now opens with "Introducing Bharat Charts": a large product picture, a short description, four key points and an Open terminal button. The main hero button now says Register now. Section numbers (01, 02…) were removed from the section labels. / (homepage) — scroll past the feature cards: white "Most free charts make you fly blind" section, then "Introducing Bharat Charts".
132 0.5.255 Mon 28 Sep 2026 — Option chain opens fresh and keeps itself up to date. Opening an option chain you weren't already watching could show prices and OI up to a minute old until you pressed refresh. It now fetches a fresh copy as it opens. Coming back to the tab or reconnecting to the internet refreshes it straight away. A live connection that has quietly stopped reconnects on its own. Prices in the table could also briefly jump to an older value whenever the live window moved with the ATM strike; old prices are now ignored. Strikes that didn't trade at all in the previous session (common for FIN NIFTY in-the-money calls) no longer show a misleading Chg% such as −87%. They show "—", because the exchange's "previous close" for them is from an older day. Option candles were checked against Kite for NIFTY, BANK NIFTY, FIN NIFTY and SENSEX and match minute-for-minute. A call chart with no candles for the previous day means that contract didn't trade that day; Kite's own chart is empty there too. /option-chain — open FIN NIFTY: prices are current without pressing refresh; switch tabs and come back and it updates at once; untraded strikes show "—" in Chg%.
131 0.5.254 Mon 28 Sep 2026 — Heatmap tiles show the stock name; Nifty 500 and Commodities added. Every heatmap tile now shows the stock or index name next to its logo. Before, the name was squeezed out of the tile, so you only saw the logo, change % and price. The Universe dropdown now also has Nifty 500 (all 500 stocks) and Commodities (MCX futures such as Gold, Silver, Crude Oil, Natural Gas and Copper). Clicking a commodity tile opens that commodity's chart with its own name in the chart legend (Gold charts used to be labelled Crude Oil) and MCX trading hours up to 23:30.
PROD: 0.5.240 – 0.5.254 promoted to bharatcharts.com on 28 Sep 2026, 15:02 IST (new homepage, live candle and option chart fixes, Kite-first options, live watchlist, heatmap names).
130 0.5.253 Mon 28 Sep 2026 — Dotted last-price line on every chart. Every chart now shows a dotted horizontal line at the last traded price, with the price on the right axis. This covers stocks, indices, and Call/Put charts opened from the option chain. Before, the line could be missing if older saved chart settings had it switched off.
129 0.5.252 Mon 28 Sep 2026 — Option charts show the exact exchange candles, with no gaps. Call and Put charts used to build today's candles from the live price stream. Some minutes were missing, many candles were slightly off, and the first candle of the day had its low cut short. Now the chart uses the broker's own candles, rechecks them every minute while the market is open, and fills in or corrects any candle that was missing or wrong. An open chart fixes itself within about a minute, so you no longer need to refresh. Minutes with no trades are left empty, the same as on the broker's chart.
128 0.5.251 Mon 28 Sep 2026 — Option chain and option charts now come from Kite (Zerodha). Dhan kept refusing option chain requests for being too frequent, so the chain kept switching between sources. Options now come from Kite first, and Dhan takes over only if Kite is down or not logged in. Indices and stocks stay on Dhan first, with Kite as their backup. The option chain refreshes about every 4 seconds while it is open (it was every 7 seconds or more), and 121 strikes around ATM are shown. IV, delta, gamma, theta and vega are worked out from the current price, so they no longer lag behind the market. Opening a Call or Put chart loads its history from Kite. OI change is measured against the previous day's closing OI and starts showing from tomorrow's session (it was always blank before). Kite needs its once-a-day login on the admin Data providers page; without it the options go back to Dhan. /option-chain — the ATM row's IV and delta change with the price; admin Data providers shows Option chain and Option charts with Kite first.