Skip to content
← All work

Wazirs Cheques

Cheque printing for UAE businesses: calibrate any bank's cheque leaf to the millimetre, print onto it, and track every cheque from draft to cleared, post-dated series included.

Ask for a demo
Role
Design and build, solo
Year
2026
Region
UAE
Built with
React, TypeScript, Tailwind CSS, NestJS, Supabase, Headless Chromium
Status
Built, Aug–Sep 2026
A year of post-dated cheques, every date and number reviewed before any is created

[01]

// THE PROBLEM

Why it exists

The
Problem

UAE businesses still pay rent, suppliers and contractors by cheque, often a year of post-dated cheques at a time.

Every bank puts the payee, the date and the amount in a different place on its leaf, and a cheque printed a few millimetres out, or with the amount in words wrong, is a wasted leaf or a refused payment.

[02]

// WHAT I BUILT

The rules

What I
Built

  1. 01

    Calibrate any bank's leaf

    Upload a scan of the blank leaf and drag the seven fields onto it against millimetre rulers; arrow keys nudge by 0.5 mm, or 0.1 mm with Shift. Auto-detect finds the printed lines and boxes on the scan and suggests where each field goes. A blank-paper test print comes before any real leaf.

  2. 02

    A year of post-dated cheques in one go

    Pick the account, the payee, the first date and monthly or quarterly. Every date and cheque number is previewed, with a check for clashes, and all of them are created together or not at all.

    1. Account + payee
    2. First date, monthly or quarterly
    3. Preview every cheque
    4. Create all, or none
  3. 03

    A register with a status lifecycle

    Every cheque moves from draft to printed, then to cleared, bounced or cancelled, with tabs, search and a date range. Only printing can mark a cheque printed.

    1. Draft
    2. Printed
      • Cleared
      • Bounced
      • Cancelled
  4. 04

    Words frozen at print time

    The amount in words written to the register and the words printed on the leaf come from one call. A reprint uses the stored words, so a later change to the wording can never put different words on a second copy of the same cheque.

  5. 05

    Printing that fails safe

    The PDF is rendered before anything changes, then a single update records it and marks the cheque printed, only if it's still a draft. Words that won't fit the leaf's two lines, measured with the real font, are refused before a leaf is used.

  6. 06

    A calendar for what's due

    The next 14 days of cheques with countdowns, a month view, and a dashboard alert for anything due within a week.

[03]

UNDER THE HOOD

Request path

  1. BrowserReact + TypeScript + Tailwind, its own screens
  2. APINestJS: templates, printing, series, register
  3. SupabaseFour tables of its own, reachable only through the API; private storage for leaf scans
  4. PDFHeadless Chromium, printed at the leaf's exact size
From the code and git history (84643fb).

Decisions worth explaining

  • Measured from the top-left corner

    Chromium was measured shifting the page size by a fraction of a millimetre while the top-left corner stayed put, so every field is anchored there, including right-aligned amounts.

  • Amounts in fils, converted once

    An amount becomes whole fils once, so 9.995 can't turn into 9.99. The figures print as **18,750.00/-, so no digits can be added.

  • Removable by design

    No key points from the cheque tables into the CRM, so the module could be removed by dropping its four tables.