First Time Paving: From Jungle to Front Yard
It could have been a relaxing vacation. Unplug, do nothing, just exist. But my brain consistently translates “time off” into “finally time for that project you’ve been putting off for months”. And the project was overdue: the front yard of my terraced house looked like an abandoned lot. Two massive trees swallowed every bit of daylight, and the weeds had long since gained root access.
The final boss: a yew tree with a death wish
Phase one: trees out. The first candidate cooperated reasonably well with the chainsaw. Then came the yew.
Whoever planted this thing either had a dark sense of humour or no idea what it would become. The wood was so tough that I destroyed three saw blades in a single session. Three. Each one gave up after about five minutes. After four evenings of pure frustration, I seriously considered just paving around the stump and calling it a “design feature”.
In the end, a car jack made all the difference. I dug underneath the root ball, placed the jack below, and lifted the stump bit by bit. After each pump I wedged stones underneath so it wouldn’t drop back down. Then repeated the whole process around the entire perimeter until the root stock stuck out far enough to pull it free. Not elegant, but deeply satisfying.
Building an app before paving
Once the area was finally clear, planning began. How much gravel do I need? How many edging stones? How many pavers for a pattern with offset rows?
Sure, there are tables online for that. But I’m a developer. Instead of spending five minutes with a calculator, I built patioplanner.app. A tool that visualises the surface and calculates exact material requirements. For my 2.25 x 4.50 metre area, the tool gave me a clean breakdown of everything I needed. If you want to see the result: here’s my actual setup in Patioplanner.
The registry pattern
Patioplanner ships with several paving patterns: running bond, herringbone, roman bond, and a few more. I manage them with a registry: every pattern is registered in one central place and looked up by a unique ID. Each pattern defines its stone types, the tile layout (how stones sit within one repeating unit), and the repeat period.
// Each pattern is defined as a plain data object
const RUNNING_BOND: Pattern = {
id: 'running_bond',
source: 'predefined',
nameKey: 'pattern.running_bond.name',
stoneTypes: [PAVER_STANDARD],
tileLayout: [
{ stoneTypeId: 'paver_standard', offset: { x: 0, y: 0 }, orientation: 0 },
{ stoneTypeId: 'paver_standard', offset: { x: 100, y: 100 }, orientation: 0 },
],
repeat: { dx: 200, dy: 200 },
rotationAngles: [0, 90],
rotation: 0,
};
// All patterns in a central registry
export const PREDEFINED_PATTERNS: readonly Pattern[] = [
RUNNING_BOND,
STACK_BOND,
HERRINGBONE,
ROMAN,
// ...
];
// Lookup by ID
export function getPredefinedPattern(id: string): Pattern | undefined {
return PREDEFINED_PATTERNS.find((pattern) => pattern.id === id);
}
Adding a new pattern means defining one object and pushing it into the array. No switch statements, no if-else chains. The rendering engine asks for the pattern with a given ID and gets everything it needs.
Logistics: the SUV as a makeshift truck
For the edging I used eight border stones. The matching drain grates came free from classified ads. Same for the gravel. People who pave large areas often have excess material. For my narrow strip, that was more than enough.
My Tiguan handled the logistics. Line the boot with a tarp, drive out, load up, hope the suspension holds. Four trips at roughly 400 kg each. The rear sagged so low I winced at every bump in the road. But it held.
Sub-base: compacting and screeding
The most labour-intensive part was the sub-base. The gravel bed has to be perfectly level, otherwise every imperfection shows up in the joints later. My trick: two timber battens placed between the freshly set edging stones as screed rails, then dragging a straight board across to level the gravel. Works like a spirit level on steroids.
Laying the pavers
Once the foundation was level, it was time for the main event. The paving stones and screed concrete for the edge fixings were the only things I actually had to buy. The laying itself went surprisingly fast. Stone by stone, row by row, with the half-offset you’d expect from a running bond pattern.
What I took away
Paving is honest physical labour. Most of the time goes into preparation, not laying stones: excavating, compacting, screeding. And removing stubborn yew trees.
If I did it again, the one thing I’d change is renting a plate compactor. Hand-tamping with a manual rammer was the part where I swore the most. Everything else was doable, learnable, and in the end pretty satisfying.


