All posts

Noël Vranckx • • 9 min read

shadcn/ui, Material UI and design basics for AI-built tools

AI made building a tool cheap. Building one people want to open is the part that is left. Six design rules, the libraries that do the heavy lifting, and a prompt to try.

Illustration of a workshop bench seen from above with a mint steel control panel in the centre, two rows of cobalt knobs, a row of toggle switches, a round gauge and one large saffron push button, a wooden tray of spare knobs, switches and buttons sorted by type on the right, and a pencil sketch of the panel layout, a screwdriver and a pencil on the left

When did you last open a work tool and think: this is pleasant to use?

Now think of the tools your team built in the past year with AI. The forecast checker, the supplier scorecard, the little app that reads delivery confirmations. They work. The numbers are right. Are people still using them?

Many of those tools die quietly. Not because the logic is wrong, but because the screen is a grey wall of fourteen equal columns, the button you need is hidden, and nobody can tell whether the data is from today or from last Tuesday.

AI has made building a working tool cheap. Making one that looks trustworthy and is easy to use is now the difference between a demo and a habit. The good news: you do not need to be a designer for that. You need a handful of rules and a component library that does the heavy lifting.

What a component library is

A component library is a box of ready-made screen parts: buttons, tables, forms, menus, date pickers, dialogs. Each part already has sensible spacing, colours, focus states and keyboard support. You assemble screens from them instead of drawing every element yourself, and the result looks consistent because every part comes from the same family.

That matters more now than five years ago. When you ask an AI coding tool for "a dashboard", it has to pick some look. Point it at a named library and it reaches for parts that were designed together. Leave it open and you often get a mix of styles.

The libraries worth knowing, with figures I checked on 12 October 2026:

LibraryWhat it isPriceReach for it when
shadcn/uiComponents the CLI copies into your own project, so you own and edit the codeFree, MIT licenceYou build with AI coding tools in React and Tailwind
Material UI (MUI)Google's Material Design as ready components; version 9 since April 2026Core free; MUI X Pro and Premium from $299 a yearYou need heavy data grids, schedulers and a familiar look
MantineA large set of components and hooks; version 9 since March 2026Free, MITYou want forms, dates and notifications without assembling them
Ant DesignA design system aimed at dense admin screens; version 6 since November 2025Free, MITYour tool is mostly tables and forms
Fluent UIMicrosoft's design systemFree, MITYour tool lives next to Teams and Office
Base UI, Radix, React AriaUnstyled foundations: behaviour and accessibility, no lookFreeYou want full control of the look, or a library built on them
Tailwind CSSStyling utilities most of the above sit on; version 4.3 since May 2026Free, MITAlmost always, as the layer underneath

shadcn/ui is the one that matters most for AI builders. It has about 125,000 stars on GitHub and close to 12 million npm downloads a week. Because the code lands in your project, an AI assistant can read and change every component. Since December 2025, `npx shadcn create` lets you pick a style, colours, fonts and icons, and rewrites the components to match. Since July 2026 new projects sit on Base UI by default, with Radix still supported. This site runs on it.

Two pieces of news to watch. MUI skipped version 8 entirely, to line its numbering up with MUI X. And on 9 September 2026 Tailwind Labs announced it is joining Shopify; Tailwind itself stays MIT.

Next to the libraries, a few helpers worth bookmarking:

  • Mobbin: a searchable library of real app screens and flows (it cites 621,500 screens). Look up how ten good apps do a filter panel before you build yours.
  • Figma: free Starter plan, with Figma Make for turning a prompt into a clickable prototype.
  • v0 and Lovable: AI app builders with free tiers (7 messages a day on v0, 5 credits a day on Lovable) to try a screen idea in minutes.
  • Laws of UX and Nielsen's ten heuristics: two short reference pages that explain why a screen feels wrong, in plain words.

What it means for supply chain

A useful tool has three layers. Each one answers a different question in the user's head.

LayerThe user's questionWhat breaks itWhere the fix comes from
It worksIs this number right?Wrong logic, stale dataYour process knowledge and tests
It looks tidyCan I trust this?Misaligned columns, five shades of blue, mixed fontsA component library
It feels easyWhat do I do now?Every field equally loud, jargon, no feedbackDesign rules and one user test

Supply chain people are usually strong on the first layer. The second and third get skipped, and the Laws of UX site has a name for why that hurts: the aesthetic-usability effect. People see attractive designs as more usable, and forgive them more.

Six rules cover most of the second and third layers for the tools we build:

Start from the decision, not the data. The first screen answers the question the user opens it for, such as "which orders are at risk today?", and the full extract sits one click away.

One main action per screen. Hick's law says the time to decide grows with the number of choices, so make the next step obvious and push the rest into a menu.

Show the state of the system. A "data as of" time, a loading state, a clear empty state and an error message that says what to do. This is Nielsen's first heuristic, and planners check it before anything else.

Speak the user's words. "Promised date", not "dt_prom", and units in every column header. Match the terms used in your ERP and your S&OP meeting.

Treat the table as the product. Right-align numbers, keep decimals consistent, use thousand separators, freeze the header, and let people sort and filter.

Never use colour alone. A status needs a word or an icon next to the red or green. WCAG 2.2 asks for a contrast of at least 4.5:1 for normal text and 3:1 for buttons and other controls.

Rules on paper are easy to agree with. The way to feel the difference is to give an AI builder the same data twice: once with the rules, once without.

Try this: a returns desk screen, with and without rules

Run it in an AI app builder such as v0 or Lovable, or in Claude or ChatGPT with an artifact or canvas. First paste only the first line and the data, and look at what comes back. Then paste the whole prompt. The data is illustrative and belongs to a fictional bicycle maker.

You are building an internal tool for the returns desk at a fictional bicycle maker's distribution hub. The returns coordinator uses it on a tablet, standing at the inspection bench.

Task: build a single-screen returns triage app from the data below. Use React with shadcn/ui and Tailwind (or the component library your tool uses by default, and tell me which).

Design rules:
1. The screen answers one question first: "what do I inspect next?"
2. A summary row on top with three figures: returns waiting for inspection, returns open for more than 7 days, and safety-related returns (cracks, swelling, anything that could hurt a rider).
3. Safety and overdue rows stand out, with a word or icon as well as colour.
4. One main action per row: "Inspect". Other actions go in a menu.
5. Values right-aligned in euros with a thousand separator. Plain column names with units.
6. Status as a badge with text. A visible "data as of" time, an empty state and a loading state.
7. Text contrast at least 4.5:1, touch targets large enough for a gloved finger.
8. If you see a pattern across rows that the coordinator should escalate, show it.

Data (today is 12 October 2026):
rma,received,dealer,item,reason,value_eur,days_open,status
RMA-2201,2026-10-01,Velo Gent,Gravel E frame M,Paint chip,640,11,Waiting inspection
RMA-2202,2026-10-02,Rad Köln,Road battery 500Wh,Will not charge,420,10,Waiting inspection
RMA-2203,2026-10-05,Cycles Lyon,Road wheelset,Wrong item shipped,310,7,Approved refund
RMA-2204,2026-10-06,Fietsen Utrecht,Gravel frame L,Crack at weld,580,6,Waiting inspection
RMA-2205,2026-10-07,Velo Gent,E-bike charger,Dead on arrival,65,5,Approved replace
RMA-2206,2026-10-07,Bici Milano,Road E bike S,Motor noise,3150,5,Waiting inspection
RMA-2207,2026-10-08,Rad Köln,Saddle,Customer changed mind,45,4,Rejected
RMA-2208,2026-10-08,Cycles Lyon,Gravel bike M,Transport damage,1890,4,Waiting carrier claim
RMA-2209,2026-10-09,Fietsen Utrecht,Road battery 500Wh,Will not charge,420,3,Waiting inspection
RMA-2210,2026-10-10,Bici Milano,Brake set,Leaking hose,120,2,Waiting inspection
RMA-2211,2026-10-11,Velo Gent,Road battery 500Wh,Swelling,420,1,Waiting inspection
RMA-2212,2026-10-12,Rad Köln,Gravel E frame M,Paint chip,640,0,Received

Output: the working app, then a short list of the assumptions you made and which rules you could not apply.

What you should see

The bare version usually gives you a tidy but flat table: twelve rows, eight columns of equal weight, maybe a search box. Correct, and no help at all at the bench.

The full version should show:

  • Summary: 7 returns waiting for inspection, 2 open for more than 7 days (RMA-2201 and RMA-2202), and 3 safety-related: the cracked weld on RMA-2204, the swollen battery on RMA-2211 and the leaking brake hose on RMA-2210. A build that only matches the words "crack" and "swelling" misses the brakes.
  • The edge case: RMA-2203 has been open exactly 7 days, so it is not overdue. A careless build counts it.
  • The pattern: the Road battery 500Wh came back three times from three dealers in ten days, once with swelling. That is a supplier quality alert, not three separate returns, and it belongs at the top.
  • Order: the safety rows first, not the oldest paint chip.

Why the rules matter

The data and the AI were the same both times. What changed is that the rules told the builder what the user is trying to decide. A component library made both versions look neat; only the rules made the second one useful. That is the split worth remembering: the library gives you tidy, you still have to supply easy.

What it can't do, and the traps

  • A library cannot fix a confused screen. shadcn/ui will render fourteen columns beautifully. Deciding which three matter is still your job.
  • Mixing libraries. Material UI next to shadcn/ui next to a table you found online looks patched together. Pick one and stay with it.
  • Copied code is your code. With shadcn/ui the components live in your project, so updates do not arrive automatically. That is the price of full control.
  • Licences and paid tiers. The cores are free, but advanced grids and charts often sit in paid tiers. MUI's pricing page and its version 9 announcement describe the licensing differently, so read the current terms before you commit.
  • AI builders claim more than they check. Ask for 4.5:1 contrast and you may get a sentence saying it was applied. Test it with a contrast checker, and test the screen on the actual tablet.

Watch one person use it

Pick one tool your team built this year. Sit next to someone who did not build it, give them a real task, and keep quiet for five minutes. Write down every moment they hesitate. That list is your design backlog, and most items on it are an afternoon's work with the rules above.

For years supply chain people put up with clumsy systems because someone else built them. Now we build our own, and we get to decide that they will be pleasant to use.

Which tool in your day do you open only because you have to, and what is the one change that would make you open it gladly?

Sources

Illustration of a scale model of a small company on a workbench: two factories and a warehouse linked by roads with miniature lorries, beside a pair of callipers, a pencil and an open notebook

Read it, then try it

The posts on this blog are meant to be used, not only read. Each one ends in something to do: a prompt to run, a calculation to rebuild or a first step for this week. You learn what AI can do in supply chain by putting it to work on a real problem.

Meet Upshift

Most examples use Upshift, a fictional bicycle maker. It builds road and gravel bikes, each as a regular and an e-bike version, in two plants, and serves dealers and retail chains through five distribution hubs. Upshift isn’t a real company, and none of its data comes from one. Meet the company.

The dataset and the exercises

Behind Upshift sits a complete synthetic company dataset: products, suppliers, dealers, orders, stock, production and the transport network, all consistent with each other. Its dates follow a date you choose, so the data always looks current. The exercises on this site use the same company, each with a task, the files you need and a way to check your result.

A post keeps its example small enough to paste into a chat. The dataset and the exercises let you do the same work at the scale of a real company.

The dataset and the exercises are free with an account. The app is in early access for now: request an account from the sign-in screen and I’ll send you an invitation as soon as I can.

Pass it on

Know a colleague who should read this? Post it where they will see it, or send it to them directly.

More posts