Headless Stripe Card Reader Entry at Zippin
getzippin.comFull Stack Software Engineer / Team Lead, Zippin, August 2019
Zippin builds checkout-free store technology. Overhead cameras and shelf sensors track what shoppers pick up, so they can leave without a traditional checkout. Entry still needed a way to identify the shopper and confirm they had a payment method on file.
At the time, the usual way into Zippin stores, and into other checkout-free retailers, was the app. Customers had to download it, create an account, and add a credit card before they could walk in. That is a lot of friction for a quick stop. App entry stayed available after we shipped card entry, but tapping a card was a much easier path and became by far how most people chose to enter.
In August 2019 I shipped card-reader entry for Zippin's San Francisco demo store using a Stripe Terminal Verifone P400 in headless mode. There was no iPad or cashier display. The reader stayed ready for a customer to tap or insert their card, without going through app onboarding.
The constraint
Stripe's Terminal JavaScript SDK was built around a staffed checkout flow, with a browser UI on an iPad or POS display where someone initiates the payment. That does not fit an unattended store entrance that needs to keep requesting a card on its own.
Stripe did not support running the Verifone P400 that way. The bundled front-end code assumed a browser-only environment.

The approach
I worked through Stripe's bundled JavaScript for Terminal and P400 control, and removed browser-only dependencies so the card reader command logic could run without a display UI. That let us run a headless service that kept the reader in a continuous collect-card state for store entry.
When a shopper tapped or inserted a card, we pre-authorized about $50 so we knew they could cover a reasonable amount of product, then opened the doors. Final charges still came from Zippin's normal post-shop reconciliation using the camera and sensor system.
Risk I flagged to management
This depended on Stripe's bundled client code and backend behavior outside their documented, supported product path. I made that clear to management.
- Stripe could update their backend or bundled front-end code and break how we used it.
- I might be able to apply a similar fix to the new code, but only if the surface area still allowed it.
Management accepted that risk so we could ship the feature.
SF first, then Golden 1 Center
I implemented Verifone P400 entry for Zippin's SF store before any other checkout-free company had this kind of card reader entry, including Amazon.
In January 2020 we put a card reader in Zippin's new store at Sacramento's Golden 1 Center, home of the Sacramento Kings, where customers used it in a high-volume environment. Golden 1 Center announced it as the world's first in-arena checkout-free convenience store. Golden 1 Center partners with Zippin.

What I did
- Adapted Stripe Terminal's bundled JavaScript so Verifone P400 control could run headless, without an iPad or cashier UI.
- Added card entry alongside the existing app path. Shoppers could tap or insert a card, get a ~$50 pre-auth, and enter the store. That was a much lower barrier than app onboarding and became by far the preferred way in.
- Shipped the feature for Zippin's San Francisco demo store (August 2019) before competitors, including Amazon.
- Flagged the Stripe upgrade-breakage risk to management before we shipped.
- Deployed the same card-reader entry model to Golden 1 Center in Sacramento (January 2020).
Part of a broader Full Stack Software Engineer / Team Lead role at Zippin (Apr 2019 – Jun 2021), building customer-facing systems, store hardware integrations, and the software that made walk-in, walk-out retail work in production.