Shop Desk — Upholstery Shop by Raul
A working preview of a shop system where purchasing and production are one thing: a job short on fabric says so on its own ticket, on the shop board, and on the dashboard.
Please note: Built to demonstrate an idea — not commissioned by this business.

- My role
- Designer and developer. Built as a sales preview — a single link the shop owner can click through on a phone or a laptop and actually use.
- Built for
- Retail & trade shops
- Current status
- A working demonstration, not a deployed business system. Seeded data lives in the visitor's own browser — there is no database and no customer data.
- Built with
- Next.js · TypeScript · Tailwind CSS · Browser-local storage (no backend by design)
The story
What problem existed, and what we built.
The problem
Most shop software keeps two separate lists — what customers have ordered, and what materials have been ordered. The connection between them lives in the owner's head. So a job sits half-finished waiting on fabric nobody realized hadn't arrived, and the customer finds out when they call.
What I built
One system where a job and the material it needs are linked. A ticket short on yardage announces it everywhere it appears. Receiving a shipment at the dock allocates that yardage against the waiting ticket automatically, and the job moves.
What it had to achieve
- Show, not tell — let the owner use the thing rather than read about it
- Prove the one idea that matters: purchasing and production as a single system
- Work on a phone, because that is where it would be read
- Require no sign-up, no setup and no risk to try
The customer's experience
A customer finds the shop, sees real examples of its work, and sends photos with a quote request. That request arrives as a job ticket rather than an email someone has to remember to action.
What customers can do
- A customer-facing site showing the shop's real work and services
- A quote request form that becomes a job ticket inside the shop system
- A clear phone-first path for customers who'd rather call
The owner & staff experience
The owner opens the dashboard and immediately sees open jobs, what is stopped waiting on material, what is past its promise date, and how much money is still to collect. Receiving a delivery unblocks the ticket that was waiting for it.
What the business can do
- A dashboard answering 'what needs me first' — sorted by what is actually blocking the floor
- Job tickets with stage, promise date and material status
- A shop board showing where every job sits
- Purchasing, receiving, materials and supplier records
- Pickups and deliveries scheduling
- Money still to collect on open work
How it works
The system, explained without the jargon.
If a technical term is needed below, it's explained right where it appears.
Jobs and materials are one system
A job ticket knows what material it needs and whether that material is here. That single link is what removes the 'why is this job still sitting there' conversation.
The dock is where work restarts
Receiving a shipment allocates the material against whatever job was waiting for it, so the floor learns about it at the moment it becomes true.
No backend, on purpose
Everything lives in the visitor's own browser. That makes the demo instant, private, and resettable — and means no real customer information exists anywhere in it.
Design decisions
The choices that shaped it — and why.
Sorted by what is blocking the floor
The dashboard does not sort by date or by size. It sorts by what is actually stopping work, because that is the question an owner opens a screen to answer.
The demo is labeled as a demo
The customer site carries a visible banner saying it is a preview. Nobody should be able to mistake it for the shop's live website.
How it was built
Development process
- 1Built the shop-floor system around the purchasing-and-production idea
- 2Added the customer-facing website, wired so a quote request becomes a job ticket
- 3Server-rendered the customer site and fixed the quote form's input handling
Where it stands
Status & outcome
Current status
A working demonstration, not a deployed business system. Seeded data lives in the visitor's own browser — there is no database and no customer data.
Outcome
A demonstration built to be handed to a shop owner as one clickable link. It has not been commissioned or deployed as that shop's live system.
Related projects
You might also want to see
Want something like this for your business?
Tell me how your days go and what you'd like to stop doing by hand. I'll tell you honestly what would help.
