{"id":227,"date":"2025-09-21T23:02:58","date_gmt":"2025-09-21T23:02:58","guid":{"rendered":"https:\/\/topsoiltippers.co.za\/?post_type=product&#038;p=227"},"modified":"2026-04-25T20:54:46","modified_gmt":"2026-04-25T20:54:46","slug":"lawndressing","status":"publish","type":"product","link":"https:\/\/topsoiltippers.co.za\/af\/shop\/lawndressing\/","title":{"rendered":"Grasperk-bolaag (Bogrond- en Komposmengsel)"},"content":{"rendered":"<h1><strong>Revive Your Lawn with Premium Lawn Dressing.<\/strong><\/h1>\n<p>Is your grass looking thin, pale, or uneven? Our <strong>Lawn Dressing<\/strong> is a specialized mix designed to fix exactly that. We blend nutrient-rich organic compost with fertile topsoil and sift it finely to ensure there are no rocks or lumps.<\/p>\n<h4><strong>Why Top Dress Your Lawn?<\/strong><\/h4>\n<p><strong>Level the Ground:<\/strong> Over time, lawns develop small bumps and hollows that make mowing difficult. Our dressing fills these low spots for a smooth, carpet-like finish.<br \/>\n<strong>Boost Growth:<\/strong> The organic compost component releases essential nutrients into the root zone, turning yellowing grass into lush green blades.<br \/>\n<strong>Improve Soil:<\/strong> It adds body to sandy soils and improves drainage in clay areas, helping your lawn survive the Pretoria heat.<\/p>\n<h4><strong>Application Guide:<\/strong><\/h4>\n<p><strong>Best Time:<\/strong> Spring and early Summer (August to January) are the ideal times to dress your lawn in Gauteng.<br \/>\n<strong>How to Apply<\/strong>: Mow your lawn short first. Spread the dressing evenly using the back of a rake or a plank.<br \/>\n<strong>Coverage:<\/strong> As a rule of thumb, 1 cubic meter covers approx. 20-30m\u00b2 of lawn (depending on thickness).<br \/>\n<strong>Watering:<\/strong> Water thoroughly immediately after application to settle the mix into the roots.<\/p>\n<h4><strong>Common Questions:<\/strong><\/h4>\n<p><strong>Will lawn dressing kill my grass?<\/strong> No, as long as you don&#8217;t bury it completely! You should still be able to see the tips of the grass blades sticking through the dressing. This allows the grass to photosynthesize and grow through the new soil quickly.<br \/>\n<strong>How thick should I apply it?<\/strong> We recommend a layer of about 1cm to 3cm. If you have very deep holes to fill, fill them gradually over a few weeks rather than all at once.<br \/>\n<strong>Is this just topsoil?<\/strong> No. Topsoil alone can sometimes pack too hard. Our Lawn Dressing is a <strong>50\/50 mix (approx)<\/strong> of Topsoil and Compost. The compost keeps the mix loose and provides the food (fertilizer) your lawn needs.<\/p>\n<h4><b>Delivery:<\/b> We deliver bulk loads of Lawn Dressing to <b>Pretoria East.<\/b><\/h4>\n<p><strong>Disclaimer:<\/strong> At Topsoil Tippers, we strive to ensure that the products you receive match the images and descriptions provided. However, as our materials are sourced from various suppliers, there may be slight variations in color, texture, and composition. Rest assured, we exercise the utmost care to provide products that meet your expectations and are as close to the pictures as possible. Let us help you bring your projects to life with quality products and exceptional service!<\/p>","protected":false},"excerpt":{"rendered":"<p style=\"margin-bottom: 15px;\">\n    <strong style=\"color: #25D366; font-size: 22px;\">\ud83d\udc47 Scroll down to calculate required quantities or ADD TO BASKET<\/strong>\n<\/p>\n<p>The secret to a golf-course green lawn. A premium, blend of organic compost and rich topsoil. Perfect for leveling uneven grass and boosting growth this summer.<br \/>\n<style>\r\n    .ts-vol-calc-wrapper * { box-sizing: border-box; }\r\n    .ts-vol-calc-wrapper input[type=\"number\"] { margin-bottom: 0 !important; box-shadow: none !important; border: 1px solid #ccc !important; background: #fff !important; height: 45px !important; }\r\n    .vis-stage-vol { height: 240px; display: flex; align-items: center; justify-content: center; background: #fafafa; border: 1px inset #eaeaea; border-radius: 8px; margin-bottom: 20px; overflow: hidden; perspective: 800px; }\r\n    .shape-m3 { position: relative; width: 0px; height: 0px; transform-style: preserve-3d; transform: rotateX(-20deg) rotateY(-40deg); transition: all 0.4s ease; opacity: 0; }\r\n    .cube-face { position: absolute; border: 2px solid #8b6b3d; top: 0; left: 0; transition: all 0.4s ease; transform-style: preserve-3d; }\r\n    .cube-top { background: rgba(225, 200, 150, 0.85); }\r\n    .cube-front { background: rgba(200, 170, 120, 0.95); }\r\n    .cube-right { background: rgba(180, 150, 100, 0.9); }\r\n    .dim-badge-vol { position: absolute; background: rgba(255, 255, 255, 0.95); padding: 5px 8px; border-radius: 4px; font-size: 14px; font-weight: 800; box-shadow: 0 2px 5px rgba(0,0,0,0.15); border: 1px solid rgba(0,0,0,0.1); white-space: nowrap; pointer-events: none; color: #8b6b3d;}\r\n<\/style>\r\n\r\n<div class=\"ts-vol-calc-wrapper\" style=\"background: #ffffff; padding: 25px; border-radius: 12px; border: 1px solid #e0e0e0; box-shadow: 0 4px 15px rgba(0,0,0,0.05); color: #333; margin-bottom: 20px;\">\r\n    <h3 style=\"color: #2d5a27; margin-top: 0; font-size: 18px; margin-bottom: 15px; font-weight: bold;\">Calculate How Much You Need<\/h3>\r\n\r\n    <div class=\"vis-stage-vol\">\r\n        <div class=\"shape-m3\">\r\n            <div class=\"cube-top cube-face\"><\/div>\r\n            <div class=\"cube-front cube-face\">\r\n                <div class=\"badge-3d-w dim-badge-vol\" style=\"bottom: -32px; left: 50%; transform: translateX(-50%);\"><\/div>\r\n                <div class=\"badge-3d-d dim-badge-vol\" style=\"left: -65px; top: 50%; transform: translateY(-50%);\"><\/div>\r\n            <\/div>\r\n            <div class=\"cube-right cube-face\">\r\n                <div class=\"badge-3d-l dim-badge-vol\" style=\"bottom: -32px; left: 50%; transform: translateX(-50%);\"><\/div>\r\n            <\/div>\r\n        <\/div>\r\n        <span class=\"placeholder-vol\" style=\"color: #aaa; font-size: 14px; font-style: italic;\">Enter dimensions to visualise...<\/span>\r\n    <\/div>\r\n\r\n    <div style=\"display: flex; gap: 15px; margin-bottom: 15px;\">\r\n        <div style=\"flex: 1;\">\r\n            <label style=\"font-size: 14px; font-weight: 600; color: #444; display: block; margin-bottom: 6px;\">Length (metre)<\/label>\r\n            <input type=\"number\" class=\"vol-length\" placeholder=\"0\" style=\"width: 100%; padding: 12px; border-radius: 6px;\">\r\n        <\/div>\r\n        <div style=\"flex: 1;\">\r\n            <label style=\"font-size: 14px; font-weight: 600; color: #444; display: block; margin-bottom: 6px;\">Width (metre)<\/label>\r\n            <input type=\"number\" class=\"vol-width\" placeholder=\"0\" style=\"width: 100%; padding: 12px; border-radius: 6px;\">\r\n        <\/div>\r\n    <\/div>\r\n    <div style=\"margin-bottom: 20px;\">\r\n        <label style=\"font-size: 14px; font-weight: 600; color: #444; display: block; margin-bottom: 6px;\">Desired Depth (millimetre)<\/label>\r\n        <input type=\"number\" class=\"vol-depth\" placeholder=\"e.g. 50\" style=\"width: 100%; padding: 12px; border-radius: 6px;\">\r\n        <p style=\"font-size: 12px; color: #666; margin: 6px 0 0 0; font-style: italic;\">Recommended: 30mm for dressing, 50mm-100mm for beds.<\/p>\r\n    <\/div>\r\n\r\n    <div style=\"background: #f4f8f4; border: 2px solid #2d5a27; padding: 20px; border-radius: 8px; text-align: center;\">\r\n        <span style=\"font-size: 14px; color: #2d5a27; font-weight: 600;\">Order Quantity Updated To:<\/span><br>\r\n        <strong style=\"font-size: 36px; color: #2d5a27; display: block; margin: 5px 0;\"><span class=\"vol-result\">0<\/span> m\u00b3<\/strong>\r\n        \r\n        <p style=\"font-size: 12px; margin: 5px 0 0 0; color: #555;\">(<strong style=\"color: #cc0000;\">Minimum order: 1m\u00b3<\/strong>) &bull; <em>Calculations are rounded up to the next full cubic metre.<\/em><\/p>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\nsetInterval(function() {\r\n    const wrappers = document.querySelectorAll('.ts-vol-calc-wrapper');\r\n    wrappers.forEach(function(wrapper) {\r\n        const inputL = wrapper.querySelector('.vol-length');\r\n        const inputW = wrapper.querySelector('.vol-width');\r\n        const inputD = wrapper.querySelector('.vol-depth');\r\n        if (!inputL || !inputW || !inputD) return;\r\n\r\n        const currL = inputL.value;\r\n        const currW = inputW.value;\r\n        const currD = inputD.value;\r\n\r\n        if (wrapper.dataset.lastL !== currL || wrapper.dataset.lastW !== currW || wrapper.dataset.lastD !== currD) {\r\n            wrapper.dataset.lastL = currL;\r\n            wrapper.dataset.lastW = currW;\r\n            wrapper.dataset.lastD = currD;\r\n\r\n            const l = parseFloat(currL) || 0;\r\n            const w = parseFloat(currW) || 0;\r\n            const d = parseFloat(currD) || 0;\r\n            let total = 0;\r\n\r\n            const shape = wrapper.querySelector('.shape-m3');\r\n            const placeholder = wrapper.querySelector('.placeholder-vol');\r\n            const cTop = wrapper.querySelector('.cube-top');\r\n            const cFront = wrapper.querySelector('.cube-front');\r\n            const cRight = wrapper.querySelector('.cube-right');\r\n            const badgeW = wrapper.querySelector('.badge-3d-w');\r\n            const badgeL = wrapper.querySelector('.badge-3d-l');\r\n            const badgeD = wrapper.querySelector('.badge-3d-d');\r\n\r\n            if (l > 0 && w > 0 && d > 0) {\r\n                if(placeholder) placeholder.style.display = 'none';\r\n                if(shape) shape.style.opacity = '1';\r\n                \r\n                \/\/ Calculates the volume and forces it to round up to the next absolute whole number\r\n                let calculatedVol = Math.ceil(l * w * (d \/ 1000));\r\n                \r\n                \/\/ Forces minimum order constraint\r\n                total = Math.max(1, calculatedVol); \r\n                \r\n                const maxDim = Math.max(l, w);\r\n                const visW = Math.max((w \/ maxDim) * 90, 30); \r\n                const visL = Math.max((l \/ maxDim) * 90, 30); \r\n                const visD = Math.max((d \/ 1000) * 30, 20); \r\n\r\n                if(cTop) {\r\n                    cTop.style.width = visW + 'px';\r\n                    cTop.style.height = visL + 'px';\r\n                    cTop.style.transform = `translate(-50%, -50%) rotateX(90deg) translateZ(${visD \/ 2}px)`;\r\n                }\r\n                if(cFront) {\r\n                    cFront.style.width = visW + 'px';\r\n                    cFront.style.height = visD + 'px';\r\n                    cFront.style.transform = `translate(-50%, -50%) translateZ(${visL \/ 2}px)`;\r\n                }\r\n                if(cRight) {\r\n                    cRight.style.width = visL + 'px';\r\n                    cRight.style.height = visD + 'px';\r\n                    cRight.style.transform = `translate(-50%, -50%) rotateY(90deg) translateZ(${visW \/ 2}px)`;\r\n                }\r\n\r\n                if(badgeW) badgeW.innerText = w + \"m\";\r\n                if(badgeL) badgeL.innerText = l + \"m\";\r\n                if(badgeD) {\r\n                    if(d > 0) { badgeD.style.display = 'block'; badgeD.innerText = d + \"mm\"; }\r\n                    else { badgeD.style.display = 'none'; }\r\n                }\r\n\r\n                document.querySelectorAll('form.cart input.qty').forEach(function(qty) {\r\n                    if(qty.value != total) {\r\n                        qty.value = total;\r\n                        qty.dispatchEvent(new Event('input', {bubbles: true}));\r\n                        qty.dispatchEvent(new Event('change', {bubbles: true}));\r\n                    }\r\n                });\r\n            } else {\r\n                if(placeholder) placeholder.style.display = 'block';\r\n                if(shape) shape.style.opacity = '0';\r\n            }\r\n            \r\n            wrapper.querySelector('.vol-result').innerText = total;\r\n\r\n            document.querySelectorAll('.vol-length').forEach(function(inp) { if(inp.value !== currL) inp.value = currL; });\r\n            document.querySelectorAll('.vol-width').forEach(function(inp) { if(inp.value !== currW) inp.value = currW; });\r\n            document.querySelectorAll('.vol-depth').forEach(function(inp) { if(inp.value !== currD) inp.value = currD; });\r\n            document.querySelectorAll('.vol-result').forEach(function(res) { res.innerText = total; });\r\n        }\r\n    });\r\n}, 250);\r\n<\/script>\n","protected":false},"featured_media":230,"comment_status":"open","ping_status":"closed","template":"","meta":{"_joinchat":[]},"product_brand":[],"product_cat":[19],"product_tag":[],"class_list":{"0":"post-227","1":"product","2":"type-product","3":"status-publish","4":"has-post-thumbnail","6":"product_cat-garden-soils","8":"first","9":"instock","10":"sale","11":"shipping-taxable","12":"purchasable","13":"product-type-simple"},"_links":{"self":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product\/227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product"}],"about":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/types\/product"}],"replies":[{"embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/comments?post=227"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/media\/230"}],"wp:attachment":[{"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/media?parent=227"}],"wp:term":[{"taxonomy":"product_brand","embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product_brand?post=227"},{"taxonomy":"product_cat","embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product_cat?post=227"},{"taxonomy":"product_tag","embeddable":true,"href":"https:\/\/topsoiltippers.co.za\/af\/wp-json\/wp\/v2\/product_tag?post=227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}