<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: Ametrin</title><link>https://news.ycombinator.com/user?id=Ametrin</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 03 Jul 2026 09:08:14 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=Ametrin" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by Ametrin in "Typst 0.15.0"]]></title><description><![CDATA[
<p>Typst is a really good fit if the layout model works for your invoices and you want to keep it self-hosted. I’m building PDFBolt as a hosted api, and pricing was one of the first things I wanted to keep simple. For invoices and other recurring pdfs, I think teams mostly want to know what the monthly cost will be, not do math on every render</p>
]]></description><pubDate>Tue, 16 Jun 2026 08:32:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48552293</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=48552293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48552293</guid></item><item><title><![CDATA[New comment by Ametrin in "Ask HN: What are you working on? (June 2026)"]]></title><description><![CDATA[
<p>I’m working on PDFBolt, a PDF generation API for developers.<p><a href="https://pdfbolt.com" rel="nofollow">https://pdfbolt.com</a><p>It’s for the boring pdf jobs every SaaS eventually gets: invoices, reports, certificates, contracts, labels, that kind of thing. You send html, a url, or a template with JSON data, and get a PDF back.<p>Last week we shipped the Node SDK. Right now I’m working on the Python SDK and tightening up the docs</p>
]]></description><pubDate>Mon, 15 Jun 2026 09:53:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=48538974</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=48538974</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48538974</guid></item><item><title><![CDATA[New comment by Ametrin in "Ask HN: Is there a way to render URLs to PDFs on Android?"]]></title><description><![CDATA[
<p>Easiest is Firefox 'Save as PDF'. If you need more control (custom margins, JS wait, viewport size), PDFBolt has a free URL to PDF tool that runs in mobile browsers without signup</p>
]]></description><pubDate>Mon, 27 Apr 2026 09:01:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=47919276</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=47919276</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47919276</guid></item><item><title><![CDATA[New comment by Ametrin in "Ask HN: What Are You Working On? (March 2026)"]]></title><description><![CDATA[
<p>Working on PDFBolt (<a href="https://pdfbolt.com" rel="nofollow">https://pdfbolt.com</a>) - a PDF generation API. You send HTML, a URL, or a Handlebars template with JSON data, get a PDF back. Uses Playwright underneath so modern CSS just works.<p>Lately been deep in PDF/X print production - PDF/X-1a and PDF/X-4 with ICC color profiles and CMYK conversion. Had to build 11 color space converters on top of PDFBox 3.0. Also shipped an AI template generator where you describe what you need and it creates a Handlebars template with sample data, plus expanded the gallery to 38 pre-built ones.<p>Right now template management lives in the dashboard - edits auto-create drafts, you can compare any two versions as rendered PDFs and roll back if something breaks. Working on an API so coding agents can create and version templates programmatically.</p>
]]></description><pubDate>Tue, 10 Mar 2026 09:16:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47320815</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=47320815</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47320815</guid></item><item><title><![CDATA[Show HN: PDFBolt – HTML to PDF API with Git-like template versioning]]></title><description><![CDATA[
<p>Hi HN, I'm Michał. I posted PDFBolt here about a year ago as a basic
HTML to PDF API. Since then I've been rebuilding it around the thing
that kept bugging me: every time a designer tweaked a layout,
it meant a code change, a deploy, and a prayer that nothing broke
in production. I wanted templates that live on the server and version
themselves, so my API calls stay the same when the layout changes.<p>Try the editor, no sign-up. Open a sample report, change the data,
and download a real PDF:
<a href="https://pdfbolt.com/try" rel="nofollow">https://pdfbolt.com/try</a><p>Templates use Handlebars. Your API call sends a templateId + JSON data. You
update the template in the dashboard, your code never changes. Every
edit auto-creates a draft, and you publish when ready. You can browse
history and compare any two versions as rendered PDFs side by side.
The comparison shows rendered PDFs, not just code. A one-line margin tweak
can push a table onto the next page, and you won't catch that in code.
You can roll back with one click if something breaks.<p>Right now template management lives in the dashboard. I'm working on
an API so coding agents can create and version templates programmatically.<p>The part I went deepest on recently was compression. The compressor
samples every 10th pixel to classify each image as bitonal, grayscale,
or color, then picks an encoding per image. Bitonal gets CCITT Group 4
with Otsu's method for the threshold. Color and grayscale get JPEG.
Images with alpha channels get split into RGB (JPEG, lossy) and mask
(FlateDecode, lossless) via an SMask so edges stay sharp. Before any
of that, MD5 hashes of raw streams deduplicate identical images across
pages, and everything gets downscaled to target DPI.<p>Four tiers: lossless, low, medium, high. A 23 MB product catalog with
photos dropped to 1.6 MB on high.<p>Built on Apache PDFBox. I looked at Ghostscript but it's AGPL, which
doesn't work for a hosted SaaS.<p>I also support PDF/X-1a and PDF/X-4 for print with RGB to CMYK
conversion and ICC profiles. Happy to talk about the color pipeline
in comments.<p>Stack: headless Chromium via Playwright, Kotlin/Spring Boot, EU-hosted.
I don't store template data after rendering.<p>Two-person team, bootstrapped.<p>Revenue: <a href="https://trustmrr.com/startup/pdfbolt" rel="nofollow">https://trustmrr.com/startup/pdfbolt</a><p>Free: 100 PDFs/month, no card<p>Docs: <a href="https://pdfbolt.com/docs" rel="nofollow">https://pdfbolt.com/docs</a><p>Ask me anything about compression internals, template versioning,
color pipeline, or whatever.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47231658">https://news.ycombinator.com/item?id=47231658</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 03 Mar 2026 13:01:23 +0000</pubDate><link>https://pdfbolt.com/</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=47231658</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47231658</guid></item><item><title><![CDATA[New comment by Ametrin in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p><a href="https://pdfbolt.com" rel="nofollow">https://pdfbolt.com</a><p>A PDF generation API, Chrome-based. Most of my time lately goes into print production - browsers render everything in RGB but print needs CMYK with ICC color profiles, and getting that conversion right inside the PDF turned out to be a much deeper problem than expected. Got PDF/X-1a and PDF/X-4 working now.</p>
]]></description><pubDate>Mon, 09 Feb 2026 09:11:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=46943255</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=46943255</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46943255</guid></item><item><title><![CDATA[New comment by Ametrin in "Open source and self hostable/private file converter"]]></title><description><![CDATA[
<p>I can recommend <a href="https://pdfbolt.com" rel="nofollow">https://pdfbolt.com</a>. It is unfortunately not self-hosted but built with privacy in mind. I'm the founder.</p>
]]></description><pubDate>Sat, 12 Apr 2025 18:42:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=43666918</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=43666918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43666918</guid></item><item><title><![CDATA[New comment by Ametrin in "Show HN: How I built a SaaS thanks to my wife"]]></title><description><![CDATA[
<p>Thank you and all good for you :)</p>
]]></description><pubDate>Sat, 01 Feb 2025 13:08:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=42898016</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=42898016</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42898016</guid></item><item><title><![CDATA[Show HN: How I built a SaaS thanks to my wife]]></title><description><![CDATA[
<p>I’m Michał, and I’d like to share with you the journey I went through with my wife and how, thanks to her, we built our first SaaS, PDFBolt (<a href="https://pdfbolt.com" rel="nofollow">https://pdfbolt.com</a>). I’ve been a developer for over 10 years. In 2020, I decided to build a side project to learn all aspects of app development—deployment, authentication, payments, frontend, landing pages, etc. While looking for project ideas, I came across the Indie Hackers community, where I found a simple HTML to PDF API project. The creator mentioned a lot of interest in it and that it was generating revenue. I thought I’d build something similar myself and learn a lot in the process. But it wasn’t easy at all. After working from 9 to 5, it’s hard to spend another few hours in front of the computer in the evening. What about other responsibilities? Groceries, cooking, cleaning, hobbies, spending time with my wife? Still, I tried, very slowly. I had breaks lasting several months, and at one point, due to mental health issues, I practically stopped working on the project altogether.<p>My wife worked as a physiotherapist but, due to difficulties in her job, decided to switch to IT with my help, starting as a manual tester. She did it very quickly (maybe six months) and immediately found a job. In mid-2024, she started asking about my old project and insisted that we finish it. Thanks to her enthusiasm, we managed to do it very quickly. I focused on the backend, and she, in addition to testing, handled the entire frontend and landing page. Around the same time, we also adopted a dog from a shelter, which added a lot of positive energy to our lives and helped us stay motivated. In early January 2025, we officially launched the project. It’s been a long journey, and we don’t have any customers yet—we don’t even know if we will, as we have no idea about marketing :) But we’ve learned a lot and are already happy with the journey itself.<p>As for the technical aspects, the app uses:<p>Backend: Kotlin, Spring Boot, Postgres, Redis<p>Frontend: React, Next.js, Docusaurus<p>Auth: Firebase<p>Hosting: Render (the app is Dockerized)<p>Cloudflare R2 for file storage<p>PDFs are generated using Chromium via Playwright.<p>If you have any questions about the tech stack or anything else, feel free to ask! I’ll be happy to answer. Any feedback or criticism will be greatly appreciated. Thank you! :)</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42869850">https://news.ycombinator.com/item?id=42869850</a></p>
<p>Points: 10</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 29 Jan 2025 19:24:12 +0000</pubDate><link>https://pdfbolt.com/</link><dc:creator>Ametrin</dc:creator><comments>https://news.ycombinator.com/item?id=42869850</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42869850</guid></item></channel></rss>