All projects
SaaS

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
Huble — Time Tracking & Billing SaaS
  • ~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: timezone picker resolving organization, personal and device timezones
  • Time Entry Review: filters by member, project, task, team and client
    Time Entry Review: filters by member, project, task, team and client
  • Daily Timesheet: daily summary and timezone-aware timeline
    Daily Timesheet: daily summary and timezone-aware timeline
  • Daily Timesheet: per-member entries with activity, idle, manual and session time
    Daily Timesheet: per-member entries with activity, idle, manual and session time
  • Projects: billable workstreams with clients, teams, members, tasks and deadlines
    Projects: billable workstreams with clients, teams, members, tasks and deadlines
  • Import Projects: CSV/Excel import with per-organization rate limits and size caps
    Import Projects: CSV/Excel import with per-organization rate limits and size caps
  • App and URL Classification: core, non-core and unproductive categories
    App and URL Classification: core, non-core and unproductive categories