Ticker panel polish: freshness up top, radar pad, indicator grid,
verdict de-dup, target picker on take
Five fixes from prod review:
1. Data freshness row moves from the panel foot to directly under the
header - data age is a first-look concern.
2. Radar fingerprint labels were clipped left ("Momentum") and right
(value digits): label padding widened to fit "momentum 100" on both
anchored sides.
3. Indicators tab: the one-at-a-time dropdown (which also clipped) is
gone; all indicators load in parallel as quiet outlined cards - EMA
cross with its colored signal, RSI/ADX with a one-line human read
(overbought / trending / ...), values formatted to 2 decimals
instead of 4, normalized score demoted to a corner note.
4. Recommendation verdict line de-duplicated: the backend reasoning
already starts with the action label, so it now replaces the
headline instead of repeating under it.
5. Mark-as-taken: the take form gains a target selector listing every
detected target with price / probability / classification (primary
preselected), and the card warns when the primary target sits below
15% probability. Why the scanner promotes such a target to primary
is a separate (backend) question.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -361,6 +361,16 @@ export default function TickerDetailPage() {
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Data freshness — up top: per-source age + refresh, always in view */}
|
||||
<div className="border-t border-white/[0.06] px-6 py-2.5 sm:px-7">
|
||||
<DataFreshnessBar
|
||||
items={dataStatus}
|
||||
onRefresh={handleRefresh}
|
||||
pendingLabel={refreshingLabel}
|
||||
busy={ingestion.isPending}
|
||||
/>
|
||||
</div>
|
||||
|
||||
{/* Tab row — inline, hairline, overlay pills ride along on Analysis */}
|
||||
<div className="flex flex-wrap items-center gap-x-6 gap-y-1 border-b border-white/[0.06] px-6 sm:px-7" role="tablist" aria-label="Ticker sections">
|
||||
{detailTabs.map((t) => (
|
||||
@@ -558,15 +568,6 @@ export default function TickerDetailPage() {
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* Panel foot — per-source data age + refresh */}
|
||||
<div className="border-t border-white/[0.06] px-6 py-3 sm:px-7">
|
||||
<DataFreshnessBar
|
||||
items={dataStatus}
|
||||
onRefresh={handleRefresh}
|
||||
pendingLabel={refreshingLabel}
|
||||
busy={ingestion.isPending}
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user