I'm a Product Manager and Founder.
I've also worked in Growth, Business Design and Advertising. I've collaborated with startups like Plum and FindDoc, as well as corporates such as Shangri-La Hotels, Express VPN and Generali.
Found product-market fit for Plum, a Hong Kong startup, growing from 0 to 10,000 paid daily orders in 2 months, scaling to serve 130k global users in 6 months. Plum became one of Hong Kong's 10 most popular apps in 2018.
As CEO and co-founder of Collaborito—a startup funded by Hong Kong Science and Technology Park—I defined our product vision, shaped the business model, and led product design, fundraising, and go-to-market strategy.
Led research and discovery for the world's #2 luxury brand, surfacing 18 initiatives to improve operational efficiency expected to save staff 7.5% back-office time and drive 10–25% incremental revenue.
Created a KPI-driven product operating model for a Fortune 500 digital team, turning ad-hoc feature requests into a structured pipeline. Roadmap churn was cut from 45% to 20%.
My modus operandi since I can remember has been to solve real-world problems with creativity, user empathy and commercial sense.
I started my career as an advertising strategist, convinced that great storytelling could better the world (see Dove and Coke). Four years in, in 2014, as my fascination with the world-changing powers of tech intensified and the Hong Kong startup/tech scene was beourgeoning, I realized that stories weren't enough. I wanted to deliver more value – through tech and products. So, I made the leap to the startup/tech space.
Ever since, I have been working in the startup/tech space, taking on roles of Product Manager, Growth Manager, Business Designer and Founder.
Found product-market fit for Plum, growing from 1,000 daily unpaid orders to 10,000 daily paid orders and scaling to 130k users in 6 months.
Led research and discovery for the world's #2 luxury brand, surfacing 18 initiatives to improve operational efficiency.
Created a KPI-driven product operating model. Roadmap churn was cut from 45% to 20%.
Things I built because I wanted them to exist. Since 2026 most of them are built with AI, which changed what one person can ship in a weekend. Each entry links to the thing itself where it is live, and to a write-up of the problem, the decisions and what I learned.
Fifty-five ideas on one kanban, each scored, rated for how well AI can build it, and given a five-part case study. Visitors see the board; I see the same address with every card open, editable, and saved back to the source.
A comparative world-history timeline from 3500 BC to today. It began as a weekend build covering two centuries in one file, and grew into a checked, sourced product where every dated item was cross-checked against Wikidata.
AI-powered relationship communication coach. Customer development interviews with therapists in-progress.
Third place winner in 2 out of 2 categories at Techstars Startup Weekend San Francisco AI 2024.
AI-enabled platform connecting individuals with shared interests to collaborate on passion projects. HKSTP-funded. 263 registered users, 21% WAU.
Nothing matches that combination.
Plum, a nascent 3-month old, 30-person company, aimed to disrupt the food delivery landscape in Hong Kong, a market dominated by well-established players like Food Panda and Deliveroo. The founder's vision involved delivering a daily rotating menu of five dishes from a variety of restaurants around the city to working professionals in key business districts.
Despite the initial strategy of acquiring users by offering free meals, Plum struggled to convert users into paying customers. At peak, the team had 1,000 unpaid daily orders and negligible paid orders.
Recognizing the local foodie culture's preference for exclusive and high-quality meals, I proposed a pivot towards a gourmet-focused value proposition. This involved sourcing critic-rated dishes, which differentiated Plum from competitors.

We tested this idea by changing the messaging on our flyers and immediately saw an increase in paid orders. Following this success, we modified our meal sourcing strategy to focus on critic-rated dishes.

Within 2 months, Plum achieved product-market fit, scaling from 1,000 daily unpaid orders at peak to 10,000 daily paid orders and boosting retention from a stagnated 17% to 46%.
Executing on the strategic vision of "critic-rated meals delivered daily" required coordination across the entire organization, from menu selection to product development to operations.
To ensure company-wide alignment, I regularly organized workshops and departmental strategy sessions.
For example, I led our menu selection team in developing a data-driven methodology that guided dish selection in support of specific business goals such as acquisition, retention, and branding. I also created a company culture handbook, which helped both new and existing employees embody our values and deliver on our promise at every touchpoint, from delivery to customer service.
As product and growth lead, as well as advisor to the marketing team, I mentored team members and ran weekly strategy review meetings.
Key product initiatives:
Key growth initiatives:
Additionally, I managed Plum's rebrand in partnership with an external agency.

Led research and discovery for a global luxury retailer seeking operational efficiency improvements post-COVID-19, uncovering 18 innovation opportunities.

Associates estimated saving roughly 60–90 mins a week on manual note-taking and organization. The solution centralized client conversations with features like labels and internal notes. Status: added to development roadmap.
Prototyping revealed potential for a 40–50% cut in median wait time, from ~60 min to ~35 min. Predicted 10–15% improvement in customer satisfaction. Status: added to roadmap.
Testing showed styling resources usage increased from 60% to 80% of interactions, with location time dropping from ~6 mins to ~3 mins. Associates gained better product knowledge access.
Workflow analysis identified staff spending about 3.5 hours per week on duplicate data entry and error correction. Integration projected to reduce this by ~57%, to around 1.5 hours per week, plus 10–25% revenue uplift potential.
A 2-week pilot produced 22 actionable issues versus historical 5–7 monthly. Staff reduced reporting time from 1-hour weekly meetings to just 5–10 minutes per person per week.
Research showed 80% customer interest in personalized recommendations. Recommendation was escalated to headquarters for evaluation.

The client team faced a high volume of feature requests from other departments and had difficulty prioritizing these alongside their own initiatives. They also struggled with rationalizing their prioritization decisions and quantifying their impacts for management.


Collaborito is an AI-enabled platform that connects individuals with shared interests to collaborate on passion projects. Backed by the Hong Kong Science and Technology Parks (HKSTP), it currently has 263 registered users with 21% WAU.
Smaller avatars prioritize text-based user information (skills, roles) over profile pictures.
Users took 57% less time to read text presented in bordered text boxes versus continuous blocks, with a 33% increase in testers describing the layout as straightforward and easy to navigate.
Multi-color profile cards enhance engagement and help users distinguish individual contributors in the text-heavy interface.

Deprioritized user-generated content and newsfeed features to focus on core matching functionality given the small initial user base.


Private equity due diligence is a manual, time-consuming and inefficient process that can take around three analysts one to two months to perform depending on the deal size.
Top navigation preferred (vs. sidebar) to dedicate sidebar to deal-related navigation.
Pop-up chat window for analysts; standalone tab for executives — reflecting the different depth of interaction each role needs.


Estel is an AI-powered relationship communication coach app.
Customer development interviews with therapists in-progress.
History is taught one civilization at a time, so the question I always had, what else was happening right then, never had an answer on one page.
Open Histoline →
Every history book I have read runs down one lane. Ming China, then the Ottomans, then the Renaissance, each in its own chapter, each with its own dates. Nothing in that format tells you that while Gutenberg was printing, Zheng He's fleets had already been scrapped and Constantinople had three years left. The timelines that do try to show everything at once are posters: too small to read, fixed at one zoom, and not something you can ask a question of.
What I wanted was simple to say and hard to build. Pin any year, and see what every part of the world was doing at that moment, with enough context on each item to trust it.

The first version was called Meanwhile and took a weekend. It covered 1440 to 1660, eleven civilizations, 172 events, and lived in a single HTML file of 3.7 MB, with every image embedded so the page could be sent to anyone and opened anywhere with no server behind it. I built it with Claude, starting from a design canvas with three art directions and choosing one, then keeping the data as one JSON file per region with a small validator script that refused to build if a date was malformed or an event was missing a source.
It worked well enough that people asked for other centuries, and that is where a weekend build turns into a product decision.
A timeline that is mostly right is worse than useless, because you cannot tell which parts to believe. Once the range grew to 3500 BC through 2026, I had every dated item cross-checked against Wikidata's structured records. For the original eleven lanes, 981 empires, reigns, wars, eras, people and events found a match. About 700 agreed within Wikidata's own stated precision. Twelve were corrected. Forty-eight differ only by which standard periodisation you prefer, such as whether the Roman Empire ends in 395 or 476, and those stay as they are with the reasoning noted. The six lanes added later went through the same pass on arrival: of roughly 900 dated items, six were corrected and about a dozen era bands were re-cut where the authoring had left seams. Around 1,350 summaries were then read against the Wikipedia lead for the same entity, and seven were fixed.
The numbers are published on the page itself, in the About panel. That was deliberate. If you are asking people to trust a history site made with AI, the audit has to be visible, not claimed.
Showing everything at once is unreadable, so every event is ranked 1, 2 or 3: a landmark that bent its civilization, something significant to that lane's story, or texture like daily life and curiosities. The trick is that rankings are relative to each lane, with a budget per lane per era. Without that, Rome and Greece would flood the screen and West Africa would vanish. Zoom in and the lower tiers appear.

Where two communities remember the same event differently, both names appear. 1948 is shown as both Israel's Declaration of Independence and the Nakba. Characterisations that are disputed are attributed rather than asserted, and casualty figures use scholarly ranges. I would rather the page be honest about disagreement than quietly pick a side.
The first release covered eleven civilizations and said plainly that India, Japan, Korea, Southeast Asia, Africa beyond Egypt, the Andes and Oceania were absent. Six of those have since been added, bringing it to seventeen. A World strip carries what no single region owns, such as technologies, diseases and trade networks that crossed continents, and an Empires strip shows polities that genuinely begin and end, from the Akkadian Empire to the Soviet Union. Select one and every region it never reached dims.
The Streams view draws each region as a ribbon whose thickness follows population estimates from McEvedy and Jones and from HYDE, scaled by square root so small regions stay legible. It is a claim about relative size, and it is labelled as one.

Building it took a weekend. Making it trustworthy took far longer, and that was the real work. The generation step is now cheap; the checking step is what turns a demo into something you would show a teacher. I also learned to publish the limits: a clear "what is not here" paragraph did more for credibility than any amount of polish.
Next are the Prehistory and True Scale views, and a proper mobile treatment, since on a phone the timeline currently shows markers rather than labels.
I had more ideas than I could build and no honest way to see which ones deserved a weekend. So I built the board first.
Open the board →Once building became cheap, the idea list became the bottleneck. I had dozens of things I could make with AI, from a subscription reminder that reads my inbox to a language app that retells a story you already know, and the list grew faster than anything got shipped. Each idea needed a rough sense of how good it was, who it would help, how easy it would be for someone else to copy, and, new in 2026, how well AI could actually build it today. None of that lived anywhere.
There was a second problem underneath. I post what I build as @rubyonai, and an audit of two creator accounts in July had reversed a plan I was sure about: product on screen wins, and faceless philosophy content floors. That meant the board could not just be a private to-do list. It had to be something people could look at.
A kanban with six lanes, from Ideas through Up next, Building, Built, Demo recorded and Posted. Every card carries three ratings out of five, for how good it is, who it helps and how easy it is to copy, plus a separate rating for how well AI can build it, with the hardest part named in one line. Behind each card is a five-part case study: the problem and the evidence for it, the scope, the key design choice, the results or the metrics I would watch, and what I learned.
There are fifty-five cards. Seven are built and in use, including this board.
Visitors and I go to the same link. The site checks for a sign-in and quietly serves a different page: visitors get the board with every card visible but none of them openable, and none of the private content in the page at all, not merely hidden. I get the same board with every card open, drag between lanes, editable text and ratings, and a Publish button. I chose this over two separate links because a portfolio should have one address you can say out loud, and because the failure direction is safe: if the swap ever fails, the public board is what shows.
The obvious build was a database with an admin login. Instead, the board is generated from one file in a repository, and pressing Publish commits my edits back into that file. The site rebuilds itself a minute later. That gives me a full history of every change, nothing new to pay for or maintain, and one source of truth. The trade is a minute of delay between saving and seeing it live, which is fine for a board that changes a few times a week.
Dragging a card or re-rating it changes the page immediately but goes nowhere until I publish. A bar counts what is unpublished. If publishing fails, because I was signed out or the connection dropped, the edits stay in the browser and can be retried or copied out as text. I wanted to be sure a mistake could cost a minute, never a session of work.
It is on every card inside, with the reasoning, but not on the face. A number like "AI 3/5" on a public card reads as a claim about the idea rather than a planning note about my effort, and it would invite the wrong argument. The three ratings that describe the idea itself are what visitors see.
The fifty-five case studies were first drafted by Claude in my voice, from the card, my notes and the numbers I already had, then edited by me. Where an idea has not shipped, the results section says so and lists the metrics I would watch, with targets. A draft to correct is far easier to finish than an empty field, and the discipline of five fixed sections is what makes the board useful for interviews rather than just for me.
The board uses the same blush ground, the same single red and the same serif pairing as rubytang.com, rather than a dashboard look. It is a portfolio page that happens to be a working tool, and it should read that way.
Two things went wrong that were worth more than the things that went right. The password form was posting to a piece of code that had never actually been deployed, so no password could ever work, and the fix came from checking the live page rather than reading the code again. Later, two sites briefly shared one deployment and overwrote each other on the live domain for a few minutes. In both cases the lesson was the same one I keep relearning as a product manager: verify the thing in production, not the thing on your screen.
The other lesson is about scoring. Once every idea had a number for how well AI could build it, the board sorted itself. Most ideas land at 3 or 4, a few are genuinely a weekend, and one, dubbing a streaming show into another language in the browser, is a 1 because copy protection blocks it regardless of how good the model is. Knowing that before starting is the whole point.