
Written by Jason Galea from Cairns, Australia.
Full Stack developer specialising in React and NodeJS.
A small VS Code extension that turns the Markdown file you're currently editing into a PDF, without leaving the editor.
How a PDF engine fits inside a single Cloudflare Worker request with no eval, no headless browser, and no Node filesystem — and still returns sub-second renders for typical documents.
Making AI reliably produce a working PDF template needs three pieces working together — a machine-readable catalog, a compact DSL that costs 75–95% fewer tokens than raw JSON, and a skill file the agent can fetch once and remember.
The previous three versions of this product all assumed a template-authoring UI was the hard thing to build. The 2026 version doesn't have one. An AI reads a sample document and produces a template directly.
I've been bumping into PDF generation as a problem since 1999. Four of my attempts to turn it into a product have reached the level of "you could use this." Three didn't find a market. This is the history, honestly told.
Zustand core can be imported and used without the React dependency. The only difference is that the create function does not return a hook, but the API utilities.…
TL;DR if you're building an SPA and plan to use Code Splitting you should ignore tree shaking and structure your modules and imports accordingly to avoid redundant code being included in your…
Takeaway: keep your memoed components focussed and their props shallow, and prefer simple solutions over complexity. skip to the flip The first step to voiding unnessary renders is to use…
My goal was to deploy a basic React app with a server backend to the Google Cloud Platform. For learnings I decided to use Google Cloud Functions (which may also have been the cheapest backend…
Tools for working with Kafka and Protobufs - all about dumping messages to the console at this point. Kafkacat https://medium.com/@coderunner/debugging-with-kafkacat-df7851d21968 Install list topics…
Learning Go, so started recording references to all the useful things I find so I can find them again when I need them.. Install or download from Golang Downloads and install Testing $ go test - run…
When trying to run go install or go test I was getting errors such as: I boiled it down to something wrong in my go setup as I was unable to replicate the errors on a second machine. Uninstalling and…
Posting as this was decently difficult to diagnose while researching and testing 3rd party popover/tooltip components. The button component I needed an onHover tooltip for is responsive via either…
Building a reusable component library for your app will speed up development, increase consistency of the UI, and reduce the total download size of your app. Below are a few tips I've picked up while…
Some thoughts on testing - the what and the how (javascript). Testing The primary reason for writing automated tests is to ensure that your code runs correctly. When you make changes to your code,…
A PDF file is basically a set of object serialised in a specific format similar to PostScript. Our initial goal is to be able to place text in a PDF by writing the required objects in the correct…
When upgrading to the latest and greatest MongoDB (2.6) the first thing you have to do is run a check on your databases. Specifically the upgrade docs say: To begin the upgrade procedure, connect a…
You are right. Whatever you believe to be true, is correct. It is true for you. Your knowledge of the facts is based in your reality, your experiences, and those are the only truths you can be sure…
Adobe’s Portable Document Format (PDF) files have almost become the standard for preparing well-formatted documents. There are PDF readers/displayers for most web browsers, so there is no real excuse…
Perl is used extensively all over the world in production, doing the job, all the time. Modern Perl takes the solid base that is Perl5 an implements all the goodness of modern programming practices.…
Today I'm going to talk about using a fat model in Catalyst. When I started using Catalyst and eventually got my head around all the parts and where they all fit in, the slot for my "business logic"…