<?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: VAIBHAV PATHAK</title>
    <description>The latest articles on DEV Community by VAIBHAV PATHAK (@vaibhav007code).</description>
    <link>https://dev.to/vaibhav007code</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%2F3998432%2Fa8da10b1-05a3-40a9-a464-e20542ae0b61.jpg</url>
      <title>DEV Community: VAIBHAV PATHAK</title>
      <link>https://dev.to/vaibhav007code</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vaibhav007code"/>
    <language>en</language>
    <item>
      <title>I Built an Invoice Generator in Pure HTML/CSS/JS — Here's Why</title>
      <dc:creator>VAIBHAV PATHAK</dc:creator>
      <pubDate>Tue, 23 Jun 2026 09:34:04 +0000</pubDate>
      <link>https://dev.to/vaibhav007code/i-built-an-invoice-generator-in-pure-htmlcssjs-heres-why-21m5</link>
      <guid>https://dev.to/vaibhav007code/i-built-an-invoice-generator-in-pure-htmlcssjs-heres-why-21m5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcsj056uvn23sib6nve4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcsj056uvn23sib6nve4g.png" alt=" " width="639" height="824"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9oun8xpzqinlvmqll63f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9oun8xpzqinlvmqll63f.png" alt=" " width="800" height="398"&gt;&lt;/a&gt;Hey devs!&lt;/p&gt;

&lt;p&gt;I'm VAIBHAV, a self-taught developer from Greater Noida, India.&lt;/p&gt;

&lt;p&gt;After paying ₹1,200/month for invoicing software I barely used, I decided to build my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;A fully client-side invoice generator that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calculates GST automatically&lt;/li&gt;
&lt;li&gt;Generates PDFs with one click&lt;/li&gt;
&lt;li&gt;Works completely offline&lt;/li&gt;
&lt;li&gt;Stores data locally (privacy first)&lt;/li&gt;
&lt;li&gt;Runs on any device with a browser&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HTML5&lt;/li&gt;
&lt;li&gt;CSS3 (no frameworks)&lt;/li&gt;
&lt;li&gt;Vanilla JavaScript&lt;/li&gt;
&lt;li&gt;html2pdf.js for PDF export&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No React. No Node. No backend. Just a single HTML file that works everywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Most invoicing tools charge monthly subscriptions. For freelancers in India, that adds up.&lt;/p&gt;

&lt;p&gt;I launched it on Gumroad for ₹1,250 one-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; [your Netlify link]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Buy it:&lt;/strong&gt; [your Gumroad link]&lt;/p&gt;

&lt;p&gt;First 10 buyers get 50% off with code EARLY50.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Code
&lt;/h2&gt;

&lt;p&gt;The entire product is a single HTML file. Here's the core logic:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
javascript
// Auto-calculate totals
function updateTotals() {
    const subtotal = items.reduce((sum, item) =&amp;gt; sum + (item.qty * item.price), 0);
    const tax = subtotal * (taxRate / 100);
    const total = subtotal + tax;
    // Updates the invoice preview in real-time
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
  </channel>
</rss>
