Moha. Jihat Hasan — Full-stack engineer · System architect
Available now · open to relocation

I built the accounting system that 20+ businesses run on.

I built all of it alone, in eighteen months: the database, the accounting, the API and the screens. It handles their money, their stock and their tax. It has to be right every time.

20+
businesses live on it today
7 yrs
building software where numbers must be right
8
countries delivered to, every review 5-star
01The system

The platform, as it actually looks.

A journal entry for a single sale, posted by the engine that every movement of money in the system goes through.

General Ledger / Journal Entries / JE-2026-0412Balanced
Journal entry — Sale
AccountDebitCredit
1200Accounts Receivable1,240.500
4000Sales Revenue1,181.429
2300VAT Output Tax59.071
5000Cost of Goods Sold742.000
1300Inventory742.000
Totals1,982.5001,982.500
ΣDr = ΣCrTx type · Saledecimal(18,3)→ INV-88213

Rendered in code — not a screenshot.

818
REST endpoints
290k
hand-written lines
200
tables per tenant
48
transaction types

Counted from the source tree on 13 September 2026, not estimated. See how each one was counted →

02Selected engineering

Three problems where being wrong would have been worst.

Each card gives the problem and the decision that had no clean answer. The full case study — what I owned, the architecture, the result and what I would change — is one click behind it.

01The money path

A double-entry posting engine that cannot silently go wrong

Seventy-four places in the system move money. If one of them lands on the wrong account there is no error and no alert — the books are just quietly wrong until a year-end that will not reconcile.

When the system cannot find an account, guessing corrupts the books invisibly and refusing stops a shop trading. I chose the third answer.

.NET 8EF Core 8MySQL 8
Read the case
02The architecture

Multi-tenancy where one bug cannot leak a competitor's data

The clients are retailers and some of them compete. In one shared database, a single forgotten line in a single query shows one shop its rival's prices — and on a test database with one client, every query looks correct.

One database per client makes that bug impossible to write rather than merely tested for. The price is that every migration runs twenty-plus times.

EF Core 8MySQL 8Linux
Read the case
03In development

An offline-first till that cannot be stopped by the internet

A till that refuses to sell when the connection drops is worse than no till at all. The hard part is not working offline — it is coming back online without losing or duplicating a single sale.

The receipt prints last, after the money is durably on disk. Every ordering decision in the write path falls the same way: fail in the recoverable direction.

Avalonia 11.NET 8SQLCipher
Read the case

Client names are withheld by agreement. The running system is demonstrated live on a screen-share, never handed over.

03What I am looking for

A product team where the numbers have to be right

Full-stack or architecture, on a product where the numbers matter — ERP, accounting, invoicing, retail, payments, logistics. I am most useful where the domain is hard and the correctness bar is high, because that is the only kind of software I have built.

I want the one thing I have never had: a team. Seven years alone means nobody has ever reviewed my code. I have run written standards, staged rollouts and my own security audit as substitutes — but they are substitutes. Working somewhere that already has review and a test culture is most of why I am moving.

Availability

Immediately. No notice period to serve. Open to relocation.

Get in touch

I am happy to walk through any of the above on a screen-share — the live system, the posting engine, the sync design. Ten minutes tells you more than this page can.

Not ready to write yet?

The first opens the platform as something you can walk through module by module. The second is the same argument on three pages, if you would rather forward it to someone than send them a link.

Gazipur, Bangladesh · Open to relocation