skip to content
sys.name
vvhybe_os 26.10
status
200 building papyrus
user
vvhybe (yassine bouba)

cat papyrus.svc

01 / 19

Papyrus

Enterprise-grade PDF rendering as a microservice. Post your data, get a job id, download the PDF.

role
creator and lead developer at BigBang.ma, v3 in active development
year
2025-now
access
-rwx------ (private, or a company product)

TL;DR

problem
Business apps print a lot of invoices, quotes and delivery notes, and rendering PDFs inside the app makes it slow and fragile.
approach
Rendering as a service of its own: the app sends its data, gets a job id back at once, and downloads the PDF when it's ready. Templates are designed apart from the app.
outcome
v3 in active development at BigBang.ma.
Papyrus, screenshot

// overview

PDF generation treated as infrastructure, like a queue or a search index. A client posts a template and its data and gets a job id straight back; the document renders in the background, ready to download or to follow live.

Templates are HTML and CSS with variants and translations, so a document's design never touches the app that prints it.

It speaks a compliance-aware format for invoices, quotes and delivery notes, built for Moroccan and international e-invoicing standards. Batches come back as a ZIP or one merged PDF.

// post, and move on

A caller sends its data and the name of a template, and gets a job id back at once. It never waits on a renderer: it can ask after the job, follow it live, or be told by a webhook when the PDF is ready to download.

Finished files don't linger. They're deleted when the job expires, so Papyrus never turns into somebody's document archive.

// one shape for every document

Business documents arrive as a docket: the issuer and the recipient, the lines (items, groups and notes), the taxes and totals, the payment details. One shape covers invoices, quotes, purchase orders and delivery notes.

The docket is strict on purpose. A misspelt field is refused with an error, instead of quietly printing a blank on a customer's invoice.

// no math, anywhere

Totals, taxes and discounts arrive already computed, and nothing downstream works them out again. An invoice is a legal document: a PDF that re-added the lines could disagree with the books by a rounding cent, and then the paper and the ledger say different things. Papyrus formats numbers; it never does arithmetic.

// design apart from data

Templates are written in HTML and CSS by people who never touch the app that prints them. A template comes in variants, a crimson one beside the classic, or takes its colours inline, and its labels are translated, the full locale first, then the bare language.

While a template is being designed, a quick preview sends the first page straight back, watermarked.

// many at once

Send a list instead of one document and it becomes a batch: the items render side by side, a failure is reported on its own without shifting the numbering of the rest, and the result comes back as a ZIP or as one merged PDF.

// stack

  • python
  • jinja2
  • html
  • css paged media

// links

closed source. nothing to link yet.