HDS Board Estimator

Input your cutting list dimensions in millimeters (mm) to estimate total boards required.

Solid Colors / White (15% Waste – Rotatable) Wood Grain / Textured (23% Waste – Fixed Direction)
Part Description Length (mm) Width (mm) Qty
Total Material Area: 0.00 m²
Estimated Boards Needed: 0

*Estimates include structural waste factors. Final optimized cutting layouts at the counter may vary slightly.

.hds-calculator-container { background: #ffffff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 24px; font-family: -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, sans-serif; max-width: 750px; margin: 20px auto; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05), 0 2px 4px -1px rgba(0, 0, 0, 0.03); } .hds-calc-header h3 { margin: 0 0 6px 0; color: #1e293b; font-size: 22px; font-weight: 700; } .hds-calc-header p { margin: 0 0 24px 0; color: #64748b; font-size: 14px; line-height: 1.5; } .hds-settings-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; background: #f8fafc; padding: 16px; border-radius: 8px; margin-bottom: 24px; } .hds-dimensions-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } .hds-input-group { display: flex; flex-direction: column; gap: 6px; } .hds-input-group label { font-size: 12px; font-weight: 600; color: #475569; text-transform: uppercase; letter-spacing: 0.5px; } .hds-input-group input, .hds-input-group select { padding: 10px 12px; border: 1px solid #cbd5e1; border-radius: 6px; font-size: 14px; color: #334155; background-color: #fff; outline: none; transition: border-color 0.2s; } .hds-input-group input:focus, .hds-input-group select:focus { border-color: #3b82f6; } .table-responsive { overflow-x: auto; margin-bottom: 16px; } #cutting-list-table { width: 100%; border-collapse: collapse; min-width: 500px; } #cutting-list-table th { background: #f1f5f9; color: #475569; text-align: left; padding: 10px 12px; font-size: 13px; font-weight: 600; } #cutting-list-table td { padding: 8px 6px; border-bottom: 1px solid #e2e8f0; } #cutting-list-table input { width: 100%; padding: 8px; border: 1px solid #e2e8f0; border-radius: 4px; font-size: 14px; box-sizing: border-box; } #cutting-list-table input:focus { border-color: #3b82f6; outline: none; } .hds-btn-add { background: #f1f5f9; color: #334155; border: 1px dashed #cbd5e1; padding: 10px 16px; border-radius: 6px; font-weight: 600; font-size: 14px; cursor: pointer; width: 100%; transition: all 0.2s; margin-bottom: 24px; } .hds-btn-add:hover { background: #e2e8f0; color: #0f172a; } .hds-btn-delete { background: none; border: none; color: #ef4444; font-size: 18px; cursor: pointer; padding: 4px 8px; line-height: 1; } .hds-btn-delete:hover { color: #dc2626; } .hds-results-panel { background: #0f172a; color: #ffffff; padding: 20px; border-radius: 8px; } .hds-metric { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; border-bottom: 1px solid #334155; padding-bottom: 12px; } .hds-metric-label { color: #94a3b8; font-size: 14px; } .hds-metric-val { font-weight: 600; font-size: 16px; } .hds-final-score { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .hds-score-label { font-size: 16px; font-weight: 700; color: #fff; } .hds-score-val { font-size: 32px; font-weight: 800; color: #38bdf8; } .hds-disclaimer { margin: 8px 0 0 0; font-size: 11px; color: #64748b; line-height: 1.4; } @media (max-width: 600px) { .hds-settings-grid { grid-template-columns: 1fr; } } const initialPanels = [ { desc: ‘Base Unit Sides’, l: 720, w: 560, qty: 4 }, { desc: ‘Shelves’, l: 564, w: 530, qty: 6 }, { desc: ‘Back Panels’, l: 715, w: 595, qty: 2 } ]; function initCalculator() { const tbody = document.getElementById(‘table-body’); tbody.innerHTML = ”; initialPanels.forEach(p => { tbody.appendChild(createRowElement(p.desc, p.l, p.w, p.qty)); }); calculateBoards(); } function createRowElement(desc = ”, l = ”, w = ”, qty = ”) { const tr = document.createElement(‘tr’); tr.innerHTML = ` `; return tr; } function addTableRow() { const tbody = document.getElementById(‘table-body’); tbody.appendChild(createRowElement()); calculateBoards(); } function removeRow(button) { const row = button.closest(‘tr’); row.remove(); calculateBoards(); } function calculateBoards() { const sheetL = parseFloat(document.getElementById(‘sheet-l’).value) || 0; const sheetW = parseFloat(document.getElementById(‘sheet-w’).value) || 0; const wasteMultiplier = parseFloat(document.getElementById(‘board-type’).value) || 1.15; if (sheetL <= 0 || sheetW <= 0) { document.getElementById('final-boards-display').innerText = '0'; document.getElementById('total-area-display').innerText = '0.00 m²'; return; } const sheetAreaM2 = (sheetL * sheetW) / 1000000; const lengths = document.getElementsByClassName('p-length'); const widths = document.getElementsByClassName('p-width'); const quantities = document.getElementsByClassName('p-qty'); let totalPanelAreaM2 = 0; for (let i = 0; i 0 && w > 0 && q > 0) { totalPanelAreaM2 += (l * w * q) / 1000000; } } const totalAreaWithWaste = totalPanelAreaM2 * wasteMultiplier; let finalBoards = 0; if (totalAreaWithWaste > 0) { finalBoards = Math.ceil(totalAreaWithWaste / sheetAreaM2); } document.getElementById(‘total-area-display’).innerText = totalPanelAreaM2.toFixed(2) + ‘ m²’; document.getElementById(‘final-boards-display’).innerText = finalBoards; } // Safely trigger initial setup once the DOM handles layout execution if (document.readyState === ‘loading’) { document.addEventListener(‘DOMContentLoaded’, initCalculator); } else { initCalculator(); }