All work

Blinds Measure

Recess blind sizing for a house full of windows

  • The tightest point sets the size
  • Out of square, drawn not described
  • Built while measuring the house it was for

I moved into a new house that needed blinds in every room, and I spent an evening walking round with a tape measure and my phone's notes app. Six numbers per window — three widths, three heights — and by the third room the note was an undifferentiated wall of digits. I could no longer tell which figures belonged to which window, so the next day I started again.

Blinds Measure is the thing I should have had on that first evening. Houses contain rooms, rooms contain windows, windows carry six measurements, and the app gives you back the size to order.

The tightest point sets the size

A recess blind hangs inside the opening, so it has to clear the narrowest point of that opening. Recesses are rarely square — plaster bows, frames settle, sills are not level — which is why you measure the width at the top, middle and bottom, and the height at the left, centre and right. The size you order is the smallest of each. Order to the average and the blind jams on the way down.

The rule itself is a Math.min over each trio, and it is about six lines with a test to hold it in place. Making it visible was the interesting part.

Rooms as sheets, each with a title block and its window count. The blind size is the largest thing in the row, because it is what you came for; a window whose measurements disagree by more than 10mm carries a warning.

Drawing the window

Every measurement form I have used treats six numbers as six numbers. But the six describe a shape, and a shape can be drawn — so the add-window form draws it, to scale, as you type: an outline of the recess with the widths stacked as dimension lines underneath it and the heights down the left, the governing measurement in accent with arrowheads, the other four muted.

A window out of square comes out visibly out of square. That immediately raised an honesty problem: 4mm of bow on a 1200mm window is a third of one percent, and at true scale it is invisible — an accurate drawing that shows you nothing. So deviation from the governing figure is amplified, and capped so one mistyped entry cannot distort the drawing beyond the frame. A diagram that exaggerates silently is a lying diagram, so it says "deviation exaggerated" whenever it is doing it, and the real figures are always printed on the lines.

A bay window measuring 1204 wide at the top, 1200 across the middle and 1206 at the bottom. The outline is visibly waisted where it is tightest, and the two governing figures — 1200 and 1450 — are the ones carrying arrowheads while the four larger ones stay muted.

The geometry lives in a pure function with no Vue and no DOM in it, and the component is a few dozen lines of SVG over the top. Boundaries symmetric about the centre, each edge a three-point profile, so the outline pinches exactly where the measurement is tightest.

The shape of the thing

A Vue 3 SPA with Pinia over a Fastify API and Postgres. The SPA and the API build into a single image — the API serves the built frontend — with Postgres alongside it, so the whole thing comes up on one docker compose up. Results export as CSV, or print as an order sheet — title block, rooms grouped, tabular sizes, and the out-of-square warnings carried through as text, because a supplier needs to know that.

The order sheet on a laptop: measuring happens on a phone in the room, but the sheet you hand to a supplier is easier to check and print from a desk.

Authentication is the part worth mentioning, because there isn't any. The app sits behind a Cloudflare tunnel with an Access policy in front of the hostname, and has no login of its own. That is a real decision rather than a shortcut, and it is only safe under conditions that are easy to break by accident later — so the README states them: never publish the origin port, never add a second ingress that bypasses Access, and add app-level auth first if it ever moves off the tunnel. A security posture you cannot see is one you will violate in six months.

It is the smallest thing on this page, and it exists because measuring a houseful of windows into a notes app is a genuinely bad way to spend an evening.