<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="/atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://duggan.ie/tag/side-projects/</id>
  <title type="text">@duggan — side-projects</title>
  <updated>2025-11-19T08:35:56.000Z</updated>
  <author>
    <name>Ross Duggan</name>
    <email>ross@duggan.ie</email>
    <uri>https://duggan.ie/</uri>
  </author>
  <icon>https://duggan.ie/favicon.ico</icon>
  <link href="https://duggan.ie/tag/side-projects/atom.xml" rel="first"/>
  <link href="https://duggan.ie/tag/side-projects/atom.xml?page=1" rel="last"/>
  <link href="https://duggan.ie/tag/side-projects/atom.xml" rel="self"/>
  <logo>https://duggan.ie/og-image.png</logo>
  <rights type="text">All rights reserved 2026, Ross Duggan</rights>
  <subtitle type="text">Posts tagged side-projects</subtitle>
  <entry>
    <id>https://duggan.ie/posts/vat-invoice-generator</id>
    <title type="text">VAT invoice generator</title>
    <updated>2025-11-19T08:35:56.000Z</updated>
    <author>
      <name>Ross Duggan</name>
      <email>ross@duggan.ie</email>
      <uri>https://duggan.ie/</uri>
    </author>
    <content type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I needed an invoice generator to quickly produce some random test invoices while building &lt;/span&gt;&lt;a href="https://manano.ai" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;Manano&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;, as part of a feature letting tradesmen track receipts by sending photos to our WhatsApp number.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I tried a few invoice generators that showed up in Google results, but most required either registering an account or were awkward to use.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Eventually I realized it would probably be straight forward enough to whip one together, and so here is my own &lt;/span&gt;&lt;a href="https://duggan.ie/vat-invoice-generator" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;VAT invoice generator&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt;!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;figure class="image-wrapper"&gt;&lt;img src="/files/cd5e8263427cc4c2.png" alt="vat-invoice-generator2.png" width="inherit" height="inherit"&gt;&lt;/figure&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;You can add line items, it calculates tax, totals, etc.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Since I wrote it for testing a vision-based pipeline, it has a bunch of visually distinctive templates with pre-populated data and a randomzier to produce different figures and line items.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;When you make changes, they are saved locally in your browser, so there's no services to host, and you can even &lt;/span&gt;&lt;span class="cursor-help underline decoration-dotted" data-tooltip="true" data-tooltip-html="&lt;p&gt;&lt;span style=&amp;quot;white-space: pre-wrap;&amp;quot;&gt;Just like the 90s!&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&amp;quot;https://duggan.ie/files/ebae26fb103bc45e.gif&amp;quot; alt=&amp;quot;netscape.gif&amp;quot; width=&amp;quot;inherit&amp;quot; height=&amp;quot;inherit&amp;quot;&gt;&lt;/p&gt;" data-tooltip-content="" title=""&gt;download the page&lt;/span&gt;&lt;span style="white-space: pre-wrap;"&gt; and use it locally. It loads &lt;/span&gt;&lt;a href="http://html2canvas.hertzen.com" rel="noreferrer"&gt;&lt;span style="white-space: pre-wrap;"&gt;html2cavnas&lt;/span&gt;&lt;/a&gt;&lt;span style="white-space: pre-wrap;"&gt; for generating the PNG remotely, so it can't work entirely offline, but nothing leaves the browser.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Anyway this was fun to throw together, and might be useful to some other folks. The basics were done pretty quickly, and then I've sort of been doodling away at it every now and then for the last couple of weeks.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;There is currently no comments system. If you'd like to share an opinion either with me or about this post, please feel free to do so with me either via email (&lt;/em&gt;&lt;/i&gt;&lt;a href="mailto:ross@duggan.ie" rel="noreferrer" dir="ltr"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;ross@duggan.ie&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;) on Mastodon (&lt;/em&gt;&lt;/i&gt;&lt;a href="http://mastodon.ie/@duggan" rel="noreferrer" dir="ltr"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;@duggan@mastodon.ie&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;) or even on &lt;/em&gt;&lt;/i&gt;&lt;a href="https://news.ycombinator.com" rel="noreferrer" dir="ltr"&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;Hacker News&lt;/em&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;em class="italic" style="white-space: pre-wrap;"&gt;.&lt;/em&gt;&lt;/i&gt;&lt;/p&gt;</content>
    <link href="https://duggan.ie/posts/vat-invoice-generator" rel="alternate"/>
    <published>2025-10-18T17:00:32.499Z</published>
    <summary type="html">&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I needed an invoice generator to quickly produce some random test invoices while building Manano, as part of a feature letting tradesmen track receipts by sending photos to our WhatsApp number.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;I tried a few invoice generators that showed up in Google results, but all of them were oddly slow, wouldn't remember details without signing up, and sometimes produced odd looking outputs.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt;Eventually I realized it would probably be straight forward enough to whip one up myself…&lt;/span&gt;&lt;/p&gt;</summary>
  </entry>
</feed>