What they built
A custom Time & Attendance engine for Carwow (~650 employees across London, Lisbon, Madrid, and Berlin) that handles:
- Daily check-in via a rotating one-minute code or QR code displayed on an office tablet; employees select their status (office, home, or on the road)
- Location-aware rules: EU employees must check in and out and have access to a monthly timesheet; UK employees check in only
- 4-week compliance tracker visible to each employee, with a tile-based colour-coded view
- Amendment/retroactive request flow that routes to the manager for approval
- Manager dashboard: pending timesheet approvals, amendment requests, tiered compliance alerts, and a full team view
- Leadership dashboard: company-wide compliance and attendance trends vs. headcount baseline, filterable by business area, office, and date range (weekly or daily)
- Office capacity dashboard: heat map of attendance by day per office, benchmarked against desk capacity
- Natural-language query interface (ChatGPT-style) embedded in the dashboard for ad-hoc questions (e.g. "which manager is most compliant?")
- Downloadable Excel reports for org-level attendance data
- Automated sync with HiBob every 30 minutes, pulling employee data and annual leave so the system stays current
Why they built it
- CEO mandated increased office attendance; no off-the-shelf system could handle Carwow's varied office setups (full Wi-Fi/access control in London vs. a simple key-entry door in Portugal)
- Vendors that came close were prohibitively expensive and operationally complex
- Legal requirement in EU jurisdictions to track time and attendance
- Leadership needed trend data: which days are busiest, why people aren't coming in, how often staff are visiting clients
- Office managers needed capacity data to assess whether office space matched headcount
- Estimated cost of a commercial solution: ~£50,000/year; actual running cost of the build: ~£3/month
Tools used
| Tool | Purpose |
|---|---|
| ChatGPT | Initial solution design, architecture guidance, iterative troubleshooting |
| Claude + Claude Code | Primary coding assistant for V2; writes and edits code based on plain-English prompts |
| Firebase (Firestore + Hosting) | Backend database and app hosting |
| Google Cloud Shell | Environment for writing and deploying code |
| Google Apps Script | Scheduled sync (every 30 min) between HiBob and Firestore |
| HiBob (HRIS) | Source of truth for employee data, locations, and annual leave via API/report export |
| Google Sheets | Used minimally in V2 for lightweight data handling |
Note: V1 was built entirely on Google Sheets + Google Apps Script + HTML pages - it worked initially but couldn't handle ~500 daily users and became unstable.
How you could build this yourself
-
Define your requirements before touching any tool. List every stakeholder's need: employee UX, manager visibility, leadership reporting, legal compliance, office capacity. Idan had at least four distinct requirement sets before he started.
-
Audit what your HRIS can expose. Check whether your HR system (e.g. Shapes.co) has an API or scheduled report export. Identify the minimum data fields you need (name, email, location, leave status) - don't pull more than necessary.
-
Start with a ChatGPT or Claude conversation, not a blank screen. Describe your problem, your constraints (budget, office setups, legal requirements), and what you tried. Ask it to recommend an architecture. Idan's prompt was essentially: "We can't afford a vendor - how do I build this internally?"
-
Prototype in Google Sheets + Apps Script first if you're non-technical. It's a fast way to validate logic and flows. Expect it to break under real traffic - treat it as a learning exercise, not a production system.
-
Migrate to Firebase for scale. Use Claude or ChatGPT to guide you through setting up Firestore (database) and Firebase Hosting (front end). You don't need to understand the code line-by-line - follow the instructions step by step and ask the AI to explain anything confusing.
-
Build the sync between your HRIS and Firestore using Google Apps Script. Set it to run on a schedule (e.g. every 30 minutes). Scope it tightly - only pull the fields you actually need.
-
Design location-aware logic early. Decide upfront which rules apply to which offices (e.g. check-out required in EU, not in UK). Build these as conditions in your data model so the front end can show or hide features per user.
-
Add the verification layer for office check-ins. A tablet displaying a rotating code (or QR code) is a low-cost, low-infrastructure way to confirm physical presence without needing badge readers or Wi-Fi integration.
-
Build the amendment/approval flow before launch. Employees will miss check-ins. Having a self-serve retroactive request that routes to a manager prevents support tickets and builds trust in the system.
-
Collect feedback fast and feed it back to Claude/ChatGPT. Because it's internal, you can iterate immediately. Idan used real user complaints as prompts to improve the system - treat your users as co-designers.
-
Add dashboards last, once the data is clean. Build the heat maps, compliance trends, and capacity charts after the core check-in data is reliable. Use Claude Code to generate chart components from plain-English descriptions of what you want to see.
Source
Built by Idan Shteinberg, People Ops Manager at Carwow, and presented as part of an Open Org "Shipped by HR" session.