/* Realistic UI mockups used as product screenshots across the marketing pages */ function MkFrame({ title, children, pad }) { return (
{title}
{children}
); } const MKNAV = [['layout-dashboard', 'Dashboard'], ['grid-2x2', 'Seat board'], ['file-stack', 'Registers'], ['folder-check', 'Audit pack'], ['layers', 'Sites'], ['users-round', 'Labour pool']]; function MkSide({ active = 'Dashboard' }) { return (
LTLabour Tech
{MKNAV.map(([ic, t]) =>
{t}
)}
); } function MkKpis({ items }) { return
{items.map(([l, v, d]) =>
{l}{v}{d}
)}
; } function MkTable({ head, rows }) { return ( {head.map(h => )}{rows.map((r, i) => {r.map((c, j) => )})}
{h}
{c}
); } const B = (t, c) => {t}; function MkBars({ data, y }) { return
{data.map(([l, v]) =>
{l}
)}
; } function MockDashboard() { return (
Good morning, Sunridge InfraFour sites on retainer · three seats empty
Seat board
Needs a decision todayRegisters & filings
Approve August wage sheet, 'Tower Phase 2', '4 Sep', B('Awaiting you', 'wait')], [Bank proof — seat S-24, 'Tower Phase 2', 'Overdue 3 days', B('Awaiting you', 'bad')], [PF ECR deposit, 'All sites', '15 Sep', B('Prepared', 'info')], [Replacement — seat S-12, 'Tower Phase 2', '41 hrs left', B('With us', 'info')], ]} />
); } function MockBids() { return (
Bid comparison5 bids · deadline 22 Aug
Award requirement
Sahyadri Labour Services, '50', '₹780', '4.8', '8 yrs', B('Shortlisted', 'wait')], [Mahalaxmi Workforce LLP, '45', '₹745', '4.6', '6 yrs', B('Under review', 'info')], [Shreenath Manpower, '50', '₹810', '4.4', '4 yrs', B('Under review', 'info')], [Konkan Enterprises, '32', '₹725', '4.7', '11 yrs', B('Clarification', 'wait')], [Deccan Contracting Co., '50', '₹860', '4.9', '14 yrs', B('Rejected', 'bad')], ]} />
); } function MockRequirement() { return (
Post a labour requirementPune Residential Tower — Phase 2
Post
{[['Project', 'Pune Residential Tower — Phase 2'], ['Site location', 'Hinjawadi, Pune'], ['Bid deadline', '22 Aug 2026'], ['Start date', '15 Sep 2026'], ['Duration', '3 months'], ['Shift', 'Day shift']].map(([l, v]) => (
{l}
{v}
))}
Workforce lines+ Add trade
Masonry, '40', '₹750–800', '15 Sep'], [Helpers, '30', '₹520–560', '15 Sep'], [Carpentry, '15', '₹800–850', '22 Sep'], [Bar bending, '10', '₹780–820', '22 Sep'], ]} />
); } function MockDiscovery() { return (
Contractor discovery38 verified businesses in Pune
Invite to bid
{['Pune', 'Masonry', '100–300 workers', '4.5+ rating', 'Verified only'].map(f => {f})}
{[['SL', 'Sahyadri Labour Services', 'Pune · 420 workers · 8 yrs', '4.8', 'Available'], ['MW', 'Mahalaxmi Workforce LLP', 'Pune · PCMC · 260 workers · 6 yrs', '4.6', 'Available'], ['KE', 'Konkan Enterprises', 'Mumbai / MMR · 180 workers · 11 yrs', '4.7', 'Partly booked'], ['SN', 'Shreenath Manpower', 'Thane · 540 workers · 4 yrs', '4.4', 'Available']].map(c => (
{c[0]}
{c[1]} {B('Verified', 'ok')}{c[2]} · ★ {c[3]}
{c[4]} Invite
))}
); } function MockFeed() { return (
Open requirements14 live in your cities · 3 closing this week
Submit bid
{['Pune', 'Masonry', 'Helpers', 'Starts in 30 days'].map(f => {f})}
{[['40 masons', 'Sunridge Infra · Hinjawadi', '₹750–800 / day · 3 months', '22 Aug'], ['30 helpers', 'Sunridge Infra · Hinjawadi', '₹520–560 / day · 3 months', '22 Aug'], ['15 carpenters', 'Meridian Builders · Kharadi', '₹800–850 / day · 6 weeks', '24 Aug'], ['25 shuttering', 'Deccan EPC · Chakan', '₹700–760 / day · 4 months', '27 Aug']].map(r => (
{r[0].split(' ')[0]}
{r[0]} {B('Verified buyer', 'ok')}{r[1]} · {r[2]}
Bid by {r[3]} Bid
))}
); } function MockBidSubmit() { return (
Submit your bidSunridge Infra · 40 masons · starts 15 Sep
Submit
{[['Workforce offered', '50 masons'], ['Rate per day', '₹780'], ['Availability', 'Immediate'], ['Start date', '15 Sep 2026'], ['Fulfilment time', '3 days'], ['Supervisor', 'Provided']].map(([l, v]) => (
{l}
{v}
))}
Your verified profile, workforce capacity and completed engagements are attached automatically.
My bidsView all
30 helpers, 'Sunridge Infra', '₹540', B('Shortlisted', 'wait')], [15 carpenters, 'Meridian Builders', '₹820', B('Negotiating', 'wait')], [20 masons, 'Deccan EPC', '₹760', B('Awarded', 'ok')], ]} />
); } function MockProjects() { return (
Projects4 sites · 9 open requirements
New project
Tower — Phase 2, 'Hinjawadi, Pune', B('Bidding', 'wait'), '5', '62 / 100'], [Commercial Block A, 'Kharadi, Pune', B('Active', 'ok'), '3', '70 / 70'], [Warehouse fit-out, 'Chinchwad, PCMC', B('Open', 'info'), '2', '0 / 45'], [Township — Phase 1, 'Thane, MMR', B('Draft', 'off'), '0', '—'], ]} />
); } function MockAnalytics() { return (
Portfolio analyticsLast 6 months · 4 projects
Export
Requirements per month
Trade-wise demand
); } function MockPool() { return (
Labour pool availabilityRegistered on the Labour Tech app · Pune · updated today
Request allocation
Masonry, '980', '265', '91%', '₹765'], [Helpers, '1,420', '480', '84%', '₹530'], [Carpentry, '610', '155', '88%', '₹820'], [Bar bending, '430', '110', '90%', '₹790'], [Electrical, '260', '58', '94%', '₹910'], ]} />
Workers are engaged through your appointed labour contractor. Individual worker records stay in the Labour Tech app.
); } function MockSeats() { const seats = []; for (let i = 1; i <= 50; i++) seats.push([i, i === 12 || i === 31 || i === 46 ? 'empty' : (i === 24 ? 'pend' : 'ok')]); return (
50 seats on retainer47 occupied · 3 empty · replacement clock running
Request replacement
{seats.map(([n, st]) => ( {String(n).padStart(2, '0')} ))}
S-01, 'Masonry', B('Occupied', 'ok'), '142', 'Returning worker'], [S-12, 'Masonry', B('Empty', 'bad'), '—', 'Replacement due in 41 hrs'], [S-24, 'Helpers', B('Occupied', 'wait'), '11', 'Bank proof pending'], [S-33, 'Carpentry', B('Occupied', 'ok'), '204', 'Returning worker'], [S-46, 'Shuttering', B('Empty', 'bad'), '—', 'Released — F&F acknowledged'], ]} />
); } function MockRegisters() { return (
Registers & filings68 unique workers across 50 seats
Download all
Statutory registersAugust 2026
Form 12, 'Muster Roll', B('Generated', 'ok')], [Form 13, 'Register of Wages', B('Generated', 'ok')], [Form 14, 'Wages-cum-Muster Roll', B('Generated', 'ok')], [Form 18, 'Register of Advances', B('Generated', 'ok')], [Form 17, 'Register of Fines', B('Nil return', 'off')], [CLRA XIII, 'Workmen by Contractor', B('Prepared', 'ok')], ]} />
Filing calendarDeposits made by you
PF ECR — August, '13 Sep', '15 Sep', B('Prepared', 'info')], [ESIC — August, '13 Sep', '15 Sep', B('Prepared', 'info')], [PF ECR — July, '12 Aug', 'Deposited', B('Acknowledged', 'ok')], ]} />
); } function MockAudit() { return (
Audit packOne download per site, per month
Download July pack
What is in the packJuly 2026
Statutory registers, 'Forms 9 to 19 and Form D', '11'], [CLRA registers, 'Form XII and Form XIII', '2'], [Wage records, 'Wage sheet, payslips, payout file, proof', '4'], [Contributions, 'PF, ESIC, PT, TDS with bifurcation', '4'], [Acknowledgements, 'Deposit receipts and portal acks', '6'], [Safety, 'Induction, PPE, toolbox talks, incidents', '4'], ]} />
); } const MOCKS = { seats: MockSeats, registers: MockRegisters, audit: MockAudit, pool: MockPool, dashboard: MockDashboard, bids: MockBids, requirement: MockRequirement, discovery: MockDiscovery, feed: MockFeed, bidsubmit: MockBidSubmit, projects: MockProjects, analytics: MockAnalytics }; function Mock({ kind, dark }) { const C = MOCKS[kind] || MockDashboard; return
; } Object.assign(window, { Mock, MkFrame, MkSide, MkTable, MkKpis, MkBars, MockPool });