
Developer Dive: Card Readers for Scale and Stability
The Dripos team has been continuously refining its latest Card Reader technology — an ongoing effort driven by a commitment to perfection and delivering the most reliable experience for our customers. Since it’s a product every shop owner needs to run their shop, I thought it would be good to dive into what makes this version of the reader worth the investment. I walk through the process it took to get here and the technology.
Why we started from scratch
The new card reader was a ground-up rewrite of the existing application, built using the latest libraries and technologies at our disposal. This meant a new version of Android, React Native, Socket.io, Stripe, and a suite of custom written components (think buttons, alerts, modals, etc…) that can be reusable for future products such as our efforts towards improving Dripos Go.
The decision to do a full rewrite came down to two things: first, it lets the Dripos product team use a newer and more powerful programming language called TypeScript. Second, it lets us learn from the previous 4 years of development from the first version of the product. Getting to use the most up-to-date libraries — the pieces of code we build our product on top of — is awesome, but those two factors were the driving force behind this decision.
The case for TypeScript
So what’s good about TypeScript? Lovingly called TS in the community, it provides a layer on top of the much more widely used language called JavaScript. This layer is called Types, and is an important tool in a programmers toolbelt. I could go on for hours, days even, about what I love about TS and Types in general… but for now I can quickly describe types and hopefully provide a good metaphor as to why they’re important. Types are a way to force the structure of data. A type would say "Receipt Line Items can only have the name of the product, the price the customer paid for it, and the modifiers used on it”. Those modifiers are in turn a type too. This structure acts as living documentation for engineers and forces you to think from your customer's perspective, defining what data can exist and where it can go, making code easier to write, easier to read, and far less prone to mistakes.
The closest analogy I could think of is the production chains for coffee. You get green coffee, and the main place it goes is into the roasting machine. You’d say that green coffee is a type, and that type defines the input for the roasting machine. Depending on which roasting profile you choose, you get one of three types: light, medium, and dark roast. The contents of these “types” is the coffee that comes from it — a breakfast blend, or a light roast single origin from Honduras. I’m sure our roastery customers are rolling their eyes at my reduction of this process, but I think it’s an effective metaphor.

So what about all these learnings? The most important thing we learned was how much variety in internet setups are out there and how we need to account for them: simple routers provided by your ISP, a hotspot running in a truck, multiple phones used as different hotspots, enterprise wifi where you need to login like an airport or hospital coffee shop. On top of this, we have many customers in areas with poor internet connectivity. We needed to account for two important factors: the variety of setup, and the potential loss of internet at any given time.
Reader and POS, talking directly
The latter of that design is easier to reckon with, we’ll just make the Reader and POS talk directly to each other instead of through the server. Easy to explain, easy to understand, very challenging to implement correctly.
The former is what we’re finalizing this week and releasing soon. This “talk directly to each other" style of communication is functioning well. Thanks to types, it’s much less challenging to add different types of communication strategies to account for different network setups.
We’re proud of the meaningful stability we can bring to our customers thanks to this effort. Releasing this version of reader is a momentum booster for both the team and our partners, keeping us excited giving this dedicated treatment to whatever product offering comes next.



