And that's exactly why it's awesome: a real blockchain stack, playing dress-up as a coffee shop.
AlejoReyna/ArtisanalBrewNine live resources
Built in Azure.
Compute, data, messaging, storage, secrets, and delivery — moving as one estate.
Nine on-chain building blocks
Written on-chain.
Staking, rewards, smart accounts, intents, and agentic settlement across public test networks.
prod-web
Blazor · scale 1–2
prod-worker
Queue consumer · scale 1
prod-pg
PostgreSQL 16
prod-sb
Two Service Bus queues
tcst…mubaa
Blob · Standard LRS
tc-kv…mubaa
Key Vault · Standard
prod-acr
Container Registry
prod-acs
Managed email relay
sepolia-aa
ERC-4337 bundler VM
CafeLiquidStakingVault
Liquid staking + COFFEE rewards
CafeFaucet
Rate-limited test-token claims
CAFE + COFFEE
Capped stake and reward tokens
Smart account stack
Factory, EntryPoint, paymaster
AgenticCommerceEscrow
Fund, submit, evaluate, settle
ERC8004RegistryFixture
Agent identity and reputation
ERC7683ResolverFixture
Cross-chain intent lifecycle
cafe-liquid-staking
Stake, mint stCAFE, claim rewards
BSC mirror
Multichain parity deployment
The Path
One order, all the way down.
The estate above is the map. This is the route one checkout actually takes through it — traced from the source, not from the architecture diagram.
-
01
POST /checkout
Blazor Server circuit · Checkout.razor
The wallet pays first. The ETH transfer is polled until Sepolia confirms it — no row is written against an unconfirmed payment.
-
02
OrderPricingService.Calculate()
Application layer · FluentValidation
The request is validated, the coupon re-quoted server-side, and subtotal, shipping, tax and discount recomputed from scratch. Whatever the browser claimed the total was is discarded.
-
03
orderRepository.AddAsync()
EF Core · Postgres Flexible Server
The order, its line items, and any coupon redemption are written together — one SaveChanges, one transaction, all of it or none of it.
writesOrders · OrderItems · CouponRedemptions
-
04
TransparencyService.CreatePendingRecordsForOrderAsync()
Application layer · SHA-256
Line items are sorted, joined, and hashed into a single order hash. Each item gets a record stamped with the chain id and network, status Pending, waiting to be anchored.
writesTransparencyRecords
-
05
ReceiptService.SendReceiptAsync()
QuestPDF · Blob Storage · Communication Services
A PDF is rendered in-process, uploaded to Blob Storage, and emailed through Azure's managed relay.
writesReceipts
-
06
order-processing
Service Bus · OrderProcessingWorker
The queue is provisioned and the worker holds an open receiver on it. Nothing publishes to it yet — it is the seam where the synchronous path above gets to become asynchronous.
Stops 01–05 all run inside the request. Stop 06 is provisioned and listening but nothing publishes to it yet — checkout still writes synchronously, and the queue is the seam for the day it shouldn't.
The Schema
Every table, on the record.
Not a diagram someone drew once and forgot. Everything below is read out of the live EF Core model at request time — if a migration changes the database, this section changes with it, whether or not anyone remembers to update the copy.
31
Tables
329
Columns
13
Foreign keys
17
Rows, right now
Check it yourself
Everything on this page comes from one public, unauthenticated endpoint. No key, no account — the same JSON that renders the diagram is yours to pull.
curl https://cafe.alexisrs.dev/api/transparency/schema
- Structure and row counts only — no row contents are exposed through this endpoint.
- ASP.NET Identity tables (AspNetUsers, AspNetRoles, and friends) are withheld.
- Row counts are read live from the running database and cached for 60 seconds.
The Recipe
How it's built.
-
01 · DOMAIN
Entities and enums — the vocabulary of the café.
-
02 · APPLICATION
Services, DTOs, validation — the recipes.
-
03 · INFRASTRUCTURE
EF Core on PostgreSQL, plus Azure storage, messaging, and email.
-
04 · WEB
Blazor Web App on .NET 10, rendered interactively — the counter.
-
05 · WORKER
A background service consuming order-processing messages — the back room.
dotnet 10 · blazor server · clean architecture · xunit + testcontainers
The Pour
Served from the cloud.
$ git push origin main
→ github actions · docker build
→ push · azure container registry
→ deploy · azure container apps
✓ live at cafe.alexisreyna.dev
Container Apps
Consumption plan, running the Blazor app and the worker.
Postgres Flexible Server
The system of record, via EF Core.
Service Bus
Order-processing queue, consumed by the Worker.
Key Vault
Secrets and connection strings, never in source.
Blob Storage
Product imagery and static assets.
Communication Email
Order confirmations and account emails.
0 Bicep modules provisioning the estate