Site Attendance

Sign in to continue — demo build

RecrHR keeps all data — users, locations, shifts, roster, punches, leave and mispunch requests — in a small local database inside this browser (localStorage). It survives refresh, works offline, and stays on this device only.

--:--:--

PUNCH TERMINAL — LIVE CAMERA

Tap Punch In / Punch Out to
activate the camera
Today's shift
Assigned location(s)
Location lock
Nearest site / distance

TODAY

First punch in
Last punch out
Hours worked
Status

DEMO OVERRIDES

Punch-in uses your real camera and real GPS by default. Flip these on to reliably show the reject flow during a walkthrough.

Force location outside allowed geofence
Force photo mismatch on capture

Face-matching is simulated in this demo — a production build would call a real face-recognition API against the enrolled profile photo.

CONTACT

Email
Employee code
Profile photoCaptured by admin at enrollment

MONTH CALENDAR

DAY-WISE REGISTER

DateDayShiftInOutHoursLateOTStatusLocation

RAW PUNCH LOG

PhotoDateTypeTimeLocationDistanceStatusReason
No punches recorded in this month.

MY ROSTER

APPLY FOR MISPUNCH CORRECTION

MY REQUESTS

DateTypeRequestedReasonStatus
No mispunch requests yet.

APPLY FOR LEAVE

MY LEAVE HISTORY

TypeFromToDaysStatus
No leave requests yet.
Monthly summary
Late-in & OT
Leave & mispunch

MY MONTHLY ATTENDANCE SUMMARY

DateShiftInOutHoursStatusRemark

MY LATE-IN / EARLY-OUT / OVERTIME

DateShiftShift timeInOutLate byEarly out byOT
Nothing to report for this range.

MY LEAVE LEDGER

TypeFromToDaysReasonStatusRemark
No leave requests yet.

MY MISPUNCH HISTORY

DateTypeRequestedReasonStatusRemark
No mispunch requests yet.

ADD USER

No photo captured

The camera stays live until you press Capture photo — frame the face, check the lighting, then take the shot. Nothing is saved until you capture.

ALL USERS

PhotoNameCodeRoleLocationsActions

ADD LOCATION

150 m

ALL LOCATIONS

NameLatLngRadiusUsersActions
Shift master
Roster grid
Bulk upload (CSV)

ADD SHIFT

SHIFT MASTER

CodeNameTimingGraceFull / HalfRosteredActions

Full day hours is the worked-hours threshold for a day to count as Present — set it slightly below the shift span (e.g. 7.5 for an 8-hour shift) so a normal day isn't marked half-day. Below half day hours the day still counts as half day.

A shift that crosses midnight (e.g. 22:00 → 06:00) is handled as a night shift — hours and late-in are calculated across the day boundary.

PAINT MODE — pick a shift below, then click cells to assign. Click a filled cell with the same shift selected to clear it.

UPLOAD ROSTER CSV

Drop a .csv here, or click to choose a file
Existing entries for the same employee + date are overwritten

EXPECTED FORMAT

employee_code,date,shift_code EMP-104,2026-09-01,A EMP-104,2026-09-02,A EMP-118,2026-09-01,B EMP-118,2026-09-02,OFF

Date accepts YYYY-MM-DD or DD/MM/YYYY. Use shift code OFF (or leave blank) to mark a weekly off. Header row is optional.

LAST IMPORT RESULT

No file imported yet.

DAILY ATTENDANCE REGISTER

PhotoEmployeeCodeShiftInOutHoursLateOTStatusLocationPunches
0
Punches in range
0
Approved
0
Rejected

PUNCH LOGS

PhotoEmployeeTypeDateTimeLocationDistanceStatusReason
No punches match these filters.

MISPUNCH REQUESTS

EmployeeDateTypeRequestedReasonStatusAction
No mispunch requests submitted yet.

LEAVE REQUESTS

EmployeeTypeFromToDaysReasonStatusAction
No leave requests submitted yet.
Monthly summary
Daily muster
Late-in & OT
Leave & mispunch

MONTHLY ATTENDANCE SUMMARY — ALL EMPLOYEES

EmployeeCodeRosteredPresentHalf dayAbsentLeaveWeekly offLateEarly outTotal hrsOT hrsAtt %

DAILY MUSTER REGISTER

DateEmployeeCodeShiftInOutHoursStatusLocation

LATE-IN, EARLY-OUT & OVERTIME

DateEmployeeShiftShift timeInOutLate byEarly out byOT

LEAVE & MISPUNCH SUMMARY

EmployeeCodeCL takenCL balSL takenSL balEL takenEL balPending lvRejected lvMispunch reqMP approvedMP pending

BACKUP & RESTORE

The local database lives in this browser's localStorage. Clearing site data, using a different browser, or another device means starting fresh — so take a JSON backup before anything risky, and restore it on the other machine.

STORAGE USED

TableRecordsSize

localStorage caps out at roughly 5 MB per site. Punch photos are compressed to a small thumbnail, and when the store passes 80% full the oldest punch photos are dropped automatically (the punch record itself is kept).

MAINTENANCE

DANGER ZONE

“Clear all transactions” removes punches, leave and mispunch requests but keeps users, locations, shifts and roster. “Reset” restores the factory demo dataset.