Check-in Windows & Auto Checkout¶
TimeKeeper treats attendance as "who was at this session" — but people are human, and sessions overlap, run late, and get forgotten. Two mechanisms make the books come out sane: the check-in window and auto checkout.
The check-in window (default 4 h)¶
A scan records a check-in for a session only when the moment falls within 4 hours of the session's start or end (configurable: Setup → Sessions → Check-in Window (hours)).
flowchart LR
A["now"] --> B{"session start - 4h <= now <= session end + 4h?"}
B -->|yes| C["check in to session"]
B -->|no| D["'No active session at this location.'"]
Qualifying, unfinished sessions at the device's location are candidates; the nearest one (distance-0 being an actually-active session) wins. So:
- Arrive 30 min early — check in to the upcoming session.
- Forget to check out at the buzzer — you're still "in" for up to 4 h past end.
- Try to tap at a dead hour with no session nearby — "No active session at this location."
After the session ends¶
stateDiagram-v2
[*] --> CheckedIn : within window
CheckedIn --> Overtime : now > session.end
Overtime --> AutoCheckedOut : now >= end + grace (default 24h)
Overtime --> AutoCheckedOut : next session at location starts
CheckedIn --> CheckedOut : manual check-out (kiosk / !checkout)
AutoCheckedOut --> [*]
CheckedOut --> [*]
Two unconditional triggers force a check-out of stragglers:
- Grace passed —
now ≥ session end + Auto Check-out After (default 24h). - The next session at the same location has started.
Everyone still checked in is force-checked-out at the session's end time
(i.e. their recorded hours end where the session did — overtime isn't
manufactured), the session is then marked Finished, and an auto-checkout
notification is enqueued (Hey {username}, you've been auto-checked-out from
the session @ **{location}**…) if enabled.
Why two triggers?¶
If the workshop runs all day, sessions are back-to-back and trigger 2 fires every time — nobody lingers. If a day ends with a lone late session, trigger 1 cleans it the next morning. Either way the kiosk's "who's still in" list is never a graveyard.
Overtime¶
As soon as a session passes its scheduled end, the kiosk shows OVERTIME in red for that session. Members still signed in:
- receive an overtime DM (default 10 min after end, once) telling them
the session ended and to check out —
Hey {username}, you're now in overtime…; - if they check out late anyway, their hours show regular + overtime
(
+1h 30min red) on the leaderboard and statistics — late check-outs are marked so admins see them.
Where the defaults live¶
| Setting | Default | Where |
|---|---|---|
| Check-in Window | 4 h | Setup → Sessions |
| Auto Check-out After | 24 h | Setup → Sessions |
| Overtime DM (mins after end) | 10 | Setup → Integrations |
| Auto-checkout DM | on | Setup → Integrations |
| Scan debounce | 5 min | device Settings |
Every one of these is configurable — the defaults exist so a fresh install behaves sensibly with zero thought.