<?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: Karan Choudhary</title>
    <description>The latest articles on DEV Community by Karan Choudhary (@karan5772).</description>
    <link>https://dev.to/karan5772</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4055586%2F7d877c89-1ed0-404e-9daa-fcc97f537679.jpg</url>
      <title>DEV Community: Karan Choudhary</title>
      <link>https://dev.to/karan5772</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/karan5772"/>
    <language>en</language>
    <item>
      <title>I Built a Free Invoice Generator for Indian Freelancers (and Learned More About GST Than I Wanted To)</title>
      <dc:creator>Karan Choudhary</dc:creator>
      <pubDate>Thu, 30 Jul 2026 19:07:07 +0000</pubDate>
      <link>https://dev.to/karan5772/i-built-a-free-invoice-generator-for-indian-freelancers-and-learned-more-about-gst-than-i-wanted-30l1</link>
      <guid>https://dev.to/karan5772/i-built-a-free-invoice-generator-for-indian-freelancers-and-learned-more-about-gst-than-i-wanted-30l1</guid>
      <description>&lt;p&gt;My first invoice as a freelancer took longer to figure out than the work&lt;br&gt;
it billed.&lt;/p&gt;

&lt;p&gt;I didn't know what a SAC code was. I didn't know if I needed to register&lt;br&gt;
for GST. And when the payment finally came in, it was smaller than the&lt;br&gt;
number on my invoice — nobody had told me about TDS.&lt;/p&gt;

&lt;p&gt;I looked for a tool to help. Every invoice generator I found was built for&lt;br&gt;
 the US or UK market, with a generic "tax" field that had nothing to do&lt;br&gt;
 with how GST actually works. None of them let you skip GST if you're not&lt;br&gt;
 registered. None of them understood CGST versus IGST. None of them knew&lt;br&gt;
 what an export invoice under LUT even is.&lt;/p&gt;

&lt;p&gt;So I built one. This is what I learned doing it, on both the tax side and&lt;br&gt;
 the engineering side.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tax rules, in short
&lt;/h2&gt;

&lt;p&gt;A few things surprised me enough that I wrote up a full research page on&lt;br&gt;
 them (cited to CBIC, the GST Council, and the GST portal), but the&lt;br&gt;
 short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You don't need a GSTIN below ₹20 lakh turnover&lt;/strong&gt; (₹10 lakh in special
category states). Below that, you shouldn't be charging GST at all —
and a lot of tools quietly assume otherwise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CGST+SGST vs IGST&lt;/strong&gt; depends on whether you and your client are in the
same state. Same state: split the 18% into 9% CGST + 9% SGST. Different
state: 18% IGST. This is mandatory under Rule 46 of the CGST Rules once
you're registered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exporting services to a foreign client&lt;/strong&gt; can be zero-rated under an
LUT (Letter of Undertaking), but the invoice needs a specific declaration
sentence on it, or it's not valid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TDS under Section 194J&lt;/strong&gt; means a client can legally deduct ~10% before
paying you. Nobody tells freelancers this upfront, so the first payment
always feels like it's missing money.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The build
&lt;/h2&gt;

&lt;p&gt;It's a client-side Next.js app. No backend, no database — everything is&lt;br&gt;
 stored in the browser's localStorage. That was a deliberate choice: an&lt;br&gt;
 invoice generator doesn't need to see your data to work, and "your data&lt;br&gt;
 never leaves your browser" is a real privacy property, not marketing copy.&lt;/p&gt;

&lt;p&gt;PDF generation was the part I underestimated. I used&lt;br&gt;
 &lt;code&gt;@react-pdf/renderer&lt;/code&gt; to produce real vector PDFs (selectable text, not a&lt;br&gt;
 screenshot rendered to an image) — and ran straight into a bug I didn't&lt;br&gt;
 expect: &lt;strong&gt;the ₹ symbol wasn't added to Unicode until 2010&lt;/strong&gt;, which means&lt;br&gt;
 the standard PDF fonts (Helvetica, Courier — decades older than that)&lt;br&gt;
 don't have a glyph for it at all. Every amount on every invoice was&lt;br&gt;
 rendering with a broken character instead of ₹. Fixed it by embedding&lt;br&gt;
 Noto Sans, a font that actually covers the glyph, instead of relying on&lt;br&gt;
 PDF defaults.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does now
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Works whether you have a GSTIN or not&lt;/li&gt;
&lt;li&gt;Automatic CGST/SGST vs IGST split based on state&lt;/li&gt;
&lt;li&gt;Export invoices under LUT, with the correct declaration text&lt;/li&gt;
&lt;li&gt;An estimated TDS note so your payout isn't a surprise&lt;/li&gt;
&lt;li&gt;Real PDF and PNG export&lt;/li&gt;
&lt;li&gt;No sign-up, no watermark, no account&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's free, and it'll stay free. It's also open source if you want to see&lt;br&gt;
 how any of the GST logic works, or send a PR if I've gotten an edge case&lt;br&gt;
 wrong.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="//invoice.karanchoudhary.dev"&gt;invoice.karanchoudhary.dev&lt;/a&gt;&lt;br&gt;
 Code: &lt;a href="//github.com/karan5772/InvoiceGenerator"&gt;github.com/karan5772/InvoiceGenerator&lt;/a&gt;&lt;br&gt;
 The full tax research: &lt;a href="//invoice.karanchoudhary.dev/research"&gt;invoice.karanchoudhary.dev/research&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're a freelancer in India, I'd genuinely like to know what I missed.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>invoice</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
