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.
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