Tendero GitHub

Open source · .NET 11 · Angular 22 · Aspire

The AI‑native shopkeeper.

Tendero is an ecommerce platform for people and AI agents — a real shop with a real checkout, open to agents through WebMCP, MCP and UCP, and built in the open with an AI coding agent, one measured step at a time.

View on GitHub

MIT licensed. Clone it, run one command, and it works — no sign-ups, no API keys, no cost.

The film, live and silent. · read what it says

Run it locally

One command, the whole shop.

Postgres, Elasticsearch, the API, the outbox worker and both Angular apps come up together under Aspire, with its dashboard in front. The AI stack — embeddings, vectors, a reranker — is self-hosted and starts on demand.

# .NET 11 preview SDK, Node 24, Docker
git clone https://github.com/juanluelguerre/tendero.git
cd tendero
(cd frontend && npm ci)
dotnet run --project src/AppHost

Why it exists

A shop, a reference and a public notebook.

Tendero has to be two things at once — a credible commerce platform and an agent-native one — because an agent checkout over a pretend cart demonstrates nothing. Around that core it serves four more purposes.

01

A credible commerce platform

Catalogue with variants and localized attributes, price lists and promotions with combination rules, real-time stock across warehouses, cart, checkout, taxes, shipping, payments, orders with a state machine, returns, accounts and guests, audit.

02

Commerce that agents can use

The same shop, open to AI agents through three surfaces with three trust models — and the aim of being the first open .NET reference implementation of the Universal Commerce Protocol.

03

Production-grade AI in .NET

Hybrid search with regression tests, a self-hosted AI stack that costs nothing to run, and a rule held by tests: every AI feature has a non-AI path, and the degradation is proved.

04

Building with an AI coding agent

How to direct an agent without the project degenerating: a written constitution, architecture rules the agent cannot argue with, and gates that measure instead of trusting a confident answer.

05

Learning in public

The companion code to a blog series. Every article links a tag you can clone to get exactly the tree it describes — and a book on building Tendero is being written from the same notebook.

06

Open, and free to use

MIT licensed, with a hard rule for everything it links: permissive licences only, model weights included, each one checked at the exact version added.

Agent-native

Three doors, three trust models.

They are not alternatives: each answers a different question. And an agent is a principal of its own, never a customer — which is why its actions are always shown in clay.

WebMCP

In the shopper's tab

An agent in the shopper's own browser uses the shop's tools — search, add to cart — and inherits the shopper's session. No second principal, no token. Feature-detected: without it, the shop is unchanged.

Shipped

MCP server

External, read-only

Eight tools for any MCP client, over the same queries the shop itself runs. Anonymous by an explicit decision, and read-only by construction.

Shipped

UCP + AP2

Server to server

A profile at /.well-known/ucp derived from the code, the catalogue over MCP and REST, and validated against the protocol's own schemas. Checkout with signed AP2 mandates comes next.

Catalogue shipped · checkout in phase 11

Architecture

How it fits together.

From outside, one system that people and agents use. Inside, ten containers under .NET Aspire. The drawing is held to the architecture model by a check in CI, so it cannot show a box the code does not run.

  • Agents
  • Always on
  • On demand, or planned

Shopper

Browses, fills a basket, pays

Agent in the tab

WebMCP · the shopper's session

MCP client

Reads the catalogue · anonymous

UCP agent

Own principal, signed mandate · phase 11

Shopkeeper

Reviews, prices, stock, orders

Tendero

One system: a storefront and a backoffice, an API with three agent surfaces, workers, a database and a search index — and an AI layer that starts on demand.

Tendero · .NET 11 and Angular 22 under Aspire

Storefront

Angular 22 · the shop

WebMCP tools

Backoffice

Angular 22 · review, orders, stock

API

.NET 11 · Carter slices over one command and query dispatcher

/api/mcp/.well-known/ucp

CatalogPricingInventoryOrderingAccounts

Workers

Drain the outbox: projections and the order saga

Postgres

Source of truth, outbox, audit

Elasticsearch

Lexical search · the permanent fallback

AI layer · on demand

Qdrant

Product vectors

Embeddings

bge-m3

Reranker

GPU only

Observability

Aspire dashboard always · the Grafana stack behind a switch

Identity provider

OIDC · a development issuer, or Keycloak

Payment provider

Behind a port · a fake adapter today

Drawn from the C4 model in the repository (docs/c4/), whose containers a check holds to the AppHost's resources — and a check holds this drawing to the model.

What's different

Six differentiators, in priority order.

Each one says where it stands today. Nothing here is claimed before it runs.

  1. 1

    Agent-native merchant

    UCP capabilities, an MCP server and a browser agent surface, on the same application layer the shop uses.

    Shipped, checkout next
  2. 2

    Product reasoning layer

    Structured knowledge per product — specs, evidence, comparisons — each claim carrying its source and confidence. The AI proposes, the shopkeeper approves.

    Phase 10
  3. 3

    Know Your Agent

    Identify legitimate agents — signatures, AP2-style mandates — and make anti-fraud rules agent-aware.

    Phase 11
  4. 4

    Backoffice copilot

    Natural language over the shop's own data and traces, proposing approvable commands — never prose, never a write on its own.

    Phase 12
  5. 5

    Explainable recommendations

    Constrained answers such as "a kit for under 100 €", showing their arithmetic.

    Phase 13
  6. 6

    Observability and evaluation as a feature

    A relevance gate on every pull request, one trace from the shopper's click to Elasticsearch, and next: cost per conversation and a trace for every decision.

    Building now

How it is built

Rules the code cannot break.

Architectural completeness is total; data volume is laboratory scale. And every rule below is held by a test, not by a comment.

AI proposes, people approve, the system applies

A model never writes to the shop. It writes a proposal with its source and confidence; approval is a domain operation with an audit row.

Every AI feature has a non-AI path

Lexical search is the permanent fallback. When the vector layer is down, a search degrades byte for byte — and a test proves it.

Bounded contexts share no entities

Catalogue, Pricing, Inventory, Ordering and Accounts cross only with values and events. An order snapshots what it bought.

Ports and adapters, with contract suites

Catalogue sources, payments, identity, search, telemetry: a new connector is a class and a registration, and it passes the same suite as the others.

State machines are tables

An order's ten transitions are declared in one table beside the aggregate, and nothing changes a status any other way.

One source for the API's shape

The OpenAPI document is generated from the running API, held to it by a test, and generates the frontends' types.

Measured, not promised

Numbers you can reproduce.

An agent always sounds certain, so Tendero measures. These come from the repository's own gates.

NDCG@10, hybrid search
0.843 en0.831 es
NDCG@10, lexical fallback
0.748 en0.692 es
Backend tests, architecture rules included
1,000+
Products, in two languages
100

Relevance is scored on golden sets of 52 queries per language across eight query types, and CI fails a pull request that regresses it. Mutation testing checks that the tests would notice.

Roadmap

Built in order of what it evidences.

Phases 0 to 9 are in. The code reaches the public repository with the article that explains it, so it is never ahead of its explanation.

  1. 0Gates: CI, OpenAPI contract, migrations, the identity port
  2. 1Variants
  3. 2Localized attributes and taxonomy
  4. 3Price lists, promotions, tax
  5. 4Inventory and the stock saga
  6. 5Cart, checkout, payments, returns
  7. 6WebMCP in the storefront
  8. 7Accounts, audit, Keycloak
  9. 8Embeddings, hybrid search, evals
  10. 9MCP server and the UCP profile
  11. 9bSeeing it run: observability, simulated traffic
  12. 10Knowledge: claims with provenance
  13. 11UCP checkout, AP2, Know Your Agent
  14. 12Copilot and AI observability
  15. 13Multimodal search and the kit solver

commerce for humans and agents

Read how it is built, one article at a time, and clone the exact code each one describes.

What the film says

  1. Tendero — commerce for humans and agents. Open source, .NET 11, Angular 22, Aspire.
  2. A real shop, not a demo cart. Variants and localized attributes, price lists and promotions, stock in two warehouses, taxes, payments, orders and returns. An order moves from Pending to Payment authorised, Confirmed, Shipped and Delivered.
  3. Open to AI agents. Three doors, three trust models: WebMCP in the shopper's tab, an external read-only MCP server, and UCP with AP2 server to server — the catalogue served today, checkout in phase 11.
  4. AI proposes. People approve. An import lands as a draft and only a person publishes it, with an audit row — the path the AI's product claims will take.
  5. Measured, not promised. NDCG@10 of 0.843 for hybrid search against 0.748 lexical, a relevance gate in CI, over a thousand backend tests, and one trace from the click to Elasticsearch.
  6. Tendero — commerce for humans and agents. The AI-native shopkeeper, open source, built in the open with an AI coding agent.

The music is Tendero's own, composed for the film: warm while the shop has only people in it, gaining an electronic pulse when the agents walk in, and closing on its three-note identity. Hear the identity on its own · Download the film

Tendero in 41 seconds