People operations

Check-ins, days off and receipts, in the app the team already opens

The team's own admin lives beside the work rather than in three more tools. Staff check in and out from Home, ask for days off, and claim back what they spent with a receipt on every line. Whoever runs it sees today's attendance, decides leave, and approves and pays claims from the admin panel.

How this usually works

Three bits of admin that live in the wrong place

01 / THE MORNING MESSAGE

Attendance is a good-morning in a group chat, so nobody can say who was in last Tuesday.

02 / THE ENVELOPE OF RECEIPTS

Claims arrive as a photo of a pile of paper at the end of the month, and one receipt is always missing.

03 / APPROVED, THEN FORGOTTEN

The claim was approved in an email thread, and whether it was ever paid is anybody's guess.

Check in, check out

A card on Home, a clock while you are in, and a month that adds up

Every staff member checks in and out from the Attendance card on Home or the My Attendance page. The day shows the check-in time, a live clock while you are in, the total hours and the number of sessions, so stepping out for lunch and back is two sessions rather than a correction. The month view lists every day with its first in, last out, hours and status.

A reminder arrives at 6:30 PM for anybody still checked in, and an entry left open overnight is marked as a missed check-out, counting no hours until somebody sets the time. A check-in made within 1 km of the office reads In office; anywhere else reads Remote, with the distance.

  • The browser asks for location once, and reads it only at the moment of checking in or out
  • Not sharing it never blocks a check-in: the day is simply marked location not shared
  • The month view marks each day's site, and shows Corrected where an admin fixed a missed check-out
AttendanceIn office

Checked in at 09:12, 3h 41m so far

Session 1 · 09:12 to 12:30In office
Session 2 · since 13:24In office
Reminder if still in6:30 PM
For whoever runs it

Today at a glance, and a history that exports

The admin Attendance page opens on Today: every staff member as checked in, checked out, not checked in or on leave, with their times, hours, and how many are in the office or remote, plus a map link to where each check-in was recorded. History filters by date range and person and exports to CSV, site, distance and corrections included.

A missed check-out can be set afterwards by a role allowed to, within 24 hours of the check-in and with a note of up to 280 characters, and the day then reads Corrected. Only roles granted attendance access see any of this, which is the Admin role by default.

  • Approved leave shows on the Today list as on leave, not as absent
  • A day's history keeps its site even if the office later moves
  • Nothing here reaches a client account, in either direction

Attendance · Today

NameStatusInLocation
FarahChecked in09:12In office
NurulChecked in09:40Remote8.4 km from office
TasOn leave--
Leave

A range of days and a reason, decided in one place

Leave is asked for in the team workspace: a first day, a last day, both counted, and an optional reason. One request covers at most 31 days, within 90 days either side of today, and three can be waiting at once. The decision is made in the admin panel and comes back as a notification, with any note the approver left.

The admin Leave tab shows one row per leave rather than one per day: a range with its number of days and weekdays underneath. Removing a recorded leave removes every day of it together, and approved requests cannot be removed from that table.

  • Approved days show as On leave when somebody tries to book a meeting over them
  • They are neutral on a streak, so time off never breaks a run on the team feed
  • No balances or leave types: a request is days and a reason, and the record is what was answered

Team Pulse · Leave

Nurul2026-08-25 to 2026-08-28 · 4 daysApproved
Farah2026-10-12 to 2026-10-13 · 2 daysWaiting
Expense claims

One line per receipt, and the receipt in the same form

My Claims is where staff ask to be paid back. A claim is a title, a currency, MYR, SGD or USD, and one line per thing paid for, with a category, the date, the merchant and the amount. Mileage takes a distance and is priced at the company rate for the claim's currency. A claim can be tied to a project or an organisation, and a receipt paid in another currency keeps its original amount on the line.

The receipt goes in while the line is added: a photo, a PDF, the camera on a phone, or a file dropped on the form, and one Save stores both. Submitting locks the lines and tells the approver. The claimant can withdraw it while it waits, answer a request for more information on the claim itself, and follow every step to Paid.

  • Four checks are shown to the approver and never block: a line over 50.00 with no receipt, a line older than 90 days, a possible duplicate, a total over 2,000.00
  • An iPhone photo is turned into a JPEG before it uploads, up to 10 MB per receipt
  • Needs info, approved, declined and paid each arrive as a notification and a push
ClaimPaid

Client visit, Singapore · SGD 412.60

Submitted · 4 lines, 4 receipts3 Sep
Needs info, answered and resubmitted4 Sep
Approved, awaiting payment5 Sep
Paid, with the payment reference8 Sep
Approving and paying

Approved, then paid, and both written down

The admin Claims page has a Queue for claims waiting on a decision or on the claimant, To pay for approved claims not yet paid, and Paid, Rejected and All across a date range and a person. Open a claim to see its lines, receipts, checks and history, then approve it, decline it or ask for more information, with a note.

Paying is its own step. Marking a claim paid records the date and a payment reference, so the claimant can match it against their bank statement and nobody has to ask whether it went out. Only a role holding the approve or pay right opens the page, which is the Admin role by default.

  • Every staff role files its own claims; deciding them is a separate right
  • Approvers are told when a claim comes in and when a claimant replies
  • A submitted claim stays on the list as a record, whatever the answer was

Claims · Queue

ClaimantTotalChecks
FarahClient visitSGD 412.60No flags
NurulEquipmentMYR 2,480.00High value
AbdullahMileage, AugustMYR 186.00Receipt missing
Not built yet
  • Attendance measures distance from one office location, set up with the deployment. Somebody checking in at a second office reads as Remote, with the distance.
  • Claims have no export yet: payment is recorded in the product, and there is no file for payroll or accounting software.
  • One approval step: a claim is decided by a person holding the approve right, with no chain of approvers.
  • Leave has no balances, allowances or leave types, and nothing is written to an outside calendar.
Questions · Attendance, leave and claims

The things teams ask about this

Does attendance track where people are all day?

No. The browser's location is read once, at the moment somebody checks in or checks out, and at no other time. That reading decides whether the check-in says In office or Remote, with the distance from the office. The request's network address and an approximate city are recorded with it, and all of it is visible to whoever is granted the attendance report, which is the Admin role by default.

What happens if somebody will not share their location?

They still check in. Location never blocks a check-in or a check-out: the entry is saved with the time and marked location not shared, and the day counts the same way as any other. The browser asks once, and the choice can be changed later in the browser's own site settings.

Who can see the team's attendance?

Each person sees their own day and month. The admin Attendance page, with everybody's check-ins, locations and the CSV export, opens only for roles granted attendance access, which is the Admin role by default and can be granted to another role in the role editor. Setting a missed check-out afterwards is a separate right again.

Can an expense claim be paid without a receipt?

It can, because the checks are shown rather than enforced. A line over 50.00 in the claim's currency with no receipt raises a Receipt missing flag the approver sees before deciding, alongside lines older than 90 days, possible duplicates and totals over 2,000.00. Whether that is acceptable is the approver's call, and the flag stays on the claim's record either way.

Which currencies can a claim be made in?

MYR, SGD or USD, chosen when the claim is started, and every line on it is claimed in that currency. A receipt paid in something else, baht say, keeps its original amount and currency on the line for reference, and mileage is priced per kilometre at the company rate for the claim's currency.

Next step

See it against your own work

Thirty minutes on a call, one of your real client projects on the screen, and an honest answer about whether this part of the product earns its place in how you work.

partnerships@dhcertainty.com