SaaS & Startup Product EngineeringWeb Development in DubaiAI Development & IntegrationSaaS · Agency operations

Navbatly — A Support Desk SaaS for Agencies, Built on Laravel and Inertia.js

Client — Navbatly · Karve DigitalYear — 2026
The Navbatly overview for October: September reports still to send, three new requests with first-reply due times, and what clients owe, longest wait first
The client

Karve Digital is a Dubai-founded engineering studio that builds and looks after websites and apps for clients across the UAE, the GCC and the UK. A large share of that work runs on monthly support plans: a set number of hours each month for updates, fixes, checks and small improvements.

Navbatly is the tool we built to run that work. It is our own product, made by the team that uses it every day, and it is now live at navbatly.com for other agencies and freelancers.

The challenge

Our support work lived in Linear, our project tracker, and every month someone rebuilt each client's hours by hand. Three things kept going wrong.

  • Tracking support hours. Hours were written into issue titles, like "[3 hours]", with sub-issues holding the internal breakdown. Adding up a client's month meant reading every issue again.
  • Carrying hours over. Unused hours on a plan should roll into the next month, up to whatever cap was agreed. None of our tools knew what a monthly allowance was, so rollover lived in a spreadsheet and in our heads.
  • A simple report. Each client wanted one page: what we did, in plain English, and which hours were included or billable. We built that sheet from scratch every month instead of pressing one button.

On top of that, a lot of late work was really waiting on the client — copy, logins, approvals — and nothing recorded for how long.

We built the tool we kept wishing we had

Every agency that sells support hours ends up with the same patchwork: a project tracker for the work, a timer or a spreadsheet for the hours, and a document for the client at the end of the month. We had that patchwork too, and month-end meant rebuilding the same numbers by hand for every client.

So we designed Navbatly around the thing the other tools leave out: the client's contract. Every request becomes a ticket numbered per client, like HBL-12, and every hour logged on it counts against the right contract in the month it was worked.

A ticket in Navbatly: priority, sub-tickets, what it needs from the client, and hours logged against the estimate.
A ticket in Navbatly: priority, sub-tickets, what it needs from the client, and hours logged against the estimate.

Problem one: tracking support hours

Time is logged on the ticket as client contact (calls, meetings, emails) or delivery (building, fixing, testing), and each entry is included in the plan, billable on top, or no charge. Change how a ticket is charged and it applies to new time, so a month you have already reported never changes under you. A month's hours export to CSV for invoicing.

Problem two: carrying hours over

A support plan holds a monthly allowance, with unused hours rolling into the next month up to an optional cap. When a month runs over, the agency chooses what happens: show it, bill it, carry it into next month or write it off. Goodwill hours go in as an adjustment with a reason, and terms can change from a chosen month without rewriting the months before.

A support contract statement: 10 hours a month, rollover up to 5, a goodwill adjustment, and hours used and left from May to October.
A support contract statement: 10 hours a month, rollover up to 5, a goodwill adjustment, and hours used and left from May to October.

Problem three: a client report in one click

Each ticket gets one plain-English line for the client, written once while the work is fresh. At the end of the month the report is already there: work completed and in progress, the hours for each, and the hours used and left on the plan. It goes to the client's contacts by email or as a private link with no sign-in, and Navbatly reminds the team if a month's reports have not gone out.

A client's monthly support report: hours left on the plan, billable and no-charge time shown apart, and completed work in plain English.
A client's monthly support report: hours left on the plan, billable and no-charge time shown apart, and completed work in plain English.

Why not Linear, Notion or a help desk?

We tried to make our existing tools do it first. Linear is excellent for product engineering, but it is built around issues and cycles, not a client's monthly allowance, so hours ended up in issue titles. A Notion database could hold anything, but every rollover rule, client view and report would have been ours to build and maintain. Service desks and time trackers each cover part of the job, and the gaps go back into a spreadsheet. The full story is in why we built Navbatly instead of using Linear or Notion.

The feature we did not plan: Client Clock

Once the hours were right, the next pattern was obvious: much of our late work was waiting on the client. Client Clock puts what we need — copy, files, access or an approval — on the ticket, asked of one person, with its own count of days waited. The client sends it from a private link without signing in, reminders go out on set days, and a project's target date moves later by every day it waited.

The client's private request link: what they owe, the days each item has waited, and the project's target date.
The client's private request link: what they owe, the days each item has waited, and the project's target date.
Waiting on clients: every outstanding item across all clients, longest wait first, with a pause notice due on one.
Waiting on clients: every outstanding item across all clients, longest wait first, with a pause notice due on one.

Why Laravel and Inertia.js

Navbatly is a Laravel application with an Inertia.js front end. Laravel handles routing, sign-in, permissions and the billing rules; Inertia renders the screens as a fast single-page interface without a separate API to version and secure. For a product whose value is in its rules — which month an hour counts in, how rollover is capped, who may change a contract — keeping those rules in one codebase was the deciding factor.

The same rules sit behind Navbatly's MCP server. Connect Claude or another MCP assistant, sign in with a Navbatly account — no API key to copy — and it can find and update tickets, log time, ask clients for what is needed and pull a client's report, with exactly the permissions that person has in the app.

How Navbatly fits together: one Laravel application behind the team's app, the client's private link and the MCP server.

Running Karve Digital on Navbatly

We moved our own client support into Navbatly before launch. On 28 October 2026 it held five clients (Karve Digital itself included), four monthly support plans and 139 tickets, 112 of them resolved, with 36 hours 55 minutes logged in October across 45 time entries. The work on Navbatly itself runs as one of those contracts, so we meet every rough edge first.

Much of the ticket and time work now goes through Claude. Even this case study was planned as tickets in Navbatly, opened and closed from Claude through the MCP server.

Building a SaaS product of your own?

This is the work we do for clients: product design, a Laravel application with a modern interface, an MCP server for AI assistants, and the marketing site that explains it all. See our SaaS development service, or try Navbatly yourself.

/01

The approach

01

Model the contract first

Support plans, project budgets and hourly work are first-class records, so every hour has a home before a ticket is even opened.

02

Count time where it was worked

Each entry counts in the month it was worked and is marked included, billable or no charge, so rollover and overage are calculated, not typed.

03

Write the client's line once

A plain-English summary on each ticket becomes the monthly report, so it needs no rebuilding and the client needs no login.

04

One set of rules for people and AI

The Inertia.js app and the MCP server go through the same Laravel permission checks, so Claude can do what the user can and nothing more.

From the project
Navbatly overview in dark mode: reports to send, new requests with reply due times, and what clients owe
Navbatly ticket HBL-21 in dark mode with client actions, sub-tickets and 7h 30m logged of a 16h estimate
A Navbatly monthly client report in dark mode with hours left on the care plan and completed work in plain English
Navbatly new requests list: three client requests with first-reply due times and buttons to assign, plan, backlog or reply
Navbatly backlog grouped by client and contract, with 23 hours of estimated work that never counts against client hours
/02

The outcome

139Tickets logged, 112 resolved (28 Oct 2026)
4Monthly support plans with rollover
36h 55mLogged in October across 45 entries
0Client logins needed for requests and reports
Deliverables
  • Product strategy & UX
  • Laravel application
  • Inertia.js front end
  • Support plans with rollover & overage
  • One-click monthly client reports
  • Client Clock & no-login request links
  • MCP server for Claude
  • Passkeys & two-factor sign-in
  • Marketing site & comparison pages
Stack

Each technology links to how — and why — we use it.

/03

Questions

What is Navbatly?

Navbatly is a support desk for web agencies and freelancers, made by Karve Digital. Requests become tickets numbered per client, hours count against each client's contract in the month they were worked, unused hours can roll over, and every client gets a plain-English monthly report.

What is Navbatly built with?

Navbatly is a Laravel application with an Inertia.js front end. It also has an MCP server, so Claude and other assistants can work with tickets, time and reports using the same permissions the person has in the app.

Why didn't Karve Digital use Linear or Notion for client support?

Linear is built for product teams' issues and cycles, not monthly client allowances, so we were writing hours into issue titles and rebuilding reports by hand. Notion could be shaped into a tracker, but the rollover rules, client views and reports would have been ours to build and maintain.

Can Karve Digital build a SaaS product like this for us?

Yes. We design and build SaaS products end to end — product discovery, Laravel and Inertia.js or Next.js applications, AI and MCP integrations, and the marketing site — for clients in the UAE, the GCC and beyond.

We run Karve Digital on Navbatly — the support desk made by Karve Digital
More work

Want outcomes
like these?

Let's Talk
Start a project