PodatekMT5
podatekmt5.pl
Brief
Polish traders settling MT5 profits for PIT-38 must convert every single position to złoty at the NBP mid-rate from the working day before the trade closed. Across a few hundred trades that is hours of spreadsheet work and very easy to get wrong. The product turns an exported MT5 report into PIT-38-ready figures in a couple of minutes.
Decisions
01Parse in the browser, not on the server
The MT5 report is parsed client-side; the trade history never leaves the device. For a file that is effectively somebody's brokerage statement, that is the difference between “trust me with it” and “there is nothing to trust me with”.
02Rates straight from the NBP API
Exchange rates come from the official NBP API and implement the art. 30b / art. 11a rule: the mid-rate published on the working day preceding the close, correctly stepping back over weekends and public holidays. The output has to hold up at a tax office, not merely look plausible.
03An embedded font, because Polish
jsPDF's built-in Helvetica cannot render ą ć ę ł ń ó ś ź ż, so the export used to silently drop diacritics from a document headed to Urząd Skarbowy. It now embeds a subsetted Lato, lazy-imported so the font is only downloaded when somebody actually exports a PDF.
04Getting a third-party player off the critical path
An embedded YouTube demo was loading its full player on every single visit: roughly 950 KB of third-party JavaScript and CSS, about half the weight of the page, on a page most visitors never watched the video on. It is now a lightweight thumbnail that only mounts the real player once you click it.
Result· before → after
Mobile
Desktop
Mobile performance is still held back by roughly 210 KB of unused JavaScript in the application bundles. Splitting that out is the next planned pass; this page will be updated with the new measurement when it lands.
All figures are real Lighthouse measurements (v12.8.2) taken against the live site on July 2026. Nothing is estimated.