Browserling Startup February 26, 2014

# How we added invoices to Browserling

We recently added invoices to Browserling. I thought I'd share how we did it as it's another interesting story.

Our customers keep asking for invoices all the time so we made it simple to create them. They can now just go to their Browserling accounts and download them. Here's how an invoice looks like:

And here are the implementation details.

We use a node module called invoice. The invoice module takes a hash of invoice details, internally spawns pdflatex that creates a pdf invoice, and then calls a callback with the path to the pdf file, like this:

var invoice = require('invoice');
invoice(
{
template: 'browserling-dev-plan.tex',
from: "Browserling inc\\\\3276 Logan Street\\\\Oakland, CA 94601\\\\USA",
to: "John Smith\\\\Corporation Inc.",
period: "2/2013",
amount: "\$20"
},
function (err, pdf) {
if (err) {
console.log("Failed creating the invoice: " + err);
return;
}
console.log("Pdf invoice: " + pdf);
}
);


The browserling-dev-plan.tex latex template contains %to%, %from%, %period%, and %amount% place holders that the invoice module simply replaces with the given data:

\documentclass[12pt]{article}

\pagenumbering{gobble}

\begin{document}

\begin{center}
\Large{\textbf{Invoice}} \\
\vspace{0.5cm}
\large{Subscription to Browserling's Developer Plan}
\end{center}

\vspace{1cm}

\section*{Invoice from:}
%from%

\section*{Invoice to:}
%to%

\section*{Period:}
%period%

\section*{Amount:}
%amount%

\end{document}


Once the pdf invoice is generated, we create a token that maps to the pdf file, and once it's requested, we send it to the customer as an application/pdf.

Until next time!

Did you put the all important Invoice # on the actual invoices?

I guess I could login and check but it's more fun to be the first to comment.

Hmm, no I don't. All these payments are automatic so we can track what's been paid. I guess it would matter if the invoices were paid by check. Then it would be harder to track, which payment is for which invoice. Is that right?