Every office kitchen has the same quiet problem: a shared coffee machine, a growing list of who owes what, and a notebook nobody trusts. I decided to turn that everyday friction into a software project and build a complete solution from scratch – a self-service kiosk that lets colleagues log their coffee in two taps and keeps the accounting honest. It became my first end-to-end full-stack application, and along the way it taught me far more than any single tutorial could.

What the application does
The heart of the project is a touch-friendly kiosk that will run on a tablet next to the coffee machine. A colleague taps their name, chooses a coffee – and gets an instant confirmation. That single tap is recorded against the current billing period, and the rest of the system quietly takes care of the bookkeeping.

Behind the simple front screen sits a small prepaid-wallet system. Each person has a balance that can be topped up; every coffee draws it down. At the end of the month an administrator runs a monthly closeout, which settles everyone’s consumption, writes a transaction record, and opens a fresh period – so the history of who paid what is never lost.
The work and the technologies
I built the backend with Django and the Django REST Framework, exposing a clean REST API for consumption records, statistics, billing and the monthly closeout. The trickiest parts were the financial calculations: aggregating consumption per period, computing each person’s balance, and rounding the amount owed up to the nearest five euros – all wrapped in database transactions so a closeout can never leave the books half-updated.
The frontend is a React + Vite single-page app styled with Tailwind CSS, organised as a series of kiosk screens: the employee list, coffee selection, a success confirmation, a statistics dashboard with a top-three leaderboard, and an admin area protected by a PIN. I packaged it as a Progressive Web App so it can be installed full-screen on the tablet and behave like a native kiosk.

What I learned
This project pushed me through the entire software lifecycle – data modelling, API design, a real user interface, and the unglamorous-but-essential logic of money and edge cases. I learned how much care correct billing demands, how valuable atomic transactions are, and how a genuinely simple interface is the hardest thing to design. Most rewarding of all was watching something I built quietly solve a real, daily problem for the people around me.
0 Comments