- AI Workflow
- Customization
- UI Redesign
- Scalability
- Responsive Design
Customizable Widgets
Redesigning Universe's embeddable ticketing widget to support dynamic colour theming and improve event discovery.
- Role
- Product Designer
- Company
- Universe
- Year
- 2024, 2026
- Status
- Design complete — awaiting development

This project has been deprioritised and is awaiting roadmap prioritization. I’ve included it because it represents the process, initiative, and design thinking that I am most proud of.
The Problem
Universe’s embeddable ticketing widget provides event hosts with a convenient solution to sell tickets directly on their own websites. It was a powerful tool, but it wasn’t living up to its potential. Two persistent friction points were holding it back:
Limited customisation
Hosts are confined to a pure white background. For brands who don't have white as a core brand colour or even more noticeably, are a darker themed brand, the widget felt out-of-place against their event marketing pages. Where hosts expect a seamless visual integration, they are instead left with a jarring, off-brand intrusion. This affects their confidence in Universe as a partner that can help them create a branded experience they are proud to present to their customers.
Poor event discovery
The Multi-Event widget is used by hosts with recurring events buries key details behind interactions, obscuring discovery and decision-making. Users couldn’t easily getenough context to feel confident in their experience or find what they were looking for without friction.
The Multi-Event widget attracted significantly more negative feedback than the Single-Event widget and became the primary focus. One number defined the design constraint throughout:
Design Direction
The design ask came down to solving two separate, distinct problems in parallel. Provide a flexible theming system that scales to accommodate a range of event hosts and brands, in tandem with introducing UX improvements to help potential customers more easily find events of interest.
The existing widget had a single colour input — a brand colour used to tint select foreground elements against a fixed white background. Phase 1 expanded that to four inputs and removed the white-background constraint. Phase 2 reduced that back to two inputs while enforcing contrast compliance across the board. The arc of those decisions is what the theming sections below document.
Colour & Theming — Opacity Model
Phase 1: Foundational Product Thinking — Mid 2024
The first phase resulted in an opacity-based colour theming system that strikes a balance between adaptability, ease of use, and colour cohesion.
The first iteration exposes four colour inputs to hosts:The opacity-based layering system derives tonal variations by blending these inputs with each other. For quick and snappy implementations, I've included two zero-configuration presets (Light and Dark) to provide a neutral starting point for hosts who need a simple solution.
This approach worked well across many use cases and unblocked the hard-restriction of a fixed white background. However, due to the colour flexibility and the nuances of opacity blending, it introduced a new problem: colour contrast was left entirely up to the host’s discretion. Hosts who aren’t web-design savvy might not recognize the need to prioritize contrast and may lack the judgement to make tasteful colour decisions. This was most evident when mid-tones are used, as when they're blended with other mid-tones, the resulting colours tend to be washed out.
Colour & Theming — Contrast-Enforced Model
Phase 2: Adopting AI to push the boundaries — Late 2025
During this second phase, I leveraged AI to deliver coded prototypes and diagnostic tooling to help with validating my colour algorithm designs, pushing my solutions beyond what I'd traditionally be able to produce in Figma.
I shifted into the OKLCH colour space to reap the benefits of perceptually uniform colour, namely the consistent manipulation of lightness, chroma, and hue, providing a predictable framework for automating colour modifications.
I assigned every UI element in their varying states to a colour token, then mapped every plausible foregound-background token pairing to form a contrast matrix. Each pair was assigned a target LCH lightness contrast value based on APCA requirements. Some pairings continued to rely on opacity layering to achieve cohesion, but now with targets and fallback algorithms in place to always guarantee compliant contrast.
This change in approach also prompted a re-evaluation of the input model. I reframed Text and Outlines as outputs that the system derives based on the host’s chosen Background and Brand colours. My judgement was that the majority of hosts would prioritise ease of use and compliance over granular control, and that by reducing the number of inputs and enforcing contrast, we could standardize a compliant output for all hosts, while maximizing brand expression where appropriate.
To determine text colour across the widget, the algorithm starts from an off-white or off-black base and depending on available contrast headroom, injects a small amount of the brand’s accent colour to maximize brand expression while ensuring the contrast target is met first. Outlines followed a similar logic, maintaining a low target Lc to preserve their function as a subtle separation element at all times.
Through Phase 2, I reduced customization complexity, converting four inputs to two, while implementing measures to guarantee contrast compliance, ensuring our clients present their best selves to potential customers.
Multi-Event Widget Redesign
The redesign aligns the user flow with the natural sequence of how a user progresses through the widget:
- Identify an event of interest
- Review the event’s details
- Enter the purchase funnel
Calendar view
To find out what was being offered in the original widget, users had to tap each date individually without any context to set their expectations, resulting in a blind-tap interaction that was tedious and easy to abandon. The redesign surfaces event names directly at the calendar level, giving users a scannable overview before they commit to exploring further, turning blind discovery into intentional exploration.
List view
For mobile users, I introduced a list view as an alternative method for browsing and discovering events. Where the calendar serves those with a specific date in mind, the list view helps users who are interested in browsing more openly, providing a smoother discovery experience. Given that 76% of ticket orders happen on mobile, designing a discovery experience that leverages natural mobile interaction patterns became a priority.
Event card
The event card is the focus point that translates interest into intent. As the most sensitive touchpoint of the widget, it became a priority to enhance this interaction by increasing clarity around key event details and providing a more engaging experience. For the multi-timeslot variant, progressive disclosure allows users to reveal timeslots only when needed, keeping the experience scannable and focused on the user’s needs.
Reflection
The UX improvements addressed a information relevancy issue whereas the theming work ventured into a complex and foreign territory, which to me is where the more interesting design thinking occurred, and what most of my reflection centers around.
Designing colour theming was an exercise in balancing trade-offs with each iteration being an attempt to find the balance between usability, theming flexibility, and accessibility compliance to meet our user and business goals. As a high-level overview, the final design meaningfully delivers more theming capability and accessibility compliance than where the feature started, for the cost of one additional colour input. To me, that’s the signal a feature is well designed; when the solution raises the baseline on every metric without incurring disproportionate costs in complexity or usability.
Phase 2 also demonstrates how I've incorporated AI within my design process. Algorithmic colour theming system are innately dynamic and Figma’s static nature can sketch the intent, but fails to communicate it in a compelling and efficient way. By iterating through a coded prototype, I was able to demonstrate and validate how it responds to different inputs and scenarios, providing me with a hands-on understanding of colour contrast I wouldn’t have developed otherwise, thus opening up a design space I couldn’t have previously explored alone.
The roadmap deprioritising this project turned out to be unexpectedly useful. The gap between phases coincided with AI becoming part of my toolkit and Universe's emphasis on accessibility compliance. That combination created a window to deliver something Phase 1 alone couldn’t; a flexible, compliant, and standardized widget output continues to feel lightweight and convenient.
Next project
Checkout Improvements→