Behind the Scenes

Generating Dynamic Woodworking Plans

I'm applying 15 years of software experience to generate dynamic, custom woodworking plans — picking up an idea I first had as a teenager with a ramp website.

by Greg·Aug 1, 2026
Contents 4 sections
  1. Reviving an old desire
  2. Introducing Build w/ Greg
  3. One engine, three surfaces
  4. Back to where it started

Don't get me wrong. I love the unlimited freedom and creativity that being a software developer provides, but it was never my first choice. I wanted to be a builder.

Reviving an old desire

Ever since I was a kid, I loved sharing my ideas and learnings for others to benefit. I grew up riding BMX bikes and skateboards, and building ramps for myself and my friends to ride.

My dad ran an internet business, so he nudged me into creating a website just for fun. First it was just a personal site at <my-name>.com, but eventually I decided I wanted to share ramp plans — and learn how to make dynamic websites for this new(ish) thing called the internet.

YouTube video screenshot
Fig 1Video flyovers showing how to build ramps

I would create 3D models of ramps and use them to generate the images, cut lists, and videos that went into easy-to-follow build plans.

plans4ramps.com
Fig 2My first ever programming project, in 2008: teaching people how to build ramps

Introducing Build w/ Greg

This site takes the original plans4ramps.com idea to the next level. I got into woodworking around 2020, after finally moving into a house with enough space — and I've been dissatisfied with how woodworking plans are presented ever since:

  • Plans are static, locked to the exact project shown
  • Modifying a plan for your space means redoing the math yourself
  • Commissioning custom plans is expensive — if you can find someone at all

So every project on this site is a small program. Not a drawing of a shelf — a build-step program that generates the shelf, the cut list, and the assembly steps for whatever dimensions you punch in. The figures in these posts aren't screenshots I exported once; they're views into that program, rendered live in your browser. I've started calling them 4D figures — the fourth dimension is the build itself, and you can scrub through it.

The step stool — the first project, and still the test bed for everything.
Fig 3The step stool — the first project, and still the test bed for everything.

One engine, three surfaces

The same code renders three things: the interactive builder, these embedded figures, and the static images social media crawlers see. The server keeps a headless browser warm with the CAD kernel booted, so a poster is the actual engine output — if I change a joint, every image on the site regenerates on the next deploy.

The cutting board — one crosscut, a roundover, a hanging hole. Walnut, color-matched to a real board.
Fig 4The cutting board — one crosscut, a roundover, a hanging hole. Walnut, color-matched to a real board.

Back to where it started

It only feels right that the first plan in this new system is the one that started everything: the kicker ramp. Same ramp I built as a teenager — except this one is a build-step program like everything else here.

The kicker — the plans4ramps ramp, reborn as a program.
Fig 5The kicker — the plans4ramps ramp, reborn as a program.

The curve comes from a radius cut: anchor a string at the center point, swing a pencil arc across the panel, and cut to the line with a jigsaw — the same way I did it in the driveway twenty years ago. The build steps animate it exactly that way:

Both side panels get the arc: a string-and-pencil compass, then a jigsaw. The second panel is a mirror of the first.
Fig 6Both side panels get the arc: a string-and-pencil compass, then a jigsaw. The second panel is a mirror of the first.

Set a different height, radius, or width and everything downstream regenerates — the side panels, the cut list, and the 2x4 members, which re-solve their own spacing along the new curve:

Same program, steeper numbers: 24" tall on a 48" radius. An extra member appears to keep the 6" spacing. Try your own numbers below.
Fig 7Same program, steeper numbers: 24" tall on a 48" radius. An extra member appears to keep the 6" spacing. Try your own numbers below.

And because a figure is the live engine — not a screenshot — it can show you things a drawing can't. It can pull the build apart:

The exploded kicker: two radius-cut sides, eight members, two surface layers, and every screw.
Fig 8The exploded kicker: two radius-cut sides, eight members, two surface layers, and every screw.

Or x-ray it, ghosting everything but the frame that hides under the riding surface:

The skeleton: a flat member at the nose, tilted members following the curve, one flat at the back, and one standing plumb under the lip.
Fig 9The skeleton: a flat member at the nose, tilted members following the curve, one flat at the back, and one standing plumb under the lip.

The kicker lives in the gallery with everything else, and it opens in the builder — go stretch it and watch the cut list keep up.