Stat card row

Stat card row — Default
Schemas
12
Tables
128
Sources
46
Prediction tasks
88
Four equal cards across the content width. Numerals are Display with tabular figures so live updates never shift layout. Each card is a link into its area.
Stat card row — Loading skeleton
Schemas
12
Tables
128
Sources
46
Prediction tasks
88
Labels render immediately — they are chrome, not data. Only the numerals shimmer, sized to their final dimensions.
Stat card row — 6 cards wrapping edge case
Schemas
12
Tables
128
Sources
46
Prediction tasks
88
Derived relations
214
Alert rules
37
When a project defines extra areas, the row wraps to a second line instead of shrinking cards below their 150px minimum. Order stays stable.

Source row

Source row — Healthy state
raw_orders PostgreSQL Healthy 2026-07-28 14:02 12,842,113
Source name in mono as a link; connector type in body Inter; health is always dot + word; last sync and records in mono, records right-aligned.
Source row — Lagging state
clickstream_events Kafka Lagging
2026-07-28 13:50
12m behind
48,116,207
Lagging rows quantify the lag under the last-sync timestamp — amber text, mono, never a colored row background.
Source row — Failed with retry state
pmxt_feed SFTP Failed 2026-07-28 00:14 903,441
Failed rows surface the retry action inline in the trailing gutter. Record count shows the last successful sync's total, not zero.
Source row — Loading skeleton
name type health sync records

Connector tile

Connector tile — Connected
Pg Connected
PostgreSQL
3 sources · last sync 2026-07-28 14:02
No skeleton for tiles: the connector catalog is static configuration, not async data — it renders with the page.
Connector tile — Available, hover state
Sf
Snowflake
Not connected
Available tiles show no badge at rest; the Connect button appears on hover (rendered here in its hover state).
Connector tile — Needs attention state
My Needs attention
MySQL
Credentials expire in 3 days
Connector tile — Long name edge case
ES Connected
Elasticsearch (self-managed cluster)
1 source · last sync 2026-07-27 22:41
Names truncate on one line with the full name in a title tooltip. The badge never wraps or shrinks.
Connector tiles — 3×3 grid composition
PgConnected
PostgreSQL
3 sources
KfConnected
Kafka
2 sources
MyNeeds attention
MySQL
Credentials expire in 3 days
Sf
Snowflake
Not connected
S3Connected
Amazon S3
6 sources
ESConnected
Elasticsearch (self-managed cluster)
1 source
SF
SFTP
Not connected
BQ
BigQuery
Not connected
Wh
Webhook
Not connected
Ruling: connector logos are monochrome monogram tiles, never brand color or emoji. Connection lifecycle (Connected / Needs attention) is genuine state, so the badge may use state colors.

Activity feed item

Feed item — Default
⚙️ orders_dbt_model run completed
2h ago
36px row: type glyph, object name in mono, event verb in body Inter, relative time right-aligned in mono.
Feed item — Failure state
⚙️ ing_customers sync failed
14m ago
Failures get a 2px critical left edge and a critical verb — never a colored row background.
Feed item — Long name edge case
📷 customer_lifetime_value_rolling_90d_by_region_v3 snapshot
5h ago
The object name truncates; the verb and timestamp never do — scan columns stay aligned down the feed.
Feed — 5 items composed
Recent activity
⚙️orders_dbt_modelrun completed
2h ago
⬇️raw_inventorysynced
3h ago
⚙️ing_customerssync failed
14m ago
📷daily_sales_snapshotsnapshot
5h ago
🎯new_customer_cohorttask trained
1d ago
View all activity →
Feed — Loading skeleton
Recent activity
itemt
itemt
itemt
itemt
View all activity →
Card title and footer link are chrome and render immediately; only the event rows shimmer.

Health summary card

Health summary — All healthy
All systems operational
Ingestion pipelinesHealthy
TransformationsHealthy
Semantic servicesHealthy
Prediction servicesHealthy
View full health →
No skeleton here: health arrives with the page's first poll; while checking, dots render in line grey with the word "Checking…" instead of shimmering.
Health summary — Degraded state
1 subsystem lagging
Ingestion pipelinesLagging
clickstream_events is 12m behind its 5m sync frequency.
TransformationsHealthy
Semantic servicesHealthy
Prediction servicesHealthy
View full health →
The banner drops to the worst state; the affected row gains one detail line naming the object in mono and quantifying the lag.
Health summary — Failed state
1 subsystem failing
Ingestion pipelinesFailed
TransformationsHealthy
Semantic servicesHealthy
Prediction servicesHealthy
View full health →
Errors say what happened and what to do next, in the interface's voice. The banner sits above the summary row so triage starts at the top.

Freshness row

Freshness row — Healthy state
raw_orders Healthy 5m 2m ago 2,412,096
Sparkline bars use the desaturated categorical ramp derived from signal — state colors never appear in chart marks, so red always means failure.
Freshness row — Lagging state
clickstream_events Lagging 15m
6h ago
23 syncs behind
12,842,113
A tapering sparkline plus the mono "syncs behind" count — staleness reads as geometry before arithmetic.
Freshness row — Failed state
pmxt_feed Failed 5m 14h ago 903,441
After the failure the sparkline flatlines in line-grey stubs — no state color enters the series. Failure lives in the health column, so red always means exactly one thing.
Freshness row — Loading skeleton
name health fq sync records spark

Dataset column card

Column card — Default
Columns 7 of 42
NameTypeNull %DistinctMinMaxSample
order_id bigint 0.0 12,842,113 1 12842113 88214207
customer_id bigint 0.0 2,361,068 1002 9944810 4471203
created_at temporal timestamptz 0.0 11,204,551 2019-03-01 2026-07-28 2026-07-28 14:02
status varchar 0.2 6 fulfilled
total_amount numeric(12,2) 1.4 402,118 0.00 184220.00 129.99
Every value is mono; numerics right-aligned with tabular figures. Temporal columns carry the violet badge and a violet type — users learn one association: violet means time.
Column card — Long values edge case
NameTypeNull %DistinctSample
shipping_address varchar 3.1 1,988,402 1600 Amphitheatre Parkway, Building 43, Mountain View, CA 94043, United States
experiment_assignment_metadata_json jsonb 41.7 804,113 {"variant":"treatment_b","cohort":"new_customer_cohort","assigned_at":"2026-07-28T14:02:11Z"}
Sample and name cells truncate to a fixed max width so numeric columns never drift; the full value appears in a tooltip and in the column drawer.
Column card — Loading skeleton
Columns count
NameTypeNull %DistinctMinMaxSample
n t % d m m s
n t % d m m s
n t % d m m s
Profile statistics arrive from an async scan, so cells shimmer; the header row is chrome and renders immediately.

Derived-relation filter row

Filter rows — Default
orders.created_at >= :start_date
orders.status IN ('fulfilled', 'shipped')
date_trunc('week', orders.created_at)
Each expression is a removable row in RelQL mono; the ghost "+ Add filter" row keeps the add action in reading order.
Filter rows — Invalid expression state
orders.created_at >= :start_date
orders.total_amont > 100
Unknown column total_amont — did you mean total_amount?
The offending token gets a critical wavy underline; the error text names the problem and suggests the fix. The row stays editable in place.

Time-window card

Time window — Default
Training window 1 year rolling · horizon 30 days
training window
horizon
2025-10-28
2026-02-28
now
2025-07-28 → 2026-06-28 · anchor at window edges
The signature spine: solid violet region for the training window, hatched region for the label horizon ("data you may not use yet"), hollow carets at anchors, solid caret at now. No skeleton — window geometry is configuration and renders with the card.
Time window — Backfill in progress state
Training window Backfilling 62%
training window
horizon
now
backfilled 2025-07-28 → 2026-03-02 · 7,944,102 of 12,842,113 rows
The full window renders as a dashed outline; the solid fill grows left-to-right as the backfill completes. Progress is stated in mono rows, not just a percentage.
Time window — Misconfigured state
Training window 1 year rolling · horizon 30 days
training window
past cutoff
cutoff 2026-06-28
now
The window's border turns critical where it overlaps the hatched availability region; the cutoff tick and label go critical too. The banner says what to do next.

Skill properties panel

Properties panel — Default
Properties v1 Active
Data sensitivity None
Update frequency Daily
Owner analytics_team
Last updated 2026-05-06 11:32
No skeleton: properties load with the skill document itself, never separately. Keys in body Inter; values that are data (owner, timestamp) in mono.
Properties panel — Long owner name edge case
Properties v4 Active
Data sensitivity Restricted
Update frequency Daily
Owner emea_supply_chain_forecasting_and_replenishment_team
Last updated 2026-07-14 09:18
The value truncates from a fixed max width; the key column never compresses. Full value on hover.
Properties panel — Draft state
Properties v2 Draft
Data sensitivity None
Update frequency Daily
Owner analytics_team
Last updated 2026-07-28 13:47

Label distribution card

Label distribution — Default
Label distribution churn_flag
2,361,068 distinct · 403,549 covered 17.1%
Histogram bars use the categorical ramp, never state colors. Coverage stat in mono with the percentage lifted to ink for scanning.
Label distribution — Skewed edge case
Label distribution churn_flag
2,361,068 distinct · 2,290,236 covered 97.0%
Bars stay in the categorical ramp even when skewed — the warning lives in the banner, not the chart, so amber keeps its meaning.
Label distribution — Loading skeleton
Label distribution churn_flag
chart
coverage
The card title and label name are chrome; the histogram and coverage stat come from an async profile scan and shimmer at final size.

Prediction task config card

Task config — Active
churn_model Active
Target label churn_flag
Model type Binary classification
Metric AUC-ROC
Training window 1 year rolling
Horizon 30 days
Schedule Weekly
Next run 2026-08-04 06:00
No skeleton: configuration loads with the task record in one request. Values that are data — label, timestamps — are mono; enum choices stay in body Inter.
Task config — Paused state
churn_model Paused
Target label churn_flag
Model type Binary classification
Metric AUC-ROC
Training window 1 year rolling
Horizon 30 days
Schedule Weekly
Next run Paused — no runs scheduled
Paused is a lifecycle state, not a health state, so the badge is grey, not amber. Next run states the consequence in words.
Task config — Last run failed state
churn_model Failed
Target label churn_flag
Model type Binary classification
Metric AUC-ROC
Training window 1 year rolling
Horizon 30 days
Next run 2026-08-04 06:00

Run row

Run row — Completed
churn_model_train_2841 Task Completed 2026-07-28 14:02 12m 41s
Type badges: Task blue, Ingestion violet-free grey, Pipeline grey — state colors stay reserved for status. Duration right-aligned mono.
Run row — Running state
raw_orders_sync_88214 Ingestion Running 2026-07-28 14:29 3m 07s
Busy spinner plus live duration ticking in signal blue. Running is progress, not health, so it never uses green or amber.
Run row — Failed state
daily_sales_pipeline_412 Pipeline Failed 2026-07-28 06:00 4m 22s View logs
Run row — Queued state
new_customer_cohort_train_91 Task ◌ Queued
Queued has no start time or duration yet; em dashes hold the columns so nothing shifts when the run starts.
Run row — Loading skeleton
name type status started dur

Alert row

Alert row — Warning, investigating
daily_sales_delay
Warning pipeline 1h ago Investigating
Severity owns color (dot + word); status owns lifecycle and stays plain text. Alert name, source, and trigger time in mono. Ruling: alert severity (Critical / Warning / Info) is a second, alert-scoped vocabulary and intentionally uses state colors — it never bleeds into charts or lifecycle badges.
Alert row — Critical, open state
payments_final_timeout
Critical ingestion 1m ago Open
Unacknowledged Critical rows carry a 2px critical left edge — the only row-level color allowed, and only until acknowledged.
Alert row — Leakage state
churn_model reads payments_final after anchor time leakage
Critical schema 2h ago Open
Leakage is a distinct alert class: violet ⧗ glyph plus a violet "leakage" badge tell users this is about temporal correctness, not infrastructure. Severity stays critical.
Alert row — Long title edge case
clickstream_events_ingestion_lag_exceeded_expected_frequency_by_more_than_3x Warning ingestion 22m ago Open
Titles truncate; severity, source, and trigger columns hold their widths so the table scans down as columns.

Saved query item

Saved query — Default
Weekly order volume ran 2h ago
from orders |> group by date_trunc('week', created_at) |> count()
418 rows
Query title in body Inter; the first RelQL line in mono on a paper chip, truncated to one line. Last run and row count in mono.
Saved query — Running state
Churn cohort snapshot Running · 0m 42s
from customers |> where cohort = 'new_customer_cohort' |> snapshot(at: :anchor)
rows pending…
While running, the row count slot reads "rows pending…" so the layout holds; elapsed time ticks live in mono.
Saved query — Failed state
Label coverage by region ran 14m ago
from labels |> join regions on labels.region_id = regions.id |> coverage()
Failed · 3 diagnostics Open in workbench
Failed queries show the diagnostic count inline and link straight into the workbench where the diagnostics render against the query text.

Member row

Member row — Default
PS
Priya Sharma
priya@acme-supply.com
2026-07-28 09:14
Name in body Inter, email in mono — the email is data. Role is an inline select; last active in mono. No skeleton: the member list is small and loads with the settings page.
Member row — Pending invite state
jordan.lee@acme-supply.com
Resend invite
Invited 2d ago
No name yet, so the email leads. The role select stays live — the invite lands with the role you set here.
Member row — Current user state
DH
Daniel Henneberger You
daniel@acme-supply.com
now
Your own role select is locked — you cannot demote yourself and orphan the project's last admin. Another admin changes it, or you transfer ownership first.
RelQL Studio · Collections 100% scroll to pan · pinch to zoom · ⌘0 reset Components · Pages