Case study · Venues and hospitality · Point of sale
Karaoke Battle App: a karaoke venue in Cambodia, run on four apps we built
We built the software that runs a karaoke venue: a kiosk app in every room, a till for the staff, a web back office for the owner and the backend that connects them. Guests pick songs, order drinks, sing and challenge other rooms, and the room PC scores every note. It has been live since 2 October 2026.
- Product
- Karaoke Battle App
- Client
- A karaoke venue operator
- Market
- Cambodia, launched October 2026
- What we built
- Room kiosk, staff point of sale, back office and backend
- Our role
- Engineering, infrastructure, launch and support
- Runs on
- Windows PCs, the web and one Linux server
- Status
- Live in production since 2 October 2026
- 4apps that work as one system
- 3,000+commits since April 2025
- 280+API routes, plus live events between rooms and the till
- About 60frames a second for the live singing score
The problem
A karaoke night involves a lot of people at once. Guests in a room want to find a song fast, order food without calling anyone, add time and compete. Staff at the counter need to see every room: who is in it, how long they have left, what they ordered and what they owe. Owners need prices, menus, staff roles and sales reports for each store.
An earlier version controlled a hardware karaoke machine in each room. For the launch in Cambodia, the software had to do the karaoke itself.
What we built
The kiosk in every room.
A full-screen app on the room PC. Guests find a song, sing alone or start a battle, order food, drinks and extra time, call staff, chat with other rooms and view the bill.
The till at the counter.
A room map shows each room's time left, orders and amount due. Staff open and close the business day, start a room at a chosen rate, add orders and discounts, take full, partial and split payments, and print receipts.
The owner's back office.
A web app for stores, tills, rooms, products, prices and banners, with roles that decide what each staff member can see and change. Sales reports run by store, product, category, employee, payment method and date.
The backend.
The only part that touches the database. It keeps every room session, order and payment, and pushes live events to rooms and tills, so an order placed in a room shows on the till and on the bill straight away.
The parts guests notice
- Live scoring. The room PC listens to the singer and draws a score ribbon at about 60 frames a second. It stays smooth while a video call runs beside it.
- Room against room. In a one-against-one battle, both rooms sing the same song with live video between them. The losing room pays for the prize, and it lands on that room's bill.
- Built for Khmer. Song titles, search and lyrics are in Khmer, with an on-screen Khmer keyboard. Search treats two look-alike letters as the same, so a song is found however it was typed.
- Songs start at once. Each room PC keeps its own copy of every ready song, so a song plays through a weak internet connection.
Running it
- Deploys check themselves. A push builds the system, deploys it, waits for a health check and rolls back if the check fails. The database is backed up daily.
- Apps update themselves. Each room and till app checks for a new version every two minutes and installs it on the next restart.
- Three problems fixed in the first two weeks. New versions were not reaching the rooms, songs took too long to arrive, and the score showed bars where nobody was singing. Each fix shipped as a new app version and was checked on the live system.
Results
| Before | Now |
|---|---|
| A hardware karaoke machine in every room | Scoring, lyrics and battles run by software on the room PC |
| Staff walking to rooms to take orders | Orders placed in the room, shown on the till and the bill at once |
| A technician needed to change anything | The venue changes menus, prices and prizes from the back office |
| Apps installed by hand on each PC | Apps that update themselves in every room |
Under the hood: stack
Room app and till: Electron and React, with receipt printing.
Back office: Next.js.
Backend: NestJS, MongoDB and Redis, with live events over sockets and timers for battle starts and session expiry.
Operations: Docker, automatic HTTPS and automated deploys.
Running a venue on a till, a notebook and a walkie-talkie?
Tell us how a night runs today on a 30-minute call. You leave with a plan and a cost, in writing.
Book a discovery call