Nonprofit · Internal tool
The sign-in sheet, retired.
A nonprofit delivering care across dozens of homes had no reliable record of who showed up where. We built the check-in that fits on a phone and the dashboard that makes the month payroll-ready.
Purpose
The work happens in other people’s homes.
This organisation runs on people rather than paperwork: a small office staff, and a much larger group of caregivers working across dozens of client homes and community locations rather than one building.
Attendance had always been kept by hand — a paper sign-in sheet, or a manager holding it in their head. That works until it does not. A payroll dispute arrives and there is no record to check. Nobody can see a month’s pattern. And when someone checks in somewhere that does not match where they were scheduled, nothing catches it.
The constraints were as firm as the problem. It had to be run day to day by a non-technical office manager. Caregivers in the field had to use it from a phone in seconds. And it could not require buying software or standing up hosting, because the budget for both was nothing.
The interface today
One tap for them. A desk for the manager.
The current release, in the client’s own palette and type. Employee names are invented; the client’s wordmark is stood in for.
AttendanceTime off
Check in
Good Morning, Clare
Tuesday, September 29, 2026
Care Team
Attendance
Your day
Today
Month
Time Off Requests3
Your team
Employees
Reports
Setup
Settings
by Isaac and Co. Consulting
Today
Tuesday,
September 29
11 of 18 in · 5 items need review
In today
11 of 18
includes 1 in the field
Not in yet
3
no entry yet today
Out
4 out
2 PTO · 1 sick · 1 WFH
Needs review
5
time-off requests
Needs review (5)
Care Team
Attendance
Your day
Today
Month
Time Off Requests3
Your team
Employees
Reports
by Isaac and Co. Consulting
Month
Time off
The rules
The vocabulary is the product.
Most of the design work went into deciding what a day can be called, and who gets to call it that.
Three rules hold the whole thing together. Nothing blocks a check-in — an entry from outside the office radius is flagged, never refused, because a caregiver standing in a client’s driveway should not be arguing with a form. Voiding is separate from editing — correcting a legitimate entry and erasing one made in error are different actions with different consequences, so they are different buttons. And everything captures a reason, which builds the audit trail without anyone setting out to build one.
Where it started
The first version, kept for comparison.
What shipped first, and what 30 days of testing, onboarding, and using it argued for changing.
Four things drove the second pass. Time off had no home — requests arrived by text and lived in somebody’s memory until payroll, so they became a first-class queue with an approve or deny on it. The office/field split was too narrow, and WFH had to stop being filed as an exception. The month needed times, not verdicts: knowing somebody was present is thinner than knowing they arrived at 9:42, and the grid was throwing that away. And the manager was doing the reading — scanning a roster to decide whether the day was fine — so the day now opens with the four numbers that answer it.
The check-in screen barely moved. One tap, one question, no login. That part was right the first time.
Good morning, Dana
Tuesday, 22 September
Where are you today?
I am in In the fieldToday — Tuesday, 22 September
14 active employees · 11 checked in · 2 need review
Marcus T. checked in 1.2 miles outside the configured office radius. Priya S. self-reported at 7:41a, unverified.
Roster
September — every employee, every day
Totals calculated against each person’s configured workdays and the organisation’s holiday calendar.
Workflow
From a tap in a driveway to a payroll file.
01
Tap the link
A personal link on the home screen. No install, no login, no roster to scroll.
02
Say where
In the office or in the field, with an optional note, and location checked once at that moment.
03
Land as unverified
The entry arrives in the manager’s queue rather than straight into the record.
04
Review with a reason
Confirm, edit or void. Every change captures why, and a 10-second undo covers the wrong-person case.
05
Export the month
A CSV straight from the month view, replacing the manual reconciliation that used to eat month-end.
In our words
What the screenshots do not show.
The ask sounded like a time clock. What the organisation actually needed was a record it could defend — in a payroll dispute, in a funder’s audit, in a difficult conversation with a caregiver. That reframing set almost every decision that followed.
The one we thought hardest about is treating self-reported data as provisional. Every entry an employee submits lands as Unverified until a manager confirms it. That is not distrust; it is the difference between a claim and a record, and drawing the line explicitly is what makes the confirmed data worth relying on. The corollary is that the flag never blocks anything. A check-in from outside the office radius still goes through, still counts, and simply arrives with a note attached. Software that argues with someone standing in a client’s driveway does not get used.
Underneath, the logic deciding what counts as present, absent or excused — weekends, holidays, each person’s own schedule — lives in its own module with its own test suite, forty tests, independent of any screen. It runs identically whether the manager dashboard is asking or the check-in page is. Attendance rules are exactly the kind of thing that quietly drifts apart when the same logic gets written twice.
The hardest problem was not in our code. The dashboard originally gated access on a Google account allowlist, which is clean until a manager’s Google account sits on a different domain than the owner’s — a genuine, under-documented limit of the platform rather than a bug. Rather than paper over it, we added a second path: a scoped, revocable link that sits alongside the account check and lets a manager grant full access to whoever needs it without fighting Google’s identity model.
The documentation shipped as part of the product, not after it. Two branded PDF guides, one for managers and one for employees, plus a personalised onboarding packet for every single person — a cover page with their name and a QR code straight to their own check-in link, generated from the live roster rather than assembled by hand.
All of it runs on a Google Sheet the organisation already owned. No server, no database, no hosting bill. For a nonprofit, that was not a technical detail; it was the reason the project was possible.
What the second release changed. Thirty days of testing, onboarding, and using it is worth more than any amount of planning, and it argued for four changes. Time off stopped being a text message to a manager and became a queue with an approve or deny on it. WFH stopped being an exception filed under something else. The month grid started showing arrival times instead of verdicts, because present turned out to be a thinner fact than 8:52. And the day now opens with four numbers rather than a roster, so the question the manager was reading the list to answer is answered before they start reading. The check-in screen is the part we changed least, which is the part we are happiest about.
What we would do differently. Apps Script’s identity model was the single biggest source of friction in this build — cheap and infrastructure-free, but it fights you the moment your users are not all on one Workspace domain. For an organisation we knew from day one would have managers across domains, we would design the access-link path in at the start rather than reaching for it after hitting the wall.
Start here
Tell us where the hours are going.
A short call to find out whether there is something worth building. If there is not, we will say so.
Book a callOr email zuleema@isaacandco.co
