chart/app/api
Chris Amow 32e25b84aa Number alerts, stamp them locally, and compact the zone list
Alerts get a number, assigned server-side and shown in both the push and the
Events list, so a notification on a phone can be matched to a row on a screen
when several fire together. It could not come from the browser: that counter
restarts on reload and differs between tabs. It is persisted next to the
cooldown state, because numbering restarting after a deploy would collide with a
phone's existing notification history — which changed that file from a list to
an object, with the loader still reading the old shape.

Pushes now carry a timestamp in the configured zone rather than the server's.
ALERT_TIMEZONE defaults to America/Chicago; containers run UTC, and a push
reading 02:14 to someone seeing 21:14 costs a translation every time. The
browser already formats its own times locally and is unchanged.

Confluence zones are one line each, ordered by price rather than by proximity,
so the list reads top to bottom the way the chart does and all of them fit on
screen — sixteen zones in 394px, about 25px each, where each previously took a
four-line block. Ordering is a display concern only: the server still returns
them nearest-first, which is what the alert path wants.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 21:44:57 -05:00
..
__init__.py Implement M1 live one-minute chart 2026-08-09 20:38:50 -05:00
captures.py diagnostic capture feature 2026-08-11 16:08:32 -05:00
deps.py - Drag a selected trendline body to reposition the entire line. 2026-08-11 05:46:09 -05:00
meta.py Put diagnostic capture retrieval behind the same auth as everything else 2026-08-11 17:24:04 -05:00
routes.py symbol improvements 2026-08-11 19:51:39 -05:00
schwab_auth.py Add the OAuth callback endpoint at /api/qt 2026-08-10 04:45:31 -05:00
ws.py Number alerts, stamp them locally, and compact the zone list 2026-08-11 21:44:57 -05:00