johan_u

A shipped product · September 2026

Jurnal Lentera Bursa

A trading journal and fee calculator for Indonesian retail investors on the IDX. It answers the three questions a broker application quietly leaves you to work out yourself: what a trade actually costs once every fee is counted, what price the exchange's fraction rules will accept, and how far today's auto-reject ceiling and floor sit from where the stock is trading.

Livedeployed, gated access
48tests proving it refuses bad input
0journal data on my server
Bahasawritten for Indonesian users
The Jurnal Lentera Bursa landing page, in Indonesian, offering transaction journalling, price fractions and break-even calculation.
The landing page. Gated, because the alternative is pretending an open endpoint is safe.

01 · Why it exists

It started with my mother's notebooks

Several of them, plus loose sheets, all of it working and none of it necessary.

My mother began trading on the Indonesian exchange, and kept her record by hand — notebooks and loose paper. It worked. She could find what she needed. But watching her reconcile it, I kept catching the same thing: she was answering, by hand and after the fact, questions the trading application could have answered before she placed the order.

Indonesian retail investors are not badly served because the maths is hard. They are badly served because the fee structure, the exchange's price fractions and the auto-reject band are three separate things that have to be combined, and no tool in front of them combines them. So most people estimate. The estimate is usually wrong in the same direction — optimistic.

The one thing it has to get right

True break-even. Not the price you bought at — the price you must sell at to be level once every broker fee on both sides has been taken. That single number is the difference between a position you think is flat and one that is quietly down, and it is the number a notebook is worst at.

The transaction journal listing trades with fee-inclusive profit and loss
The journal — entries, fee-inclusive profit and loss, and the running position.
The calculator showing exchange price fractions and the auto-reject range for a stock
Price fractions and the auto-reject range, for today.

02 · What it does

Four things, done properly

Scope kept deliberately narrow, because a tool that does one job correctly beats one that does six approximately.

Fee-inclusive profit and loss

Every broker fee on both sides of the trade, applied before the number is shown to you, so the figure on screen is the figure in your account.

Exchange price fractions

The IDX accepts prices only on a tick grid that changes with the price band. The calculator snaps to the correct fraction rather than letting you plan around a price the exchange will refuse.

Auto-reject range

Today's ARA ceiling and ARB floor, in rupiah, against where the stock is now — so you know how much room a position actually has before the exchange stops it.

A record that outlives the tool

Versioned CSV import and export. If I stop maintaining this tomorrow, the journal is still yours and still readable in a spreadsheet. That is a deliberate design constraint, not a feature.

The three capabilities set out on the landing page: journal, fractions and auto-reject, and break-even
The three panels, as a first-time user meets them.

03 · How it is built

What I will actually guarantee

Three claims, each one designed in rather than promised in a policy.

Your journal never reaches my server

It stays in your browser. This is not a privacy policy, it is an architecture — there is no endpoint that receives your positions, so there is nothing for me to lose, sell, or be careless with. The cost is that clearing your browser data clears your journal, which is why the CSV export exists.

Access is gated and token-verified

A financial tool with an open endpoint is an invitation. Access is verified, usage is logged on the server, and error logs are scrubbed so a stack trace cannot leak a ticker code or a price on its way into a log file.

Forty-eight tests, all of them adversarial

The test suite does not exist to prove the happy path works. It exists to prove the system refuses what it should refuse: forged signatures, tokens issued for the wrong audience, expired tokens, injected journal content, oversized payloads. A test that only confirms the thing you hoped for is not evidence.

On building it with an AI teammate

I directed an AI teammate through this build and then audited it. It reported three defects to me; I read the source and found two of them were not real, and fixed the one that was. Had I taken the report at face value I would have "fixed" working code and shipped the genuine bug untouched. I now treat generated output the way I treat a colleague's pull request — read it, test it, and let the tests rather than the confidence of the claim decide.

Break-even and fee calculation shown against a worked example
Break-even, after fees, for a worked position.
The journal view with versioned CSV import and export
Versioned CSV, so the record outlives the tool.

Access

It is gated, on purpose

This is a financial tool built by one undergraduate, and I would rather know who is using it than have a number to quote. If you would like to try it — as an investor, a recruiter checking whether the thing is real, or someone who wants to argue with how I calculated break-even — email me and I will set you up.

Built independently during the DAI MasterClass How to Build AI Products — and Prove They Work, taught by S. Anand, Head Innovator at Straive.