---
title: Tiny Time Keeper
description: Replaced $400/mo WorkEasy — built in 2 days
section: craft
tags: [project, production-healthcare]
genre: reference
stability: stable
lastUpdated: 2026-04-18
url: https://fardiniqbal.com/docs/craft/projects/tiny-time-keeper
---


Multi-tenant employee time tracking SaaS. Staff clock in and out via a
shared iPad kiosk using 4-digit PINs. Admins manage schedules, approve
timesheets, track overtime, and generate payroll reports through a
real-time dashboard.

Built solo in two days as a replacement for WorkEasy — enterprise time
tracking software the client was paying \~$400/month for, bloated with
features they never used and with unresponsive support. Staff started
using the replacement on day one without training.

## Why it exists [#why-it-exists]

An early intervention therapy agency was paying \~$400/month for WorkEasy.
It was buggy. Support was unresponsive. Staff couldn't figure out the
interface and had to call support to do basic things.

The purpose-built replacement does exactly what they need — nothing more,
nothing less. Client savings: **\~$400/month** (WorkEasy eliminated,
replaced with $0/month infrastructure on Convex + Vercel free tiers).
Maintenance and feature shipping have continued since launch.

## Real-world production metrics [#real-world-production-metrics]

| Metric                          | Value                                          |
| ------------------------------- | ---------------------------------------------- |
| Employee-hours tracked          | 5,692                                          |
| Clock events processed          | 2,743                                          |
| Employee-shifts worked          | 742                                            |
| Active employees managed        | 33 + 5 admins                                  |
| Concurrent daily users          | \~13 avg, 20 peak                              |
| Weeks in production             | 14                                             |
| Auto-generated alerts           | 422 (207 missing punch, 101 overtime, 86 late) |
| Failed PIN attempts intercepted | 111                                            |
| Admin audit trail entries       | 559                                            |
| Out-of-shift approvals          | 256                                            |
| Timesheets approved             | 86                                             |
| Kiosk devices registered        | 15 across multiple locations                   |
| Growth trend                    | 32 → 77 shifts/week (2.4x in 14 weeks)         |

## Engineering metrics [#engineering-metrics]

| Metric                 | Value                                              |
| ---------------------- | -------------------------------------------------- |
| Lines of code          | 53,664                                             |
| React components       | 64 custom + 28 shadcn/ui                           |
| Backend functions      | 117 (Convex mutations, queries, actions, crons)    |
| Database tables        | 17 with 75 indexes                                 |
| Live documents in prod | 5,845+                                             |
| Pages / routes         | 26 across 4 portals (admin, kiosk, employee, auth) |
| Automated tests        | 537 (230 unit Vitest + 307 E2E Playwright)         |
| Vercel deployments     | 159 (97% success, \~35s avg build)                 |
| Commits                | 165 over 84 days                                   |
| Features shipped       | 48 features + 42 fixes in 84 days                  |
| Deploy frequency       | \~1.9 deploys/day                                  |
| Convex validators      | 749 runtime type-checks                            |
| Monthly infra cost     | $0 (Convex + Vercel free tiers)                    |

## Architecture [#architecture]

```
Browser (Next.js 16 / React 19)
    |
    v
Convex Cloud (real-time database + serverless functions)
    |
    +-- Better Auth (email/password, TOTP 2FA, organizations)
    +-- Stripe (subscription billing with webhooks)
    +-- Resend (transactional email)
    |
Vercel (hosting, edge network)
```

## Key features [#key-features]

* **Kiosk mode** — Touch-friendly PIN pad (80×80px buttons) optimized for
  shared iPad. Device authorization blocks unauthorized hardware before
  PIN entry. Real-time clock display with organization branding. Automatic
  punch-type detection (clock in vs. clock out).
* **Admin dashboard** — Real-time "who's working" status with live
  updates. Alert system: late arrivals, no-shows, missing punches,
  overtime warnings. Command palette (⌘K) for global search.
* **Timesheet management** — Auto-generated weekly pay periods
  (Friday–Thursday). Approve / reject individual timesheets. Overtime
  calculation and approval workflow. Excel / CSV export for payroll.
* **Employee management** — Full CRUD with status lifecycle (active,
  pending, inactive, seasonal, terminated). Schedule assignment with
  shift templates. Pay rate tracking. Employee self-service portal for
  checking hours and estimated pay.
* **Reports** — Team on-time rate with per-employee breakdown. Payroll
  export. Configurable date ranges. Good standing vs. needs-attention
  categorization.
* **Subscription billing** — Stripe-powered lifecycle
  (trial → active → past\_due → canceled → frozen → deleted). 3-day grace
  period for expired subscriptions on kiosk. Grandfathered free tier for
  early adopters.
* **Six automated cron jobs** — Missing-punch detection every 15 minutes.
  No-show detection at 8:30 and 9:00 AM weekdays. Weekly timesheet
  generation Friday 6 PM. Old alert cleanup Sunday 2 AM. Trial expiration
  checks daily 3 AM. Subscription lifecycle management daily.
* **Multi-tenant architecture** — Organization-level data isolation.
  Role-based access (owner, admin, employee). Cross-org switching for
  users in multiple orgs. Row-level security via Convex tenant queries.

## What makes it stand out [#what-makes-it-stand-out]

* **Two days from brief to production.** Solo, while finishing a CS
  degree. Zero training required for staff on day one.
* **14 weeks of real production use** — 5,692 employee-hours across 742
  shifts, 2,743 clock events, zero data loss.
* **2.4x usage growth** — 32 to 77 shifts per week organically, with no
  marketing.
* **537 tests** covering admin flows, kiosk flows, auth flows, billing,
  multi-tenant isolation, and responsive viewports (mobile, tablet,
  desktop).
* **$0/month infrastructure** — Convex + Vercel free tiers support 33
  daily employees, 15 kiosks, real-time WebSocket subscriptions.

## Stack [#stack]

| Layer      | Technology                                              |
| ---------- | ------------------------------------------------------- |
| Framework  | Next.js 16 (App Router), React 19, TypeScript 5         |
| Backend    | Convex (real-time database + serverless functions)      |
| Auth       | Better Auth 1.5.6 (email/password, TOTP 2FA, multi-org) |
| Billing    | Stripe (subscriptions with webhook lifecycle)           |
| Email      | Resend (transactional templates)                        |
| UI         | Tailwind CSS 4, shadcn/ui, Framer Motion                |
| Testing    | Playwright E2E (mobile/tablet/desktop), Vitest          |
| Deployment | Vercel + Convex Cloud, atomic deploys                   |

## Links [#links]

* **Live:** [https://tinytimekeeper.com](https://tinytimekeeper.com)
* **Demo login:** `jordan@acmecorp.com` / `demo1234` (Acme Corporation, seeded fictional org)
