GCP $300 trial burn-rate header card for dash.gf.cx / status.gf.cx

DARE.CO.UK · PARKED SKETCH · 2026-06-06

Mirrored from ~/.claude/.../memory/parked_sketch_gcp_trial_burn_header_card_2026-06-04.md. This is a design sketch parked for future build — read for context, not as a current deliverable.

Parked sketch — compact header-bar card surfacing audreylam GCP $300 trial state ($ spent / $ remaining / transfers MTD) so drift is visible before it bites. Needs visual demarcation from existing header content.


Add a compact card to the dash.gf.cx / status.gf.cx header bar showing real-time GCP $300 trial state, so spend drift is visible at-a-glance instead of requiring a console click.

Why

After the 2026-06-04 Azure tenant-cap investigation, the Singapore VM relay is now the production ingest backbone for all Google→OneDrive transfers (audreyinc + audreylam Workspaces + iCloud exports). VM runs always-on during the trial ($48/mo idle, $65-113/mo with ingest activity), or pay-per-use post-trial (~$15-25/mo for typical cadence). $300 covers ~6 months always-on OR ~15 months ephemeral OR ~2.4 TiB total transfer.

Without a visible burn-rate card, surprises happen at day 90 (or earlier if a runaway job spikes egress). A header card makes the drift legible at-a-glance, every time Dan opens dash.

Data points to surface

Minimum useful display:

STASH5

Field breakdown: - $N spent / $300 — pulled from GCP billing API - % used — derived, color-coded (green <50%, amber 50-80%, red >80%) - day N of 90 — trial countdown - TiB transferred MTD — from GCS+egress metrics

Optional v2: - Burn rate ($/day, $/wk) — trend line; flags if velocity exceeds budget - Projected exhaustion date — given current burn rate, when does $300 run out - Active transfers — link to “active rclone sessions” detail (ties into parked_sketch_status_datacenter_azure_card_2026-06-04.md)

Placement + demarcation

Dan’s note 2026-06-04: “carry it to the header bar — which has space, it might need some demarcation efforts”

Header bar today already has surface-name + theme bits. Adding a metered card needs visual separation so it doesn’t read as “just another nav element”:

Mobile collapse: shrink to a single colored dot + tap-to-expand for full breakdown.

Data source

Probably easiest first version: 1. Daily cron on the SG VM pulls gcloud billing accounts ... + gcloud monitoring ... outputs 2. Writes a JSON file to GCS or R2 3. Dash header card fetches the JSON via Cloudflare Worker proxy

Thresholds + alerts

Threshold Color Action
<50% spent green passive display
50-80% amber passive display + nudge in daily editorial
80-90% red Pushover notification + dash editorial inclusion
90%+ red blinking block new ingests via wrapper script preflight check

Day-of-trial separate channel: - day 75+: amber “approaching renewal decision” - day 85+: red “decide convert-to-paid vs rotate-trial vs ephemeral now”

Trigger to build

After day 30 of trial usage (~2026-07-04) when there’s enough real spend data to validate the JSON format + thresholds. Building too early = hardcoded zeros and no trend signal to test against.

Source: parked_sketch_gcp_trial_burn_header_card_2026-06-04.md · Rendered 2026-06-06 14:45