Skip to content

Browser extension · responsive debugging

PixelParity

Precision display metrics for responsive work

Give a responsive bug report a reproducible viewport, zoom, and display context.

  • Public source
  • Published

Pending release

Markdown issue export (version 2.1.0)

Merged into the public source on September 13, 2026 and versioned 2.1.0 in the manifest. The Chrome Web Store listing had not been re-checked for that version when this page was published.

My role: Extension design, implementation, packaging, test automation, and store publication.

  • TypeScript
  • Preact
  • Manifest V3
  • Puppeteer E2E

At a glance

Problem
Responsive work needs live viewport, zoom, and device-pixel-ratio truth without heavyweight tooling or telemetry, and two screenshots of the same bug can still disagree about the environment behind them.
My contribution
Extension design, implementation, packaging, test automation, and store publication: a Manifest V3 extension in TypeScript and Preact, scoped to four permissions, with reproducible packaging and an isolated Chrome for Testing workflow.
Outcome
Published on the Chrome Web Store, with unit, accessibility, and packaged-extension end-to-end tests running on Linux, macOS, and Windows. Publication establishes availability, not adoption.
PixelParity live inspector panel showing viewport, zoom, and breakpoint metrics
Product interface. Features on a live deployment can differ from the latest source revision.
PixelParity's extension surfaces and exportA popup and a side panel reach the active tab across the extension boundary through the activeTab and scripting permissions, read viewport, zoom, device pixel ratio, and breakpoints, keep a baseline in storage, and export a Markdown issue that carries no page URL or title.Popuppopup.htmlSide panelsidepanel.htmlactiveTab + scriptingActive tabviewport · zoomDPR · breakpointsBaselinestorage permissionMarkdown issue exportsteps · metricsbaseline deltasno page URL or titleManifest V34 permissions declaredno background worker

The popup and side panel reach the active tab through two permissions, compare it with a stored baseline, and export a Markdown issue.

In words

  1. The popup (popup.html) and the side panel (sidepanel.html) are the extension's two entry points.
  2. Both reach the inspected page through the activeTab and scripting permissions.
  3. From the active tab they read viewport, zoom, device pixel ratio, and active breakpoints.
  4. A captured baseline is kept with the storage permission.
  5. The Markdown export carries reproduction steps, metrics, and baseline deltas, with no page URL or title.
  6. The extension is Manifest V3, declares four permissions, and has no background service worker.

Derived from manifest.json on the default branch (version 2.1.0) and the README.

Engineering decisions

  1. 01

    Capture the environment behind the screenshot

    Viewport dimensions, browser zoom, device pixel ratio, and active breakpoints explain why two screenshots can disagree. Live metrics and baseline deltas make changes inspectable as the browser is resized.

  2. 02

    Make the result portable

    A guided baseline-to-issue workflow exports Markdown with reproduction steps, expected and actual behavior, current metrics, and baseline deltas. Page URLs and titles are excluded from the report.

    Tradeoff

    Excluding page URLs and titles keeps page identity out of the export; the reporter supplies the page reference separately.

  3. 03

    Keep the extension's scope narrow

    Manifest V3, Preact, and four permissions support a small local tool. Reproducible packaging and packaged-extension tests check the artifact that users install.

    Tradeoff

    Fewer permissions and no telemetry mean no usage data either, so adoption cannot be measured from the extension itself.

What you can verify

Source and release links checked .

Scope and limits

Publication establishes availability. It does not establish active adoption or improved team productivity. Browser metrics also cannot reproduce every aspect of a physical device's rendering.

A short walkthrough

  1. 01

    Open a responsive page and record its baseline.

  2. 02

    Resize or change zoom until the layout crosses a breakpoint.

  3. 03

    Export the display context with the observed mismatch for a reproducible issue.

Contact

Let's build something that ships.

Open to conversations about senior and staff frontend work, AI application engineering, and hard product problems. The fastest route is email.

© 2026 Abdallah Arslan · Atlanta, GA · Remote

React 19 · TypeScript · Tailwind · WebGL · d dark mode · ⌘K commands