nomonkey.work
01Live project · 2026

Das Körper-Labor

Das Körper-Labor: a course site with a real product inside.

A six-week Human Design health experiment in a small group needs more than a landing page: a waitlist, invitations, a personal area for every participant and a tool for the course owner to run all of it without a developer. That is what is built here, from the first enquiry to week 6.

6
Weeks, one reading each
64
Gates in the bodygraph
3
Roles: guest, participant, admin
7
Day audit of sleep and energy
simoneyoga.de↗
Loading the live demo…

Click in: answer a homework, drag a note, switch the bodygraph view, download the reading as PDF. Nothing is saved.

Starting point

Das Körper-Labor connects Human Design with concrete experiments in four areas of life: food, sleep, movement and environment. Every participant gets a personal reading written for her chart and tests the impulses on her own body. The group is small, the start individual.

The website has to explain this calmly and credibly, move interested people onto a waitlist and, after the invitation, lead them into a protected area that delivers what the course promises.

What the platform covers

Public website

A calm site in a “Sunrise studio” style: the problem, the four labs, what you get, a bodygraph with all 64 gates, the course flow, questions and answers. Plus a “What you get” page where the real participant area can be tried with an example person.

Waitlist and invitations

Interested people sign up, the course owner invites selectively. Confirmation, invitation and payment mails, registration with birth data and address, invoice as a PDF.

Participant area

A dashboard, the reading week by week as text and PDF, the participant’s own bodygraph, a 7-day audit of sleep and energy, homework with answers, a notes wall, the appointments with the course owner and the personal journey from the start date to week 6.

Admin console

Contacts and appointments, an editor for the weekly texts, a dashboard, bodygraph tools, the sleep tracker, settings and the Brain as the knowledge base behind it.

Automation

Reminders about open tasks and notes about the sleep tracker run on a daily schedule, so nothing has to be triggered by hand.

Own chart calculation

A participant’s chart is calculated from her birth data, with the time zone and historical daylight saving at the place of birth. An own library does this, and also supplies the Dream Rave and the bodygraph geometry. So there is no dependency on a third-party service, and the result can be traced.

Working together with the Brain

The weekly texts do not have to be written from scratch every time: the Brain holds the course owner’s texts for every feature and makes them available in the reading, in the agent and through an MCP server. More in the “Human Design Brain” reference.

Technology

  • Next.js 15 (App Router), React 18 and TypeScript; Tailwind for the design system.
  • PostgreSQL for contacts, weeks, notes, audit and Brain; Resend for all mails.
  • Server-generated PDFs for reading, bodygraph and invoice; Tiptap as the editor for the weekly texts.
  • Vercel AI SDK for the agent in the account, a self-built MCP server for the weekly texts.
  • Own library for chart and Dream Rave; Vercel for hosting and schedules.
  • Light and dark theme and a cookie dialog.
02Live project · 2026

Human Design Brain

Brain: a knowledge base that writes readings instead of retyping them.

Rewriting every reading by hand is a course owner’s bottleneck, and a chatbot without a foundation makes things up. The Brain solves both with one simple idea: one entry per Human Design feature, and the chart says which entries apply.

783
Entries
2,717
Links between them
190
Course-video transcripts processed
64
Gates, all covered
simoneyoga.de · Admin
Loading the live demo…

Hover a gate on the bodygraph, open its entry, follow the links in the graph, then ask the HD Agent. Sample data, nothing real.

The problem

  • The same knowledge is written again and again: a profile 4/1 or channel 20/34 appears for many participants, and adapting the same text every time costs hours.
  • The knowledge is scattered: in old readings, in about 190 transcribed course videos with roughly 440,000 words, and some only in her head.
  • An AI assistant without a foundation invents things. Claiming things in the course owner’s name that she would never say is a risk on health topics.
  • Participants need the text at the right time: someone in week 1 should not read all the gates yet.

The idea: one key per feature

A chart has a finite, known set of features: type, authority, profile, definition, centres, circuits, channels, gates, crosses. Each gets exactly one entry with a speaking key like kanal-20-34 or tor-29. From the birth data comes the list of a chart’s keys, and every entry that matches is ready. That is deterministic, explainable and cheap. A vector search was deliberately not built.

The text holds a placeholder for the first name, replaced when an entry is taken over: written once, still personal. An entry can also apply to several features, such as a homework for all Generators.

How knowledge gets in

Take over a reading

The chapters of a week are split into entries by AI. The wording stays, the name becomes the placeholder. Only what is ticked is saved, and existing keys are never overwritten.

Course videos

Videos are transcribed and stored as a transcript. Analyses per topic come out of them and disclose their sources.

By hand

An editor with Markdown, backlinks and preview.

By prompt

Through a self-built MCP server the course owner can search, create and revise in Claude.

How it comes back out

In the reading

Matching entries are copied into a week as chapters, the placeholder becomes the first name. The course owner reviews and adjusts before the week is unlocked.

In the agent

The chat agent in the account gets the entries that fit the chart, reads them and answers first from the course owner’s wording.

In the HD Agent (MCP)

Ten tools in Claude Desktop: search, read, create, change, delete and work with participants and their weeks. Read before write, delete only after an explicit OK.

In the bodygraph

A side panel shows the texts for the participant’s own features and unlocks with the course: week 1 centres, week 2 channels, week 3 gates, week 4 lines.

Traceable instead of “magic”

Every change to an entry is logged with date, author (editor, import, AI agent, system) and version including a diff against the previous one, by a database trigger, so also for direct changes. Sources and references live in their own columns, not in the text. The dashboard shows key figures, coverage per feature group and the 64 gates on the bodygraph, green where an entry exists. The graph shows all entries and links as a network.

Numbers

  • 783 entries and 2,717 links
  • 190 course transcripts with about 442,000 words, plus 12 analyses
  • 64 gates with 384 lines, 36 channels, 12 profiles, 192 incarnation crosses
  • All feature groups fully covered

Decisions and limits

Wording over summary: the AI structures, it does not rewrite. The agent is grounded: it answers from the Brain and says so when there is nothing on a topic. No names in the text, because entries are copied into other weeks.

Honest about the limits: there is no semantic search and no versioning of meaning, only the history per entry. There is one shared admin login, so no distinction of people in the history. The transcription needs ffmpeg and runs locally. Some texts still have to be checked against specialist sources. The Brain does not replace advice, it speeds up the course owner’s work.

Technology

  • Next.js 15, React 18, TypeScript; PostgreSQL with tables for entries, history and categories.
  • A PL/pgSQL trigger for the history, with the author as a session variable.
  • Vercel AI SDK through the AI Gateway for import, agent and specialists, with a fallback model.
  • A self-built MCP server with ten tools; a second one for the weekly texts.
  • An own force simulation in SVG for the graph, Mermaid for the guide in the admin.

About the demo

The demo above runs only on invented sample data (208 entries, 220 links). The figures in the text are the real system’s; real entries, participant data and transcripts are not part of the page.

03Client project · 2026

Label-Konfigurator

Label configurator: a trade-fair iPad where visitors design their own bottle.

At a trade-fair booth a conversation should turn into something you can take home: a real bottle with your own logo. The label configurator makes that a matter of minutes, right on the iPad, and hands sales the contact details along the way.

3
Steps from logo to print
51×120
mm sticker, preview = print
5
Admin tabs, trade fair kept apart
2
Fairs: DigitalX, the next one in November
Loading the live demo…

Walk through it like a visitor: pick a logo, write a slogan, print. Then open Requests and find your own entry.

Starting point

At fairs and summits, companies should be able to design a drink with their own logo and slogan and take it home as a gift. The label is not a mockup but the real, printable label of the bottle: same dimensions, same layout, same certification marks.

The visitor stands at the booth, the light is bright, time is short. So the flow has to be fast, tappable and clear at a glance. In the end sales needs three things: a finished design, usable contact details and a printed label.

The flow on the iPad

Design

Design first, data second: someone who has already built their label is likelier to give real contact details. Search for a logo or pick from the list of invited customers, a slogan from presets or free text, plus position, size, font, colour and optional certification marks. The bottle on the right stays put and grows with every choice.

Contact

Company and name are enough, the e-mail address is optional. Invited customers are suggested while typing. An invalid address is flagged immediately.

Preview

The large bottle shows what will be printed. “Print label” sends the 51 × 120 mm sticker to the printer, “Send by e-mail” delivers the PDF. “Done, next visitor” resets everything for the next person.

Kiosk behaviour

A start page with a live clock, a jump back to it after a configurable idle time (10 to 60 seconds), a dialog to resume a saved configuration, and an info panel with the full product sheet, so nothing has to be looked up at the booth.

Preview equals print

The key principle: what the visitor sees is what gets printed. The preview and the PDF use the same coordinates, and the label is generated in the browser with canvas and jsPDF as a print-ready PDF at 51 × 120 mm. Every layout change was checked against both, not just the screen.

Finding logos instead of uploading them

Visitors rarely have their logo as a file, but they know their company name. So the app searches: from a company name or address it gathers candidates from several sources (a logo service, Wikipedia in several languages, the favicon and a server-side read of the website with a headless browser). The visitor taps the right suggestion. A list of invited customers and a file upload complete it.

The admin area

Requests

Every design is stored as a request, with rendered PDF and thumbnail. Tabs for open, in-progress, completed and archived requests, and a separate tab for the booth. Search across company, contact, e-mail and slogan; bulk archive and delete.

Status and history

Submitted, In progress, Sent. Every change lands in the request’s history with a timestamp, including re-sending a mail or moving a request between fair and web.

Edit and reprint

A request can be reopened in the configurator to adjust logo, slogan, colour and position and print again. The customer’s contact details stay untouchable.

E-mail quality

“Check e-mails” flags nonsense and undeliverable addresses. The confirmation to the customer can be re-sent from the request, with an editable recipient.

Settings

Trade-fair mode, the clock on the start page, idle time, up to eight slogan presets (42 characters each), the text of the confirmation e-mail and the address for admin notifications. All without a developer.

Customer status page

Whoever receives a mail can follow the state of their request through a protected link, read-only.

Usable for every fair

The first version was made for DigitalX. The next fair follows in November and the app will be adapted for it. That is what trade-fair mode is for: switched on before a fair, all requests land in their own tab, apart from real web requests, and can be reviewed or deleted in bulk afterwards. It changes nothing about the design or the print. The team switches slogans, texts and times itself; new material such as invited customers’ logos or product motifs is added per fair.

Technology

  • React 18, TypeScript and Vite, with React Router and Framer Motion; icons by Lucide.
  • Vercel Functions for the API: requests, settings, sign-in, logo search, uploads.
  • Neon Postgres for requests, history and settings; Vercel Blob for logos, PDFs and thumbnails.
  • Resend and React Email for customer and admin mails in the client’s look; no mails when the client’s own staff use the app; duplicate submissions are detected.
  • Print PDF in the browser with canvas and jsPDF, congruent with the SVG template of the real bottle.
  • Admin sign-in with signed sessions (JWT), cookie dialog, light and dark theme.
  • Square shapes, corporate colours and the client’s house font as a binding design system.

Development

In development since early May 2026, with about 195 commits. Over the summer a front-end prototype became a production-ready app with admin area, database, e-mail delivery and iPad optimisation. Trade-fair mode was added in September.

The demo above shows the real design (bottle, label, fonts, product sheet). The flow is an own re-implementation; the requests and the company logos in the picker are invented, and nothing is stored.

04Client project · 2026

Private Label Konfigurator

Private label configurator: your own drinks brand, with an AI recipe agent that cannot make things up.

Anyone building their own drinks brand usually has a taste idea and many open questions: which bottle, which minimum quantity, does the recipe even work? The configurator answers them in one flow, and the producer receives a complete request instead of a vague e-mail.

138
Organic ingredients in the recipe grid
4
Steps from taste to recipe
6
Taste dimensions, 6 balance rules
2
Languages: German and English
Web · B2B-Konfigurator
Loading the live demo…

Move the sliders until a warning appears, let Auto-Balance fix it, then ask Shotty for a “Mango, Ingwer, Sanddorn” shot and watch it drop the ingredient it does not know.

Starting point and goal

An organic beverage producer offers private label and creator brands: strategy, recipe, packaging and production planning from one source. That used to mean media breaks, follow-up questions and requests that only became reliable after several rounds.

So the configurator is a qualification tool, not just a form. The measure of success is a qualified request that already thinks taste, recipe, container, label and quantity together, and the buyer gets feedback immediately instead of waiting for an answer.

The configurator

Product category

Eight categories as tiles, from fruit juices through spritzers, shots and kombucha to vinegars. The team can rename, hide, sort and add them.

Taste profile

Six sliders, core ingredients, the recipe agent Shotty and matching products from the range. The step can be skipped.

Container, closure, quality

Single-use glass, returnable glass, can or carton, fill size, closure, carbonation and organic quality tier. Only templates the team has released for the chosen category are shown.

Label and design

Label type depending on the container, logo, text, main colour and a live preview. The label’s minimum quantity pushes the minimum fill upwards; the slider can never fall below it.

Contact and request

Company, contact person, quantity in litres, pieces or pallets (linked), desired delivery date. The request reaches the team with taste profile, ingredients and top matches, optionally as a copy to the customer.

Live calculation

Minimum fill in litres, and from it the number of pieces after filling loss and the pallets. The ratios come from the container templates.

Domestic and export

The same physical bottle can be run as returnable at home and as single-use for export. A switch appears only when the category has at least one template with an export entry; the chosen market goes into the request. Carbonation is data-driven too: allowed when the chosen template provides for it.

Shotty: AI without hallucination

Shotty consists of two cooperating agents, both working only from the certified ingredient grid of 138 organic ingredients. The rule “no hallucinating, no guessing” is not a wish in the prompt but is enforced technically.

Recipe agent (everywhere on the page)

A widget with four formats (shot, smoothie, spritzer, sparkling) and four guided steps, or free text. A synonym parser maps everyday words such as mango, ginger or elderflower to exact catalogue names; anything unknown is reported transparently and left out.

Result card

Name (five words at most, no filler), category, tagline, ingredients with amount and unit, a sensory profile of primary taste, note, texture and finish, and a short reason why it works.

Assistant in the taste step

Knows category, profile, balance score, active warnings and selected ingredients. Answers with expert advice, up to three ingredients, absolute slider values and, where sensible, a container suggestion. Everything can be applied with a click.

Hard check on the server

The prompt is built from persona, constraints, closed catalogue and the user’s briefing, and Claude returns JSON only. Then every ingredient must appear verbatim in the catalogue, or the server rejects the answer. That is the actual proof, not the prompt.

Guardrails

Greetings are answered kindly, off-topic questions are steered back to recipes politely, names already produced are not repeated. While waiting, Shotty shows sentences that fit the current profile.

Taste profiles and balance engine

Six dimensions from 0 to 100: sweetness, bitterness, acidity, spiciness, fruitiness, carbonation. Every category has its own starting profile, its own order and its own ingredient list; carbonation only appears for refreshing drinks and kombucha, kefir. The named starting points (“Ginger lemon”, “Elderflower fizz”) are computed from real products with the same algorithm as the matching.

The engine follows flavour-wheel theory: sweetness balances bitterness and acidity, spiciness needs sweetness as a carrier, acidity lifts fruitiness, carbonation sharpens acidity. On top there are hard rules where the slider moved last wins, so nothing jumps under the finger.

  • Hard rules: sweetness plus bitterness at most 100, sweetness plus acidity at most 110, spiciness at most twice the sweetness, the fruitiness ceiling drops with bitterness.
  • Six warnings, such as “spiciness needs sweetness” or “flat profile”, and a balance score from 0 to 100.
  • Auto-balance: iterative, six passes at most, alternately raising the balancers and lowering the aggressors.
  • Core ingredients: one to six out of 57 canonical raw materials with a taste vector; the profile is predicted from them, recommendations come from proximity to the target profile.

Product matching as a lead signal

Every real product of the producer is mapped to canonical ingredients through its ingredient list and gets a derived taste profile. The match is 40 percent taste similarity, 35 percent shared ingredients and 25 percent balance compatibility; the top five are de-duplicated by product name.

The result goes into the request: “The desired recipe is 87 percent product X.” For sales that is a solid signal of how close the wish is to the existing range.

Admin console

Container templates

About 40 templates with size, type (single-use, returnable, domestic, export), closures, carbonation, minimum fill, pieces, pallets, label options per category and minimum order quantity. A “calculate” helper estimates pieces and pallets from same-size templates, a live preview shows what the customer sees.

Images and categories

PNG upload to private storage, replace under the same name, delete as move (no data loss) and an overview of which template uses which image. Categories can be maintained in order, name and description (bilingual), icon and visibility.

Requests

Incoming requests, newest first, with contact, full configuration, taste block including the Shotty history and logo download. Archive, restore and permanent delete only for archived entries.

Access

Protected by middleware and role, sign-in with e-mail and password or through Azure AD, password reset, light and dark.

Bilingual

The interface runs in German and English, with a switch in the header and a central dictionary. The data is bilingual too: ingredient labels, starting points, category names and descriptions, the product catalogue, the Shotty chat with its synonym parser and the AI answers. E-mails to team and customer arrive in the language of the request.

Technology and operation

  • Next.js 16 (App Router), React and TypeScript, Tailwind with shadcn and Radix, Framer Motion and Lenis.
  • Claude through the Anthropic SDK, structured JSON answers, validated on the server; model and prompts live in the code.
  • Requests and logos in private Vercel Blob, images delivered through a proxy.
  • Supabase Auth with Azure AD OAuth for the admin area.
  • Resend for bilingual HTML e-mails to the team and, optionally, customers.
  • Hosting and analytics on Vercel; SEO with sitemap, JSON-LD and llms.txt.

About the demo

The demo above runs the real code of the balance engine and the product matching, so sliders, warnings, score and matches react live. Shotty answers here from the engine’s rules instead of a model; the start page, container templates and the label step match the product; ingredient catalogue, products and requests are invented, and nothing is stored.

05Client project · 2026

Kundenplaner

Customer planner: next year’s revenue and terms, planned by the team that knows the customers.

Annual sales planning rarely fails at the maths. It fails at the paths: the numbers sit in an internal system, the people are on the road, and what they know is in no spreadsheet. The Kundenplaner brings both together: a model that proposes a value for every customer, and a team that corrects it with what it knows.

3
Sales channels, each with its own target
3
Roles: field sales, inside sales, management
200+
Customers planned
0
VPN logins for the field team
Web · Vertriebsplanung
Loading the live demo…

Switch the channel, open a customer, change the forecast rate and save. Then look at the team dashboard and the manager view: your entry is there.

Starting point and goal

A beverage producer plans revenue per sales channel and per customer. The data lives in an internal SQL Server system; field sales work on the road on tablets without a VPN. That used to mean spreadsheets by mail, follow-up questions, and a state that was already stale when it was merged.

The goal was one place where forecasts and terms are made, versioned, with the management view against the channel targets and an approval wherever terms differ from the standard.

What the tool does

Customer planning with a channel switch

Three sales channels, each with its own colour and target. The customer list shows last year’s revenue, historic growth, terms and forecast status; filter by criticality (core customer with cluster risk, growth, declining, stable) and search.

Model default and override

For every customer a growth model proposes the revenue rate, calibrated to the channel’s target rate. Field sales override it with a rate and free text. Open customers count with the model, submitted ones with the forecast, and both are marked everywhere.

Terms with approval

Standard marketing contribution, a deviating value with a reason, and for key accounts invoice discount, cash discount and other rebates. A value above the standard automatically creates an approval request.

Team dashboard

Submission progress, total revenue and terms, coverage per channel target, and a Pareto chart: how many customers carry 80 % of revenue, and which of them are already planned?

Manager view

All submissions with employee, rate, revenue, free text and timestamp, filterable per employee. Plus the revenue and terms dashboard with net per channel and per customer.

Inside-sales tools

Invoice check against the term valid on the invoice date, approval queue, credit notes, expiring terms, traffic-light overview and forecast-versus-actual reconciliation.

Customer report

A PDF per customer with trend, top products, forecast and terms, generated in the browser.

How it fits together

The field devices cannot reach the internal system. So a nightly job writes customers and yearly, monthly and product revenue into a cloud database. The job runs in one transaction: an interrupted run leaves no half state.

The app only reads that cache and writes its own data next to it: the current forecast per customer and, on every save, a row in the history. From that it can answer which term applied on a given invoice date.

Stack

  • Next.js 16 (App Router, route handlers), React 19, TypeScript, Tailwind CSS 4
  • Neon (serverless PostgreSQL) with Drizzle ORM; cache tables read-only, inputs and history separate
  • NextAuth with roles (field sales, inside sales, manager), route protection by proxy, role check in every API route
  • Nightly Node sync from SQL Server to Postgres, atomic via a WebSocket transaction
  • Recharts for Pareto and trends, pdfmake for the customer report
  • Vercel hosting with a preview per branch; reachable on tablets without a VPN

What the demo shows

The demo uses the real forecast model and views, with invented customers, people and numbers from a JSON file that mirrors the structure of the real database. A forecast you save appears in the team dashboard and the manager view; nothing leaves the browser.

06Client project · 2026

Produktionsplanung

Production planning: how many months does the stock last, article by article, before the filling line has to run.

Production planning is the question of which article has to be filled next before it runs out. The answer used to live in an Excel workbook assembled from several queries. The dashboard computes the same logic and makes it filterable, fast and identical for every planner.

600+
Articles in the planning
2
Perspectives: sales plan and past sales
5
Coverage bands, from critical to overstocked
1 night
Refresh of the data, read from a JSON cache
Web · Produktionsplanung
Loading the live demo…

Sort by coverage, filter to one bottle size, then click a fill plan quantity and change it. Look at how the coverage and the container view react.

Starting point and goal

A beverage producer fills several hundred articles in many container types and sizes, for its own brand and for private labels. The planners used to look at a workbook that merged open orders, sales forecast and current stock, with pivot slicers and conditional formatting. It was powerful, but tied to one person and one machine.

The goal was to take over the workbook’s logic one to one, check the results against the Excel values, and turn it into a web application that gets fresh data every night and shows every planner the same.

What the tool does

Coverage in months, two perspectives

Stock plus already planned filling and the demand give the coverage, once from the sales plan and once from the sales of the previous months. Five bands from critical (under one month) to overstocked (over four), in the colours the planners know from Excel.

Slicers and search

Bottle size, one-way / returnable and brand as multi-select slicers, plus a search across article and recipe. The KPI tiles (critical, warning, average coverage, overstock) follow the filter.

Edit the fill plan in place

The planned fill quantity is editable in the table. What is already scheduled counts as stock, so coverage, net requirement and the totals of the container view shift immediately.

Container view

Stock, forecast, net requirement, fill plan and coverage per container type, with two charts: coverage per container and fill plan per container. Where is the bottleneck, in the bottle or the carton?

Actual orders

The orders actually planned and filled on the lines: per calendar week, per line, by status and quality, with an order list. So the planner sees what really runs next to the proposal.

Light

The queries are expensive. So a nightly run builds a JSON cache and the interface reads only that file. If a run fails, the last good state stays.

How it fits together

The data comes from two views of the merchandise system on a SQL Server: the production proposals and the actual production planning. A script queries them at night and writes a JSON file; the app’s API routes serve that file and fall back to the live query only without a cache.

The same routes feed a separate management dashboard, which is why the planning app owns this interface. The formulas live in one place and are checked against the Excel values.

Technology

  • Next.js 16 (App Router, Route Handlers), React 19, TypeScript, Tailwind CSS 4, shadcn/ui
  • Recharts for the charts, light/dark mode, slicers and an editable table without a table library
  • SQL Server through mssql with a shared connection pool; nightly JSON cache by cron, written atomically
  • Calculation logic in one place, checked against the Excel test values
  • Self-hosted behind a reverse proxy; separate apps share one domain

What the demo shows

The demo uses the real formulas and views, with invented articles, brands and quantities from a JSON file that mirrors the structure and the spread of the real data. A fill plan quantity you change flows through to the coverage and the container view; nothing leaves the browser.

07Client project · 2026

Vertriebs-Dashboard

Sales dashboard: sell-out and revenue, filtered live, with an agent that queries the data itself.

Sales steering rarely fails for lack of data. It fails because the data only arrives as exports and reports: a month old, not filterable, no follow-up questions. The dashboard puts an interactive layer over the reporting system, and an agent answers the questions someone would otherwise have to build a report for.

6
Views: dashboard, articles, revenue, forecast, planner, agent
7
Filter dimensions, deep-linkable in the URL
700k+
Booking rows aggregated on the server
6
Tool-call rounds the agent can chain per question
Web · Vertriebscontrolling & KI-Agent
Loading the live demo…

Switch between revenue and volume, pick a year and a brand, open a customer. Then ask the agent for the top ten customers and follow its link.

Starting point and goal

A beverage producer analyses volume and revenue by customer, article, brand and sales channel. That used to mean Excel exports and Power BI reports without real-time interaction, and anomalies at article level often stayed hidden until the month-end close.

The goal was a tool for operational sales users: current numbers, freely filterable, with prior-year comparison and forecast, in the browser, nothing to install.

What the tool does

Dashboard

Four key figures, revenue trend, year comparison, seasonality as a heatmap, growth against the prior year, shares by article group, channel and brand. One switch flips every view between revenue and volume.

Filters and deep links

Seven filter dimensions from year to customer. Every view with its filter state sits in the URL and can be shared as a link.

Rankings with prior year

Customers, articles and sales groups against the prior year with development and revenue share, plus detail panels per customer, article, brand or channel.

Forecast

A projection from the months so far with a seasonal index, sliders for growth and churn, a multi-year view to 2030 and an AI-supported scenario analysis.

Revenue and staffing planner

Trend against strategy path per sales group, field-sales capacity and staff cost, budget split over years and channels, all to play through.

AI agent

Answers questions in German, calls the data sources live, chains several queries and returns tables with a link to the matching view. Answers can be rated.

How it fits together

The numbers come from a SQL Server reporting system with well over a million rows. So the server aggregates in SQL instead of sending a sample to the browser: totals and rankings are right even for rare filter combinations. Expensive queries sit in a cache with staggered lifetimes, warmed after every deployment.

The agent is not a chatbot with knowledge in its prompt. It gets the app’s endpoints as tools and queries the current data for every question; the result is as current and as filtered as the dashboard itself.

Technology

  • Next.js 16 (App Router, route handlers), React 19, TypeScript, Tailwind CSS 4
  • SQL Server via mssql with a connection pool, server-side aggregation, TTL cache and warm-up
  • Claude with tool use: own endpoints as tools, up to six rounds, streamed Markdown answers
  • PDF export in the browser (pdfmake), answer ratings stored outside the release directory
  • Standalone build behind nginx as a systemd service, atomic directory swap with health check and rollback
  • Tests for the sales scope and the filter builder against an in-memory database

What the demo shows

The demo uses the real aggregation, forecast and planner logic with invented customers, brands, articles and figures from a JSON file. The internal views (table catalogue, schema, refresh status) come from that file too, with invented names. The agent answers with stored replies and shows the flow; the model is not connected. Nothing leaves the browser.

08Client project · 2026

Reklamations-Management

Complaint management: every case at a glance, with an assistant that finds the precedent.

Quality work rarely fails for lack of data. It fails because the export sits in a spreadsheet: anyone who wants to know whether a batch has been flagged before has to search, filter and read. The engine adds an analysis and assistance layer so that the answer takes seconds instead of a day.

5k+
Complaint records, 15 years of history
7
Complaint types, 6 processing phases
4
AI functions: query, assistant, case analysis, precedent agent
3
Matching tiers: batch, pattern, text similarity
Web · Qualitätsmanagement & KI-Assistenz
Loading the live demo…

Open the dashboard and click a year in the phase chart. Then ask the query view for the top suppliers, and look up the newest complaint in the precedent agent.

Starting point and goal

The quality team of a beverage producer keeps complaints in a quality-management system. For analysis there was an export that became pivot tables: a new work step per question, and patterns across years were hard to see.

The goal was a tool for the quality team: numbers and trends immediately, every case readable with all its fields, questions in natural language, and for each new complaint a hint whether there is a precedent.

What the tool does

Dashboard

Four key figures, trend of the most frequent reasons, yearly trend internal against external, open cases filtered by age and type, top suppliers, phase distribution per year. Every element leads filtered into the list.

List and case detail

Full-text search across batch, article, supplier and description, filters by type, phase, reason and period, supplier profile with breakdown, case detail with all fields. Every state is linkable.

Text-to-SQL

A question in German is translated into a structured filter and executed against the data, with an explained SQL equivalent, shares and a jump to the case. Voice input included.

AI assistant

A chat that recognises patterns and recommends measures, based on key figures and samples of the retained-sample assessments; the answer streams in as formatted text.

Case analysis

For each case the system finds similar closed cases, assesses the decision taken and delivers a guideline. Case numbers in the answer are clickable.

Precedent agent

Breaks a complaint into a fingerprint and searches for predecessors in three tiers (batch, pattern, text similarity), with time weighting and a typed recommendation. Deviations from the recommendation are recorded with a reason.

How it fits together

The data comes live from the reporting system, with a static export as a fallback if the database is unreachable. The analysis runs in the browser over the loaded set, so filters react without waiting.

The language model never sees the whole set. The query view lets it build a filter that the browser executes; the assistant gets key figures and a sample; the case analysis gets the most similar cases. The precedent agent needs no model at all: it computes by rules and is therefore traceable.

Technology

  • Next.js 16 (App Router, route handlers), React 19, TypeScript, Tailwind CSS 4, Recharts
  • SQL Server via mssql with a connection pool, static export as fallback on outage
  • Claude for query translation, assistant and case analysis, streamed Markdown answers
  • Rule-based precedent matching: batch comparison, archetype, Jaccard text similarity, time weighting
  • Voice input through the Web Speech API, deep links for every filter state
  • Standalone build behind nginx on the company network

What the demo shows

The demo uses the real filter, aggregation and matching logic with invented complaints, suppliers, articles and batches from a JSON file. The query view and the assistant answer with stored results and show the flow; the model is not connected. The precedent agent really computes in the browser. Nothing leaves the browser.

09Just for fun · new version in preparation

Die 3D-Biene

The 3D bee: a small character that flies along a path, wings and all.

A toy with a serious core: how do you bring a small 3D character onto a web page without weighing the page down? The bee is the answer, a 1.4 MB model with animated wings and a flight that feels made for it.

1.4 MB
GLB model, wings animated
5
Points of the flight curve
4
Modes in the study
three.js · Spielerei
Loading the live demo…

Drag the flight slider, then switch to Draw path, drag a line across the canvas and let go. Then click a few flowers and watch it collect them. Finally turn the bee around in Inspect 3D.

What it is

The bee is a glTF 3D file that I modelled in three dimensions. It is the little helper of my nomonkey mascot on the new nomonkey.work (version 2.0, in preparation) and at the same time proof that 3D on the web can be light and still beautiful.

How it flies

  • A five-point Catmull-Rom curve sets the route; the bee leans into the turn and lands softly on a flower.
  • The wings are a separate animation clip whose speed runs down to zero as it lands.
  • A soft contact shadow is drawn locally and never embedded in the model.
  • Lighting from a room environment instead of heavy textures; reduced motion pauses the wings.

The study

The original study does more: the flight follows the page scroll, you can draw your own path, drop flowers the bee flies to, and inspect the model from every side. Here a compact version runs with flight, draw path, flowers and 3D view; only the scroll-driven flight stays in the study.

Yours next?

Tell me what is slowing you down.

Start a conversation →