Open Kiosk

Black wall-mounted kiosk with a portrait touchscreen listing grocery items, a receipt coming out of the printer built in below the screen.

Wall-mounted till on a LattePanda MU and an ESP32

Open Kiosk is a cash register for small shops that you build yourself. A LattePanda MU (an x86 board) runs the point-of-sale app on a 7 to 15 inch touchscreen, a Seeed Xiao ESP32 S3 drives a 58 or 80 mm thermal printer, and a 3D-printed enclosure holds everything. The project is aimed at shopkeepers who want a checkout that prints receipts without paying a monthly fee to a POS vendor. The Open-Kiosk repository has the enclosure and the firmware; the React front end lives in Open-Kiosk-App.

Seven printable STL parts and a stock-aware checkout app

  • The enclosure comes as seven STL files: housing, covers, printer cover, side vent, button clip and DC holder.
  • The app handles the product catalog and its stock levels, the cart, order history with receipt reprints, and sales reports that export to CSV.
  • Tax rate, tax ID and currency are set on first run.
  • Product search takes voice input through the browser's speech recognition API, and products can carry tags spelled the way their names sound locally.
  • The hardware is optional. Without the ESP32, the app runs on an ordinary PC and prints through the system printer.
  • OSHWA certified the project on 3 July 2025 under ID IN000074.

Unlocked admin screen and receipts printed in rupees

The project promises a $250 till with no maintenance contract. Its OSHWA entry says "no software cost, no AMC" (annual maintenance contract) and that it "can be built for just $250 or run on the PC". The hardware README asks for basic electronics knowledge and access to a 3D printer or a printing service.

Store data lives in Google Firebase. Setup asks for the keys of a Firebase project, and products and orders are written to Firestore (src/services/firebase.ts). The app README says it "runs locally - no hosting required", which holds for the interface and not for the database.

Nothing locks the admin panel. The app opens on two cards, "Admin Panel" and "Customer Shop". The first leads straight to product, price and report management without asking for anything (src/pages/Index.tsx), and the published build has the same screen. A password dialog exists in the source, but no screen renders it.

Thermal receipts are set up for India. The ESP32 firmware (ThermalPrinter.ino) prints a hard-coded "INR" after the total and reads amounts as integers. The fallback receipt printed from the browser does show the chosen currency with two decimals. Voice search is fixed to US English (en-US).

The release archive expects Windows, Python and Chrome. Its launch-kiosk.bat runs python -m http.server 8080 and then starts Chrome in kiosk mode; the folder path in the script is hard-coded and has to be edited by hand. Receipts then go from the browser to the ESP32 over the Web Serial API at 9600 baud. The hardware README credits that link to Python and PySerial instead, and mentions Jest tests that are nowhere in package.json.

Neither repository has a license file. The READMEs state CC BY-SA with no version for the hardware and MIT for the app. The OSHWA entry lists hardware "Other", software MIT, documentation CC BY-SA.

There is one release, v1.0.0 from 23 June 2025. The attached archive is dated 10 July 2025, the day of the app's last code commit. Since then the hardware repository has received two images and a few README edits, the latest on 26 March 2026. package.json still carries the starter template's name and version (vite_react_shadcn_ts, 0.0.0). The cash drawer, customer display and NFC reader listed as optional parts have no code in either repository.