← Back to Blog

Day 46: Pull, Not Build

The first time you deployed Pinchy on a VPS, the experience was: clone the repo, run docker compose up, wait 15 minutes while Docker builds the images, hope nothing fails, eventually see the loading screen. It worked, but "wait 15 minutes" is not the first impression a product should make.

Pre-Built Images

Today I switched the entire deployment flow to pull-based. The release workflow now builds and pushes Docker images to GitHub Container Registry. The docker-compose.yml references those pre-built images instead of building from source. docker compose up pulls them in seconds.

First-time deployment time: from ~15 minutes to under a minute on a decent connection. Upgrade time: from "build all the things again" to "pull the new tag." Cloud-init scripts for Hetzner and DigitalOcean got simplified accordingly — no more apt-get install for build tools, no more npm install in the cloud-init phase. Just pull and run.

The Documentation Cascade

This change touched every deployment guide. Quick Start, Hetzner, DigitalOcean, generic VPS, Upgrade — all of them needed updates because the workflow is fundamentally different now. You don't git pull && docker compose up --build anymore. You docker compose pull && docker compose up. Smaller, faster, less error-prone.

The loading page also got an update — it now reflects the pull-based flow with different progress messages. "Building images" is replaced with "Pulling images" because that's what's actually happening.

Also Today

Ollama vision models now work for scanned PDFs — the same vision fallback I built on Day 32, but using local models instead of cloud APIs. Closes issue #80 and means GDPR-conscious users can finally process scanned documents without anything leaving their network.

Also fixed a security vulnerability in the defu dependency (prototype pollution CVE), moved the host-check from Edge Middleware to the custom server (more reliable), and made blocked requests show an HTML error page instead of raw JSON when the request is from a browser.

Day 46

15 minutes to under a minute. Six documentation guides updated. Local Ollama vision shipped. The kind of work that doesn't have a flashy feature page but makes the next 100 deployments much smoother.

← Day 45: Polish Day Day 47: The Merge Day →

Pinchy is open source and ready to deploy. Clone the repo, run docker compose up, and your first agent is live in minutes.