The board / Gated

Plyco storefront agent

Beta · July 2025 internal Shop assistant for a timber retailer plyco.com.au

Answers the five questions every trade store gets. Hands the sixth to a person.

Rails

  • aloneReadsProducts, orders, stock, prices and delivery estimates, live.
  • aloneWritesBuilds the cart. Raises the ticket.
  • with a personMoneyQuotes freely. Refunds only after a person says so.
  • alonePublicTalks to customers on the storefront.
  • aloneUnattendedOn duty whenever the store is.
  • a person, every timeDecidesHands over when it should, and before any money moves back.

Problem

Support tickets on a trade store are mostly the same five questions, and the sixth needs a human. The agent should answer the five with live data and get out of the way for the sixth.

The risk is not a wrong answer. It is a confident one about money.

System

A customer types or sends a photo on the storefront. The agent loop calls Shopify, CLIP visual search and the cut-to-size platform. By default it answers with live data. A refund or a question it cannot answer goes to staff through HubSpot, who resolve it.

Decisions

  1. Two models by stakes: Claude Haiku 4.5 for chat, Claude Sonnet 4.6 for anything that changes money, such as refund extraction.
  2. Visual search embeds product images with CLIP ViT-L/14 on Replicate into Upstash Vector. A customer photographs a board and gets matches.
  3. Refunds are staff-gated through HubSpot. The agent prepares; a person approves.
  4. Behavioural evals run against live models, so prompt changes are measured rather than hoped.
  5. BotID in front of the endpoint keeps the model bill for humans.

Stack

Next.js, Vercel AI SDK, Claude Haiku 4.5, Claude Sonnet 4.6, CLIP, Upstash Vector, Shopify, HubSpot