Layout Tab: Site Layout & Roll Plan
Import the CSV exported from a Moasure measurement to visualize the yard shape and plan how turf rolls lay across it. You can import at project creation time (pre-fills measurements) or later via the Layout tab. The toolbar holding Lock / Edit Shape / Move Layers / Cut Mode / Import stays pinned to the top as you scroll through the canvas and results, so those controls are always reachable.
🔓 Lock: once a layout is dialed in, click Lock (top-left of the toolbar) to freeze it. Locking disables every slider and adjustment — roll direction, translation, seam offsets, view rotation, roll settings, per-layer controls, fringe settings — plus Edit Shape / Move Layers / Cut Mode and all on-canvas editing and piece-dragging, and it blocks importing a new CSV over the layout. View-only controls stay live so you can still inspect the plan: zoom, the purchased-rectangles toggle, the sub-tab navigation, and both Apply buttons (applying to a turf row doesn't change the layout). The button turns solid and reads 🔒 Locked; click it again to unlock. The locked state is saved per project, so it sticks when you reopen the layout.
Importing
Click "↑ Import CSV" — either in the New Project modal (pre-fills Installed SqFt for all turf rows) or in the Layout tab after project creation. The shape is drawn on the canvas with roll strips overlaid immediately. "Installed Area" shows the polygon-computed area; use the Apply tab to push Installed or Ordered SqFt into a turf row's "SqFt to Order." Re-importing replaces the current layout (it asks first if you'd already imported one).
+ Add CSV — combine several measurements into one layout: when a yard is captured as more than one Moasure file (e.g. a back yard and a side yard measured separately), use + Add CSV to bring each additional file in without replacing what's already there. Each Moasure file has its own (0,0) origin, so an added file's shapes would otherwise land on top of the first; instead they're dropped as a group into open space to the right of the current layout. Drag them where they belong with ✋ Move Layers (each layer moves independently). The added file's main (largest) shape defaults to Install — a separate turf area with its own rolls that counts toward the combined totals — and its sub-shapes default to Ignore so cutouts don't silently change the quote; set each one's mode in the Layers list. Added layers are named "<file> — <layer>" so you can tell them apart. Caveat: Install assumes the added area is genuinely separate from the main yard — if you position an Install layer so it overlaps the primary shape, that overlapping area is counted twice. Keep separate captures non-overlapping, or set overlapping pieces to a different mode.
Show elevation change (from CSV): Moasure measures in 3D, so some exports include a height/Z column for each measured point. Tick this opt-in box in the Layout sidebar to see the elevation change across the yard — the total range (low → high) and the number of measured points it's based on. It reads the height column from the imported CSV (common headers like Z:ft, Elevation, or Height), and the unit follows the column header. When a file has more than one measured layer, each layer's own fall is broken out below the total, and each non-base layer also shows how far its mean height sits above or below the base layer (e.g. "sits 1.2 ft above the base") — because a raised sub-layer (a bed or step-up) sits at a different base height, so the whole-import range would otherwise overstate the grade of any single surface. If your CSV has no height data, the box says so plainly rather than guessing — re-import a Moasure file that includes elevation to populate it. This is purely informational (a grading/slope reference); it does not change area, rolls, or pricing.
Show grade overlay (color the shape by height): a second opt-in box that paints the imported shape's outline by measured height — blue (low) through green to red (high), the same palette Moasure uses — with an elevation label at each measured corner and a low→high color key. It's drawn on the layout canvas over the roll plan; toggle it off to go back to the plain plan. Use it to read fall and slope direction across the yard for drainage. Important honesty note: a Moasure CSV export records only the points traced around the edge of each shape (the boundary), not a grid of interior surface points. So this overlay colors the outline and corners — which is the real measured data — but does not draw interior contour lines across the middle of the yard, because the export contains no height data there. The colorful contour lines you see inside a shape in the Moasure app come from its full 3D capture, which isn't in the CSV. For an interior dip or hump that matters to drainage, walk a Moasure path across that spot so it becomes an edge of a measured shape.
Multi-Layer CSVs (Layers)
Moasure files can contain more than one measured layer — for example, the main yard outline plus a separate shape for a planter bed, tree well, or putting green cutout inside it. When you import a CSV with multiple layers, the largest shape becomes the primary layer (the main boundary used for roll calculations), and any other shapes appear below it under "Layers" on the right.
Every layer — including the primary one — has a checkbox. Uncheck it to hide that layer on the canvas; this is purely visual and doesn't affect any calculations. This is useful for decluttering the view when a file has several overlapping shapes, or for focusing on one layer while editing.
Each layer has a dropdown that controls how it's treated:
- Measure only — doesn't change totals — the default for every secondary shape. The layer is drawn and labeled on the canvas but does not change Installed SqFt or the quote (use it for sub-areas of the same yard, reference outlines, or elevation sub-regions). You opt a layer into counting by choosing one of the modes below.
- Install — separate turf area, its own rolls — the layer is its own turf area: it's rolled independently and its area, Ordered SqFt, Linear Ft, rolls, and waste are added to the combined totals. Use this only when a shape is a genuinely separate piece (e.g. a detached side yard) — not for a sub-region that overlaps the main yard, which would double-count. A per-layer breakdown is listed under the totals (with each layer's roll direction), and "Apply" sends the combined Ordered SqFt to the chosen turf row. Each install layer's roll plan is drawn on the canvas at its position (its installed strips, plus purchased rectangles + waste hatch when "Show purchased roll rectangles" is on), labeled with the layer name and its area. Position each layer with "✋ Move Layers" and the per-layer Rotate slider. Each install layer also has its own Roll direction + Seam offset in the Layers list (with Horizontal / Vertical / Auto buttons); until you change them, a layer "matches primary," and "↺ Match primary" clears an override. Nesting and manual cuts work within each install layer, and a piece can now be nested across layers (dropped onto a different layer's roll waste). Rename any layer by typing in its name field at the top of its card; the name shows on the canvas, the breakdown, and the Nested Pieces list. Installed SqFt and Perimeter sum the primary plus every Install layer. Roll grouping (multiple layers ≠ multiple rolls): when there's more than one install layer, each gets a "Rolls" selector — Share rolls with other layers (default) pools that layer's linear footage so they're cut from the same physical rolls, while Roll on its own counts the layer's rolls independently. Grouping only changes the roll count — Ordered SqFt and Linear Ft are identical either way.
- Free fill — installed, not ordered (from scrap) — the shape counts toward Installed SqFt (it's real turf going down) but adds nothing to the order — no extra rolls, no Ordered SqFt — because it's assumed to be cut from leftover scrap. It is not rolled or placed: it's a quick "I trust there's enough scrap" estimate, not a specific piece in a specific roll's waste. To actually place a piece into a particular roll's waste (with a real fit check and exact position), use Install for that layer and drag its piece onto the target roll's waste — that's the precise version of this. Free-fill shapes are drawn in violet with a dotted outline and labeled "(free fill)". Whenever a Free-fill layer is in use, a warning shows under Installed SqFt spelling out that the area is added to Installed but not ordered (assumed cut from scrap); it turns red if the free-fill area is larger than the roll waste actually available — beyond that point it isn't entirely free and you'd need extra turf.
- Exclude from Installed Area (hole/cutout) — subtracts that shape's area from the primary's Installed Area, and draws it as a hatched red region — turf doesn't go there.
- Ignore (informational only) — no effect on any total. Drawn as a dashed blue outline for reference.
- Putting Green (used for fringe calculation) — subtracts that shape's area from the primary's Installed Area like Exclude, AND marks it as the putting green outline for the Fringe feature (see below). Drawn as a solid green shape. Only one layer can be the putting green at a time — selecting it on a different layer demotes the previous one back to Install.
Note: because Install is now the default, a multi-layer file treats every sub-layer as turf to install unless you change it. If a sub-layer is actually a cutout, set it to Exclude.
"Installed Area" shows the adjusted total (after exclusions), with the pre-exclusion total in parentheses if anything was excluded. The roll plan's scrap calculation uses the adjusted total. "Apply Area" is role-aware: applied to a Base Yard row it pushes the whole yard including the putting-green footprint (the green's area is added back), since the base turf covers that spot and the green is laid there as its own row — true Exclude holes are still subtracted. Applied to a Putting Green row it uses the adjusted total as-is. Alt Turf rows don't take an applied area: an Alt Turf option is priced on the base yard area (it covers the same yard as the base, just a different product), so its own Installed SqFt field is intentionally left blank and Apply Area will explain this and point you to the Base Yard row instead. This keeps base Installed SqFt consistent with how the quote splits labor (standard yard = total minus the green) so the green isn't subtracted twice. Note that hiding a layer (visibility checkbox) is independent from its exclude/ignore/putting-green mode — a hidden layer can still be excluded from the area total, and a visible layer can be set to "ignore."
Putting Green Fringe
Once a layer is set to Putting Green, a Fringe sub-tab appears in the Layout right pane. Open it and check "Add a fringe border around the putting green" to enable it, then choose a Fringe Turf Product from your catalog and set the Fringe Width (in feet) — the border strip's width all the way around the green.
The fringe is calculated as a ring around the putting green's actual perimeter (traced from its Moasure outline), offset outward by the fringe width with properly mitered corners — adjacent pieces meet exactly edge-to-edge with no overlap and no gap, so the canvas doesn't show doubled-up or duplicated-looking pieces. Rather than cutting one piece per original boundary point — which for a Moasure-captured outline with curves or rounded corners could mean dozens (or with very fine-grained traces, over a hundred) of tiny pieces — nearby straight or gently-curved sections of the perimeter are first merged into single longer pieces wherever the boundary stays within about half the fringe width of a straight line between their endpoints, capped at Max Roll Length so each piece can still be cut from one roll. Each merged piece is then a simple trapezoid (a rectangle once cut) running between mitered corners; on any unusually sharp or jagged corner where a true miter would spike out unreasonably far, that corner is squared off (beveled) instead, keeping every piece a sensible size. This intentionally orders a bit more material than the bare ring area — the summary shows the ring area, total sqft to order, and the difference between them — in exchange for far fewer seams and cuts, which is worth it for most jobs. The fringe width directly controls all of this: a wider fringe both adds more sqft per piece and allows more merging (since the deviation tolerance scales with width), so changing it reflows the whole plan.
On the canvas, the fringe is drawn in orange around the green. By default each piece is filled and labeled ("Fringe 1", "Fringe 2", etc.) so you can match the diagram to your cut list. Uncheck "Show fringe pieces on canvas" to instead draw a single smooth outline at the fringe width, following the green's actual outline point-for-point — this is closer to how the fringe would actually look once installed, rather than the coarser straight-edged pieces used for cutting/ordering. This only affects the canvas drawing; the Piece List, sqft, and pricing are unaffected either way.
Fringe material cost is added to any quote option that includes a putting green (it has no effect on "No Putting Green" options), using the same turf material pricing as the main yard's products.
Moving & Rotating Layers
Click "✋ Move Layers" to enter move mode. Click and drag any visible layer — the main shape outline or any additional shape — to reposition it on the canvas. The view is held steady the entire time you're in this mode, so each shape stays exactly where you drop it and moving one layer never makes the others slide or the whole canvas rescale. That lets you spread several shapes out to lay out a full yard (e.g. main yard plus separately-measured side yards) and have them stay put. When shapes spread past the edge of the view, click "⤢ Fit view" (next to the Move Layers button) to re-frame everything without leaving the mode; exiting with "✓ Done Moving" also re-fits. Zoom still works while arranging — use the zoom controls (or Ctrl/Cmd + scroll) to enlarge the canvas and place shapes more precisely; the auto-fit is what's held steady, not the zoom. This is purely visual: it doesn't change area, roll counts, scrap, or any other calculation, only where things are drawn. Each layer has its own independent position. Move Layers mode is mutually exclusive with Edit Shape mode.
When shapes overlap, clicking grabs the topmost one (the shape you see under the cursor), and a brief "Moving: <layer>" note confirms which layer you picked up — so with several stacked shapes you always move the one you meant.
Each additional (non-primary) layer also has a Rotate slider (0-359°) in the Layers list. This rotates that shape in place about its own center — useful when Moasure captured a shape (e.g. a putting green outline) at the wrong orientation and you need to spin it to match how it actually sits in the yard. Combine with dragging to both rotate and position the shape correctly. Rotation, like position, is purely visual and doesn't affect Installed Area, scrap, or roll calculations.
A layer that's been moved and/or rotated shows a "↺ Reset position" button in the Layers list to snap it back to its original (imported) position and orientation.
Each additional layer has a ✕ button to delete it permanently. Deleting removes the shape along with everything attached to it — its mode, position/rotation, roll direction, visibility, and any manual cuts or nesting on it. If the layer was set to anything other than "Measure only", the confirmation says so, because removing it changes Installed/Ordered SqFt and the quote. This can't be undone: re-import the CSV to get the shape back. (To take a layer out of the totals without losing it, set its mode to "Measure only" instead, or untick it to just hide it on the canvas.)
Cut List
Click "📋 Cut List" in the toolbar to open a dialog showing every turf piece to cut, grouped by layer. Each piece gets a CAD-style drawing of its actual trimmed shape, dimensioned in feet and inches, plus a text line and turf area below it. Irregular pieces (that don't fill their rectangle) are tagged trim to shape and drawn in amber; pieces tucked into another roll's waste are tagged nested. Each layer shows a subtotal (piece count, total cut length, area) and multi-layer jobs get a grand total. The subtotal is the sum of the lengths printed above it — the trimmed footprints you actually cut — shown in feet and inches. It is deliberately not an order quantity: ordered length adds the cutting margin and rounds each piece up to the whole foot, and a piece tagged nested is cut from another roll's waste so it costs no roll length at all. Order against "ft to order" in Rolls to order. The drawings read from the same strips drawn on the canvas, so they always match. This is a cut list — the roll and area order quantities live on the layout panel and the Rock / Base card. Available even when the layout is locked.
Cut width vs. footprint (S-seam): the "× wide" figure in the text line is the cut width — how wide to slice the piece off the roll — and it includes the S-Seam Side Trim (Settings → Roll Settings) that installers trim off on site. There are two cases, and the note tells them apart: a strip that spans the full usable width reads the full roll width (e.g. 15'0", covering 14'8" after trim) and is tagged "Cut full roll width, trim S-seam on site". A narrower piece is cut at its own footprint plus the seam allowance — a 9'0" piece is cut 9'4", not the full roll — and is tagged "Cut with S-seam allowance, trim on site". Neither ever exceeds the roll width. The drawing itself stays the trimmed footprint at installed size, so it shows what the piece actually covers. (Cut the full width, trim the seam edge on site.)
🖨 Print / PDF: the Print / PDF button in the Cut List dialog builds a one-shot printable sheet — the job name, install address and date, the current roll-layout diagram, and the full cut list — then opens your print dialog. Choose Save as PDF (or a printer) to hand installers a paper or PDF cut sheet. It prints only that sheet, not the rest of the app, and each cut piece is kept whole on a page. Works in the desktop app and on the web.
Draw Tool (Markup)
Click "✏️ Draw" in the toolbar to open the drawing toolbar, then pick Line, Rectangle, Circle, or Freehand, choose a color and line width (and optional Fill for rectangles/circles), and drag on the canvas. Use this to mark up the layout — show where pavers, borders, steppers, or other features go, or annotate for a customer.
Adjust a shape: switch to the ↖ Select tool, then click a shape to select it (a dashed box with handles appears). Drag the body to move it, drag a corner to resize, or drag the round handle above the top to rotate. Changing the color or width while a shape is selected updates that shape. ⧉ Copy / ⎘ Paste (or Ctrl/Cmd+C / Ctrl/Cmd+V) duplicate the selected shape — the copy lands slightly offset and selected. 🗑 Delete (or the Delete key) removes the selected shape; ↶ Undo removes the last shape you drew; ✕ Clear removes all; ✓ Done exits. Snap to grid locks new points, moves (in whole grid steps), resizes, and rotation (to 15°) onto the grid spacing set on the Display tab — turn on the grid there to see it. The draw toolbar stays pinned to the top while you work so it's always in reach. Drawn shapes scale and stay anchored to the layout when you zoom, and they save with the project. Important: drawn shapes are markup only — they never change turf area, rolls, or the quote — unless you convert one into a layer (below). To make a real cutout that turf works around, use a CSV layer set to Cutout instead. Draw is mutually exclusive with Edit Shape / Move Layers / Cut Mode, and is disabled while the layout is locked. Note: resizing a shape that you've already rotated scales along the yard's axes, so a rotated rectangle can skew — rotate last, or re-draw if it looks off.
⬒ Make Layer — turn a drawn shape into a real install layer. Select a closed shape (Rectangle, Circle, or Freehand — a Line has no area and is skipped), then click ⬒ Make Layer. The shape becomes a full Install layer with its own perimeter, installed sqft, ordered sqft, and roll layout, exactly like an imported layer — the app jumps to the Layers list so you can see those numbers and set the layer's turf and mode. The markup shape is consumed (it's a real layer now). The new layer lands exactly where you drew it, even if the view is rotated. Two things to expect: a Freehand blob keeps every point you drew, so its roll layout can have many small pieces — draw with Rectangle/Circle or a deliberate outline for clean cuts; and the new layer starts with no turf product assigned, so pick one in the Layers list to get ordered sqft and pricing.
Reference Grid
On the Display tab, turn on Show grid for a to-scale graph-paper overlay behind the layout, and set Grid spacing in inches (e.g. 12 for a 1-ft grid, 6 for 6-in squares). It's a visual scale reference — each square equals the spacing you set at the current zoom — and it has no effect on any calculation. The grid stays available even when the layout is locked.
Manual Cuts (Butt Seams)
Automatic gap cuts: before you touch anything, the roll plan already avoids running a roll through empty space. When a notch or cut-in splits a strip's turf into separate runs along the roll's length — turf, then a gap, then turf again — that strip is automatically ordered as separate pieces with the gap dropped, instead of one continuous roll length spanning the waste. You'll see two (or more) shorter rectangles on that strip with their own "Roll N / Piece M" labels and nothing drawn across the gap. Only gaps worth a seam are cut (gaps under about 2 ft are bridged), and a strip you've cut by hand keeps your manual cuts instead. This lowers Ordered SqFt, Linear Ft, and the roll count to match what you'd actually lay.
Click "✂ Cut Mode" to enter cut mode. Click anywhere along a roll to add a butt-seam cut at that point — this splits the roll into separate pieces, each with its own cutting margin, labeled "Roll N.1", "Roll N.2", etc. with a red seam line marking the cut. You can add multiple cuts to the same roll to create 3 or more pieces. Click an existing cut line again to remove it. Click "✓ Done Cutting" to exit — Cut Mode is mutually exclusive with Edit Shape and Move Layers modes. On a multi-layer job, cuts work on any install layer: clicking a sub-layer's strip routes the cut to that layer's own roll plan (each layer can roll in a different direction, and the cut position is measured in that layer's frame). Hidden layers can't be cut.
A "Manual Cuts (Butt Seams)" list appears in Roll Results whenever any roll has cuts, showing each cut's position with a "✕" to remove it individually, or a "Clear all cuts on this roll" button — a precise alternative to clicking the (sometimes thin) seam line on canvas. If roll settings change such that a saved cut position no longer falls within that roll's current length, it's shown as "cuts not currently applied" with a button to clear it — so it never becomes invisible/stuck.
Each piece behaves like its own roll for nesting purposes: with "Show purchased roll rectangles" on, press-and-drag any piece onto another roll's (or another piece's) hatched waste area to nest it there — exactly like whole-roll nesting. This works with Cut Mode either on or off: in Cut Mode a quick click toggles a cut while a drag moves a piece, so you can split off a small leftover piece and immediately tuck it into another roll's offcut without switching modes. To put a moved piece back, use its "↩ Put back" button in the Nested Pieces list (see below) — this undoes only the move and keeps your cuts. (Note: clearing or removing a cut is a different action — it un-cuts the roll and merges the pieces back together.)
Cut positions are stored as a distance along the roll's length, so like nesting placements, they're tied to that roll's band position and persist across saves/reloads. If a major roll-setting change (direction, seam offset, width) causes that band to no longer exist, the cuts for it are simply dropped.
Canvas Layout
The canvas and the fields panel sit side-by-side — canvas on the left (fills all available width), fields on the right. The canvas is sized automatically to fit the shape's aspect ratio, and it's capped to your screen height — it measures the space from the top of the canvas down to the bottom of the window, so the whole shape fits at 100% without vertical scrolling, on any monitor size. A tall, narrow shape is letterboxed (white space on the sides) so all of it stays visible. It re-fits automatically when you resize the window or collapse the project list. On mobile (≤860px) the fields stack below the canvas.
Zoom & Pan
The canvas always opens at the natural fit — no dead space, shape fills the available area. Use + / - to zoom in/out (everything scales together — shapes and labels — and the view scrolls within its box), and ⊙ Fit to snap back to the fitted view. Ctrl+scroll / two-finger trackpad pinch also zooms. To move a zoomed-in layout around: drag an empty part of the canvas to pan it (the cursor shows a hand when there's room to pan), or use the scrollbars / two-finger scroll; on a touch screen, drag with one finger. Grabbing a piece still nests it. All edit and drag interactions remain accurate at any zoom level. More canvas room: collapse the left project list to a thin rail with the « button at its top (click » to bring it back — the choice is remembered), which widens the whole layout area; the right-hand field pane is also narrower to give the shapes more width.
Editing the Shape (any layer)
Click "✎ Edit Shape" to clean up an imported outline. This works on every visible layer, not just the main shape — grab a point on whichever layer you want to edit:
- The main shape's points show green; each additional layer's points show blue. Drag any of them — area and roll layout recompute live, and the layer's own stored area updates.
- Point tool (Move / Add / Delete): when you enter Edit mode a small Point tool row appears. Leave it on ✥ Move to drag points. Switch to ➕ Add and a single click/tap on an edge inserts a point there. Switch to ➖ Delete and a single click/tap on a point removes it (minimum 3 points per shape). This works the same on desktop and touch — no double-click needed.
- Shortcut: in Move mode you can also double-click (or double-tap) a point to delete it, or double-click/tap an edge to add one.
- The view is held still while you drag a point, so editing one layer doesn't make the others appear to shift.
"↶ Undo" steps back through your last 20 edits (each remembers which layer it changed). Click "✓ Done Editing" to exit. Everything saves automatically. To start over from the original file, re-import the CSV — this replaces the shape and clears edit history.
Shape Rotation (view)
Rotates the drawing to match how you're viewing the yard on-site. Purely cosmetic — does not affect area, roll counts, or any calculations.
Roll Settings & the Layout key metrics
The four roll dimensions live under the ⚙ Settings tab → Roll Settings. They're a global default shared by every project. With a project open, changing any value pops a quick dialog — Every project (global default) or Only this project — so you decide the scope of each change; Cancel reverts it. A per-project override is field-granular (overriding one field still tracks the global for the others), and a status line shows whether the open job is on the global or overriding, with Reset this job to the global default to drop it. With no project open, editing just sets the global default. Standard rolls are 15 ft × 100 ft. The live layout totals — Installed SqFt (the total installed turf across all Install layers, primary plus every secondary marked Install, plus any Free-fill layers, minus any cutouts), Ordered SqFt, Ordered Linear Ft, Perimeter, and Scrap — sit in the top toolbar, just right of the ⚙ Settings tab, so they stay visible on every tab. The rest of the controls are split into sub-tabs at the top of the right pane — Layers (the per-layer list — the day-to-day controls, shown first), Results, Apply, Display, and (only when a putting green exists) Fringe — so each section is one click away with no long scroll. Roll direction & seam offset are set per layer: the primary shape has its own Roll dir / Seam off sliders (plus Horizontal / Vertical / Auto) in its card at the top of the Layers list, and each install layer has the same in its own card (until changed, a secondary layer "matches primary"). While you drag a roll-direction, seam, or rotate slider, the canvas holds its current size so nothing jumps — it re-fits to the shape when you release. Each layer's name is shown on the diagram. The roll dimensions themselves:
- Roll Width — width of the turf roll as purchased.
- Roll Length — maximum length of a single piece; longer runs are split, each adding a Cutting Margin.
- Side Trimming — width trimmed off each roll for S-seams (Roll Width − Side Trimming = usable width per strip).
- Cutting Margin — extra length added per cut/seam.
- Roll Direction — angle of rolls relative to shape. "Horizontal"/"Vertical" snap to 0°/90°. "Auto-minimize waste" searches all 180° × 8 translation offsets and picks the combination with the lowest ordered sqft.
- Seam Translation — shifts where seam lines fall; can reduce strip count. Max value equals the effective roll width.
Each roll strip only orders the length it actually needs based on where it intersects the shape — strips don't all buy the full bounding-box length. Ordered length is rounded up to the next whole foot, since turf is sold in Roll Width × 1ft increments. This produces accurate per-strip quantities and more realistic scrap percentages.
Roll Results
The Results tab shows the rolls/piece count and per-layer breakdown, with extra detail (cut/nest tools, Piece List) under a small Advanced twisty so a standard install isn't cluttered. Both Apply buttons — Apply Installed SqFt → turf row and Apply Ordered SqFt → turf row — live together on the Apply tab. Apply Ordered SqFt is usually the one you want: it sets the row's SqFt to Order and its Installed SqFt, so infill (which derives its area from Installed SqFt), labor, and rock all cascade from the one click. Apply Installed SqFt sets just the installed area. Each applies to the one row selected in its dropdown. 🔗 Live link: under Apply Ordered SqFt there's a Live checkbox (on by default) that keeps the selected row in sync with the layout automatically — no button press. Ordered SqFt follows the roll plan, so it updates when you change roll rotation or seam offset. Installed SqFt follows the shape's area (role-aware — a Base Yard row includes the putting-green footprint; Alt Turf rows are skipped since they're priced on the base), so it updates when you edit the shape or its exclusions, and that cascades to infill, rock, and labor. Rotating rolls does not change Installed (it doesn't change how much ground you cover), so materials don't churn while you're just comparing roll options. Updates fire when you release a slider (not mid-drag), targeting the row picked in the dropdown; turn it off to explore freely without touching the quote. Installed SqFt, Ordered SqFt, Ordered Linear Ft, Perimeter, and Scrap all live in the always-visible totals strip in the top toolbar (right of ⚙ Settings).
Use layout perimeter (X ft): a button under Linear Feet of Edging on the Quote Builder fills the field with the layout's total boundary length across every shape — the same "Total — all edges" the Layers tab shows. It's a click, not an automatic fill, and that's deliberate: this is the maximum possible edging, but edging only goes where turf meets soil or a bed — any run against a house, patio, or driveway needs none. So the number is offered as a starting point for you to trim down, rather than silently over-quoting every job with a hardscape edge. The button only appears once a layout exists, and its figure updates as shapes are added or edited.
The New Project dialog has the same button under its Edging (Linear Feet) field — "↧ Use CSV perimeter (X ft)" — as soon as you attach a CSV, so you can set edging while creating the job rather than going back for it. It offers the all-shapes total (the "Perimeter" line above it is the main outline only), which is the same figure the Layers tab shows once the project exists, so the number doesn't change on create.
Edging perimeter (per layer): the Layers tab lists the boundary length of every measured shape — the main outline plus each cutout (tree wells, beds, paver borders) — and a Total — all edges at the bottom. This is for ordering edging/border material that wraps every edge, and it's why a number here can exceed the Perimeter metric up top: that metric is the turf outline only (plus Install layers), while the edging total includes the inner cutout edges too. Perimeter is independent of where you drag a layer or how you rotate it.
Open "⚙ Advanced details & tools" for the rest: the Saved (nested) figure, the manual-cuts and nested-pieces lists, and the per-piece list. Entering Cut Mode opens this section automatically so the cut/nest tools are visible. (Scrap — Ordered minus the installed shape area, with % — now sits in the totals strip in the top toolbar; the purchased-rectangles toggle sits above the canvas.)
The roll/piece count shows just "N rolls" when the number of rolls to purchase equals the number of installed pieces — the normal case. It shows "N rolls / M pieces" only when these differ.
Pieces = total separately-installed pieces across the whole job: one per band/strip normally, more if a strip is manually cut into butt-seamed sections, or if a single strip is longer than Max Roll Length (which forces an inherent seam even without a manual cut).
Rolls = the number of physical rolls the pieces actually pack into, laid on in cut order. Pieces from different bands/strips share a roll whenever their combined length fits — 3 pieces totaling 75 ft = "1 roll / 3 pieces". When the next piece won't fit what's left, that piece starts a fresh roll rather than being split across the join, so every run is seamless. Three 60 ft runs on 100 ft rolls = 3 rolls of 60 ft.
That costs nothing. Because the supplier cuts rolls to length, each roll is only cut as long as it needs to be — those three rolls are still 180 ft total, exactly what 2 butt-seamed rolls would have been. Splitting a run across a roll join only ever redistributes footage between rolls; it never reduces it. So seaming a run would buy nothing and cost a seam, and the calculator simply doesn't do it. (A run longer than a whole roll is always seamed — it can't be cut in one piece.)
This is also why total linear ft ÷ roll length is the wrong way to count rolls: division assumes turf can be split across a join, so it under-counts. The calculator packs the pieces instead.
The "Show purchased roll rectangles (waste)" checkbox sits right above the canvas, always visible no matter which tab you're on, so it's a one-click toggle. On, it overlays each roll's full purchased rectangle with the unused (waste) portion hatched in red — which is what enables drag-and-drop nesting.
Piece List (Length × Width)
Rolls to order: below the piece list, each physical roll is listed with the length it actually needs to be, rounded up to the whole foot — the figure to give a supplier who cuts rolls to length. E.g. Roll 1 = 70 ft, Roll 2 = 87 ft, 157 ft total.
Layers set to share rolls pool their pieces onto the same rolls here; a layer set to roll on its own gets its own. That choice changes the roll count and each roll's length — one 55 ft roll versus a 42 ft plus a 13 ft — but never the total footage, so it costs nothing either way. Pick it for how you want the turf to arrive, not to save material.
A table listing every individual piece that will be cut for this job — each row shows its Roll N / Piece M label, Length (its ordered length along the roll), Width (the roll width), and resulting SqFt. This is the cut sheet for your installers: it tells them exactly how long to cut each piece from the roll, and the total linear footage at the bottom helps you sanity-check how many rolls to bring and plan seam placement to minimize butt seams. That total is what you order, so it excludes nested pieces — a nested piece is cut from the waste of a roll you're already buying, so counting its length again would charge you for the same turf twice. When any piece is nested, a line underneath spells the difference out (e.g. "33.0 ft of pieces get cut, but 8.0 ft of that is nested from another roll's waste — only the 25.0 ft above is ordered"), and it matches both the Linear Ft in the top bar and ft to order in Rolls to order. Pieces created by Manual Cuts or that have been nested into another roll's waste show a note (e.g. "cut from Roll N / Piece M waste"). If a Putting Green Fringe is configured, the fringe pieces ("Fringe 1", "Fringe 2", ...) are listed too, with their own length/width/sqft. Every install layer is listed, not just the main shape — when a job has more than one, each piece is prefixed with its layer name (e.g. "Shed yard — Roll 1 / Piece 1") and the list is grouped layer by layer. Layers set to share rolls are pooled onto the same rolls in Rolls to order; a layer set to roll on its own gets its own.
Drag-and-Drop Nesting
With "Show purchased roll rectangles" on, drag a roll's colored shape (the installed piece) onto another roll's hatched waste area to indicate it can be cut from that roll's offcut rather than ordered separately. Valid drop targets highlight with a green dashed border while dragging — across every layer, since a piece can be nested into a different layer's roll waste, not just its own. You can aim at any part of a roll's rectangle, including a spot that already has turf: the piece still lands where you drop it and is flagged red ("overlaps turf") so an impossible spot is obvious instead of the drop silently doing nothing. On a successful drop the piece is redrawn relocated to the target roll's waste area, outlined in orange and labeled "from Roll N / Piece M waste," and its area is removed from Ordered SqFt. The piece lands exactly where you drop it — its centroid goes to the drop point, clamped only so the whole piece stays within that roll's purchased rectangle (and nudged just enough to not stack on another piece already nested there). The tool does not relocate or refuse the piece: you place it manually, the way you'd lay it out in the yard. If where you dropped it overlaps that roll's installed turf, the piece is outlined red (instead of orange) and its label adds "— overlaps turf," a toast pops up immediately ("placed on existing turf — it won't fit there"), and a persistent red warning shows under Installed SqFt counting how many placed pieces overlap turf — so an impossible placement can't be missed. Drag it to a clear spot to clear the warning. Drop it again to move it elsewhere. To undo a move, use the piece's "↩ Put back" button in the Nested Pieces list — that's the reliable way; you can also drag the orange piece fully off every waste area onto open space, but that gesture is fiddly. You can move several pieces independently and put any one of them back without affecting the others. Works whether or not Cut Mode is active — in Cut Mode a quick click still toggles a cut, while a press-and-drag on a piece nests it. Disabled only in Edit Shape and Move Layers modes. Nesting reduces what you order: a nested piece is cut from another roll's already-purchased waste, so it drops out of Linear Ft and the roll count (not just the Ordered SqFt figure) — it still counts as an installed piece. You can also nest a cut piece into the same roll's own leftover (drop it on a sibling piece's waste), which shortens that roll. Eligibility is based on the piece's installed turf area fitting the leftover, so a piece tucks in whenever its actual shape (not its full 15ft rectangle) fits. On a multi-layer job you can nest across layers: drag a piece from any install layer onto another roll's waste in the same layer or a different one. A cross-layer nest means the piece is cut from the other layer's roll waste — so it drops out of its own layer's Ordered SqFt, Linear Ft, and roll count, while the layer it's tucked into keeps its order unchanged (that roll was already bought) and only its scrap falls. The piece is redrawn in the target layer's waste at your drop point and labeled "from <layer name> waste." Cross-layer placement is approximate — it lands in the target's waste near where you drop it; treat the orange/red outline as the confirmation and nudge it if needed.
Placements are tied to each roll's position in the shape, so they persist across saves/reloads. If you later change roll direction, seam offset, roll width, or side trim enough that the rolls reflow into different bands, a placement tied to a band that no longer exists is simply dropped — it won't jump onto an unrelated roll. Re-check nesting after making significant roll-setting changes.
A "Nested Pieces" list appears in Roll Results whenever any piece is nested, showing each one as "Roll N / Piece M → nested in …" with a "↩ Put back" button. Clicking it reverts that single placement — the piece returns to its own ordered length and its area is added back into Ordered SqFt. This is the discoverable equivalent of dragging the orange piece back off the waste area on the canvas. Each row also has a "⟳ 90°" button that rotates that nested piece a quarter turn, so it runs the grain the other way to fit a leftover that's longer across the roll than along it (the row shows "(rotated 90°)" when active; the piece re-clamps to stay inside the roll). Turf has a pile direction, so a rotated piece's grain runs perpendicular to the rest — fine for a hidden or small piece, visible on an open lawn, so it's your call per piece.
Known Limitations
Nesting eligibility is area-based: a piece can be dropped into another roll's waste when its area fits within that roll's leftover (waste) area. Placement then honors your drop exactly — the tool no longer relocates or refuses a piece based on a strict 2D fit, because in practice you (the installer) are the one judging whether a leftover can hold a piece. To keep the estimate honest, a nested piece whose dropped position overlaps the target roll's installed turf is outlined red and flagged "overlaps turf," so an impossible placement is obvious on the diagram rather than hidden. Treat the orange/red outline as your visual confirmation, and scrap % as a useful planning number, not a guarantee. Roll strips currently don't split further within a strip for very irregular shapes.