Building restaurant software at Bitsoft

Software developer · architecture, debugging, coordination · Bucharest

Understand the problem first. Then write the simplest code that holds.

Seventeen years of shipping for the web, the last seven on point-of-sale: a self-ordering kiosk that runs in four countries, the kitchen display, a delivery dispatch app and a new front end for the back office. I stay close to the decisions, from the architecture down to the last log line.

17yrs
shipping production code, since 2009
30+brands
run their kiosks on one codebase I work on
4countries
Hungary, France, Poland and Romania
25+sites
hotel and restaurant websites and booking engines delivered

01About

Full stack, from the restaurant floor to the server.

I started writing websites in 2009 and moved through booking engines, custom CMS platforms and hotel portals. One of those projects won Best Hotel Website at the 2018 eTravel Awards. Since 2019 I have been at Bitsoft, building software for quick-service restaurants.

I’m pragmatic, analytical and focused on results. I care about the quality and performance of what I build, and just as much about what it changes for users, clients and the people who run it every day. I stay directly involved in technical and implementation decisions: I’d rather understand the mechanism than just hand the work off.

Most of my time goes into the self-ordering kiosk, with the kitchen display, the delivery dispatch app and the back-office front end around it. I like the parts nobody sees: one codebase configured per client instead of forked, tests that walk the whole order on every brand variant, and releases boring enough to ship on a Friday.

02What I do

Software, debugging and the decisions around them.

Software development and architecture

Web applications, back ends, integrations and APIs, mostly in PHP and JavaScript, with the databases behind them. I design for the long run and treat performance as something to measure, not guess.

For example

  • A self-ordering kiosk that runs for 30+ brands from one codebase, configured per client
  • Integrations with POS systems, bank terminals and fiscal printers
  • A rules engine that moved 117 home automations into tested code

Analysis and debugging

Finding the cause of problems that cross several systems: reading logs, forming hypotheses and testing them, and weighing the impact of a change before it ships. The fix has to hold, not hide the symptom.

For example

  • Production support, from the first investigation to the release
  • Payment and fiscal changes checked against every client’s setup before they ship
  • A differential bench that replayed about 12,400 events to prove a migration changed nothing it shouldn’t

Technical and operational coordination

Prioritising development, estimating effort and working with technical teams, and making the trade-off between time, complexity and commercial benefit explicit.

For example

  • Every support ticket tracked from the report to the release
  • Changes planned per client and per country, so a fix for one doesn’t break another

03Selected work

Things I’m building now

At Bitsoft

Bitsoft · 2019 – now

Self-ordering kiosk

A multi-tenant kiosk app for quick-service restaurants. Customers browse the menu, customise products, pay by card and get a fiscal receipt, while the order goes straight to the POS and the kitchen.

  • One codebase, configured per client, running for 30+ brands, among them Burger King, Popeyes, Subway, Bellozzo and Pep&Pepper
  • Integrations with POS systems, bank terminals and fiscal printers, including French NF525 rules
  • Electron builds for Windows and Linux with remote updates
  • A flow-test harness that runs the full order on every brand variant (Jest, Playwright)
  • Vue
  • Quasar
  • Electron
  • Node.js
  • Jest
  • Playwright
  • Docker

Bitsoft · restaurant platform

Around the kiosk

The kiosk is one stop on an order’s way through the restaurant. I work on the other apps it passes through, too.

Bitsoft · AI tooling

MCP tools for support

MCP servers that give coding agents read access to the POS database, so support tickets can be investigated with real data.

  • MCP
  • MySQL

Personal project

Personal · Home Assistant · ongoing

A house that runs itself

My house makes its own decisions. It heats room by room, runs the air conditioning on solar surplus, waters the garden unless rain is coming, closes each shutter when the sun hits that window and keeps going on battery when the power drops. Behind it are 190 devices, more than 3,000 entities and six integrations I wrote in Python.

190
devices
3,066
entities
6
own integrations
117
automations moved into code

A typical day (illustrative)

  1. Bedroom preheats to the comfort preset
  2. Solar surplus: the living room AC starts heating
  3. Sun on the south windows, hot day: 3 shutters close
  4. Sun is fading: ACs stop one at a time
  5. Rain in the forecast: evening irrigation skipped
  6. Office window open: the zone drops to eco
  7. Frost below the threshold: open shutters close

How it decides

  • Heating

    Each zone has a role: comfort, sleep and eco presets, eco while a window is open or nobody is in the room, scheduled preheat, an away mode and anti-freeze protection.

  • Solar and AC

    The inverter’s surplus decides which AC may heat or cool. When the sun fades the units stop one at a time, and a missing inverter reading counts as no sun.

  • Irrigation

    Programs per zone, with pump and valve control. A run is skipped when rain is forecast or already falling, and after a restart every valve is closed first.

  • Shutters

    Each shutter knows where the sun is against its own window: azimuth, elevation, a monthly correction and the day’s forecast high. Frost nights close them; a move by hand pauses the rules until evening.

  • Weather

    A weather-station integration (Wunderground or Tempest, read through a small PHP server) supplies the rain forecast that irrigation and the other rules use.

  • Power and presence

    UPS and grid-voltage alerts, recovery after a power cut, arrive and leave routines, NFC tags, camera person detection and four wall panels with summer and winter layouts.

How it’s built

  • Six custom integrations: about 9,000 lines of code and four custom dashboard cards, configured from the UI, in English and Romanian
  • 117 YAML automations, 48 scripts and 146 helpers moved into code, through a rules engine that runs each rule on Home Assistant’s own automation machinery so behaviour stays identical
  • Every migration came with a backup and a one-command restore. Climate was checked 1:1 on a differential bench (46 scenarios, about 12,400 events); any intended behaviour change went in as a numbered fix that I approved
  • A test mode that runs on a copy of the settings, so I can test without touching the live house

Also: lights that take their colours from the album cover that’s playing, an IR-controlled LED strip that works as a real light, and automation for the Denon AV receiver.

  • Python
  • asyncio
  • Home Assistant
  • JavaScript
  • Shelly
  • MQTT
  • Solar inverter
  • NSPanel

04How I decide

Evidence before opinions, small steps before big ones.

In complex situations I look for the real cause first, then for the simplest solution that solves it reliably. Complexity isn’t an advantage in itself, and I don’t add mechanisms whose benefit is small.

  1. 01

    Pragmatic

    A stable, fast-enough solution usually beats a perfect one that costs twice as much. Complexity has to earn its place.

  2. 02

    Evidence first

    Logs, measurements and tests before opinions. When two options look equal on paper, I measure them.

  3. 03

    Root cause, then the simplest fix

    Find what is really broken, then make the smallest change that fixes it reliably. Hiding the symptom doesn’t count.

  4. 04

    Small, reversible changes

    Incremental steps, validated before production, each with a way back. Every migration in my house came with a one-command restore.

  5. 05

    Balanced optimisation

    Performance matters, weighed against build cost, maintenance and what the business needs right now.

  6. 06

    Plain language

    Clear explanations without corporate filler, so the people who own a system understand it and can decide for themselves.

When something breaks

  1. 1

    Observe

    Reproduce it, collect logs, metrics and timestamps, and write down what is known and what is only assumed.

  2. 2

    Hypothesise

    List the possible causes, the most likely and cheapest to check first.

  3. 3

    Test

    Run the smallest experiment that can rule a cause in or out.

  4. 4

    Fix

    Change the root cause with the simplest fix that holds, reversible and validated before production.

  5. 5

    Verify

    Compare before and after, and add a test so it can’t come back quietly.

05Technology and AI

A colleague, not a shortcut.

New technology and automation keep my attention, and I treat AI as a technical and intellectual partner, not a fast way to generate content. The point is to be more productive without giving up quality or control: what it writes gets the same review, tests and scepticism as anyone else’s code.

What I use it for

  • Faster development and debugging
  • Analysing complex technical problems
  • Automating the repetitive parts of the work
  • Comparing technical alternatives objectively
  • Built into the workflow: coding agents every day, MCP servers that let them read the systems I support, lint and tests after every change

Open to innovation, careful about adopting generated output uncritically.

06Experience

Four companies, one craft

  1. 2019 – now

    Senior Full-Stack Developer at Bitsoft

    Restaurant software for international quick-service brands: the self-ordering kiosk, the kitchen display system, a delivery dispatch app, a rebuilt back-office front end, the online ordering site and a Flutter reporting app. Payment, fiscal and POS integrations, test automation, releases and support.

  2. 2017 – 2019

    Web Developer at Red Route Digital

    Booking engines, a custom CMS, API integrations and SEO for hotels and resorts. Delivered 25+ products, including the winner of Best Hotel Website at the 2018 eTravel Awards.

  3. 2011 – 2017

    Web Developer at Expremio Technology

    Websites and web applications for local clients, mainly Romanian hotel chains, from build to long-term maintenance.

  4. 2009 – 2011

    Web Developer at Tecksoft Concept

    First production websites, built and maintained end to end.

07Skills

What I work with

Front end

  • Vue.js
  • Quasar
  • JavaScript
  • HTML
  • CSS
  • Sass
  • Electron

Mobile

  • Flutter
  • Dart

Back end

  • PHP
  • Laravel
  • Node.js
  • REST APIs
  • MySQL
  • NoSQL

Quality and delivery

  • Jest
  • Playwright
  • ESLint
  • Docker
  • Git
  • CI builds

Restaurant tech

  • POS integration
  • Bank terminals
  • Fiscal printers
  • NF525
  • Multi-tenant config

AI and automation

  • AI coding agents
  • MCP servers
  • Python
  • Home Assistant

Also: SEO, WordPress · Romanian (native), English (C1)

08Off the clock

Curiosity that doesn’t clock out.

Outside work it’s the same curiosity with different hardware: electronics, audio and video systems, home automation and my own digital infrastructure. I like to experiment, configure and improve complex systems, and I give personal projects the same rigour as paid ones.

I care about energy efficiency, smart-home technology, good multimedia and technology that fits into everyday life without getting in the way. When something interests me I go deep, compare the alternatives and look for a solution that lasts.

I value autonomy, the freedom to experiment, things done well and being in control of the systems I use.

Working with me

  • Analytical and curiousI look for logical explanations and mechanisms I can verify.
  • Direct and pragmaticClear conclusions and recommendations you can act on.
  • IndependentI want to understand a solution well enough to make my own decisions about it.
  • Demanding about qualityI notice details, inconsistencies and solutions that aren’t well founded.
  • Always improvingThere is usually a better way, and I keep looking for it.
  • Open to argumentsBetter evidence changes my mind. Dry humour helps, too.

09Contact

Have a product that needs to ship?

Kiosks, web apps, mobile apps or the integrations between them. Tell me what you’re building and I’ll answer within a couple of days.

Bucharest, Romania