projects · live
lulumelon
what llms say about a brand, GEO, python cli
built by Damla Su Bilge · nosey-dewdrop.github.io/lulumelon
the problem
A language model is not a deterministic function. Ask the same question twice and you can get different brands, in a different order, with a different tone. So one reading is one draw from a distribution, and 18.5% and 24% may be the same underlying reality sampled twice.
Refresh frequency and sample size are also different quantities. Running a one-shot reading every morning gives you thirty one-shot readings, not a sample of thirty.
what it does
Asks n times, and reports what the sample supports.
- 0 of 20 is not 0%. Never being named still leaves a real upper bound rather than certainty of absence, so it uses the Wilson score interval, which keeps a bound at the edges.
- Rank is kept separate from rate, because appearing twice at rank 1 is a different position from appearing nine times at rank 5.
- Ahead means the intervals do not overlap. A competitor at 6 of 10 against your 4 of 10 is not ahead of you, so no ranking is printed that the sample cannot support.
- Every answer lands in an append-only hash-chained ledger that seals its own length, so a truncated file stops verifying.
one round, 4 August 2026
20 questions written from one customer site, then measured four times each. 11 of them named none of the thirteen rivals that had been declared. The same answers named 339 companies the declared list never carried. The whole round cost $2.46, against a ceiling of $3.50 printed before it started.
what it costs
Nothing. The library is free and MIT licensed. Bring your own key, pay the provider for your own tokens, and the software takes nothing on top. No account, no seat, no invoice.
what it does not do
- It calls two engines, perplexity and anthropic. ChatGPT and Gemini are not wired in.
- There is no hosted anything. It runs on your machine against your key, and what it writes stays on your disk.
stack
Python 3.11 and two dependencies, both of them arithmetic · Next (the reading surface) · 990 Python tests and 56 node tests, all offline


