What it isThe /basics macro board — gold, bitcoin, the US 10-year yield, the
S&P 500 and crude oil (plus semis, the dollar index and a live USD gauge) — with the air
temperature in New York City and Seoul drawn on the same shared time axis.
Two temperature pillsNYC and Seoul are ordinary toggleable series: tap the pill
to show or hide, drag its slider for that one line's opacity, tap the line to identify it. They are drawn
as thin 1-px solid background lines in deliberately muted colours no market on this chart uses, so a
temperature can never be mistaken for a price.
Overlay or its own paneThe Temperature control switches between
Overlay (temperatures drawn on the price chart, the house SPX-background pattern) and Pane
(broken out into their own flush-stacked indicator pane with a real °C axis and its own height grip). The
pane reuses the stock plot's exact horizontal bounds, so the same timestamp lands on the same pixel. Pan,
zoom and the date line stay shared across every canvas either way. The choice is saved.
The °C scaleTemperature never joins the price scale. Shared °C puts both
cities on ONE °C axis so NYC and Seoul are directly comparable (the default). Own fill stretches each
city to its own high and low, which compares shape only. Either way the axis ticks print real °C.
Observations only — no forecastOpen-Meteo will happily return tomorrow. Every
point at or after the current time is dropped, deliberately: this is an observation chart, and no price
series next to it has a forward leg either.
ResolutionMax detail uses the highest available: 15-minute points
out to a week, hourly out to a quarter, and the ERA5 daily mean (with that day's max/min) for
1-year and 5-year windows. Daily avg forces one mean temperature per day for every window. The
readout prints how many points a window expected versus how many it got.
15-minute honestyOpen-Meteo only has a native 15-minute model over North
America and Central Europe. NYC's 15-minute points are real model output (HRRR); Seoul's are
interpolated from the hourly model — the payload and the readout say so per city rather than letting
you assume Korea has a 15-minute observation network.
How live is "current"Open-Meteo's current-conditions field refreshes about every
15 minutes at source. The header shows the age of the last observation and calls it near-live — it is never
labelled real time, because it is not.
Deep historyThe 5-year window is real ERA5 reanalysis, not a stub. The
reanalysis lands a few days behind, so the most recent days are derived from the hourly observations we
already hold and today is flagged partial — the line reaches the live edge without pretending today is a
finished day.
Where the market data comes fromStraight from /apps2/basics/data.php
— the same endpoint and the same store the /basics page uses. Gold, crude and the ES / NQ futures legs ride
the paid Massive Futures Advanced feed, US equities ride Alpaca, bitcoin's edge is the Coinbase last trade
and the USD gauge is Upbit; Yahoo carries history and everything not entitled. Nothing is fetched twice.
Why each market line is rescaledGold trades near $4,000, the 10-year near 4.6%,
the S&P near 7,400. On one raw axis four of the five would be flat lines. Every series is therefore
given its OWN scale and stretched to fill the canvas — the comparison is shape and timing, not level.
Reading real numbersThe left axis always prints the REAL values of the
ruler ticker with its unit ($/oz, %, index, $/bbl, °C). Tap a line — or its row on the tape — to
move the ruler; that series also becomes candles. Tap empty chart space to go back to all-lines with the
S&P ruler. The pills just switch a series on or off.
The S&P and Nasdaq lines are FUTURESThe cash indices (^GSPC, ^NDX) print
only 09:30–16:00 New York — 6.5 hours out of 24 — which left 17.5 hours of holes in the line
every day. Since 2026-07-28 these two series are the continuous front-month CME futures, ES=F and
NQ=F, the same instrument TradingView calls ES1! / NQ1!: ~23 hours a session. The only holes left are the
real CME daily break and the weekend. Daily history is the same futures back to September 2000, so there is
no cash-to-futures seam anywhere — nothing is stitched, shifted or basis-adjusted.
The 10-year yield is 24 hours^TNX is a CBOE cash index and prints
only 09:30–16:00 New York, so on a 24-hour chart it used to stop dead for 17.5 hours. Treasuries
themselves trade around the clock, so outside the cash session the line is continued from the CBOT
10-year note future (ZN=F): yield = last cash print + beta × (ZN price change). ZN is a
price in points and 32nds and moves inversely to yield, so it is not a substitute — it is a
conversion, and the conversion is stated. Beta (about −0.145 %-yield per price point, the on-the-run
10-year's DV01) is refitted from our own overlapping bars every response by least squares, and the
composite re-anchors at every cash print, so the approximation error (convexity, the cheapest-to-deliver
note changing — basis-point scale over one night) can never accumulate across days. Every synthesised bar
is drawn faded and tagged ZN-implied in the legend, the tooltip, the readout, the CSV and the
live-price tag. No silent blending.
The axis is SPLICED — dead sessions removedMarkets are shut most of the
week, and a true-clock axis spends that space drawing nothing. Any stretch where the ruler ticker has
no bars at all — the weekend, the daily CME halt — is cut out, so Friday's last candle and
Sunday's reopen sit side by side. Each cut is marked on the chart with a dashed line and a tag
(Sat-Sun, 1h halt), and the readout says how many seams and how much time were removed — you
can always see that time is missing. Everything else stays real time: tooltips, the date line, trend
lines and the window span (a "1 week" view still covers one real week, it is just drawn without the dead
space). The threshold is 45 minutes, measured: the live minute data shows ordinary quiet gaps of 2-5
minutes and one real 61-minute CME halt, so 45 min removes the halt and the weekend and nothing else.
… except when Bitcoin is onBitcoin trades straight through the weekend, so
while its pill is on the axis reverts to real clock time and Saturday and Sunday are drawn at
full width — compressing them would throw away the one thing Bitcoin is there to show. Toggling the
Bitcoin pill flips the axis live and re-fits the window. The Splice gaps button is the manual override
for everything else; while Bitcoin is shown it is disabled and says real time. Consequence, stated:
the axis follows the ruler ticker's sessions, so any other series that DID trade inside a spliced
stretch (USD live on a Sunday) has that trading compressed into the seam. Show Bitcoin, or switch splicing
off, to see those hours at full width.
Windows end at the last OPEN sessionNever at the wall clock. US markets are
shut most of the day, so a "last 4 hours" keyed off now would be blank three quarters of the time.
Temperature has no session, so it simply runs to the newest observation inside the same window.
The tape underneathSame data, second perspective. Rows are tickers, columns
are time, colour is that ticker versus its own history (or versus SPX / NAS100 / the rest of the board).
Temperature joins the tape in the two scale-free modes (own history, vs own mean) and is left out of
the ratio-based modes, where a "% change" on a °C scale that crosses zero would be meaningless.
Trend lines are locked to the DATATurn Draw on, then drag to lay a
hairline. Handles adjust the ends, a tap selects it. Each line stores the time and the real value of
the series that owned the ruler when you drew it, and it is redrawn through that series' scale every
frame — so it stays glued to its data through zooming, panning, pinching, a window switch (draw on
1d, it is in the same place on 4h and 1w) and a candle-ticker switch. Lines never expire and never
disappear on their own.
Deleting linesOnly you delete a line. Delete removes the selected one;
Delete all lines clears every line on every window and every series at once. Both pop a 5-second
Undo at the bottom of the screen, so a mis-tap costs nothing. Everything is saved in this browser
(localStorage), so your lines are still there tomorrow.
Pills are names onlyEvery pill is just the readable name — no exchange code,
no price, no extra buttons on the button. The exact symbol and the last value are in the pill's tooltip, in
the legend burned on the chart, in the readout row under it and in the CSV. There is a single
Opacity slider and it fades the last pill you tapped (its label names the target); each line
still remembers its own opacity.
Trend-line styleTap any line you drew — the tool does not even need to be on —
and a style bar opens beside it: colour, width (1 / 1.5 / 2 / 3 px), solid / dashed / dotted, opacity.
The next line you draw inherits that style. The default is a 1-px solid line in a colour no series on
this chart uses, so an annotation can never be mistaken for data.
Reset viewOne tap refits the selected window edge to edge on every canvas:
the x-axis becomes exactly that window, both vertical scales (price chart and temperature pane) return to 1×
with no offset, every line is re-fitted and the dateline / identified line / candle mode are cleared.
Double-tapping either chart does the same (it used to reset only the vertical view). The button sits in
the control bar, in the collapsed phone bar and on a chart while it is full screen.
Live value lineTap any line and it becomes the identified series — a dashed
horizontal line is drawn at its current value with a colour-matched tag pinned on that canvas's ruler,
flashing green or red as it moves. Only that one series is polled, at the fastest cadence its source can
honestly sustain: Bitcoin and USD-live every second, US equities every 2 s, CME futures every 5 s,
Yahoo-quoted lines every 10 s, and a temperature every 60 s because Open-Meteo itself only refreshes
about every 15 minutes. The header prints the real cadence — nothing fakes a tick it does not have. Tapping
empty space removes the line and its feed.
Names, not codesEvery series is labelled with its readable name — NYC °C,
Seoul °C, Gold (GC), Bitcoin, US 10Y Yield, S&P 500, Nasdaq 100, Crude Oil (WTI), NVIDIA,
Semiconductors (SMH), SK Hynix US, SK Hynix Korea, Dollar Index (DXY), USD Live (USDT/KRW) — in the pills, on
the chart, in the tooltip, in the tape rows and in the readout. The exact exchange symbol stays in small
print beside the name and in the CSV.
Event dates — the red hairlinesA 1px vertical red line (60% transparent)
marks every FOMC decision day and every mega-cap earnings date, on the price chart and on the
temperature pane (they share one x-axis). FOMC dates come from the Fed's own calendar and are stamped on the
second day of a two-day meeting, when the statement lands at 14:00 New York. Earnings dates come from
Yahoo for AAPL, MSFT, NVDA, GOOGL, AMZN, META, TSLA and AVGO, anchored on the 16:00 New York closing bell of
the report date. Hover or tap a line to name it (FOMC Jul 29, NVDA earnings Aug 26); several
events on one date share one line and stack their labels. An estimated date says (est).
Hiding the event layerThe Events button turns the whole layer off —
zero lines, not faded ones — and the choice is saved in this browser. The dates come from the same
record-first store /basics uses (../basics/events.php): one writer, one store, both pages. The
Fed calendar is re-read weekly, the earnings dates daily, and nothing is refetched once it has happened.
Events and the spliced axisAn event line is projected through exactly the same
time map the price lines use, so it can never land a column out. An event that falls inside a stretch
the axis removed (a weekend-dated print, a holiday) snaps to the nearest kept column — the last bar
before the gap or the first after it — so a hairline always sits on tradeable time.
Fading everything but one lineThe Others slider fades every line
except the one you last clicked (or the last pill you tapped) — a one-motion spotlight. It
multiplies the per-line opacities rather than replacing them, so putting it back to 100% restores exactly
what you had. The S&P 500 and NAS100 reference lines are never faded by it.
Minimizing the boxesSeries ▾ collapses the whole pill box to a
single tab that still says how many series are showing. Legend cycles the box burned in each chart's
bottom-left corner through full, min (colour chip and name only) and off. Both are
saved in this browser, and whatever the legend is showing is what a saved PNG contains.
Chips on the chart, not in a barThe actions that belong to a chart sit
on it, in its top-right corner, as tiny two- and three-letter chips: fit/z/% switches the
Y-scale mode (the chip shows the mode it will switch to), fs full screen, png saves the image,
rst resets the view and end appears only while the drawing tool is armed and leaves it. They
look tiny but their touch targets are full thumb size, and each one's meaning is in its tooltip. They are
HTML over the canvas, so a saved PNG never contains them.
Full screen really is full screenfs hands the canvas the whole physical
screen through the browser's own full-screen mode, so the address bar and tabs disappear rather than just
being filled around. The tiny B at the top centre brings the browser back (Esc does too, on a
keyboard). Where a browser refuses — iOS Safari only grants full screen to video — the chart
falls back to filling the browser window and the B button's tooltip says so.
Scrolling the page on a phoneA finger on a canvas pans and zooms that
chart, which used to leave nowhere comfortable to scroll a long page. The strip down the
left edge of every canvas — over the axis labels, where nothing is drawn — is reserved
for the page: swipe there and the page scrolls, never the chart. It is marked with a faint ↕.
ColoursThe lines you can see always wear the most distinct colours available —
red, blue, black, green, orange, purple, then greys and further-apart hues — re-assigned every time you
switch a pill on or off, so two visible lines are never similar shades. The S&P 500 keeps its reserved
dark blue and the Nasdaq 100 its dark purple. The two temperatures stay deliberately muted while they sit on
the price canvas as a background series, and join the distinct palette in Pane mode, where they are
first-class lines on their own canvas.
Touch — direct manipulationOne finger drags a canvas both ways: sideways
through time and up/down to move the vertical view. Two fingers pinch or spread, and the gesture is split by
axis — apart sideways zooms time, up and down stretches the values, diagonal does both, always
anchored on the point between your fingers. A tap identifies a line, a tap on empty space clears it, a long
press drops the all-series date line, and a double tap is Reset view — the whole window refitted edge
to edge.
Each canvas has its own vertical scaleStretching or dragging the price chart
moves the price scale; doing it inside the temperature pane moves the °C scale — they never fight each
other. Time is always shared: a sideways pinch or drag on any canvas moves all of them together, and
the date line lands on the same moment everywhere.
MouseWheel = zoom time, shift + wheel = stretch the values about the cursor,
drag = pan both axes, shift-click = the all-series date line, double-click = Reset view (the window
refitted edge to edge). The Y slider in the control bar and the pinch gesture on the price chart drive the
same number, in lockstep.
Data + storageTemperature is stored record-first in
weather/data/bars/, tail-extended by floored timestamp with a per-point source tag
(Open-Meteo forecast API vs ERA5 reanalysis). Open-Meteo only serves 92 past days at any resolution, so
the store accrues 15-minute history the vendor will not re-serve — exactly like the /basics candle store.