Back office for small accommodations

The typing that should not exist.

I am a freelance developer. I look after the systems behind a guesthouse in Chiang Mai — bookings, rosters, payroll, receipts — and I build the same kind of thing for other small properties.
Your booking sites, your spreadsheets and your chat app stay exactly where they are. The only part I replace is where a person retypes something the computer already knows.

KT Avatar of Kota Tamaki
Kota Tamaki
Google Apps ScriptPythonCloud RunSheets & Drive APIChat-app botsGemini APIRegression testingStaged rollout Google Apps ScriptPythonCloud RunSheets & Drive APIChat-app botsGemini APIRegression testingStaged rollout
The Real Problem

Three things I keep finding in small properties.

None of them are about the software being bad. They are about the gaps between the tools you already pay for.

1

The same booking is typed twice

It arrives in the booking site. Then somebody copies it into your own sheet. Most days that is fine. The day it is not fine, two guests hold the same room, and nobody can say which entry was the real one.

2

Hours live on paper

Shifts on a wall, hours in a notebook, totals worked out by hand at the end of the month. Night premiums and shifts that cross midnight are where the money quietly goes wrong — and nobody checks, because checking is the same work again.

3

One person knows how it works

Usually the owner. When that person travels, the property runs on memory. A process only one person can operate is not a system yet; it is a habit.

You almost never need new software.
You need the gaps closed between what you already run.
How I Work

Four rules I do not break.

RULE 01

You keep the tools you already pay for

I do not migrate you onto something new, and I do not ask your staff to learn another app. Whatever you book with, whatever you message on, whatever spreadsheet you already trust — those stay. I work in between them.

RULE 02

I check the money by hand before the computer does

Night premiums, weeks over forty hours, a shift that starts at 22:00 and ends the next morning. I work out every expected figure on paper first and lock it into a test. If a later change moves a number by one unit, we find out that day instead of at the end of the month.

RULE 03

Nothing goes live in one step

First it runs alongside you and only records what it would have done. You compare that against what actually happened. Only when the two agree does it start doing anything on its own.

RULE 04

You can change the rules without me

Rates, thresholds, the wording on a receipt, which cases a human must still look at — those live in a sheet you can edit, not inside code you would have to pay me to touch. You should not need a developer to change a number.

Selected Work

Built, and still running.

The first two are the guesthouse I look after in Chiang Mai. Client names are written as industries, not companies.

Guesthouse — Chiang Mai IN DAILY USE

Receipts, as a PDF, in one step

The desk types the guest’s name and one note. A formatted, numbered PDF comes out and files itself. What used to be a template someone re-saved by hand — and sometimes overwrote — is now one field and one button. Different receipt shapes (per stay, per group, with and without tax lines) come out of a single template with blocks that appear only when they apply.

Google Apps ScriptSheetsPDF
Guesthouse — Chiang Mai DEPLOYED

Staff time clock and roster

Staff clock in and out from the chat app they already use, on their own phones, by scanning a code at the desk. The roster, the hours worked and the payroll totals fill in by themselves — night premiums and shifts crossing midnight included. Every expected figure was calculated by hand first and fixed in a test, so a change that moves the money is caught rather than discovered.

Google Apps ScriptWeb AppChat botSheets
Accommodation IN PRODUCTION

A booking ledger that stays in sync

Reservations flow from the property management system into the property’s own ledger automatically, so nobody types a booking a second time. Partway through, the vendor replaced its entire login system. The sync was rebuilt against the new authentication and kept running, and it tells someone by email when a run fails instead of failing quietly.

Google Apps ScriptSession authSheetsFailure alerts
Working-holiday country comparisonOPENA small web app that sorts 32 countries into “apply now / wait / conditional / not eligible” from one input. Every row carries its source URL and the date it was checked. One static HTML file, no dependencies. Interface is in Japanese. Open it →
Video quality checks, automatedSubmitted training videos used to be watched end to end by a person. Now a first pass runs automatically and writes per-item findings with timestamps back into a sheet; a human confirms. Requirements through to incident response, handled by me.
Teaching slides generated end to endScript, images and slide assembly produced automatically for a language school. What took hours to days by hand now takes one run.
Knowledge base that stays currentRe-uploading a file used to leave the old version behind, so answers went stale. Fixed so that dropping a file in a folder is enough.
Splitting very large PDFs by meaningDocuments too big to process at once, split automatically along chapter and section boundaries rather than page counts.
Internal chatbot for a financial firmInternal documents made searchable, with the escalation path to a human designed in rather than bolted on.
Receipts issued as PDFsA lodging business wrote its receipts by hand. One flexible block is rearranged to cover different payers and line items, and the PDF comes straight out of a spreadsheet. In daily use on site.
Daily reports made searchableReport emails are collected into cloud storage and kept in a form an AI can search across, so exchanges that used to sit in one person’s inbox can be pulled up by keyword.
Toolbox

Toolbox.

Cloud

Cloud RunCloud FunctionsCloud SchedulerCloud WorkflowsSecret Manager

Everyday tools

Google Apps ScriptSheetsDriveCalendarFormsSlidesWebhooks

Languages

PythonFlaskJavaScript

AI, where it earns its place

Gemini APIOpenAI APIRAGPrompt designMCP server

Automation

claspMaken8n

Quality & operations

Tests on real dataStaged rolloutDry-run verificationFailure alerts
Good Fit ?

Where I fit,
and where I do not.

OKWorth writing to me about

  • Someone retypes the same booking into a second place
  • Hours and pay are worked out by hand at the end of the month
  • A spreadsheet has outgrown itself and now breaks when anyone touches it
  • Something automated broke months ago and nobody knows why
  • Only one person can run a process, and you want that written down as a system

NGNot what I do

  • Replacing the system you book with, or building a booking engine from scratch
  • “Add AI and it will be more efficient” as the starting point

If I think the thing you are asking for is not worth automating, I will say so and tell you why. That answer is free and usually takes one email.

Start with the part
that is stuck.

“Can this be automated?” is a perfectly good first message. Tell me where someone types the same thing twice, and I can usually tell you straight away whether it is worth doing at all.

I work in written English, so email is by far the best way to reach me. I am based between Chiang Mai and wherever I am travelling, and I work remotely.