Jobsite punch clock

Clock in and clock out from the field with one tap, and the hours are derived from the two timestamps instead of being typed from memory.

What it is

Labor_time_entries gained clocked_in_at and clocked_out_at; hours is computed on clock-out. The project comes from the crew's accepted assignments (one project needs no question, several show cards), and the stage the project is on is frozen onto the entry at clock-in so hours stay attributed to the work actually being done.

Also called: clock in clock out · crew timesheet · time tracking for crews · hours from the field

See it, piece by piece
01

Hours become two timestamps instead of a Friday guess

One tap in, one tap out, and the hours are computed from the two instants when the shift closes. The chip above the button reads “On the clock · 3h 12m” off the server's own timestamp, so a dead battery or a swapped phone does not lose the day. What a man writes down on Friday about last Tuesday is a recollection, and you are paying it.

Crew field link
Marlin Zook
Crew B
On the clock · 3h 12m
Wenger 40×60 Shop
Framing
Clock Out
Add Photo
Blocked
Framing
Posts set and braced
Trusses set
Purlins and girts on
Roof steel on
WainscotNot needed on this job
This week
32h
24h approved · 8h waiting
Mon · Wenger 40×60 Shop8h
Tue · Wenger 40×60 Shop8h
Wed · Wenger 40×60 Shop8h
Thu · Wenger 40×60 Shop8h · waiting
The 76px button, red while he is on the clock, with the elapsed chip above it. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
02

Every hour lands on a job and on a stage

The project comes from the crew's accepted assignments — one live job needs no question, several show as cards — and the stage the job is on is frozen onto the entry at clock-in. The result is not “40 hours this week” but eight hours on Framing at the Wenger shop. That difference is what separates a payroll number from a job-cost number.

Crew portal — Which job are you on?
Marlin Zook

Which job are you on?

Wenger 40×60 Shop
Stage 3 of 7 · Framing
Stoltzfus Equipment Storage
Stage 2 of 6 · Site prep
Beiler Barndominium
Stage 5 of 9 · Roof steel
Cancel
One card per job, each carrying the stage the hours will land on. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
03

Location is stamped, and never enforced

Clock-in and clock-out coordinates are captured best-effort with a four-second timeout. No permission, a slow fix, or a steel building that swallows GPS simply means no pin — it never refuses a clock-in and nobody loses a day's pay to it. A hard geofence blocks the man when the technology fails; this records the evidence and leaves the judgement with you.

04

A leader can clock his own crew in, and the record says he did

From Today's Crew the leader taps Clock in beside a name. The worker is recorded as the worker, but the leader is stamped as the person who entered it. He can only ever reach members of his own crew. The man who left his phone in the truck still gets his day, and if anyone argues about that entry later it is attributable to a name.

Crew portal — Today’s crew
Today’s crew
Marlin Zook (you)
On the clock · 3h 12m
Dwayne Esh
On the clock · 3h 08m
Clock out
Curtis Lapp
Done · 8h today
Clock in
Nelson Beiler
Not clocked in
Clock in
Anything you do here is recorded as entered by you.
Clock in beside each name, and the line under the list: entered by you. The real screen, drawn from the product’s own design system. Sample data — no customer information appears here.
05

The leader can see who is actually on the clock this morning

His own crew as a list of names with two facts each: on the clock since when, or hours already closed out today. Missing time gets fixed the same morning on site instead of turning up as a hole on payday. He sees nothing outside his own crew — that phone lives in a pocket on a jobsite.

06

The shift nobody closed raises an alarm rather than a guess

An hourly sweep finds anyone on the clock for twelve hours and notifies the crew leader and the owners through your own notification routing, once per shift so it stays worth reading. It deliberately does not close the shift: writing in a knock-off time nobody chose would put an invented number onto someone's pay. A human sets the real time, and that correction carries their name.

07

The worker can check his own week, split into approved and waiting

The bottom of his screen is one large number for the week from Monday, then “24h approved · 8h waiting” and a day-by-day list showing the job and the state of each entry. He can spot his own missing day. Approved and pending are never blended into one figure that implies you have agreed to something you have not.

08

A double tap cannot become a double shift

Clocking in while already on the clock returns the shift that exists rather than opening a second one, and clocking out with none open comes back as already done instead of an error. On a bad connection people tap twice. Two overlapping shifts quietly inflating a payroll total is exactly the failure worth designing out.

How it works
  1. 1Clock In posts to /api/crew-portal/clock with the token and, if the crew has more than one live job, which job.
  2. 2The row is written with org, crew, member, submitted_by, stage_name and clock_source='self' all derived server-side.
  3. 3Clock Out stamps clocked_out_at and writes hours = elapsed, rounded to 2dp, floored at zero.
  4. 4The screen shows 'On the clock · 3h 12m' from the server's timestamp, so the answer survives a dead battery or a swapped phone.
  5. 5Entries land as status='submitted' and flow into the same approvals queue and P&L as every other labour row.
Why we built it

Labour hours were a number somebody typed at the end of a day, or worse the end of a week — and a man on a roof does not stop to do that, so the number he eventually enters is a guess. Clocking in and out records two actual instants and derives the hours from them. Everything downstream reads the same hours figure it always did, so approvals, payroll and the job P&L keep working exactly as before.

The problem
  • Hours reconstructed from memory days later are guesses.
  • Nobody could tell which stage a day's hours belonged to.
  • Payroll arguments with no record to settle them.
Sound familiar?
What you get
Hours are two timestamps, not a recollection.
Every hour is attributed to a job and the stage it was worked on.
The existing approvals and job-costing pipeline gets accurate input with no rework.
What's inside
Location stamped, never enforced
Clock-in and clock-out coordinates are recorded on the entry, but a bad or missing location never blocks anyone from being paid.
Leader clocks someone in
A crew leader can clock a member of his own crew in or out, and every such entry is stamped with the leader's name.
Today's crew (leader view)
A crew leader sees his own crew as a list of names with two facts each: on the clock since when, or hours already done today.
One open shift per person
Clocking in while already on the clock returns the existing shift instead of opening a second one.
Shift that never ended alert
An hourly sweep notifies the crew leader and owners when someone has been on the clock for twelve hours, once per shift, and never closes the shift itself.
This week, approved vs waiting
The worker's own week in one big number, split into hours already approved and hours still waiting on the office.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →