Inspiration

ShelfGap started on a family trip in Warsaw and Krakow.

We speak Turkish and English. Polish shops speak neither. We could not read the labels, compare delivery promises, or judge which seller to trust. So we did what everyone does now: we asked ChatGPT. We did not want one more app or one more account just to pick the right offer.

Then we saw the same problem from the other side. We know people who run online stores. They do not write code and they do not want another dashboard. But they all ask the same question: why did the buyer pick my rival? They can already use ChatGPT. So we built the tool there.

  • Buyer: "Which offer fits me?"
  • Merchant: "Why did they choose the other one?"

ShelfGap sits between these two questions.

What it does

ShelfGap is a buyer-choice simulator inside ChatGPT. You describe your offer, your competitors, and a few buyer profiles. It shows who wins each buyer, why you lost the others, and the smallest change worth testing first.

The core idea: the product and the offer are different things. The same blender can win in one store and lose in another, because buyers do not buy products alone. They buy the product plus shipping cost, delivery time, warranty, seller trust, and checkout comfort.

Each buyer profile has hard requirements, a budget, a delivery limit, and its own weights. ShelfGap checks eligibility first, then compares fit, cost, delivery, trust, and convenience. One strict rule: missing evidence stays unknown. If a listing never says "dishwasher-safe", that is not a no. It only means the buyer cannot verify it, and the model says this openly.

The result tells you:

  • which offer each buyer picks and where you rank,
  • the exact gap that cost you the sale,
  • whether the product is still competitive even when your offer is not,
  • the smallest action you control and can test.

You can also simulate small changes: show a verified feature, put the warranty next to the buy button, lower shipping cost.

In our fictional demo, the official merchant starts by winning 1 of 4 buyers. After three recommended actions, it wins 3 of 4. The last buyer still leaves, because one-day delivery and member checkout beat everything we had. We kept that loss on purpose. ShelfGap shows tradeoffs, it does not flatter you.

These are simulated choices only. Not conversion, revenue, or market-share predictions.

How we built it

Two brains, strict roles.

GPT-5.6 is the mouth. It talks to the user, calls ShelfGap's read-only MCP tools, explains the results, and answers in the user's language (English and Turkish). It never calculates anything.

A deterministic TypeScript engine is the referee. All scores, rankings, and what-if simulations happen there. Same input, same output, every time.

Around that: a pnpm monorepo with shared Zod contracts, a Next.js 15 demo site with no account needed, an MCP server on the official SDK, a compact ChatGPT widget, unit and end-to-end tests, and Docker + Caddy + Dokploy behind a public HTTPS endpoint.

Codex did most of the typing. The decisions stayed human: product vs offer, unknown as a real state, deterministic ranking, no fake forecasts, read-only public beta.

Challenges we ran into

AI without invented numbers. Conversation lives in the model, math lives in the engine, and there is a hard wall between them.

Modeling the unknown. Unknown, ineligible, and eligible are three different states. If unknown becomes "false", honest listings lose. If it becomes "true", liars win. Keeping all three separate was our most important design decision.

Product win vs merchant win. A buyer choosing your product through a reseller is a product win and an offer loss at the same time. Keeping this difference made the recommendations much sharper.

Making the widget render. A successful MCP call does not guarantee a working widget. Metadata, CSP rules, language behavior, mobile, cold loads. Every one of them fought back.

Resisting the perfect demo. We could tune the demo until the merchant won all four buyers. We did not. One buyer still says no, and that no is the most honest part of the product.

Accomplishments that we're proud of

  • Judges can test everything with zero setup: no account, no API key, no install.
  • One engine powers both the web demo and the ChatGPT app.
  • Every recommendation is something the merchant can actually change.
  • Unknown evidence stays visible instead of becoming a claim.
  • Read-only service: it crawls nothing and modifies nothing.
  • Merchants who never opened a terminal can use it, because the interface is a conversation.

What we learned

The best first move is rarely "lower the price." Buyers cannot value evidence they cannot see. Showing a verified feature or moving the warranty next to the buy button is often cheaper and safer than a discount.

Unknown is a real state. Pretending otherwise breaks rankings in both directions.

The interface is part of the analysis. A smart model behind a complex dashboard is a smart model nobody uses.

What's next for ShelfGap Buyer Lens

  • Authorized merchant catalog feeds and marketplace exports.
  • Feature schemas per category: food, electronics, apparel, home.
  • Buyer profiles calibrated with real merchant research, scoring still deterministic.
  • Shared workspaces for merchandising teams.
  • Recording experiment outcomes, so recommendations can be tested against reality.

ShelfGap does not predict the future with false precision. It helps a merchant find the smallest decision worth testing next.

Live demo: shelfgap.onurkeskin.com/demo

Build and architecture brief: shelfgap.onurkeskin.com/architecture

Built With

Share this project:

Updates

Submission history