Verifiable check-in and automated pay in a tour-operations platform.
A multi-tenant system for scheduling tours, confirming attendance with photo-based group counts, and calculating guide commissions. When counts disagree, a person still reviews the case.
01 — In short
This platform is a multi-tenant system for tour operations. It handles scheduling, guide check-in, group-count verification from a photo, and commission calculation. The photo step counts faces. It doesn’t identify anyone.
02a — The problem
Tour planning, attendance confirmation and guide pay were fragmented. Disputes around group size were hard to settle without a shared process you could audit.
02b — What we chose
Put scheduling, check-in, evidence and commissions in one platform. Use local computer vision to count faces in a group photo (not to identify people), and send mismatches to human review instead of approving them automatically.
What I built
- Multi-tenant management for teams, tours, bookings, calendars and rebooking.
- Guide check-in and group-completion workflows.
- A local OpenCV-based service that counts faces in an uploaded group photo.
- Mismatch handling: detected count vs reported count, flagged for human review.
- Commission creation after completed check-ins, including guide-specific rate exceptions.
- Feature tests covering the check-in and commission path.
Decisions that shaped it
Count faces locally
Google Cloud Vision doesn’t offer face detection on its EU regional endpoint, so guest photos would have been processed outside the EU. I used OpenCV’s YuNet in a small FastAPI service instead. The photos stay on the server.
Mismatches go to a person
When the detected count and the reported count differ, the guide confirms or corrects the number and the case is flagged. A person reviews it before commission is paid.
No verified match, no approval
If the counting service is down or slow, the guide sees an error. The system never approves a check-in it couldn’t verify.
05 — What changed
Attendance evidence and pay lived in the same workflow. The AI step supports the process; it does not silently decide compensation. Important: this is face counting for group size, not facial recognition of individuals.
What it doesn’t do
A crowded photo with faces turned away will undercount. The system compares exact numbers and has no tolerance, because a flagged case is better than a hidden margin. It counts faces to check group size. It’s not facial recognition.
Common questions
No. It counts the faces in a group photo to check the size of the group. It doesn’t identify or match anyone.
To a small service running next to the app. In production it only listens on localhost and needs a shared secret, so the photos never leave the server.
The guide confirms or corrects the number. The mismatch is flagged, so a person can review it before commission is paid.
Related reading
Want AI that fits a workflow instead of a demo?
Tell me what you’re trying to build, automate or fix. A few lines is enough.
I read everything myself. No newsletter, no CRM sequence.