§

House Compiler — Parametric Timber Frame Manufacturing

Can a provenance engine turn a set of building parameters into manufacturable outputs — and make design exploration safe?

Active development Eurocode 5BBRtimber frameprefabricationparametric design
— — — — —

Research | Eurocode 5, BBR energy requirements, timber frame prefabrication, parametric design-to-manufacture


The scenario

Lindberg Trähus is a twelve-person timber frame house company in Rättvik, Dalarna. They design and manufacture prefabricated wall, floor, and roof elements — CNC-cut, assembled in their workshop, delivered to site on trucks. Their engineering process today: a senior carpenter works in SketchUp, an engineer checks the structure in a spreadsheet, a drafter produces shop drawings by hand, and a CNC operator programs the machine from the drawings. The whole chain takes two weeks per project and lives in one person’s head at each step.

A customer wants a 120 m² single-family house. Three bedrooms, pitched roof at 27°, site in Falun (climate zone III, SMHI snow load zone 2.0 kN/m²). Standard timber frame: 45×195 mm studs at 600 mm c/c, 22 mm OSB sheathing, mineral wool insulation.

The customer’s first question after seeing the price: “What if we change the roof pitch to 35°?”

Today that question costs Lindberg Trähus three days. With provenance, it costs twelve seconds.


The pipeline

                         REFERENCE DATA (versioned)
                         ═══════════════════════════════════════
                         Eurocode 5 (SS-EN 1995-1-1:2004/A2:2014)
                         SMHI snow loads, Dalarna (2.0 kN/m², zone map v2024)
                         BBR energy requirements (BFS 2011:6, amendment 2024:2)
                         Material library: timber grades, insulation λ-values
                              │           │            │           │
                              ▼           ▼            ▼           ▼


params ──→ semanticize ──→ structural_check ──→ thermal_check ──→ manufacture_plan ──→ ┐
(input)                                                                                 │

 ┌─────────────────────────────────────────────────────────────────────────────────────┘

 │  FAN-OUT (three outputs, parallel)

 ├──→ render_drawings ──→ drawings.pdf      (sha256:4a7f...)
 │                        A1 floor plan, A2 sections, A3 wall elevations, A4 details

 ├──→ generate_nc ──→ framing.btl           (sha256:8c12...)
 │                    BTL/BTLx for Hundegger Speed-Cut
 │                    234 cuts, 48 notches, 12 mortises

 └──→ export_bom ──→ bom.csv               (sha256:e3d1...)
                     183 line items, grouped by element
                     total timber: 14.2 m³ (C24 grade)

Parameters (the starting input):

  • Footprint: 10 × 12 m, single story
  • Bedrooms: 3 (two at 12 m², one at 14 m²)
  • Roof: pitched, 27°, ridge along long axis
  • Site: Falun, climate zone III
  • Foundation: plinth (given by site survey)
  • Standard: Eurocode 5 + BBR 2024

Semanticize (depends on geometry kernel version — versioned):

  • Parse parameters into a typed building model: spaces, walls (load-bearing and partition), openings, roof geometry, load paths
  • Geometry kernel: Rust-based computational geometry (version pinned: house-geo v0.3.2)
  • Output: house.semantic_model.v1 (sha256:b9a2…) — 847 elements, 23 load paths identified

Structural check (depends on solver version and reference data — versioned):

  • Check each load path against Eurocode 5
  • Snow load: 2.0 kN/m² (characteristic) × 0.8 (shape factor, 27° pitch) = 1.6 kN/m² on roof
  • Ridge beam: GL28c 90×360 mm, utilization ratio 0.74 (pass)
  • Studs: C24 45×195 mm @ 600 c/c, utilization ratio 0.61 (pass)
  • Output: house.structural_report.v1 — all members pass, 3 warnings (header spans at limit)

Thermal check (depends on BBR version — versioned):

  • U-values: walls 0.18 W/m²K, roof 0.13 W/m²K, floor 0.15 W/m²K
  • Total energy demand: 78 kWh/m²/year (BBR limit for zone III: 90 kWh/m²/year — pass)
  • Output: house.thermal_report.v1

Manufacture plan (deterministic transform from model + structural constraints):

  • Wall panelization: 14 elements (max 2.4 × 8.0 m for transport)
  • Floor cassettes: 8 elements
  • Roof trusses: 11 × prefabricated W-trusses @ 1200 c/c
  • Output: house.manufacturing_model.v1, house.bom.v1

Fan-out — three rendering steps run in parallel, each producing a different output format. All depend on their specific rendering toolchain version. The manufacture plan doesn’t change; only the output format differs.


What happens when the customer asks about 35°

The customer calls back: “What if we go to 35° on the roof? We want more attic space.”

One parameter changes. The pipeline re-executes:

params (27° → 35°)


semanticize         → re-executes (roof geometry changed)
  │                   new model: steeper rafters, different load paths

structural_check    → re-executes (model changed)
  │                   snow shape factor: 0.8 → ~0.67 (steeper = less snow accumulation)
  │                   BUT: longer rafters, higher wind load on gable
  │                   ridge beam: utilization 0.74 → 0.82 (still passes)
  │                   gable studs: utilization 0.61 → 0.78 (still passes, tighter)

thermal_check       → re-executes (roof area and geometry changed)
  │                   slightly more roof area, same U-value
  │                   energy demand: 78 → 81 kWh/m²/year (still under 90 limit)

manufacture_plan    → re-executes (different truss geometry)
  │                   trusses change from W-type to scissors type
  │                   timber volume: 14.2 → 15.8 m³ (+11%)

render_drawings     → re-executes → new PDF
generate_nc         → re-executes → new BTL (different cut angles)
export_bom          → re-executes → new BOM (+1.6 m³ timber, +2 truss connectors)

Everything downstream of the parameter change re-executes. But the customer then asks: “Actually, go back to 27° but change to four bedrooms instead of three.” Now:

params (back to 27°, 3 → 4 bedrooms)


semanticize         → re-executes (interior layout changed)
  │                   one partition wall added, door relocated

structural_check    → reuses previous result for load-bearing members
  │                   (partition wall is non-structural — load paths unchanged)

thermal_check       → reuses previous result (envelope unchanged)

manufacture_plan    → partially re-executes (one wall panel differs)
  │                   only panel W-07 changes (new door opening)

render_drawings     → re-executes (floor plan changed)
generate_nc         → partially re-executes (only W-07 re-cut)
export_bom          → re-executes (one additional door, one modified panel)

Structural and thermal checks reuse their previous results because the building envelope didn’t change. The customer gets an answer in seconds, with full structural verification — not an approximation, not a guess.


Reference data and regulatory updates

Reference data is versioned:

DatasetReference IDCurrent versionUpdate frequency
Eurocode 5 (timber)ref.eurocode5.v1SS-EN 1995-1-1:2004/A2:2014~5 years
SMHI snow load mapref.smhi_snow.v1Zone map v2024Annual review
BBR energy requirementsref.bbr_energy.v1BFS 2011:6, amend. 2024:2~2 years
Material propertiesref.timber_materials.v1C24/GL28c/CLT library v3As needed

When Boverket updates BBR energy limits, Lindberg Trähus registers the new version. Every project compiled against the old version remains valid (its outputs reference the version used). New projects use the new version. If they want to check whether an old design still complies under new rules, they re-run with the updated reference — only thermal_check and downstream re-execute.

The structural engineer can always answer: “Which version of Eurocode 5 was this checked against?” The answer is in the output metadata, not in someone’s memory.


What you can ask afterward

QuestionHow it’s answered
”Why is the ridge beam GL28c 90×360?”Trace: structural_report ← structural_check used load path LP-03 (ridge, 6.0 m span, 1.6 kN/m² snow + 0.5 kN/m² self-weight) against Eurocode 5 §6.1.6 (bending), utilization 0.74. GL28c 90×315 would give 0.89 — acceptable but above the 0.85 comfort threshold.
”What snow load was used for Falun?”Reference ref.smhi_snow.v1 (sha256:d4e7…), zone map v2024, Dalarna zone = 2.0 kN/m² characteristic. Shape factor from Eurocode 5 §5.3.3, table 5.2: μ₁ = 0.8 for 27° pitch.
”What changed between the 27° and 35° versions?”Compare two runs: 6 outputs differ. Structural utilization ratios shifted (details per member). Timber volume +11%. Truss type changed. Full comparison available as output pairs with matching fingerprints for unchanged elements.
”Can we verify this was checked against current Eurocode?”The structural check includes the Eurocode version in its inputs. The output metadata records the exact version. Re-run with current reference data: if the fingerprint matches, the check is current. If not, re-execution shows what changed.
”What if timber prices go up 20% — which design is cheaper?”Both bill-of-materials outputs exist (27° and 35° versions). Cost comparison is a simple calculation against the material price list. No re-execution of upstream steps needed.

Before and after

Today: Lindberg Trähus takes two weeks from parameters to shop drawings. Design changes restart the process — the engineer re-checks by hand, the drafter redraws, the CNC operator reprograms. The customer gets frustrated. When something goes wrong on site and the contractor asks “was this checked for snow load?”, someone digs through email to find the spreadsheet. The senior carpenter retires next year. Half the knowledge goes with him.

With provenance: Parameters go in, manufacturable outputs come out. Design exploration is safe — each variation is a re-run with upstream reuse where nothing changed. The customer gets real answers to “what if?” in the meeting, not three days later. Every structural decision traces to a code clause, a load calculation, and a reference data version. When the senior carpenter retires, the compilation pipeline remains. When regulations update, affected projects are identifiable by querying which runs reference the old version.

The 35° roof pitch question? Twelve seconds, fully verified, with a bill-of-materials diff showing exactly what it costs.


Looking for timber frame manufacturers and structural engineers interested in parametric design-to-manufacture pipelines. [Contact ->]

— — — — —