Grace & Carry AI Assistant

An AI assistant inside a fashion store's admin, so staff find orders, check stock and update products by asking, instead of clicking through screens.

MedusaJS, MCP, Vercel AI SDK, React, PostgreSQL, SQLite, Redis

Grace & Carry is an online boutique selling women's fashion. The people running it are not developers, and most of their day is small repetitive admin. Which orders are still pending. What is nearly out of stock. Update the description on this product. Look up this customer.

Each of those is a different screen with different filters. None is hard. Together they eat the afternoon.

I built an assistant into the store's admin so the staff can just ask. They type what they want in ordinary language, see the answer, and carry on.

The assistant running inside the store admin

The real problem is not the chat

Getting an AI to hold a conversation is the easy half. The hard half is letting it touch a real shop, with real orders and real money, without it doing something nobody asked for.

That shaped every decision below.

Finding the right operation

The store software offers hundreds of operations. Writing a description of each one by hand would be slow to build and worse to maintain, so the system reads the store's own technical documentation and generates them.

When someone asks for "pending orders from last week", the assistant has to work out which of those hundreds of operations answers that, and what to fill in. It searches by meaning rather than by exact wording, and it knows the vocabulary of the trade, so asking about "stock" finds the inventory operations even though nobody used that word.

Keeping answers readable

A question like "show me the products" can return an enormous amount of data. Feeding all of it to the AI makes it slower, more expensive, and less accurate, and it makes the chat unusable.

So large results are stored to one side, and the assistant gets a short preview plus a handle. It can then page through, filter, or sort that stored result as the conversation continues. The person sees a readable answer, and the full data is still there for the next question.

Remembering the session without drowning in it

Admin work runs long and wanders between tasks. The assistant keeps track of the conversation, and when that gets too big it summarises the older part.

The summary keeps what matters, which is the current goal, the decisions already made, and anything still outstanding. The mechanical detail of every operation it ran gets dropped. That way someone can keep working without re-explaining what they are doing.

Nothing destructive happens without a yes

Deletes, refunds, cancellations and important updates all stop and wait.

The assistant prepares the operation, says plainly what it is about to do, and does nothing until the person confirms it in the interface. Everything it runs is also checked for valid values and the right permissions first, so a badly formed request fails before it reaches the store rather than after.

Stack

MedusaJS for the commerce data and admin operations. The Model Context Protocol, a standard way to expose tools to an AI, for the operations layer. Vercel AI SDK for the chat and streaming. React and Tailwind inside the existing admin. PostgreSQL for store data, SQLite for stored results, Redis for session state.

The constraint I kept coming back to was control. The assistant needed enough reach to be worth using, and every path it takes still runs through validation, scoped permissions, size limits, and approval.