The wall between the browser and the printer
If you run your shop on a web-based sales system, you have probably hit this wall: everything works beautifully until you try to print a receipt on the little Bluetooth thermal printer on the counter, and nothing happens. It is not your system's fault and it is not the printer's fault. Browsers simply cannot talk to Bluetooth Classic printers.
The printers almost every Kenyan shop uses speak an old, reliable Bluetooth profile called SPP. Browsers have no access to it. The newer Web Bluetooth standard targets a different profile that receipt printers do not use. So the gap is structural - a web page, on its own, can never open a connection to the printer. Bridging that gap is the entire job.
Why the common workarounds disappoint
Faced with this, most people reach for a third-party print app like RawBT. It works, in the sense that paper comes out, but the experience is poor.
- Watermarks: many free print apps stamp the receipt, which looks unprofessional to your customer.
- Extra taps: every print bounces to another app or asks for confirmation, slowing down a busy counter.
- Little layout control: you take whatever formatting the print app gives you.
- Fragile setup: the chain of apps breaks in confusing ways, and staff cannot fix it.
How a connector app bridges the gap cleanly
The clean solution is a small, purpose-built Android app that does two things at once. It hosts your existing web system in a full-screen WebView, so to the cashier it looks and behaves like your normal system. And it holds a direct connection to the Bluetooth printer, ready to print on demand.
When your web page needs to print, it sends the receipt data to the app through a bridge. The app takes that data, formats it as ESC/POS commands - the language thermal printers understand - and prints it on the paired printer. Upeosoft's open-source UpeoRetail Print connector (github.com/Upeosoft-Limited/upeoretail-bluetooth-printer-connector) does exactly this, and because it is open source you can see precisely how it handles the receipt data and the connection.
What a good receipt actually needs
A receipt is small but it carries a lot: it is your brand, your record, and increasingly your compliance document. A capable connector produces a proper layout rather than a raw dump of text.
- A business header with your name and details at the top.
- Clean itemised lines with quantities and prices that line up.
- Totals that stand out clearly.
- An optional QR code - useful for compliance references, payment links or verification.
- A proper paper cut at the end so receipts tear off neatly.
- A choice of 58mm or 80mm width to match your printer.
Local, offline and reliable at the counter
One quiet advantage of this approach is that the printing itself does not depend on the internet. The link between the app and the printer is local Bluetooth. Once the receipt data reaches the app, it prints whether or not your data connection is up.
That matters in a real shop, where the WiFi drops and the mobile data is patchy. A connector that reconnects to the printer before each print job, and works entirely locally for the printing step, means a dropped connection does not leave a customer standing at the counter without a receipt. It is the kind of small reliability detail that decides whether a system survives a busy Saturday.
Getting it working in your shop
The setup is deliberately simple: pair the thermal printer in Android's Bluetooth settings, open the connector app, select the printer, choose your paper width and run a test print. From then on your web-based sales system prints receipts as if the browser could do it itself.
UpeoRetail Print works with any web system, not only ours, so it fits whatever you already run. If you are fighting with receipt printing on a browser-based system, or stuck with a watermarked workaround, talk to us. We can set up the connector, wire your system's print button to it, and get clean, professional receipts coming off your counter printer.
