All documents

What it does, what holds it back, and where it can go

Payment, off-catalog sourcing and the speed work are now built and running on the development server. This is what changed, what it measures at, and what is still open.

Abad Naseer  ·  updated 8 August 2026  ·  measured on the development server, 25,631 products

Detailed walkthrough with screenshots and test results: the three phases in full

What shipped

Three things that were designs are now running

Chat answers in under a fifth of a second. Money can be taken. Products we do not stock can be ordered.

SEARCH REPLY, SAME QUERIES, SAME SERVER Before 4.2 s Now 0.1 s the model no longer rewords a list the code already wrote Payment Stripe and PayPal. Cards, Apple Pay, Google Pay, Venmo. Sourcing Products we do not stock can be found, ordered and tracked. Staff view Orders, payments and takings, at /admin. MONEY BUGS FOUND AND FIXED ON THE WAY, EACH PROVEN ON THE SERVER The same unit could be sold twice. A double click placed two orders. One shopper already had two customer records. A dead mail server hung checkout.
Voice is now about 4 s once the shopper stops speaking. An earlier version of this page said 3.2 s, which came from a three word test clip; watching real use showed recordings were running to a 15 s limit before anything was even sent. That is fixed, and not yet confirmed on a handset.

One

What it does today

Good in the middle, and no longer absent at the end. Still no sign in, so a returning shopper is a stranger.

Land no account Ask or speak 25,631 products Cart on the server Check out name, email, slot Two emails shop, shopper WHAT HAPPENS AFTER THE EMAIL Payment now taken Order status moves when paid Still no memory a returning shopper is new
Two of the three gaps are closed. An order is now created unpaid, and only a verified message from the payment provider confirms it and reserves the stock. The footer still advertises "Order Tracking" as a link that goes nowhere.

Two

Speed Done

A search reply is now 0.07 to 0.17 s, measured over three passes. What is left in voice is the time to hear the shopper.

A VOICE TURN, MEASURED FROM WHEN THE RECORDING ARRIVES Before 6.9 s 4.1 s rewording a list the code already built, now removed Now about 4 s nearly all of it hearing the shopper FOUR LEVERS, THREE PULLED 4.1 s done: no model call to reword a list 2.5× done: lighter model for small talk only 3.2 s done: stock phrases spoken once, reused ~4 s left: hearing them. Needs live audio.
A faster model was tried for hearing the shopper too, and rejected: it saves 440 ms and mishears more often, which is a bad trade when it decides what goes in the basket.

Three

Teaching it to sound excited

Writing beats training. And we cannot train yet even if we wanted to.

Rewrite the brief tone, energy, what never to say hours, reversible Show examples six to ten replies written by you a day, reversible Score it same 30 questions, rate the answers usually skipped Train a model 100 or more graded conversations weeks, and repeats Blocked before it starts We keep no conversations at all, so there are no examples to train on. The whole personality today Three lines saying "warm, concise". Nothing about energy, or reacting to a good deal.
Rewriting those three lines is the cheapest and largest improvement in this document. Start keeping conversations now: it costs almost nothing and is the raw material for scoring, for training, and for section 5.

Four

Google integration

Three separate integrations. Sourcing is built. Being found on Google is still blocked by a missing page. The third nobody has mentioned.

A. Selling what we do not stock Built

Not in our catalog shopper asks for saffron Buy it from Google? no search API exists, and the stock is not ours Capture the request a person confirms it, then we charge THREE WAYS TO FULFIL IT Request to source built and running Supplier feed needs a wholesaler deal Send them away a link to another shop Who holds the stock We buy it in A real wholesaler Someone else Can we take payment Yes, after approval Yes No, we lose the sale
A requested product becomes a real catalog item: it is priced, searchable, orderable and recorded with where it came from, so the list of what shoppers wanted and we did not carry builds itself. Running on sample data by default so no search quota is spent; one setting switches it to live Google results.

B. Being found on Google Still blocked

Our catalog 25,631 products Daily feed needs identifiers Free listing no ads budget Product page we have none WHAT THE FEED NEEDS FROM EACH PRODUCT Name, price, image, stock already in the catalog Barcode, brand, part number stored nowhere, 6 of 6 fields missing 18 Aug 2026 The old upload API closes. A feed must target the new one. No ads budget Free listings are exactly what we want, and cost nothing. No partner needed A comparison shopping partner is a UK and Europe rule, not US.
Google requires the product details to sit in the page the server sends, not added afterwards by JavaScript. The site is a static export, so generating a page per product at build time satisfies both needs at once.

C. The integration nobody has mentioned Open

Already collected every shopper's location Never read back stored, then ignored Four things it unlocks with an address API TODAY WITH AN ADDRESS API A free text address box Validated, with the exact delivery point An order 200 miles away is accepted Checked before checkout Every order emails one inbox Routed to the nearest store with stock
The location is used for exactly one thing today: pasting raw coordinates into the shop's email when the shopper did not type an address.

Five

Our own model, or API keys

We already run our own model for the part that matters most, and the part we were buying has just been deleted.

Understanding what they want Search runs on our own server. 25,631 products, 25 ms, no API call. already ours, free per query Wording the reply, and speech Sent to Google. This is the part that costs money and adds seconds. the only paid dependency The wording call is now gone. The only thing left that we buy is speech. BUY THE API RUN OUR OWN Cost at our volume Pennies today A GPU costs more per month Quality Improves on its own Frozen the day we train it Training data Not needed We have none at all Privacy Text and audio leave us Nothing leaves us
Not yet, and possibly never for wording. We are one change away from not needing a language model to word replies at all, so training one to do that job better would solve a problem we are about to delete. Revisit if speech volume grows, if a customer objects to audio leaving our servers, or if tone genuinely cannot be reached by instruction. Keep the option open by logging conversations now.

Six

Capability we already paid for

No new services, no new vendors, no new budget. It is all already in the database.

STORED IN THE DATABASE, NEVER READ BY THE PRODUCT "2 unit" Real units exist. The code hardcodes the word "unit" everywhere. On every receipt, instead of "2 kg" or "2 dozen". 0 discounts Each product carries a discount and a discount type. Nothing reads them. "What is on offer" is answered by price order. 4 signals Rating, rating count, order count and a recommended flag, all ignored. A product nobody bought outranks a best seller. 100% Every shopper's location is captured, stored, and never read. See section 4C. 1 inbox Products belong to different stores. Each store's email is looked up, then dropped. Every order goes to one address. 5 states, 1 used Pending, confirmed, dispatched, delivered, cancelled. Every order is written confirmed and never moves. Correction: reordering is not free. Past orders are stored, but a returning shopper is never recognised, so that link comes first. Still true.
All six are still open. Building on top of this table turned up two more: product ids are not generated by the database at all, and the image column holds thirty characters, which is a filename and not a web address. Both were worked around rather than left to fail quietly.

Seven

Functional and non functional

What it does, and how well it does it. Green is done since this was written.

FUNCTIONAL, WHAT IT DOES Show real units "2 kg", not "2 unit" Honour real discounts answer offers from the data Rank with popularity best sellers first Suggest a substitute search already knows the nearest Order status and tracking part done: paid orders now move Recognise a returning shopper a magic link by email is enough Capture what we do not stock done: a weak search offers to source Validated address and radius section 4C Take payment done: Stripe and PayPal NON FUNCTIONAL, HOW WELL Send email outside the request done: and it can no longer hang Keep conversations needed for scoring and any training Cap what goes to the browser one search can return thousands Stream the reply halves the felt wait Fix the data at the source 2,292 names carry a stray question mark Alerting nobody is told when speech or email fails Alerting on failures logs were being discarded entirely, now fixed Make status flow both ways status set in their system never reaches us Per item tax each product has a rate, one is applied

Eight

How the experience improves

The same shopper, at four points in time. The first has landed.

Now done Answers in under a fifth of a second, and can be paid for. Still to do here: repair 2,292 product names, show real units, honour real offers. Next weeks It sounds like your shop, not like a generic assistant. It knows them by email, and can reorder last week's basket in one sentence. Then a quarter They can follow the order, not just pay for it. Told honestly, before checkout, if they are outside the delivery area. Later beyond Products appear in Google results, so new shoppers arrive. Voice becomes a real conversation they can interrupt. Before this work: about seven seconds to answer, nothing could be charged, and a product we did not stock was a dead end.

Nine

Decisions we need

  1. Do barcodes exist anywhere in the source system?Without them a Google feed needs a brand and part number per product.
  2. Which country is the business registered in, and when do we swap the test keys for live ones?Stripe and PayPal are both wired up and working on test credentials.
  3. Who confirms a sourced item, and how do they tell the shopper?The request is captured and the product is in the catalog. The step after that is a person, and we have not defined who.
  4. Write six to ten replies in the voice you want.Worth more than any model training, and only you can do it.
  5. May we start keeping conversations?Nothing in section 3 or 5 is possible without them.