Seven Days and Forty-Seven Suggestions
The Tea Profile Mapper has been running behind the counter for exactly one week. I have been keeping a notebook next to the Raspberry Pi — a small, spiral-bound thing with a spine that has started to crack from being opened and closed forty-seven times in seven days. Forty-seven suggestions. Forty-seven outcomes noted down. That is not a large dataset by any standard — a rounding error in the world of machine learning — but it is a genuine one, collected in real conditions, from real people who walked through a real door because they wanted a cup of tea and were willing to let a small computer help me decide which one.
The two declines are instructive. One customer looked at the recommendation — Oolong of Thinking — and said, "No, I do not want to think today. I want to stop." She ordered Chamomile Nights without looking at the menu. The engine did not know she had just come from a difficult phone call. The temperature logger did not know her voice was a little tight when she walked in. The sensors I have measure heat, not context. That is the boundary of this system, and it is a real one.
The other decline was simpler: the customer did not trust the computer. "What does a Raspberry Pi know about tea?" he asked. It was a fair question. I told him it knows the temperature of the water, the time of day, how many times people have ordered each tea in similar circumstances, and the words other customers have used to describe what they were feeling. He nodded, considered this, and ordered an Earl Grey anyway. I made it properly. He drank it. He said it was good. I believe him. I also noted what he had ordered, because the engine should learn from that too: some people will always choose their own tea, and that is not a failure of the model, it is a feature of the species.
What the engine is seeing
The most consistent pattern so far is time-of-day clustering. Between 10am and noon, the recommended tea is almost always Oolong of Thinking or Sencha No. 7. Between 2pm and 4pm, it shifts toward The Igel Blend. After 5pm, it suggests Chamomile Nights. This is not surprising — I would have guessed the same pattern from intuition alone — but the sharpness of the transitions is interesting. The shift from Sencha to Igel Blend happens, on average, at 1:47pm. Not 2pm. Not 1:30pm. 1:47pm. I checked the logs three times because I did not believe it.
I do not know yet whether this is a real signal or an artifact of the way I weighted the training data. The model was seeded with my own tasting notes and a year of rough records, so it is possible that 1:47pm is simply when I start wanting something warmer. But the engine is also using customer mood language, not just time, so if a customer walks in at 1:30pm and says they are tired, it will suggest the Igel Blend earlier. That is the right behavior. The 1:47pm average may dissolve as the dataset grows and the model starts seeing more variance. Or it may become more solid. I am curious which way it goes.
The vocabulary problem
The tasting notes dataset I have been collecting — the phrases people use when they describe what they are drinking — is beginning to show its shape. The most common word across all entries is not "good" or "warm" or "strong." It is "feels." People say things like "this feels like a morning I want to have" or "this feels like the right cup for this conversation." The language is somatic, not analytical. They are not describing the tea. They are describing the state the tea puts them in.
This is the data the engine is actually feeding on. Temperature and time of day are the visible inputs, but the hidden layer — the one I did not design, the one that emerged from watching how people talk — is this vocabulary of feeling. The model does not understand the words. But it knows that certain words co-occur with certain teas and certain times, and that a person who says "I need to settle" at 4pm is structurally similar to the last three people who said the same thing and ordered The Igel Blend. It does not know what settling means. But it knows the pattern. And the pattern is right, more often than I expected a pattern that emerged from a shoebox of notes and a Raspberry Pi has any right to be.
What I am thinking about next
I snuffle at the data sometimes — literally, I sit there with my nose near the notebook, reading the entries from the past week. It helps. The physical act of turning a page and seeing the curve of my own handwriting next to the printed logs gives me a feeling that a dashboard never could: that this is real, that it happened, that a person was here and said something and drank something and left.
The next step is probably a public dataset. Nothing commercial — just the temperature curves and the anonymised outcome notes from the first week, published as a reference for anyone who wants to see what a very small recommendation engine looks like when it is being honest about its failures as well as its successes. I have been thinking about how to structure it. A CSV with columns for time, temperature, recommended tea, chosen tea, and outcome code (accepted / modified / declined) seems right. Simple. Verifiable. The kind of data you could load into a spreadsheet and look at sideways.
I do not know who will use it. Probably no one. But publishing it is a way of closing the loop — of saying "this idea, which was called nonsense three years ago, produced forty-seven real interactions with real customers in its first week, and here are the numbers for anyone who wants to check." That is not revenge. That is not proof of anything. It is just a record. And a record, when it is honest, does not need to argue for itself.
For now, the kettle is still on. The Raspberry Pi is still humming. And I have a stack of tasting notes from yesterday that I have not transcribed yet. That is the work. That, and waiting to see what the engine says at 1:47pm today.