Manikandan
← All work

Iyal Labs

GST filing for every client, without the Excel matching

A product for CA firms. AI reads the invoices, a desktop agent handles the government portal, and staff review only what doesn't match.

Role
Founder, design and build
Period
2026
Team
Me
Partners
A CA firm's staff
Stack
Next.js on Cloudflare, Electron, Playwright, Mistral OCR
Reading time
4 min
Tangent firm dashboard
The firm dashboard. Client names and GSTINs blurred.

The problem

A CA firm files GST for dozens of clients every month. For each one, staff collect invoices, download supplier data from the government portal, compare the two in Excel, chase mismatches, accept or reject entries, then file.

Hundreds of invoices per client, the same steps every month, hard deadlines.

What I found

The first version could do every step, and it was hard to use. Everything sat on one screen.

The GST month already has a shape, set by the deadlines: invoices by the 10th, actions by the 13th, supplier data on the 14th, filing by the 20th. Staff weren't asking what the tool could do. They were asking which client is behind, and on what.

Key decisions

Built around the calendar
Each client's month is a four-step workflow that follows the deadlines. Steps guide; they don't lock, because accountants often work ahead.
AI reads, people check
Printed and handwritten invoices are read by AI. GSTINs are validated and every manual edit is marked.
Careful matching
Match on GSTIN and invoice number first. Use the amount only when exactly one invoice fits. Exact matches are accepted automatically.
Clients upload directly
Businesses upload invoices to their own portal, and the firm can email each client what is still pending.
Months can close with known gaps
Closed months turn grey, not red, so the dashboard shows only what still needs action.

How it's built

Stack
Next.js on Cloudflare with D1 and R2 for the firm workspace and client portal.
Portal agent
An Electron desktop app drives the GST portal with Playwright from the firm's own computer. It re-reads live portal state before submitting, so it never overwrites a newer decision. Queries went from 8–20 seconds to 1–3.
Invoice reading
Mistral OCR extracts invoice fields. Credit notes are matched with the correct sign.

Result

8–20 s → 1–3 s
per portal query
Auto
exact matches accepted

Staff see one queue across all clients, ordered by the filing calendar, and spend their time on the exceptions.