ZippoGreen - Online Lighter Store

Revamped a retailer's online presence for simplified product order

Role

Product Designer,
Full-stack Developer

Product Designer, Full-stack Developer

Product Designer, Full-stack Developer

Duration

12 weeks

Tools

Figma, HTML/CSS, React, JavaScript, MySQL

Team

Just me 🧘

Background

ZippoGreen relies heavily on social media for sales, leading to a manual and inefficient ordering process.

ZippoGreen is a lighter retailer in Hanoi that is primarily based online through social media. While this provided visibility, the ordering process was labor-intensive: customers had to message the store directly, and staff spent significant time replying, confirming orders, and tracking inventory.

The problem

How might we give customers a more streamlined way to shop and make orders?

My solution

A dynamic, operational e-commerce website for ZippoGreen.

01

Product display

A clearer way for customers to find what they want.

Categorized tabs and modals improve product visibility and reduce time spent scrolling through Facebook posts.

01

Product display

A clearer way for customers to find what they want.

Categorized tabs and modals improve product visibility and reduce time spent scrolling through Facebook posts.

01

Product display

A clearer way for customers to find what they want.

Categorized tabs and modals improve product visibility and reduce time spent scrolling through Facebook posts.

02

Cart & checkout

A faster, more reliable ordering experience.

Customers see their total instantly and place orders without staff confirmation delays.

02

Cart & checkout

A faster, more reliable ordering experience.

Customers see their total instantly and place orders without staff confirmation delays.

02

Cart & checkout

A faster, more reliable ordering experience.

Customers see their total instantly and place orders without staff confirmation delays.

03

Admin control

A system that minimizes staff errors and manual work.

Staff updates sync live to the site: no more disappointed customers ordering unavailable items.

03

Admin control

A system that minimizes staff errors and manual work.

Staff updates sync live to the site: no more disappointed customers ordering unavailable items.

03

Admin control

A system that minimizes staff errors and manual work.

Staff updates sync live to the site: no more disappointed customers ordering unavailable items.

Research & Ideation

Interviews with the store manager revealed 2 main struggles:

📚 Customers struggled to find past products buried under old posts.

🕝 Staff spent too much time on processing and managing orders

The nature of social media sales created multilayered obstacles for both customers and staff, leading to reduced customer retention and productivity.

ZippoGreen needed to move from social media to a proper sales channel. We had two paths:

Join an existing e-commerce platform

✔️ Fast to implement

✔️ Familiar to users

✖️ Limits future growth

Develop a dedicated website for the business

✔️ High scalability

✔️ Stronger display of brand identity

✖️ Higher upfront cost

Which was the most suitable pathway?

The store manager's initial instinct was to use Shopee, but there were clear limitations.

Shopee is a popular e-commerce platform where most customers already had accounts. But its limitations became clear when I asked about their future plans: they wanted to offer repair services and build a local brand identity.

We'd be locked into their templates, their checkout flow, their fees. There were little flexibility for their business model.

I argued that paying upfront for a custom site would cost less than migrating later.

⚖️ The trade-off

If I couldn't build it well enough, we'd waste time and have to fall back to using Facebook or Shopee.

The technical challenge

As the sole designer and developer, I knew this meant designing only what I could actually implement.

I was learning React simultaneously while building this, so every design decision faced a reality check: Can I actually build this? Will it ship on time? Does it solve the core problem?

The manager wanted to ship the website in 2 months. These constraints forced clarity: I couldn't hide behind unrealistic concepts.

Lo-fi wireframes

Lo-fi wireframes

Lo-fi wireframes

Design decisions shaped by constraints

Technical limitations coupled with time constraints helped me define the MVP scope clearly.

Modal-based product details instead of dedicated pages

My initial wireframes had separate pages for each product. While coding, I realized this meant managing routing, loading states, and back-button behavior, easily an extra week of work.

Switching to modals kept users in their browsing context and cut implementation time in half. The "limitation" actually reduced friction.

No filter or search bars

The original wireframe had a sidebar filter and search bar, but coding them would have delayed launch by 2 weeks.

Instead, I simplified the navigation during development by adding category tabs and price sorting, which solved the searchability problem with 20% of the effort.

Auto-calculating cart totals instead of manual entry

This feature was non-negotiable for preventing order errors. The technical implementation (managing cart state, updating totals on quantity changes) was complex, but it eliminated the back-and-forth that happened when staff miscalculated customer orders on Facebook.

The struggle with solving two problems at once

The store manager wanted a solution for both customers and staff, but this came with a risk

The website needed to work for two completely different users: customers browsing for products, and staff managing inventory.

Early on, the store manager insisted we include an admin panel for v1

`They were worried that without it, staff would still need to manually update product availability, recreating the same communication bottleneck we were trying to solve.

I pushed back initially. Building an admin system meant:

Adding 3 weeks to the timeline (authentication, database permissions, and a separate interface)

Adding 3 weeks to the timeline (authentication, database permissions, and a separate interface)

Adding 3 weeks to the timeline (authentication, database permissions, and a separate interface)

🧮

Increasing complexity while I was still learning React

🧮

Increasing complexity while I was still learning React

🧮

Increasing complexity while I was still learning React

🔎

Delaying validation of whether customers would even use the site

🔎

Delaying validation of whether customers would even use the site

🔎

Delaying validation of whether customers would even use the site

But the manager had a point I hadn't considered:

"If a product showed as "available" on the website but was actually sold out, customers would place orders and get frustrated when staff had to cancel."

"If a product showed as "available" on the website but was actually sold out, customers would place orders and get frustrated when staff had to cancel."

"Otherwise, staff would have to cross-check orders and inventory to manually update, leading to the same time inefficiency problem.
We'd trade one bad experience for another."

"Otherwise, staff would have to cross-check orders and inventory to manually update, leading to the same time inefficiency problem.
We'd trade one bad experience for another."

The compromise I made

I built a fairly simple admin panel—just enough for staff to view orders, and add, remove, or update items.

I accepted that this would add timeline risk, but the alternative was launching a half-solution that could damage trust with their existing customer base.

Edit product details to auto-update on main site

Edit product details to auto-update on main site

Edit product details to auto-update on main site

Add a new product

Add a new product

Add a new product

Outcome

The website didn't launch—and that taught me more than shipping would have.

The project took longer than anticipated. As I was learning while building, implementation stretched beyond the store's timeline. They needed something operational immediately, so they hired a professional developer to rebuild it.

Reflection

This felt like a failure at the time. In hindsight, it was a highly valuable lesson.

ZippoGreen was the first web-based project that I developed from scratch, and it taught me the challenges in transferring design into code to ensure consistency and practicality. Therefore, my design focus for this project was technical feasibility rather than aesthetics, which allowed me to learn a lot about how information architecture and user interactions are developed.

This experience has allowed me to better understand engineers' workflow and technical capacities, which I hope will help me collaborate with them more effectively in cross-functional teams.

What I’d do differently

🗓️ Timeline estimation when you're also the builder matters more than I thought.

I underestimated how long authentication and database setup would take by about 3 weeks. If I'd been honest about my skill gaps earlier, we could have either adjusted scope or brought in help sooner.

This experience completely changed how I work with engineers now: I would ask about implementation complexity early, not after designs are finalized.

🔬 I'd test the product categories with actual customers before launch.

I assumed categories that made sense to the store would work for shoppers, but never validated that. We might have discovered customers think in terms of price range or occasion or if a different approach is needed to improve searchability.

🫸 I'd push back harder on including the admin panel in v1.

If I were in this situation again, I'd scope v1 to just customer-facing features and push the admin panel to v2. Shipping something imperfect that customers could use would have been more valuable than attempting a complete solution I couldn't deliver on time.