OWN-01Made-to-measure wallpaper

Inchwall: the last panel is where the trade is won or lost.

Wallpaper is sold in rolls. A wall is never a whole number of rolls. This store sells printed area to the inch, which means the arithmetic is the product: how the wall splits into panels, what that costs, and what a fixed-panel shop would have made you buy instead.

OWN-01-AScope of work

What the business does.

Wallpaper and murals printed to the size of one specific wall, in Sacramento, California. The customer enters a wall width and height, sees the panel layout on that wall, and pays for printed square feet rather than for rolls.

Three buyers, and each of them has its own route in the application: a homeowner doing one room, a designer or installer on a trade programme with its own samples and specification pages, and a commercial job for an office, a restaurant or an event, which is run as a project rather than as a basket.

The problem shape.

A roll is a fixed width and a wall is not a multiple of it. Buy rolls and you pay for what you throw away; buy fixed panels and the last one at the edge is a sliver that everybody in the room can see.

So the calculation is the offer, and it is not a calculation any storefront product has. It has to know what a roll is, what an overlap is, what bleed is, what a minimum order is, and what a print file has to look like at the end of it.

OWN-01-BDetail callouts

What was built.

A layout and pricing engine of pure functions, fed by material parameters from the database, with the tests beside it. The storefront is the thin part.

01

A layout engine that knows what an offcut is

The wall splits into vertical panels, each a roll wide except the last, which is the remainder plus the overlap it carries onto its neighbour. One constant decides the interesting case: a last panel under eight inches is an offcut rather than a panel, and the same printed width is then divided evenly across the same number of panels. A ten by eight foot wall on a twenty-four inch material arrives as six panels of twenty and a half inches instead of five full ones and a three inch sliver. No product you can rent has an opinion about this, because no product you can rent knows what hanging one feels like.

Proof

lib/engine/layout.ts · BALANCE_BELOW_IN

02

Balancing is free, and that is the point

The evenly divided version has the same total width, the same printed area, the same billable square footage and the same price to the cent. Only the cuts move. The decision is made entirely in favour of whoever has to hang it, and it costs the customer nothing, which is why it can be the default rather than an upsell.

Proof

lib/engine/layout.ts · layoutPanels

03

The remainder is handed out a hundredth of an inch at a time

When the panels are balanced the leftover width is spread across them one hundredth of an inch at a time rather than piled onto one. That keeps two invariants the rest of the pipeline depends on: no panel can come out wider than the roll it prints on, and no two panels differ by more than a hundredth of an inch, so every seam carries exactly one overlap and the print step can infer that overlap from the first pair.

Proof

lib/engine/layout.ts · balanced branch

04

Material parameters live in the database, not in the code

Roll width, overlap, bleed, maximum panel length, price per square foot and minimum order are properties of a material, read at runtime. Adding a material is a row. The engine itself is pure functions over those numbers, which is why each one has a test file next to it: layout, pricing, waste, quote, units, placement and print specification.

Proof

lib/engine/pricing.ts · lib/engine/types.ts

05

The comparison quotes the competitor's own published rate

A separate module works out how much material a fixed-panel shop would have made you buy for the same wall, and returns the waste in square feet and as a percentage. The rate it compares against is defined once, used by the home page, the calculator and the comparison page alike, and carries a note saying it is a representative published price for two by four, two by eight and two by twelve foot panels as of September 2026, not one named shop. The pages repeat that in words.

Proof

lib/engine/waste.ts · lib/engine/fixed-offer.ts

06

The trade discount is a rule, not a favour

The designer and installer programme has its own sections for samples and specification, and its discount is a field on the price rules that the pricing engine applies. Nobody types a number into a quote, which is the difference between a trade programme and a habit of knocking something off.

Proof

lib/engine/pricing.ts · PriceRules.tradeDiscountPct

OWN-01-CReference

Where this lives.

Read from the repository on 16 September 2026. Every capability above names the file that implements it, and the engine's behaviour is pinned by tests in the same directory.

This sheet claims no traction, because there is none to claim yet. The business is deliberately in validation before it buys its printer, with a written evidence threshold and a decision rule, and it has no orders, no revenue and no reviews to publish. What it demonstrates is that the studio designs product and manufacturing logic rather than storefronts. It is also not a client: Inchwall is Eugene's own business, and it does not change the number of paying clients quoted anywhere on this site.

System
Inchwall
Repository
inchwall store
Trade
Made-to-measure wallpaper

Files named on this sheet

  • lib/engine/layout.ts
  • lib/engine/layout.test.ts
  • lib/engine/pricing.ts
  • lib/engine/waste.ts
  • lib/engine/fixed-offer.ts
  • lib/engine/print-spec.ts
  • components/site/footer.tsx

This one is not a client CRM and shares no code with the three that are. What it shares with them is a habit: the rule the money depends on lives in one module, as pure functions with tests beside them, and the storefront reads it rather than reimplementing it.

Back to the drawing index

SHT-10Issued for construction

Start with the audit.

A short video walkthrough of where your lead flow leaks and what it would take to close it. Free, and there is no call afterwards unless you want one.

  • Where the lead flow leaks, walked the way a buyer walks it
  • The one fix worth doing first, and what it is costing to leave
  • What to automate first, and what is not worth automating yet
Get my free audit

30 seconds to submit · delivered same day · no card, no call