The project continued

May 22, 2026 min read

Building an AI Inventory Chatbot for a Danish Estate

For one of our projects in my AI course, my classmate and I were tasked with building an AI solution for a real client — EG, a Danish estate that hosts weddings and larger events. After a client visit it became clear that one of their pain points was managing physical inventory. They track storage across multiple Excel sheets, and there was no fast way to query stock levels without manually searching through them.

Our solution: a RAG-based chatbot that lets staff ask plain-language questions about their inventory and get instant, grounded answers.


What We Built

The app has two main parts — an upload panel where estate staff can drag and drop their CSV or Excel inventory files, and a simple chat interface where you type your question and the answer appears below. No complicated UI, just a practical tool.

The stack is React on the frontend, Dify.ai as middleware handling the knowledge base and RAG pipeline, and Claude via the Anthropic API as the language model generating the answers.

The key data decision was using Dify’s Q&A Processor rather than standard text chunking. Standard chunking splits documents into arbitrary blobs, which is unreliable for spreadsheet data. The Q&A Processor indexes each row as a discrete question-answer pair — so “Wine glass → 240 units, stored in kitchen cabinet A” becomes a self-contained retrievable unit. Retrieval works through semantic search rather than keyword matching, so minor naming discrepancies like “wine glass” vs “wine glasses” are handled automatically.


How We Approached It

As with my other projects in this course, we started by using Claude to plan out the architecture and technology decisions before writing any code. At the end of that process we asked Claude to generate a CLAUDE.md file — a project instruction file that tells Claude Code exactly how the project should be built, covering everything from component structure and API setup to the design system. We dropped it into the project folder, ran Claude Code, and had a working local prototype quickly. In the background we handled the Dify setup — knowledge base, pipeline configuration, and API credentials.


Where We’re At

The app runs. Upload works, the chat interface works, and the design follows the aesthetic of the real Engestofte Gods website. What we’re still working through is the Dify pipeline configuration — our mock data is being collapsed into fewer chunks than expected, meaning some rows are grouped together and retrieval isn’t as precise as it should be. It’s a configuration problem in the Chunker node settings, not a code problem, but it’s what’s currently standing between us and satisfactory answers from the chatbot.


Reflections

The speed of going from concept to working prototype continues to impress me. The planning-first approach combined with a solid CLAUDE.md and Claude Code means the gap between idea and something running on localhost is very short.

The real challenge this time was the data layer. Working with structured tabular data in a RAG pipeline is different from working with documents — the chunking decisions matter a lot more when every row needs to be a self-contained retrievable unit. Once the pipeline is configured correctly though, the concept is solid. A non-technical employee typing “do we have enough chairs for 60 guests?” and getting an immediate accurate answer without opening Excel is a genuine improvement to their workflow.


Built as part of an AI course project at Copenhagen Business Academy. Stack: React, Dify.ai, Claude API.