A digital inventory and discovery system for makerspaces. Students browse the equipment catalogue, ask an AI assistant about any machine in any language, and file maintenance tickets from the same conversation. Staff keep the data in Notion, which they already use.
Deployed at the Cornell Tech MakerLAB across ~100 machines. Subject of an accepted demo paper at ISAM 2026.
Important
The live application is v5/. The root src/ directory is v4 — an older
AirTable-backed version, kept for reference and receiving no changes. Everything below
refers to v5 unless it says otherwise.
Browse and search. Fuzzy ranked search across the catalogue, with facets for category, material, training level, and location.
Tool detail. Specs, location, required training, PPE, emergency-stop guidance, linked manuals and SOPs, and a live table of individual units with status, condition, and serial.
An assistant on every page. It answers from the live catalogue rather than a prompt baked in at build time, reads the machine's actual manual to walk through a setup or a fix, sees photos of error screens, replies in whatever language it is asked, and files a maintenance ticket when something is genuinely broken.
An MCP endpoint. The catalogue is exposed as a Model Context Protocol server, so anyone can query the lab from Claude, ChatGPT, or another client.
Twelve languages. The UI is translated and the assistant answers in whatever language you write in. Maintenance tickets are always written in English so staff can read them.
White-label. Branding, colours, institution name, and assistant name all come from environment variables. Nothing about Cornell is hardcoded.
cd v5
npm install
npm run dev # http://localhost:3000It runs with no configuration. Without Notion credentials the app serves a built-in mock
catalogue — enough to develop against, and what the entire test suite uses. To point it at
real data, copy v5/.env.example to v5/.env.local and fill in the Notion and Anthropic
keys.
npm run test:all # lint + typecheck + unit/integration/component + E2EThe full suite needs no credentials and makes no network calls.
| Document | For |
|---|---|
docs/deploy.md |
Setting it up. Run it locally in stages, then host it on Vercel. |
docs/architecture-guide.md |
How it works. Start here if you're inheriting the code. |
docs/handover.md |
Running it. Accounts, keys, routine operations, what to do when it breaks. |
docs/constitution.md |
The rules any change must respect. |
docs/specs/ |
Design specs. Every feature has one, written before it was built. |
docs/v5-plan.md |
The original architecture plan; §9 is the long-term vision. |
v5/TESTING.md |
Test suite runbook. |
AGENTS.md |
Conventions and repo map, for humans and AI assistants alike. |
Next.js 16 (App Router, React Server Components), React 19, TypeScript, Tailwind CSS 4.
Claude via the Vercel AI SDK. Notion as the data layer, across seven databases. next-intl
for translation. Vitest, React Testing Library, MSW, and Playwright for tests. Deployed on
Vercel.
Run from v5/:
npm run dev # dev server
npm run build # production build
npm run lint # eslint
npm run typecheck # tsc --noEmit
npm test # vitest: unit + integration + component
npm run test:e2e # playwright (once: npx playwright install chromium)
npm run test:all # everythingEvery feature starts with a spec that merges before the implementation
(docs/constitution.md, Article 1). Use
docs/specs/TEMPLATE.md, or /spec if you're working with Claude
Code. npm run test:all must pass before any merge.
MIT