<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abdul Jabeer Shaik</title>
    <description>The latest articles on DEV Community by Abdul Jabeer Shaik (@jabeer_s).</description>
    <link>https://dev.to/jabeer_s</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3926071%2Fecb56e45-60b0-4de7-9545-a666f0a4d50c.jpg</url>
      <title>DEV Community: Abdul Jabeer Shaik</title>
      <link>https://dev.to/jabeer_s</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jabeer_s"/>
    <language>en</language>
    <item>
      <title>I built an HTML-to-PDF API in 6 weeks — here's what I learned</title>
      <dc:creator>Abdul Jabeer Shaik</dc:creator>
      <pubDate>Tue, 12 May 2026 01:48:05 +0000</pubDate>
      <link>https://dev.to/jabeer_s/i-built-an-html-to-pdf-api-in-6-weeks-heres-what-i-learned-14b6</link>
      <guid>https://dev.to/jabeer_s/i-built-an-html-to-pdf-api-in-6-weeks-heres-what-i-learned-14b6</guid>
      <description>&lt;p&gt;I got frustrated with PDF APIs that make you enter a credit card &lt;br&gt;
before you can test anything. So I built my own.&lt;/p&gt;

&lt;p&gt;It's called pdfkitt.dev — POST your HTML, get back a PDF. &lt;br&gt;
1,000 free PDFs/month, no credit card required.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://api.pdfkitt.dev/v1/pdf &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer pdfk_live_..."&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"html": "&amp;lt;h1&amp;gt;Hello&amp;lt;/h1&amp;gt;"}'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--output&lt;/span&gt; result.pdf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. No SDK required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tech decisions worth sharing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Playwright over Puppeteer&lt;/strong&gt; — more stable browser pool &lt;br&gt;
management, better CSS support for print layouts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript disabled by design&lt;/strong&gt; — security tradeoff. Works &lt;br&gt;
perfectly for server-rendered HTML like invoices, reports, and &lt;br&gt;
bank statements. Notion-style JS-heavy pages don't work — &lt;br&gt;
and that's documented upfront.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Raw SQL over an ORM&lt;/strong&gt; — kept it simple. Postgres on Railway, &lt;br&gt;
bcrypt-hashed API keys, that's it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fastify over Express&lt;/strong&gt; — faster, TypeScript-first, schema &lt;br&gt;
validation built in.&lt;/p&gt;

&lt;h2&gt;
  
  
  The free tier decision
&lt;/h2&gt;

&lt;p&gt;1,000 PDFs/month free was a deliberate choice. Most PDF APIs &lt;br&gt;
give you 50-100 to "test" which isn't enough to actually &lt;br&gt;
integrate and ship. I wanted developers to be able to go &lt;br&gt;
from zero to production without ever thinking about paying.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's working so far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Invoices, reports, bank statements render accurately&lt;/li&gt;
&lt;li&gt;PowerShell integration works (had to document JSON 
handling explicitly — Windows devs have different defaults)&lt;/li&gt;
&lt;li&gt;CSS print layouts, tables, page breaks all handled&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I cut from v1
&lt;/h2&gt;

&lt;p&gt;SDKs, URL conversion, templates, webhooks, custom fonts, &lt;br&gt;
screenshots, merge/split, OCR. All of it. Shipping one thing &lt;br&gt;
well beats shipping ten things poorly.&lt;/p&gt;




&lt;p&gt;Live at &lt;a href="https://www.pdfkitt.dev" rel="noopener noreferrer"&gt;https://www.pdfkitt.dev&lt;/a&gt; — would love feedback from &lt;br&gt;
anyone who's dealt with PDF generation pain.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>api</category>
      <category>buildinpublic</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
