<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Leon Reed — Notes on Small Web Tools]]></title><description><![CDATA[Leon Reed — Notes on Small Web Tools]]></description><link>https://laconicleon.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>Leon Reed — Notes on Small Web Tools</title><link>https://laconicleon.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 11:35:05 GMT</lastBuildDate><atom:link href="https://laconicleon.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What “browser-local” image conversion actually means]]></title><description><![CDATA[“Browser-local” is an easy phrase to put on a product page, but it is worth being precise about what it means.
For image conversion, it describes where the file transformation happens. Instead of send]]></description><link>https://laconicleon.hashnode.dev/what-browser-local-image-conversion-actually-means</link><guid isPermaLink="true">https://laconicleon.hashnode.dev/what-browser-local-image-conversion-actually-means</guid><category><![CDATA[privacy]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Leon Reed]]></dc:creator><pubDate>Sat, 05 Sep 2026 13:48:33 GMT</pubDate><content:encoded><![CDATA[<p>“Browser-local” is an easy phrase to put on a product page, but it is worth being precise about what it means.</p>
<p>For image conversion, it describes where the file transformation happens. Instead of sending images to a conversion server, the browser reads the files selected on the device, prepares the PDF there, and lets the user download the result. That is a useful privacy boundary for everyday work with screenshots, scans, receipts, and design exports.</p>
<p>It is not a claim that a browser magically solves every privacy problem. The operating system, browser extensions, file-sync settings, and the people with access to the device still matter. But avoiding an unnecessary conversion-server upload removes one system from the path.</p>
<h2>The boundary changes the workflow</h2>
<p>Suppose a folder contains ten screenshots for a bug report. A server-based tool usually asks the user to upload all ten files, waits for processing, then returns a generated document. A browser-local workflow keeps the core sequence on the device instead:</p>
<ol>
<li>Select the images.</li>
<li>Arrange the page order.</li>
<li>Choose page sizing and margins.</li>
<li>Generate and download the PDF.</li>
</ol>
<p>The final PDF still has to be shared somewhere if the job requires it. The difference is that the conversion step does not create an additional remote copy by default.</p>
<h2>What this approach does not do</h2>
<p>Local conversion has limits that are important to state clearly:</p>
<ul>
<li>It creates an image-based PDF; it does not run OCR or reconstruct editable text and tables.</li>
<li>The browser and device need enough memory for the selected files.</li>
<li>Large batches can still take time because the work is happening on the current device.</li>
<li>Page order and print settings still need a human check before export.</li>
</ul>
<p>Those limits are not drawbacks to hide. They help people choose the right workflow. If the goal is searchable extracted text, a dedicated OCR pipeline is a different job. If the goal is to send a set of images as one ordered document without adding another file-processing service, local conversion is often the simpler option.</p>
<h2>A small tool built around that boundary</h2>
<p>I maintain <a href="https://pngbinder.com/">PNG Binder</a>, a free browser-local PNG-to-PDF converter. It accepts up to 50 PNG, JPG, or JPEG images, lets users arrange them, and produces one PDF without requiring an account or sending the images to a conversion server.</p>
<p>The design goal is deliberately narrow: make the common “these images need to become one PDF” task less fussy, while being clear about what stays local and what the output can do.</p>
<hr />
<p>Disclosure: I am the maker and operator of PNG Binder.</p>
]]></content:encoded></item><item><title><![CDATA[Why Bill Splitters Need Cents, Not Floating Point]]></title><description><![CDATA[A bill splitter has one promise that matters more than its layout: every person’s share must add up to the final bill.
That sounds obvious, but it becomes surprisingly easy to break when money is trea]]></description><link>https://laconicleon.hashnode.dev/why-bill-splitters-need-cents-not-floating-point</link><guid isPermaLink="true">https://laconicleon.hashnode.dev/why-bill-splitters-need-cents-not-floating-point</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Product Design]]></category><dc:creator><![CDATA[Leon Reed]]></dc:creator><pubDate>Thu, 03 Sep 2026 13:05:28 GMT</pubDate><content:encoded><![CDATA[<p>A bill splitter has one promise that matters more than its layout: every person’s share must add up to the final bill.</p>
<p>That sounds obvious, but it becomes surprisingly easy to break when money is treated as an ordinary decimal number.</p>
<p>A restaurant bill may include a subtotal, tax, tip, a service charge, and a choice about whether the tip is calculated before or after tax. Once a group splits the result, the application has to answer a simple question precisely: where does the extra cent go?</p>
<p>The safest starting point is to represent money in cents.</p>
<p>Instead of storing $96.00 as a decimal value, store 9600 cents. Instead of treating 20% as a floating-point number, keep the percentage in a precise integer form and round only at an explicit boundary. That avoids tiny binary floating-point differences becoming visible as a missing or duplicated cent.</p>
<p>The same rule matters when dividing a total. If $96.00 is split among three people, the result is clean: $32.00 each. But many totals do not divide evenly. A $100.00 bill split among three people cannot produce three identical cent amounts. The interface should allocate the remaining cent deliberately, then verify that all shares still equal the completed bill.</p>
<p>For a one-off restaurant calculation, clarity matters as much as arithmetic. The screen should show the subtotal, tax, tip basis, tip amount, final total, and each payer’s amount together. A person should not have to wonder whether the tip was calculated before tax or why one share differs by a cent.</p>
<p>This is the approach behind <a href="https://calculator-toolkit.com/">Calculator Toolkit</a>: calculations run locally in the browser, without an account or bill-data upload. The goal is not to turn dinner into expense-tracking software. It is to make one payment total understandable before the group pays.</p>
<p>Small calculation tools earn trust through these details. When the numbers reconcile, the explanation is visible, and the data stays on the device, the tool can stay out of the way.</p>
<p>Disclosure: This article was drafted with AI and reviewed by Leon Reed.</p>
]]></content:encoded></item></channel></rss>