02 — use it
Usage
cancri is read-only — it shows positions and live prices. No orders, no trading. You describe your book once, confirm what the machine proposes, and then leave the terminal open.
The flow
boot ─▶ auth ─▶ onboard ─▶ confirm ─▶ dash
sign in describe / the machine the terminal
drop a file proposes — you leave open
you dispose
Nothing streams until you confirm. Gemini only proposes a structured inventory; the dashboard goes live only after you explicitly lock it in.
1 · Sign in
cancri is access-gated. You land on a “secure shell” card and authenticate with Firebase Auth — email + passphrase, or continue with Google. Each user sees only their own book; isolation is enforced by the datastore's security rules, not just the UI.
- Enter
user@and your passphrase, then press ↵ connect. - Or use continue with Google → firebase.
- The footer's live pulse confirms the session is secured by firebase auth.
2 · Feed the terminal
Onboarding has two routes that converge on the same normalisation step. Messy input is fine — the machine reconciles tickers, quantities, and names.
▸ describe it
Type your holdings into the Gemini chat in plain language, then parse ↵.
> 12 AAPL, 0.5 BTC, 100 msft, ~30 nvidia
⤓ drop a file
Drop a .csv, .xlsx, or paste text into the dropzone.
- Accepted:
.csv·.xlsx·.xls· pasted text - Column order and exact names don't matter — Gemini reconciles them.
Both routes hand off to the same step: Gemini normalises your input into a structured inventory keyed on ISIN/symbol. The machine proposes — you dispose.
3 · Confirm the inventory
You land on an editable terminal table of what Gemini parsed. The header reads, e.g., “gemini parsed 7 instruments · 2 flagged for your eye.” Each row carries a confidence signal — and low-confidence rows are flagged for review, never silently trusted.
| confidence | meaning | treatment |
|---|---|---|
| ≥ 0.9 | high — clean match | mint bar, accepted as-is |
| 0.7 – 0.9 | medium | violet bar, double-check |
| < 0.7 | low — ambiguous | amber bar + review flag + tinted row |
- Edit any quantity inline; fix anything the machine got wrong.
- Press ✓ lock inventory & go live to start streaming.
- Or ‹ back to intake to add more. Nothing streams until you confirm.
4 · Read the dashboard
This is the terminal you leave open. The header shows your portfolio value, the day change (arrow + signed absolute + percent), the connection master (LIVE/DELAYED with a pulsing dot), and the market clock in ET. Each row is one instrument.
LOGO INSTRUMENT QTY LAST DAY Δ DAY % 5M TREND POSITION FEED
▣ AAPL Apple Inc 12 227.41 ▲ +1.83 +0.81% ╱╲╱‾ 2,728.92 ● LIVE
▣ BTC Bitcoin 0.5 61,204 ▼ −742 −1.20% ‾╲╱╲ 30,602 ◐ DELAYED
The footer keeps a running tally: N live · M delayed · P positions · ticks · latency(ms).
Freshness: live vs delayed
The single most important thing cancri tells you is whether what you're looking at is real-time. It is shown three ways at once, so it survives colour-blindness, glances, and muted displays:
LIVE
primary source · realtime. Mint dot with a calm breathing pulse (1.8s) + the word LIVE.
DELAYED
fallback · ~15 min lag. Amber dot with a slower, off-beat pulse (2.6s) + the word DELAYED, always visible.
honesty over blackout. If the primary feed dies, the dashboard doesn't go dark — it stays warm, flips every row to DELAYED, slides in a degraded banner, and lets the latency climb. It never pretends a stale number is live.
States the terminal can be in
| state | what you see |
|---|---|
| live | Normal operation. Mint master dot, ticks flowing, sparklines drawing. |
| degraded | Primary lost. Amber banner: “showing DELAYED quotes · values may lag ~15 min.” Dashboard stays warm. |
| reconnect | A blurred overlay over the still-visible dashboard: “reconnecting to primary feed… attempt n/5 · holding last quotes.” |
| closed | Market closed. Last close shown; live ticks resume at the next open (09:30 ET). |
| empty | No instruments yet: “the terminal is hungry.” → + feed the terminal. |
| error | Couldn't reach the primary source. A technical sub-line (socket code, last-good age) + ↻ retry handshake. |
Accessibility & motion
- Direction is never colour-only — every gain/loss carries ▲/▼ and a signed value.
- Freshness is never colour-only — LIVE/DELAYED is text + a distinct pulse rhythm, not just hue.
- Reduced motion is honoured —
prefers-reduced-motion(and an in-app MOTION toggle) calm every animation while preserving the information. Numbers snap instead of rolling; pulses go static but keep their colour and label. - Keyboard-operable — auth submit, intake + parse, quantity edits + lock, and every CTA are real, focusable controls with a visible focus ring.
- Tabular numerals everywhere, so rolling values never reflow.
FAQ
Can I place trades?
No. cancri is strictly read-only — it displays positions and live prices. There are no orders.
Who can see my portfolio?
Only you. Each user's book is isolated by the datastore's security rules; the client only ever subscribes to your own normalised ticks.
Where do prices come from?
A real-time primary source with a delayed fallback that doubles as a sanity oracle. The terminal always marks which one you're seeing. The mechanics live on the maintaining page.
Why did a row flip to DELAYED?
The primary feed for that instrument (or the whole engine) lost liveness, so cancri degraded to the fallback rather than show you a stale price as if it were live.