← Selected work

BROWSER EXTENSION + API / Independent project

CouponPilot.

CouponPilot connects a React and TypeScript extension to a coupon API, helping a shopper find merchant-specific codes without leaving their current tab.

  • React
  • TypeScript
  • Node.js
  • PostgreSQL
Interface illustration

The problem

Finding a coupon often means leaving a store, opening more tabs and trying codes with very little context. The project explores a more direct experience: recognise the current merchant and put relevant codes in a small, focused extension popup.

What I built

  • A React and TypeScript popup that reads the active tab's hostname and requests matching coupons.
  • A Node.js and Express API for coupon retrieval and worked / didn't work feedback.
  • PostgreSQL merchant and coupon records, including expiry and active-state fields.
  • Copy-code interactions, loading and error states, and a retry path when a request fails.

How the pieces fit

The extension is the interface; the API is the boundary around coupon data. Merchant and coupon records live in PostgreSQL, while feedback provides a way to collect signals about whether a code worked. Keeping those responsibilities separate makes the interface and the data workflow easier to change independently.

What this demonstrates

Browser extension development, API design, relational data modelling and attention to the small interactions around a network request. The work connects frontend behaviour to backend records rather than treating the popup as an isolated screen.

Want to explore the details?

I’m happy to discuss the implementation, decisions and further development.

Get in touch
NEXT PROJECTTravelPay