
Vouchers Hub
Internal SaaS replacing Shopify's paid discount tooling, built for how Holafly's marketing and partnerships teams actually work.
Role
Led full UX design of the platform: PRD analysis
Platform
Mobile + Web
Constraints
4 constraints
Goal
Build an internal SaaS platform, Holafly Hub's Vouchers & Discount Creator, that replaced Shopify's paid tooling and solved the influencer code architecture problem
Problem
Influencers maintain a single permanent code for all campaigns. In Shopify, updating what promotional rule a code was linked to required either changing the code (invalidating all prior promotion) or creating a new one, there was no way to push a new campaign rule to an existing code.
Key Insights
The data model, rules and codes as separate entities, had to be surfaced clearly in the UI. A rule is a set of conditions (amount, type, validity, usage limit). A code is an identifier that one or more rules can be attached to.
The 'push to code' action was the partnerships team's primary workflow, it needed to be a first-class action, not buried in a secondary menu.
Bulk creation without a preview capability was dangerous at scale: accidental generation of thousands of codes with wrong parameters was a real risk.
Process
Wireframes
Used Google Stitch for three rounds of rapid wireframing with Product and Engineering stakeholders: round 1 focused on the rule creation form and conditional fields, round 2 on the code management table and bulk assignment flow, round 3 on Yotpo/Impact integration configuration UI.
User Flows
Mapped two parallel primary flows and their intersection: 'Create a discount rule' and 'Assign a rule to an existing code.' The second was the genuinely novel UX challenge, designed the 'push to code' mechanism as a distinct modal triggered from the code management table.
Iterations
Used Gemini after each wireframe round as a heuristic reviewer, checking for: clarity of terminology (rules vs. codes vs. campaigns), consistency of conditional form behavior, and discoverability of the 'push rule to existing code' action which users might miss if not prominently placed.
Process / Wireframes
Solution
Two primary workflow surfaces, Rule Creation (form-based, with conditional fields and a 1-to-N bulk creation path with preview) and Code Management (table with status, rule assignment, and 'Push Rule to Code' as a first-class action). Yotpo and Impact integration health visible in a persistent right-side panel.
Final UI / Solution
Rule creation
1-to-1 and 1-to-N bulk with preview count and sample before commit
'Push rule to existing code' as first-class action in the code management table
Yotpo + Impact integration status in persistent right-side panel
Conditional form fields that adapt based on rule type (percentage vs. fixed, single vs. bulk)
Outcomes
replaced by internal tooling
Shopify Subscription
rules now pushable to existing codes
Influencer Code Architecture
Yotpo + Impact, no more manual reconciliation
Integrations
The platform replaced Shopify's paid discount tooling, eliminating the external subscription cost.
Learnings
What worked
Starting with a Gemini-assisted PRD analysis before any design work gave a much cleaner understanding of the two user mental models, it made the 'rules and codes as separate entities' decision obvious much earlier.
Positioning 'Push rule to existing code' as a first-class action was validated in every round of stakeholder review, it was the most important workflow for the partnerships team and they needed to see it immediately.
What I'd improve
User-created rule templates, the most common campaign types (seasonal discount, influencer % off, loyalty redemption) should be saveable as templates to reduce repeated configuration
In-platform analytics showing which codes are active, expiring, or performing, currently requires going back to Shopify or Impact for this data