Checkout
Your basket
The same basket you filled on the shelf — it carried over on its own. Review it, then place a test order through a live server round-trip.
0 items
Items
Order summary
Subtotal (0 items)
$0.00
Tax (8%)
$0.00
Total
$0.00
Place your order
This is a real form. With the runtime it posts over fetch and shows the reply inline; with JavaScript off, the identical markup degrades to a native POST. The demo endpoint simply echoes your order back.
Order received ✓
Thank you, — a confirmation is on its way to . Shipping: .
Logged by the server at
Fill in your details and place the order to see the server's reply appear right here.
Fill in your details and place the order to see the server's reply appear right here.
Something went wrong:
✷
This basket is the same :store declared on the catalog — one name, one shared storage. Remove a line here and it's gone on the shelf too, in every open tab, even after a reload.
View source — it's Markdown
:store cart = []
:computed count = cart.length
:computed subtotal = sum(cart, price)
:computed total = subtotal * 1.08
@loop cart into item
::: card .line
{ item.emoji } **{ item.name }** — { item.price | money }
:button "Remove" -> cart remove item
:::
@empty
Your basket is empty.
@endloop
Subtotal ({ count | pluralize:"item" }) — **{ subtotal | money }**
Total with tax — **{ total | money }**
:button "Clear basket" -> cart clear
:form action="/api/echo" into receipt
:input name placeholder="Full name" required
:input email type=email placeholder="you@studio.com" required
:select shipping
- Standard — 3-5 days
- Express — overnight
- Local pickup
:submit "Place order"
:endform
:if receipt
Thank you, { receipt.received.name }!
:endif
Keep browsing — ← Back to the shop