NULL rendering
An empty cell is never empty. In SQL, an absent value (NULL) is categorically different from an empty string ('') or a zero — and mistaking one for the other has cost data teams more hours than any other boring bug. SeeKi renders a NULL cell with a diagonal hatched pattern. You cannot scroll past one and think the cell is blank.
The hatched NULL cell. Pattern is baked into --sk-hatch; the label is italicised and subtle so the pattern does the talking.
In context
Row 4820 is still driving — returned_at is genuinely absent. Row 4818 has an empty notes string (legitimately blank) but a null rating — the two render differently, so the distinction survives.
NULL vs empty string vs zero
NULL (absent)
The value was never set, or was set to SQL NULL.
Empty string
The column is a string and is equal to "". Cell is blank, no hatching.
Zero (numeric)
A genuine numeric zero. Renders as 0, right-aligned with other numbers.
Whitespace
A string of spaces. Renders as-is; mid-dots are shown here only for illustration.
The pattern, defined
The hatched fill is a single CSS variable (--sk-hatch) so the design can evolve in one place and every NULL cell, null badge, and null swatch follows:
/* assets/css/site.css */
--sk-hatch: repeating-linear-gradient(
135deg,
transparent 0 4px,
oklch(70% 0.020 240 / 0.30) 4px 5px
);
The 135° angle, 4px + 1px rhythm, and 30% opacity are intentional: visible enough to never miss, subtle enough that a column full of NULLs doesn’t vibrate. In dark mode the lightness flips but the geometry stays the same — so screenshots across themes still read as “the same pattern.”
As a badge
When a NULL appears inline in prose or outside a table, SeeKi uses the badge form with the same hatch:
A row where the operator left the note field blank looks like NULL in a rendered report, not a bare blank.
Filtering for NULL
In a column’s menu, the filter input accepts these as the “only rows where this is null” predicate:
| Input | Matches |
|---|---|
is null | rows where the cell is NULL |
is not null | rows where the cell has any value (including empty string) |
null (bare) | also matches is null — common-case shortcut |
Why hatch, not colour?
Colour would compete with the semantic palette — accent orange, yes green, no red. A pattern is colour-independent: it survives the dark theme, the light theme, a printed report, and a monochrome screenshot. It is the single visual detail the brief (.impeccable.md) calls out as “do not replace.”
Related
- Data grid — where NULLs appear.
- Yes/No badges — nullable booleans fall through to this page.
- Column menu — the filter that scopes to
is null.