Local keyboard evidence

Your workflow,
under pressure.

Record a keyboard path once. Replay it at 200% and 400% browser zoom. Catch clipped dialogs, hidden focus, and controls a generic audit never tried to reach.

Free and open source. No account. No telemetry. Screenshots stay on your machine or CI runner.

Risograph collage of a magnifying glass revealing a keyboard focus path that ends at a clipped control
Plate 01 Browser zoom changes the space your interface has to work.
  1. 01RecordUse the real path
  2. 02Replay200% + 400%
  3. 03ShowKeep local evidence

The two-command check

Name the journey.
Keep the proof.

This is deliberately smaller than a test platform. One JSON workflow, two zoom levels, one visual report.

Build from source

cargo install --git https://github.com/B-Divyesh/sf-zoom-workflow-check zoomcheck

1 · Record (finish with Alt+Shift+S)

zoomcheck record https://app.example.test/cart \
  --name "Complete checkout" \
  --out .zoomcheck/checkout.json

2 · Replay

zoomcheck check .zoomcheck/checkout.json \
  --out artifacts/zoomcheck

CI exits 1 for blocking findings and 2 for invalid input or a failed browser run. Add --json --quiet for scripting.

Seeded report · cart flyout

Same path.
Less room.

app.example.test/cart

Cart review

Focused control: #pay-securely

ResultPasses at 200%

Visible area
640 × 450 CSS px
Focus order
4 / 4 expected stops
Obscured
No
Scroll path
Available

The focused payment button remains fully inside the flyout and viewport.

What the runner observes

Focus is a moving target.

Static rules cannot tell you whether a person can finish a named task. The runner samples evidence after every key.

Order + name

Did focus reach the expected control, and does that control have a detectable accessible name?

Indicator

Is an outline or box-shadow focus treatment present after the keyboard step?

Clipping + cover

Is the focus box inside the zoomed viewport and its overflow ancestors, with sampled points unobscured?

Scroll reach

Can the document or a containing region scroll when zoom makes the path larger than the available space?