Work

07 / Retail

Retail
Management

Retail
Product Design
Development
Data Modeling

A full UI revamp and a new product management model for Garza Mora, a store selling pottery, textiles, and handwoven goods. One internal dashboard to control inventory, stock movements, and sales, with each role seeing only what it needs.

Role

Title

Design Engineer

Sector

Retail

Scope

Design · Frontend · Architecture

Context

Garza Mora is a store for pottery, textiles, weaving, and home decor, run by its owner with a salesperson at the counter. The existing system had grown in pieces, with overlapping data models that did not fit the way the store actually works.

We revamped the whole interface and designed a product management model from the ground up: products, categories, stock movements, sales, and payments. The goal was simple: the stock the system shows has to be explainable. If it says 12 and there are 9 on the shelf, the movement history tells you why.

Contributions

UI Revamp

Replaced the previous client with a new Next.js dashboard built on shadcn/ui and Tailwind. A single entry screen shows what matters: active products, stock value at cost, items to restock, and items out of stock.

Product Management Model

Designed the data model for products, categories, stock movements, sales, and payments. Every stock change is recorded as a movement with its reason and the person responsible.

Inventory Insights

Restock alerts sorted by urgency, stock value by category as horizontal bars with labeled amounts, product search and filters, and daily sales with monthly gross profit.

Roles & Permissions

Permissions live in the database, not the UI. The salesperson works with stock but never sees sales or profitability: the query does not run, even when the URL is typed directly.

Key Design Decisions

Decision

Status never relies on color alone

Outcome

Stock status shows an icon and a label ("Restock", "Out of stock") with color as support, so it stays readable for everyone.

Decision

Bars instead of a pie chart

Outcome

Stock value by category is a comparison between a few named groups. Comparing lengths is far more accurate than comparing angles, and each bar carries its amount, so no tooltip is needed.

Decision

Server-rendered data

Outcome

Pages fetch data on the server and the aggregation happens in Postgres, so the dashboard loads ready to read and always reflects the current state.

Stack
Next.js 16TypeScriptTailwind CSS v4shadcn/uiPostgreSQLSupabaseVercel