Tiny Time Keeper
Replaced $400/mo WorkEasy — built in 2 days
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
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
| 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
| 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
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
- 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
- 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
| 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) |
| 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
- Live: https://tinytimekeeper.com
- Demo login:
jordan@acmecorp.com/demo1234(Acme Corporation, seeded fictional org)