-
-
Accessible online shopping by voice for blind and low-vision people, paid with PayPal.
-
VoiceOver reads the Pay button as “Pay $34.99 with PayPal to Walmart, button.”
-
One conversation covers the whole purchase: find, ask, pay, track and, if needed, return.
-
SayStreet reads three kettles from two stores, then answers a question from the listing.
-
To pay, say the exact total or press the button that names it. “Yes” never pays.
-
Wrong amount, changed price or over the limit: nothing is paid, and PayPal isn't called.
-
SayStreet's order page lists each PayPal call: order, tracking and refund, with IDs.
-
The same order in the buyer's PayPal: the payment with the kettle's photo, then the refund.
-
You choose who reads the replies, how fast, and how much can be spent.
-
The AI finds products with Channel3; only plain code moves money through PayPal.
SayStreet is an online shopping assistant for the blind and partially sighted. AI-powered agents search, compare and describe products. Users can pay using PayPal by stating the exact amount.
To try it out:
- Go to demo.saystreet.app. No sign-up needed.
- Say or type:
Find a whistling kettle under 40 dollars - Say
Buy option one, then say the amount you’re asked to pay. - Open your order and check the PayPal section to see all the payment requests that were made.
Inspiration
A screen reader will say there is a “button.” on the page, but you wouldn’t know if it was a Pay or Cancel button. On a Checkout page, this would be a concern for your money.
There are approximately 7 million people in the US with vision loss that cannot be corrected with glasses, with over 700,000 being blind (CDC). E-commerce is one of the hardest parts of the web to use for people who cannot see. On average in February 2026, there were 71 accessibility issues found automatically on average per home page for E-commerce sites, this was 26.6% higher than an average website (WebAIM Million). CAPTCHA is ranked as the most problematic part of the web for screen reader users (WebAIM, 2024).
They already use AI to overcome these issues. 91.8% of screen reader users use AI to improve their experience online, while 40.6% use it to assist with tasks online (WebAIM, 2026). E-commerce is becoming agent driven for everyone. It is estimated that AI shopping agents will make up $190-385 Billion of US e-commerce spending by 2030 (Morgan Stanley).
While removing the broken interface, there is a new risk. An AI that can spend your money.
We have developed a shopping agent that completes the entire process, except for the payment. This will search, compare, describe, suggest, track and manage returns. The payment must be done using natural language. The exact amount must be stated either through speech or through a button that states the amount. We believe this is how consent should be obtained for agentic commerce for those who cannot quickly look at a screen to see what the agent is going to do.
What it does
Voice enabled e-commerce. Simplify your shopping by replacing multiple store websites with a single conversation.
User: Find me a whistling kettle under $40.
SayStreet: Provides 3 options with their price and store.
User: Does option 1 work on induction?
SayStreet: Answer based on store information.
User: Purchase option 1
SayStreet: Provides information on total cost, postage and where it will be delivered.
User: Pay $34.99
SayStreet: Pays using PayPal and provides a receipt.
Search & Inquire. Search for over 100 million items in the Channel3 catalogue. Get 3 results. Ask about price, sizing, reviews, delivery information, choose “the blue one” or paste a product link.
Say how much you want to pay. You will never pay if you say yes. You will say the exact amount you want. The button will say the exact amount. Then a single charge will be made to your PayPal wallet. No pop ups. No logins. No captchas.
If misunderstood. SayStreet will tell you what it heard and that no payment was made. If you say cancel or stop, payment will be cancelled.
Track & Refunds. Ask where it is. How much has been spent this week. Return French press. Track & Refunds are done via PayPal.
Accessibility. Works with screen readers such as VoiceOver & NVDA. Can be used with just your keyboard. Or SayStreet will speak the answers.
What makes it different? InnoSearch AI (within Be My Eyes app) provides a single accessible checkout for many retailers for blind & low vision users. (Be My Eyes). Alexa can be used for voice orders using a voice code.
SayStreet provides an AI agent in front of the catalogue and keeps it separate from the money. A voice code confirms who is talking. Saying the exact price confirms you have heard what you are paying.
Demo. The demo uses the PayPal sandbox. All payments, tracking & refunds are real calls within the sandbox. Delivery is fake. No stores will receive any orders.
How we built it
Why PayPal? To speak your payment, you must link your wallet. Using PayPal means that you can link your wallet once and then purchases will never show any pop-ups, logins, or card forms. It will automatically put your PayPal order into the system with tracking number and refund.
| Step | PayPal API |
|---|---|
| Connect the wallet once | Vault v3: setup tokens, payment tokens |
| Pay with no pop-up | Orders v2 with payment_source.paypal.vault_id, then capture |
| Add tracking | Orders v2 tracking |
| Refund a return | Payments v2 refund |
| Settle timed-out payments | Webhooks with verified signatures, PAYMENT.CAPTURE.* |
Every purchase will have its own ID based on the PayPal-Request-Id. This means there won’t be duplicate payments in case of retry. Each Webhook event will have been processed just once. All requests and Webhooks made for an order can be seen on the order page under the PayPal section.
The payment engine is simply TypeScript with no AI model involved. There is no code which moves money except for when:
- The amount spoken matches the total.
- The price at the store has not changed when we request it immediately before payment.
- The purchase doesn’t exceed the limit L (per purchase).
- The total spent this week, including this purchase, doesn’t exceed the limit W (per week).
$$\text{pay} \iff \text{said} = \text{total} \land \text{price}' = \text{price} \land \text{total} \le L \land \text{spent} + \text{total} \le W$$
where price′ is the live price requested immediately before payment, and spent is the amount already spent this week.
These checks are run with a lock on the database for that account so even if they try to pay twice, such as opening two tabs, they will not be able to.
The agent uses gpt-6-luna via the OpenAI Responses API with function calling to search, compare, answer questions based on product info, suggest purchase by option number and manage orders. Voice requests are converted to text using gpt-transcribe. Responses are then read out using the users screen-reader or browsers voice. There is no paid text-to-speech used. Simple code such as payment and repeat do not involve any models.
The catalog is using Channel3. This allows searching, product info, live price before payment, looking up via pasted link and searching stores. “From Target” can be filtered.
The demo is hosted on Render using one Blueprint in render.yaml. Anyone can create their own using the Deploy to Render button on the README. It is built using Hono and Prisma with Postgres. Frontend is using React 19 with Vite. 212 unit tests, Smoke test using real payments/refunds in sandbox and CI.
Challenges we ran into
- The search function returns items not products. For example when searching for “iphone 18” you get seven of the same product from different stores and some replacement buttons. When these are read out in threes it is the same product three times. We then process the list and group into one option per product showing the best deal. Any accessories are moved to the bottom.
- A question can be interpreted as an agreement. If the question mark is not picked up during transcription “Should I pay 39.99?” can be seen as a command. The parsing of the amount is very basic but has strict rules. It has to start with the word pay. Anything that contradicts the statement (pay 39.99, no wait) will never be a payment. All amounts up to $999.99 are run through this test, both written and numeric.
- Timeouts will not fail. If there is no response from PayPal the payment may have still gone through. The status will now be unknown until the webhook from PayPal resolves it. The retry uses the same request ID.
Accomplishments that we're proud of
- Completed the entire purchase flow on PayPal sandbox; including linking wallet, voice payment, adding tracking, returning and refunding.
- Designed for use with screen readers: keyboard focus moves to the heading, nothing interrupts the screen reader, text contrast is a minimum of 7:1, and the payment timer also includes a “more time” option.
What we learned
- Keep the AI close but never give it control over money. Use it to search and explain and keep it simple with clean code and natural language.
- Build an audio friendly interface. Keep it simple with 3 options. Use the same phrasing for any amount.
- Payment failures. The tricky part isn’t when everything goes well but when the payment times out, retries and restarts.
What's next for SayStreet
- Accessibility testing with blind and vision impaired users (JAWS, NVDA, VoiceOver, TalkBack and Braille Devices)
- Actual money from their personal PayPal account - not a sandbox
- Free to use by customers. We will make money through store commission from the Channel3 affiliate programme. Working Age Americans with Disabilities have $675 Billion of disposable income. AIR & Disability:IN 2026
- Multiple Countries and Currencies - Channel3 already works across 20 markets. (“pay thirty-one euros”)
Built With
- astro
- channel3
- hono
- node.js
- openai
- paypal
- postgresql
- prisma
- react
- render
- typescript