A bot for the field team
People at Reefa don’t log in to any panel. They start and end a shift in Telegram with one button, with the site’s location, send photos of their work, ask for cleaning supplies and check their earnings. I built the bot myself, and in September 2026 I rebuilt it from scratch around one rule: one button per step.
This works for any company whose people work away from the office: cleaning, security, maintenance, construction. I build field-team bots as part of a company system, from PLN 60,000 excl. VAT. I am based in Kraków and work remotely and on site across Poland.
1,100 h
of work logged through the bot in August 2026, across 364 shifts (as of 21 Sept 2026)
- Company
- Reefa, a B2B cleaning company in Kraków and Katowice
- Period
- June–October 2026
- My role
- Owner. I designed and built the bot; the rebuild went through independent AI-agent reviews.
- A similar project
- from PLN 60,000excl. VAT
What it looks like on screen
Photos sent up to 15 minutes after you finish will be added to this shift.
The rules behind one button
- 3 min
- double-start guard, with a “Cancel start” button
- 90 s
- window in which a repeated press is ignored
- 30 min
- window in which a restart must be confirmed
- 6 h
- after this long, ending the shift needs confirmation
- 14 h
- a forgotten shift closes itself, set to the median length of that person’s recent shifts on that site
- 15 min
- photo window after the shift ends
- 20, 40, 60 min
- alerts when a shift hasn’t started on time
- 5 min
- how often the background check runs
Why a normal panel doesn’t work in the field
Someone cleaning an office at six in the morning isn’t going to log in to a panel or fill in a form. They have a phone and a messenger. If recording a shift takes more than one tap, some shifts simply won’t get recorded, and nobody will know how many hours were worked on site.
The first version of the bot worked, but people said it “asks twice”, and at one site photos kept going missing. I solved both problems by starting with the data, not the code.
What the office needs from people in the field
- When someone started and finished work on site
- Photos after every shift, attached to the right shift
- A heads-up that someone is late, before the client calls
- Supply requests without phone calls and text messages
- All of it in Polish or Russian, depending on the person
What I built
The “one button” rebuild
An audit in September 2026 confirmed 55 issues. The cause of “it asks twice”: a second location sent a few seconds later flipped the shift state. I rewrote the bot as a router, a library and separate flows, with 19 tests on real sequences. Before release on 22 September the code went through two independent reviews by 93 and 45 AI agents.
Photos that no longer go missing
The logs showed no errors at all. Only the data did: in 17 of 24 shifts at that site, the last photo arrived 0–1 seconds before “Finish”, so closing the shift overtook the album upload. I added a 15-minute photo window, a ban on closing a shift with no photos (with a separate “Finish without photos” button), a clear “photo not saved” message, unique file names and a retry when Telegram rate-limits.
runs on its ownLanguage chosen per person
The coordinator picks Polish or Russian before sending the invite. The bot recognises buttons in both languages, so switching never breaks anything. Before release: 23 of 23 tests, a 21-agent review and 22 fixes.
Shift rules
runs on its ownA 3-minute guard against double starts with a “Cancel start” button, confirmation to end after 6 hours, and a forgotten shift closes itself after 14 hours, set to the median length of that person’s recent shifts on that site. A background check runs every 5 minutes.
Late-shift alerts
runs on its ownWhen a shift hasn’t started on time, the bot sends an alert after 20, 40 and 60 minutes.
Photos for managers and clients
runs on its ownAlbums go to managers in batches of 10, and the client sees the photos from every shift in the “Photos” tab of their portal.
Group bot for apartment buildings
runs on its ownCrews post the apartment number and photos in the building’s group chat. The bot works out the building from the group name and the apartment number (including 4.2, 4-2 or 12A.2). When the number is missing, AI reads it off the door in the photo, and when unsure, the bot asks in the group. A daily summary goes out at 21:00.
Matching the operator’s reports
The PDF reservation importer read 31 of 31 rows and left none unmapped. From 9 September the bot’s data matched the apartment operator’s reports day by day, and I reconciled the whole of September: 151 cleanings.
Three separate bots
The team bot, the sales bot and my management bot are kept apart, so messages for staff, sales and the owner don’t mix.
Documents through the management bot
runs on its ownI forward a photo of a signed document, and AI identifies the worker, the type and the month, files it on their card and asks about missing months.
Locked front door
The bot only accepts messages from Telegram that carry a secret key. Live check: without the key the answer is 403, and the background check runs with no errors.
How it fits together
1. Worker
Button in Telegram
one per step
a person decidesLocation
checked at the site
Photos of the work
2. Bot
Shift flows
19 tests on real sequences
runs on its ownTime rules
3 min, 90 s, 6 h, 14 h
runs on its ownPhoto window
15 minutes after finishing
runs on its ownPerson’s language
Polish or Russian
runs on its own
3. Panel
Shift log
hours for payroll
runs on its ownPhotos on the shift
runs on its own
4. Outputs
Manager
albums of 10 photos
Client
“Photos” tab in the portal
Late-shift alerts
at 20, 40 and 60 min
runs on its own
The worker taps a button and sends photos. The bot applies the shift rules and records everything in the panel, from where photos go to the manager and the client, and late-shift alerts go out on their own.
Key:runs on its owna person decidesdata, people or a place of work
Numbers from the system
| What I measure | Value | As of |
|---|---|---|
| Hours logged through the bot, Juneas of 21 Sept 2026 | 848 h, 251 shifts | |
| Hours logged through the bot, Julyas of 21 Sept 2026 | 960 h, 329 shifts | |
| Hours logged through the bot, Augustas of 21 Sept 2026 | 1,100 h, 364 shifts | |
| Issues confirmed in the audit before the rebuildas of 22 Sept 2026 | 55 | |
| Scenario tests after the rebuildas of 22 Sept 2026 | 19 | |
| Independent code reviews before releaseas of 22 Sept 2026 | 2 (93 and 45 agents) | |
| Shifts with the last photo 0–1 s before the endbefore the fixas of 9 Aug 2026 | 17 of 24 at one site | |
| Language version testsas of 2 Oct 2026 | 23 of 23 | |
| Apartment cleanings reconciled with the operatoras of 1 Oct 2026 | 151 in September |
The bot doesn’t cover every site yet. In June roughly half of the planned visits went through it, so the hours in the table are only part of the company’s work.
I count hours only from shifts of up to 12 hours.
What it runs on
- Telegram Bot API
- the conversation, buttons, photos and location
- Supabase Edge Functions (Deno)
- bot logic and a background check every 5 minutes
- Supabase: Postgres and Storage
- shifts, photos, permissions
- Anthropic Claude
- apartment numbers from door photos, documents, purchase requests
- Scenario tests
- 19 sequences taken from real shifts
What you can take for your company
Put the tool where people already are
Your field team has a phone and a messenger. A bot needs no training, no login and no extra app to install, so people actually use it.
Diagnose from data before changing code
The photos weren’t lost because of a bug you could find in the code. It only showed up in the timestamps in the database. Before I rebuild anything for you, I look at what the data says.
Rules instead of reminders
A photo window, a double-start guard, forgotten shifts that close themselves. Each of these rules replaces a phone call from the office.
One button per step
The fewer decisions a worker has to make, the fewer errors in the data. I design each screen so that at any moment only the right action is possible.
Services where I do this
A panel, CRM, field-team app or production system, built around how your company actually works.
from PLN 60,000excl. VAT- from PLN 15,000excl. VAT
- from PLN 15,000excl. VAT
Other case studies
- 13An operating system for a service companyOne panel for the whole company: schedules and shifts, finances across several entities, petty cash, bank matching, e-signed contracts and client reports.
- 11AI agents that run part of the company11 routines and agents: a panel doctor, SEO content, lead growth, moderation, tenders and a morning brief. Five of them log every decision, and releases roll back automatically.
- +30%Organic growth of reefa.plA plan of 33 SEO and GEO changes, 29 free tools, an open norms dataset (460 categories from 2,338 rows of data) and a content routine. Clicks from Google rose from 8.6 to 11.2 a day in July.
- 3 daysKtoSprząta.pl — an industry platformA directory of companies from public registries, a search that fixes typos, a free Pro panel for companies and AI moderation three times a day.
Let’s talk about your company
30 minutes, no sales deck. You tell me where time and money leak, and I tell you what I’d do first and roughly what it costs.