Skip to content
BV Solution. Independent software developer
EN NL
Let’s talk
← Work AI systems · tour operations

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.

Laravel OpenCV FastAPI Filament Tests

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

  1. Multi-tenant management for teams, tours, bookings, calendars and rebooking.
  2. Guide check-in and group-completion workflows.
  3. A local OpenCV-based service that counts faces in an uploaded group photo.
  4. Mismatch handling: detected count vs reported count, flagged for human review.
  5. Commission creation after completed check-ins, including guide-specific rate exceptions.
  6. 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

Next step

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.