All work

Public data, shaped for exploration

Legislation Bills Explorer

A responsive interface over a public legislation API with typed normalization, multi-field filtering, bilingual details, and local favourites.

Role
Frontend engineering
Scope
Frontend prototype
Year
2025

The problem

Public data can be technically available while still being difficult to explore. The source API exposes a rich legislation dataset, but useful browsing requires careful parameter construction, predictable pagination, clear loading and error states, and a presentation that works beyond a desktop table.

The approach

I placed a typed service layer between the API and the interface. It validates request inputs, builds query parameters, normalizes response variations, and transforms the results into application models before the components receive them.

Normal browsing uses server-side pagination. Search can retrieve a wider result set and apply client-side filtering so combinations of title, status, source, dates, member, bill number, and year remain responsive and understandable.

Engineering decisions

  • The API boundary owns response normalization instead of leaking source-shape differences into UI components.
  • The table adapts its column set and interaction model to smaller screens rather than merely shrinking a desktop grid.
  • Details expose English and Irish titles in an accessible modal with deliberate focus and error behavior.
  • Favourites persist only in the current browser. The interface does not imply an account or server-side save operation.
  • Error boundaries and explicit request states keep a public API failure from collapsing the whole page.

Verification

Local verification covers table behavior, details, filters, favourites, API transformation, and the core browser journeys. Page-object Playwright scenarios exercise Chromium, Firefox, and WebKit, with an automated accessibility audit in Chromium and semantic grid checks across all three engines.

Result

The application turns a broad external dataset into a focused browsing workflow while keeping the integration boundary visible and testable. It demonstrates how typed transformation, responsive information design, and honest local persistence can make a public API feel like a coherent product.

Working on something complicated?

I’d like to hear about it.