# Competitor chart transition research

Date: 2026-04-22
Purpose: Inform TL decision on NanoStreet sparkline + 1D chart market-status transition behavior.
Author: coordinator research agent
Research window: ~45 min web search + fetch (no device capture)

## Research methodology

- Primary: vendor support docs + help-center pages (Robinhood, Webull, TradingView, Yahoo, thinkorswim, Apple, Public, moomoo, Bloomberg).
- Secondary: Apple/MacRumors community threads, brokerage-review writeups, TradingView charting-library API docs.
- Gaps: no direct device captures, no Reddit/App-Store reviews pulled successfully (site:reddit.com returned empty from the search provider). Inferred behavior is flagged per app.
- Confidence ratings applied per app: **High** (vendor doc is explicit), **Medium** (doc partially describes, rest inferred from convention), **Low** (no direct doc, inference-only).

---

## Per-app summary

### 1. TradingView (web + mobile) — Confidence: High

**Sparkline:**
- TradingView's main product is the full chart, but the mini "preview" sparklines on watchlist rows and symbol tooltips render **regular-session only by default** (the ETH toggle is a chart-level setting, not sparkline-level).
- Color: green/red reflects last-close-in-range vs first-close-in-range (i.e. change color flips based on period delta, not vs prev close).
- Notes: inferred from convention + TV's RTH-first data model.

**1D chart:**
- Pre-market (04:00–09:30 ET): **hidden by default**, shown only if the user toggles ETH (Extended Hours button, bottom-right of chart). When on, pre-market renders as a **tinted background region** with the same solid price line.
- After-hours (16:00–20:00 ET): same ETH toggle, same tinted background treatment. Default tint colors: pre-market `rgba(200,0,0,0.08)` (red-ish), post-market `rgba(0,0,200,0.08)` (blue-ish) — customizable.
- Overnight / weekend: no data shown; chart skips those time slots.
- Visual differentiation: **background tint per session**, line stays solid and continuous across regular + extended. Sessions only render on intraday timeframes (1m–1h); daily and higher are RTH-only.
- Reset at 9:30: soft — no hard reset; line is continuous through the whole intraday session if ETH is on, but regular session gets its own untinted band.
- Source: [TradingView Advanced Charts — Extended Sessions docs](https://www.tradingview.com/charting-library-docs/latest/connecting_data/Extended-Sessions/), [TradingView support — Access Extended Hours](https://www.tradingview.com/support/solutions/43000502023-i-want-to-access-extended-hours-data/)

**Main price sync:**
- Header price follows the chart's configured session. If ETH is off, last-price and %-change are RTH-close-based. If ETH is on, last-price tracks latest extended tick.

**Transitions:**
- No hard cutover animation — user-gated via the ETH toggle. At 09:30, if ETH is on, the regular-session band starts; tint changes to `outOfSession` → regular.

---

### 2. Robinhood (mobile) — Confidence: High

**Sparkline:**
- Watchlist sparklines: color rule is "**green if last close of frame > first close of frame**, red otherwise" (from their `robinhood/spark` library and docs). It does *not* flip on crossing the prev-close line in the sparkline itself.
- For the 1D range, the sparkline tracks the **full 24-hour window** (since Robinhood moved to 24hr market), including pre-market, regular, after-hours, overnight.
- Source: [Robinhood — Widgets/Watchlists](https://robinhood.com/us/en/support/articles/watchlist-and-cards/), [robinhood/spark on GitHub](https://github.com/robinhood/spark)

**1D chart:**
- Pre-market (04:00–09:30): line continues — "**1D and 1W charts will continue to show active market data even during overnight and pre-market hours.**"
- After-hours (16:00–20:00): **two-line treatment** — one line shows the regular session, a second line continues from market close showing after-hours changes.
- Overnight (20:00–04:00): included in the 24hr view since the 24-hour market feature launched; continuous.
- Visual differentiation: the large chart shows **two separate connected segments** (regular vs extended). Historically Robinhood used a lighter/secondary color for the extended-hours segment; the inflection point is the 16:00 close.
- Reset at 9:30: carries over via the continuous 24hr line; the "Today" label reference point is still the regular-session open (09:30).
- Source: [Robinhood — Using Charts](https://robinhood.com/gb/en/support/articles/using-charts/), [Robinhood 24-Hour Market](https://robinhood.com/us/en/support/articles/24hour-market/)

**Main price sync:**
- Price header is **session-aware**. Four labels rotate: "Today" (9:30–16:00, vs today's open), "After Hours" (16:00–20:00, Δ vs today's close), "Overnight" (20:00–04:00, Δ vs today's close), "Pre-Market" (04:00–09:30, Δ vs prev close). Example from docs: `$1.76` today change followed by `$0.07 After Hours`.

**Transitions:**
- Hard label swap at each session boundary; chart line continues; dotted prev-close reference line remains visible across all sessions. Confirmed via Robinhood's official X post: *"The dotted line on the stock chart marks the previous close."*

---

### 3. Webull (mobile + desktop) — Confidence: High

**Sparkline:**
- Watchlist mini-sparklines follow whatever the user's global extended-hours setting is. Default is **regular-hours only**; when user toggles on, pre/after-market ticks are included.
- Color: green/red based on session change direction (inferred; Webull convention).

**1D chart:**
- Explicit **three-mode toggle**: **Combined Display / Separated Display / Hide** for extended hours.
  - **Combined**: pre-market + regular + after-hours rendered as one continuous line on the same x-axis.
  - **Separated**: regular session in its own band, extended sessions rendered as distinct visual segments (typically thinner line + different color — common convention but not doc-confirmed).
  - **Hide**: RTH only.
- Pre-market (04:00–09:30): included in modes 1/2.
- After-hours (16:00–20:00): included in modes 1/2.
- Overnight: Webull supports overnight trading sessions with a fourth option for overnight charting.
- Visual differentiation: depends on the user's chosen mode.
- Reset at 9:30: no hard reset — mode dictates whether you see continuous or separated bands.
- Source: [Webull — Toggle Extended Hours](https://www.webull.com/help/faq/423-How-do-I-toggle-extended-hours-pre-market-and-after-hours-quotes-on-or-off), [Webull — Customize Charts](https://www.webull.com/learn/PEyJYP/SvfXUX/How-to-Customize-Your-Charts)

**Main price sync:**
- Header price typically tracks latest tick from the enabled sessions. Webull shows separate pre-market / after-hours price+% lines below the main number (common pattern on broker apps).

**Transitions:**
- No hard animation; smooth line extension at session boundaries if combined mode.

---

### 4. Yahoo Finance (web + mobile) — Confidence: Medium

**Sparkline:**
- Watchlist mini-charts render RTH-only on the "1D" range by default; inferred from the chart system's extended-hours being opt-in.
- Color: typical green-up/red-down based on %-change.

**1D chart:**
- Pre-market (04:00–09:30) + after-hours (16:00–20:00): toggled by "Extended hours" checkbox in chart settings (web + iOS + Android). Off by default.
- When enabled, extended-hours ticks are rendered inline on the same chart. Yahoo also has a "Gray background strips" option that **shades non-regular periods** — suggests sessions are differentiated by gray background bands rather than dotted lines or color changes.
- Overnight / weekend: no data.
- Visual differentiation: optional gray strips per session + continuous line; default off.
- Reset at 9:30: none — continuous line if toggle is on.
- Source: [Yahoo Finance — Chart Settings (Web)](https://help.yahoo.com/kb/finance-for-web/customize-chart-settings-yahoo-finance-web-sln26786.html), [Yahoo Finance iOS settings](https://help.yahoo.com/kb/SLN31043.html)

**Main price sync:**
- Header shows the **regular-session last + a separate "Pre-Market" or "After Hours" line** beneath it (Yahoo's long-standing convention — dual line display).

**Transitions:**
- Session-label swap in the subheader; chart itself is user-controlled.

---

### 5. Public.com (mobile) — Confidence: Low

**Sparkline:**
- No public doc found on sparkline visual behavior. Based on the company's positioning (simpler/retail investor), likely RTH-only sparkline with green/red by range delta.

**1D chart:**
- Public offers after-hours trading 16:00–20:00 ET and has dedicated `/after-hours` pages per ticker.
- The dedicated after-hours page shows **tabular data** (after-hours price, high, low, and a Price History table comparing market-close price vs after-hours price) rather than a continuous extended chart. This is a **surface-separation pattern** — regular chart on main stock page, separate "After Hours" page for extended data.
- Pre-market: limited public info. Brokerage reviews suggest Public does not heavily market pre-market visualization.
- Source: [Public.com — AAPL After-Hours](https://public.com/stocks/aapl/after-hours), [Public extended hours review](https://www.brokerage-review.com/investing-firm/extended-hours/public-after-hours-trading.aspx)

**Main price sync:**
- Main stock page likely shows RTH-based last + change; dedicated after-hours page has its own header.

**Transitions:**
- Not a continuous chart model — surfaces are separated by page/tab.

---

### 6. Bloomberg Terminal / Bloomberg mobile — Confidence: Medium (Terminal); Low (mobile app)

**Sparkline:**
- Terminal watchlists (MONITOR/MON): small trend arrows and % change, minimal sparklines on most screens. Mobile app sparklines not documented publicly.

**1D chart:**
- Terminal `GIP` (Intraday Price) supports opt-in pre/post-market via `GIP PRE` and `GIP POST` command variants — pre/post are **segregated views**, not inline overlays on the main GIP chart.
- Default GIP shows regular session. Separate queries for extended.
- Overnight/weekend: not shown on default GIP.
- Visual differentiation: sessions live in separate command-driven views, not visual overlays.
- Source: [Bloomberg Trading — Pre/Post-Market Liquidity](https://www.bloomberg.com/professional/insights/trading/trading-in-the-pre-and-post-market-sessions-part-i-liquidity-profile/), UTD Bloomberg commands reference

**Main price sync:**
- Terminal DES/quote pages show RTH last + separate pre/post-market bid/ask fields alongside.

**Transitions:**
- Pro tool with explicit user commands, no automatic transition animation in the retail sense.

---

### 7. thinkorswim / Charles Schwab (mobile + desktop) — Confidence: Medium

**Sparkline:**
- thinkorswim mobile and Schwab app watchlist sparklines: RTH-only by default, inferred from the chart system's opt-in extended-hours model.

**1D chart:**
- Extended hours visible via **"Show Extended-Hours Trading session"** toggle (off by default) in Chart Settings → Equities.
- Additional option: **"Highlight Extended-Hours Trading session"** applies **a different background color** to non-regular-hours bars to visually distinguish them.
- Continuous line across sessions when shown, with a highlight tint marking pre/post regions.
- Overnight / weekend: no data (overnight trading is a newer separate feature on Schwab's 24hr-market product).
- Source: [ToS Equities Settings](https://toslc.thinkorswim.com/center/howToTos/thinkManual/charts/Chart-Style-Settings/equities), [Schwab — After-Hours and Overnight on ToS](https://www.schwab.com/learn/story/after-hours-and-overnight-trading-on-thinkorswim)

**Main price sync:**
- Quote pane shows RTH last + separate extended-hours last and change below (broker convention).

**Transitions:**
- No animation; user-gated via chart settings.

---

### 8. Stocktwits (mobile) — Confidence: Low

**Sparkline:**
- Stocktwits symbol page uses sparklines on trending/watchlist cards. No public doc on RTH-only vs extended behavior. Inferred: RTH-only (content platform, not trading app) with green/red by period delta.

**1D chart:**
- Symbol detail pages show a basic intraday chart. Stocktwits recently added "Overnight Pricing" as a marketed feature; suggests they do surface extended-hours data, but visual treatment is not documented.
- Likely: continuous-line 1D with the extended-session data appended; no dotted differentiation because their target user is discussion-oriented, not trader-oriented.
- Source: [Stocktwits App Store listing](https://apps.apple.com/us/app/stocktwits/id389157776)

**Main price sync:**
- Symbol header likely RTH last + separate extended display beneath (standard pattern).

**Transitions:**
- Unknown; inferred to mirror Yahoo Finance pattern.

---

### 9. Seeking Alpha (web + mobile) — Confidence: Low

**Sparkline:**
- Symbol-page sparklines: not well documented. SA's focus is research content, charts are secondary.
- Likely RTH-only with standard green/red.

**1D chart:**
- Advanced Chart tool available on Premium, provides standard charting but no public doc on extended-hours treatment.
- Base symbol page chart likely RTH-only with separate extended-hours quote displayed in the header.
- Source: [Seeking Alpha Advanced Charting article](https://seekingalpha.com/article/4784350-how-to-use-new-charting-tools-for-technical-analysis)

**Main price sync:**
- Symbol page typically shows RTH last + separate "After Hours" price line below (industry convention).

**Transitions:**
- Not documented.

---

### 10. Apple Stocks (iOS / macOS) — Confidence: High

**Sparkline:**
- Home-screen widget and watchlist row sparklines: RTH-only on 1D range. Apple Stocks is known for **not continually updating after hours** in the sparkline itself. MacRumors/Apple community threads repeatedly note this as a limitation ("the Apple Stocks app doesn't provide any pre/post market stock info").

**1D chart:**
- 1D chart on the symbol detail screen: RTH-only line (09:30–16:00), with the **"after-hours price" shown in the upper-right corner** of the chart area as a **text label only**, not a chart extension.
- Pre-market: not shown on the chart.
- After-hours: text label in upper-right corner ("AH: $xxx.xx") when on 1D range; chart line itself stops at 16:00.
- Overnight / weekend: nothing; line just ends at last regular-session close.
- Source: [MacRumors forum — Stocks pre-market](https://forums.macrumors.com/threads/stocks-the-app-and-pre-market-quotes.2244882/), [Apple Community — After-Hours Prices](https://discussions.apple.com/thread/255199667)

**Main price sync:**
- Header price updates with RTH last during open. Outside hours: header shows last RTH close, and after-hours price appears as a **separate stamp in the corner**. Never merged into the main number.

**Transitions:**
- Clean hard cutoff at 16:00: chart freezes, text label appears separately. No line extension, no chart animation.

---

## Cross-app patterns observed

**Pattern A — Session-tinted continuous line (TV/ToS/Yahoo):**
- Render one continuous line across pre + regular + post sessions; visually differentiate via **background tint per session band**.
- Works because it preserves temporal context; user sees "when did the big move happen — pre-market or regular?".
- Apps: TradingView, thinkorswim/Schwab, Yahoo Finance (when gray strips on).

**Pattern B — Dual-segment connected line (Robinhood):**
- Regular session drawn as primary line; after-hours rendered as a **second connected segment** continuing from market close, often in a slightly lighter/different color.
- Header price swaps labels ("Today" → "After Hours" → "Overnight" → "Pre-Market") and uses a **session-appropriate Δ baseline** (RTH open, today's close, or prev close).
- Apps: Robinhood (the clearest implementation), partial Webull in "Combined" mode.

**Pattern C — User-toggleable inclusion (Webull/TV/ToS/Yahoo):**
- Extended-hours rendering is **off by default**; user must opt in via a chart setting. Sparklines never show extended data.
- Apps: all the pro/trader-oriented apps.

**Pattern D — Always-on inclusion (Robinhood 24hr):**
- Extended hours + overnight **always render** in the 1D chart and 1W chart, no toggle.
- Apps: Robinhood (only mainstream app with this stance, tied to their 24hr-market feature).

**Pattern E — Surface separation (Apple, Public):**
- Regular chart stops at 16:00. Extended-hours data lives as **a text label, a separate section, or a separate page**, never a chart extension.
- Apps: Apple Stocks (label in corner), Public (dedicated /after-hours page).

**Pattern F — Dual-line header (Yahoo / Stocktwits / Seeking Alpha / brokers):**
- Primary price line: RTH last + Δ vs RTH open.
- Secondary line directly beneath: "Pre-Market $xxx (+1.2%)" or "After Hours $xxx (−0.5%)".
- Nearly universal across non-Robinhood apps. Decouples header clarity from chart simplicity.

**Pattern G — Previous-close dotted reference line:**
- Horizontal **dotted/dashed line across the 1D chart marking previous regular-session close**. Near-universal across intraday charts (Robinhood, TradingView, StockCharts, Webull, ToS).
- Color flip (green above / red below) keyed to this line, not to start of frame.

**Pattern H — Sparkline color rule = range delta, not prev-close:**
- Sparklines (low-chrome, no room for a reference line) color themselves **green if last > first of visible range, red otherwise**. Confirmed in Robinhood's open-source `spark` library and consistent across Apple Stocks, Webull watchlist rows.

---

## Decision matrix — 5 archetypes user could pick

### Archetype 1: "Strict TV-convention" (current NanoStreet)
- **Sparkline**: regular-session only. Color = green/red by session delta.
- **1D chart**: regular-session line only. REST snapshot during open; live WS merge gated on market open. Freezes at 16:00.
- **Extended row**: separate surface (existing pattern) carries pre/after data, with session-labeled header.
- **Trade-offs**: clean, predictable; avoids conflating trader-relevant regular-session price action with thin extended-hours volume. The ~15 min empty window after 9:30 until first REST snapshot is the main wart.
- **Apps using this**: Apple Stocks, Public (surface-separated), partial Yahoo (default state before toggling on).

### Archetype 2: "Session-tinted continuous line" (TradingView / ToS)
- **Sparkline**: still regular-session only (chart-level setting doesn't propagate to sparkline). Matches Pattern H convention.
- **1D chart**: continuous line across pre + regular + post, with **background tint per session band** (e.g. subtle violet for pre, subtle amber for after). Line color unchanged. Uses WS ticks for all sessions.
- **Trade-offs**: preserves temporal context ("where did this move happen?"); no line break = no visual discontinuity; easy to add a toggle later if users complain about noise. Con: extended-hours data is often thin/noisy and can visually dominate if the regular session was flat.
- **Apps using this**: TradingView, thinkorswim, Schwab mobile, Yahoo (opt-in).

### Archetype 3: "Dual-segment Robinhood"
- **Sparkline**: full 24h always-on; color by range delta.
- **1D chart**: regular-session primary line + **second connected segment** for after-hours (and pre-market before next open). Segment uses a different color/thickness. Main price header has **session-aware labels**: "Today" / "After Hours" / "Overnight" / "Pre-Market" with appropriate Δ baseline.
- **Trade-offs**: boldest UX; aligns with NanoStreet's always-on WS data source. Requires rigorous session-label logic in the header, but it's exactly what makes users feel the data is "live." Con: visually busy if extended session had a big move + regular session had a big move; 2 narratives competing.
- **Apps using this**: Robinhood (24hr version).

### Archetype 4: "Webull tri-mode (user-configurable)"
- **Sparkline**: follows user setting (default regular only).
- **1D chart**: user picks Combined / Separated / Hide. Ship with "Combined" as default since that matches the always-on WS data mental model.
- **Trade-offs**: most flexible, but adds a settings surface and user-education burden. Probably premature optimization for NanoStreet's current user base.
- **Apps using this**: Webull.

### Archetype 5: "Corner-stamp Apple minimalism"
- **Sparkline**: regular-session only.
- **1D chart**: regular-session line only; at 16:00 the line freezes. After-hours price appears as a small text stamp on the chart ("AH: $xxx, +0.5%") without extending the line.
- **Trade-offs**: very clean visually; emphasizes that extended hours is not a "trading decision" surface for most retail users. Matches Apple Stocks, which many NanoStreet users already know. Con: wastes the WS data firehose; doesn't showcase real-time ticks.
- **Apps using this**: Apple Stocks.

---

## Recommendations

Given NanoStreet's data sources (Massive WS always-on for pre/after ticks; REST snapshot only during regular session), the strongest archetype fits are:

1. **Archetype 2 (Session-tinted continuous line)** — best fit given the always-on WS data. The WS ticks have somewhere to render, the regular session is cleanly demarcated via background tint, and we avoid the Robinhood complexity of session-labeled headers. Closes the ~15 min empty-window wart since the WS ticks pre-market would already be on the chart when 9:30 hits — there's no "empty then populates" moment.

2. **Archetype 3 (Dual-segment Robinhood)** — second-best if the product wants a more distinctive mobile feel and the TL is willing to invest in session-aware header logic. Maps very cleanly onto the WS firehose: every session becomes a first-class rendering citizen.

3. **Archetype 1 (status quo)** is safe but wastes the WS data's value proposition and creates the exact "15 min empty at 9:30" friction the TL is trying to resolve.

One-liner: **Adopt Archetype 2 (tinted continuous line) as the pragmatic default — keep the sparkline Pattern-H conservative (RTH-only, range-delta color) and add Pattern F dual-line header for extended-hours price so the main number stays unambiguously the RTH price.**

---

## Caveats / gaps

- **No direct device captures.** All findings are from vendor docs + community threads. The Webull "Combined vs Separated" visual specifics (line style, color) are not doc-confirmed — verify with a device screenshot before committing to any Webull-inspired design.
- **Reddit site-restricted searches returned empty** from the search provider; user-forum evidence is from Apple Community + MacRumors only, which tilts Apple-specific.
- **Confidence = Low for Stocktwits, Seeking Alpha, Public sparkline.** If any of these become important competitors for design benchmarking, request a device-capture pass.
- **Bloomberg mobile app not researched directly** (paid-product docs behind auth). Terminal behavior captured from academic help pages.
- **Inference flags**: "color flip on prev-close line" for sparklines is *not* the common convention — Pattern H (range-delta color) is. Confirm this was the intended NanoStreet sparkline rule before making design decisions.
- **Overnight (20:00–04:00) handling**: only Robinhood explicitly renders this in the main 1D chart. Most other apps treat it as a gap. If NanoStreet's WS covers overnight, Archetype 3 becomes more compelling; if not, Archetypes 1/2 are cleaner.

---

## Sources

- [TradingView — Advanced Charts Extended Sessions docs](https://www.tradingview.com/charting-library-docs/latest/connecting_data/Extended-Sessions/)
- [TradingView — Access Extended Hours Data](https://www.tradingview.com/support/solutions/43000502023-i-want-to-access-extended-hours-data/)
- [Robinhood — Using Charts](https://robinhood.com/gb/en/support/articles/using-charts/)
- [Robinhood — 24 Hour Market](https://robinhood.com/us/en/support/articles/24hour-market/)
- [Robinhood — Widgets in Legend](https://robinhood.com/us/en/support/articles/widgets-in-robinhood-legend/)
- [robinhood/spark sparkline library (GitHub)](https://github.com/robinhood/spark)
- [Webull — Toggle Extended Hours](https://www.webull.com/help/faq/423-How-do-I-toggle-extended-hours-pre-market-and-after-hours-quotes-on-or-off)
- [Webull — How to Customize Charts](https://www.webull.com/learn/PEyJYP/SvfXUX/How-to-Customize-Your-Charts)
- [Yahoo Finance — Chart Settings (Web)](https://help.yahoo.com/kb/finance-for-web/customize-chart-settings-yahoo-finance-web-sln26786.html)
- [Yahoo Finance — iOS Chart Settings](https://help.yahoo.com/kb/SLN31043.html)
- [Public.com — AAPL After-Hours page](https://public.com/stocks/aapl/after-hours)
- [ToS — Chart Style Equities Settings](https://toslc.thinkorswim.com/center/howToTos/thinkManual/charts/Chart-Style-Settings/equities)
- [Schwab — After-Hours and Overnight on ToS](https://www.schwab.com/learn/story/after-hours-and-overnight-trading-on-thinkorswim)
- [Bloomberg — Pre/Post-Market Liquidity](https://www.bloomberg.com/professional/insights/trading/trading-in-the-pre-and-post-market-sessions-part-i-liquidity-profile/)
- [Apple Stocks — After-Hours Prices (Apple Community)](https://discussions.apple.com/thread/255199667)
- [MacRumors — Stocks and pre-market quotes](https://forums.macrumors.com/threads/stocks-the-app-and-pre-market-quotes.2244882/)
- [Seeking Alpha — Advanced Charting Tools](https://seekingalpha.com/article/4784350-how-to-use-new-charting-tools-for-technical-analysis)
- [Stocktwits — iOS App Store listing](https://apps.apple.com/us/app/stocktwits/id389157776)
- [Robinhood (@RobinhoodApp) on X — dotted line = previous close](https://x.com/RobinhoodApp/status/543907356556279808)
