One source of truth
Profile and checkout reference the same promo state so customers never see contradictory availability.
Turning fragmented promo discovery, eligibility and expiry into one reusable value-management experience.
Customers could receive promo codes from different channels, but there was no single place to understand what they had, whether it was eligible, or whether it had already expired or been used.
Reframe: The design problem was not “add a promo-code field.” It was “create a small value-management system customers can trust across journeys.”
I mapped the journey as a system before styling the interface.
Codes arrive from multiple channels.
Eligibility and expiry must be visible.
Relevant value should appear at the right moment.
State must remain consistent after checkout.
These were the decisions that reduced uncertainty, not just the screens that expressed them.
Profile and checkout reference the same promo state so customers never see contradictory availability.
Relevant available value appears at the decision point instead of forcing customers to remember or re-enter a code.
Used and expired codes stay visible but unavailable, reducing repeated invalid attempts and confusion.
Empty, available, applied, used, expired and invalid states were treated as one connected system.
The experience had to remain useful when reality stopped matching the ideal flow.
No codes available. Manual entry remains possible.
Eligibility and expiry are visible before action.
Savings are reflected immediately in the transaction total.
Past value remains legible without appearing reusable.
The code stays visible but cannot be applied.
Explain why it failed and what the customer can do next.
Performance data is intentionally excluded from the public portfolio. These metrics show how I would evaluate the experience after release.
A small input field became a state-management problem. The strongest design move was making promotional value understandable before the customer had to test it.