Skip to content
← All work

Practice OS

Practice management for accounting firms: clients, engagements, time, invoicing and payments, in one multi-tenant app.

Ask for a demo
Role
Product, Design, Front end, Back end, Infra
Region
India, UAE
Built with
React, TypeScript, Tailwind CSS, NestJS, Supabase, AWS, Postmark
Status
Live · crm.wazirs.in
Engagements by stage, from records not yet in to completed

[01]

// THE PROBLEM

Why it exists

The
Problem

An accounting practice runs many clients at once. Each has engagements, tasks with deadlines, time to log and invoices to raise, under GST in India or VAT in the UAE.

When that lives across spreadsheets, inboxes and a separate billing tool, nobody sees the whole picture of a client, and invoicing lags behind the work.

[02]

// WHAT I BUILT

The rules

What I
Built

  1. 01

    Clients, engagements, tasks and time

    The day-to-day work of a practice in one place: each client's engagements, the tasks under them and the time logged against them.

    1. Client
    2. Engagement
    3. Tasks
    4. Time logged
  2. 02

    Engagements on a board

    Every engagement moves across a board, from records not yet received to allocated, in progress, review and completed, filtered by client, assignee or service.

  3. 03

    Time against the fee

    Each engagement sets the agreed fee against the cost of the time logged on it, and shows how much of the time budget is used.

  4. 04

    ⌘K to anything

    From any page, ⌘K jumps straight to a client or an invoice.

  5. 05

    Invoicing for two tax systems

    Invoices carry GST for Indian firms and VAT with a TRN for UAE firms, and payments are recorded against them.

    India

    • GST
    • INR

    UAE

    • VAT
    • TRN
    • AED
  6. 06

    Documents and client email

    Draft documents from the client's record, import clients in bulk, and keep each client's email thread with the client.

  7. 07

    Each firm sees only its own data

    Practice OS is multi-tenant: many firms on one platform, with every firm's clients and records kept to that firm.

[03]

UNDER THE HOOD

Request path

  1. BrowserReact + TypeScript + Tailwind
  2. APINestJS on AWS
  3. SupabasePostgres + Auth
  4. EmailPostmark
From your project notes; not yet checked against the code.

Decisions worth explaining

  • Audit before redesign

    Each module was audited and hardened before its interface was rebuilt, so the new screens sit on behaviour that is already right.

  • One product for two countries

    Indian and UAE firms use the same app; tax rules switch with the firm rather than splitting the product in two.

[04]

// OUTCOMES

Confirmed only

Outcomes

300+

Automated tests