Case study

GigTrack — building the tool I'd actually want as a freelancer.

A job and client tracker for gig workers, built end to end with a Laravel API, policy-driven authorization, and a mobile-first Next.js frontend.

GigTrack dashboard preview

Freelancers often track clients across spreadsheets and chat threads. Those tools do not understand multiple jobs per client, partial payments, deadlines, or carefully limited sharing.

The goal was a narrower tool that answers "what needs attention, and who owes me what?" at a glance.

GigTrack keeps clients, jobs, payments, due dates, and collaborators together without importing the complexity of a team workspace.

One workspace, clear boundaries.

The owner manages the business while each invited collaborator sees only the job they need.

Freelancer

Manage clients and jobs

Tracks status, deadlines, agreed amounts, payments, and the work that needs attention next.

Client or assistant

See one job, nothing more

Gets focused access to a shared job without exposing other clients, rates, or financial records.

Sharing is job-scoped, not workspace-wide.

Authorization is shaped around the real relationship: a client can collaborate on one commissioned job, while payment visibility remains private unless the owner opts in.

GigTrack dashboard screenshot

The dashboard brings jobs, deadlines, and outstanding payments into one view.

Optional image slot for a calendar or collaborator view.

What the app includes

Client and job management, payment tracking, calendar views, Sanctum authentication, collaborator invitations, policy-driven authorization, and consistent API error responses.

The important constraint is that visibility is explicit and per job, rather than inherited from a shared workspace.

An API designed around ownership.

Laravel handles authentication, policies, validation, and business rules. Next.js provides the mobile-first interface, while Pest feature tests protect collaborator and payment boundaries.

Next.js
Mobile-first job UI
Laravel API
Auth, policies, business logic
Database
Clients, jobs, payments

Bugs worth naming.

The hardening pass found issues that a quick happy-path click-through would miss.

Tailwind utilities silently disappeared because the custom palette was not being loaded. A modal backdrop also stopped covering content after its scroll boundary, and Laravel timestamps produced invalid dates when the frontend assumed a plain date.

// normalize API dates before formatting
const dueDate = new Date(value).toISOString().slice(0, 10);

Moving the palette into the supported theme configuration, separating the fixed backdrop layer, and normalizing dates at the boundary made the UI reliable across real data and longer interactions.

The model matters more than the feature list.

GigTrack reinforced that a useful product is defined by its boundaries: who can see a job, when money becomes visible, and what happens when real data refuses to look neat.