Skip to content
Consumer & Local ServicesD-08Live in production

Penmark

Sign PDFs and fill forms in the browser, without uploading the file

Timeline
2026 — present
Repositories
1
Role
Product architecture, local-first editor, billing and the Chrome extension
Summary
A PDF signer and form filler that runs entirely on the device — drop a file, tab through every field, download a finished document. Signing is free; a download is GH₵1 for that file or a prepaid plan paid in cedis. Nothing is uploaded either way.
GH₵1
One document
every format of that file, for seven days, no account
GH₵10
Personal / month
unlimited downloads; GH₵90 billed once a year
5
Download formats
PDF, Secure PDF, Word, PNG, JPG — all built on the device
penmark.zyntlow.comLive capture

The live product, running here. Click the window to use it, or open penmark.zyntlow.com in a new tab.

What it is

Penmark is a PDF signer and form filler, live at penmark.zyntlow.com. You drop a file — or a photo of a paper form — tab through every blank, sign the lines that need a signature, and download a finished document. The original is left untouched.

Signing and filling are free. A download costs GH₵1 for that document, with no account, or a prepaid Personal or Teams plan paid in cedis through Paystack. Plans never renew by themselves.

The governing constraint is the same one behind the rest of the live products: the file never leaves the device. Rendering, filling, signing and export all run in the browser. The server sees a document hash when you pay, not the PDF.

The hard parts

Most signing tools upload the lease, the payslip and the passport scan, then charge a monthly fee to get the file back. Penmark is built the other way around.

The device is the editor. pdf.js renders in a worker. AcroForm fields are read from the file itself. On a flat or scanned PDF, labels like “Signature”, “Date” and “Initials” are offered as one-click placements. Export fills and flattens those fields, stamps the ink, and can append an audit page with a SHA-256 of the original and a timestamp.

Ink that looks like ink. Drawn strokes are pressure-smoothed. A typed signature uses a handwriting face. A photo of a signature on paper has the ink lifted off the background. The same adopted signature signs every line that needs it.

Pay for the file, not a seat you forgot about. One-off passes are keyed to the original file’s hash and live in localStorage; the server stores only the hash. Personal is GH₵10 a month or GH₵90 a year. Teams is GH₵18 per seat a month or GH₵168 a year. Buying again extends from the current end date. Paystack settles in GHS, by MoMo or card.

Architecture

A Next.js 16 App Router surface over React 19. The editor state is a Zustand store with undo. Open documents live in IndexedDB through Dexie. Accounts and prepaid passes sit in Drizzle on libSQL — a local file in development, Turso in production.

  • PDF — pdf.js for rendering and form detection; pdf-lib for filling, flattening and stamping. Word, PNG and JPG exports are built in the browser from the signed PDF.
  • Auth — Better Auth, email and password in one step. Google when the client id is set.
  • Billing — amounts come from one pricing table the server charges from. The browser is never trusted for a price. A lost Paystack webhook is recovered on the return page.
  • Extension — Manifest V3 side panel. It lists every PDF on the current page, accepts a right-click on a PDF link or image, and hands the bytes to the Penmark tab. Names and links only are remembered; the file is not uploaded.

What it is not

Sending a document to someone else to sign — delivery, signing order, a shared audit trail — is not built. Penmark is the tool you use on a file in front of you, not a signing-room product.

Next product
StockFlow

Inventory tracking with a scanner in the loop