Huble — Time Tracking & Billing SaaS
Multi-tenant time tracking, payroll and invoicing SaaS, where every number has to add up.
- Role
- Full-stack engineer, module owner
- Live site
- gethuble.com

~100
merged PRs
50
migrations authored
83
model schema
6
modules owned
The Challenge
Tracked hours become timesheets, payroll and invoices, so every number must agree across web, desktop, reports and PDFs, for many organizations sharing one database. A rounding error is a wrong paycheck; a leaked row is a breach.
The Outcome
The core modules now enforce their own invariants, reports read pre-aggregated data, and web and desktop agree on every number.
What I Built
I owned the people, projects, tasks, timesheets, settings and finance modules across the NestJS backend and Next.js app, as part of a team.
Schema design
Designed the Prisma schema for the payroll and audit log features, along with smaller features and edits, shipped through idempotent, backfilled migrations.
Database-enforced integrity
Partial unique indexes, check constraints and triggers make duplicate timesheets and drifting invoice totals impossible.
Timesheets & pay periods
Owned submission and approval end to end, and redesigned pay periods so closing one never loses tracked time.
Speed at scale
Pre-computed, timezone-aware stats tables replaced scans over raw activity; web, desktop and reports share one calculation.
Security & multi-tenancy
Closed cross-tenant reads, added audit capture, and moved integration OAuth tokens to envelope encryption.
Imports & upgrades
Presigned S3 uploads for CSV/Excel import, a shared integration adapter, and the move to Next.js 16 and React 19.
Tech Stack
- TypeScript
- NestJS
- Next.js
- React
- PostgreSQL
- Prisma
- Redis
- BullMQ
- AWS S3
- Tauri
- TanStack Query
- Tailwind CSS
- Turborepo
- Playwright
Screenshots

Time Entry Review: timezone picker resolving organization, personal and device timezones 
Time Entry Review: filters by member, project, task, team and client 
Daily Timesheet: daily summary and timezone-aware timeline 
Daily Timesheet: per-member entries with activity, idle, manual and session time 
Projects: billable workstreams with clients, teams, members, tasks and deadlines 
Import Projects: CSV/Excel import with per-organization rate limits and size caps 
App and URL Classification: core, non-core and unproductive categories