/* "After" screens — redesigned counterparts. */ /* Shared bits ------------------------------------------------- */ function Metric({ value, label, delta, deltaDir, mono = true }) { const dcol = deltaDir === 'up' ? 'var(--ok)' : deltaDir === 'down' ? 'var(--bad)' : 'var(--steel)'; return (
{label}
{value}
{delta && (
{delta}
)}
); } function Chip({ kind = 'neutral', children, dot }) { const styles = { neutral: { bg: 'var(--paper-2)', fg: 'var(--slate)', dot: 'var(--steel)' }, ok: { bg: 'var(--ok-tint)', fg: 'var(--ok)', dot: 'var(--ok)' }, warn: { bg: 'var(--warn-tint)', fg: 'oklch(0.4 0.13 80)', dot: 'var(--warn)' }, bad: { bg: 'var(--bad-tint)', fg: 'var(--bad)', dot: 'var(--bad)' }, cool: { bg: 'var(--cool-tint)', fg: 'var(--cool)', dot: 'var(--cool)' }, ember: { bg: 'var(--ember-tint)', fg: 'var(--ember-ink)', dot: 'var(--ember)' }, }[kind]; return ( {dot !== false && } {children} ); } /* ======================= DASHBOARD — AFTER ======================= */ function DashboardAfter() { return (
{/* Hero: today */}
Saturday · April 18
12 jobs on the floor, 3 running hot . One oven cycle left before lunch.
Margin · Apr
38.2%
+2.1 pts
{/* Attention row: only what needs action */}
Needs attention 6 items
filtered · next 48 h
{[ { kind: 'bad', tag: 'OVERDUE', primary: '$3,240', label: '4 invoices past due', detail: 'Oldest: Rodriguez, 42d · $980' }, { kind: 'warn', tag: 'TIGHT', primary: '7', label: 'jobs due in < 48h', detail: '2 in Prep · 4 in Coating · 1 in Curing' }, { kind: 'cool', tag: 'LOW', primary: '8', label: 'powders below reorder', detail: 'Gloss black (3.2 lb) · Satin bronze · +6' }, ].map((a, i) => (
{a.tag}
{a.primary}
{a.label}
{a.detail}
))}
{/* Two-up */}
Floor activity last 6 h
{[ ['09:42', 'J-2041', 'Rodriguez · Fence gate', 'moved to Coating', 'warn'], ['09:28', 'J-2044', 'D&T Auto · Wheel set', 'completed Prep', 'ok'], ['09:05', 'J-2040', 'Summit · Railing', 'flagged rework · pinholing', 'bad'], ['08:51', 'J-2038', 'Heritage · Bumper', 'pulled from oven · 180 °C', 'cool'], ['08:20', 'J-2037', 'Parkside · Chair set', 'received at intake', 'neutral'], ].map((r, i) => (
{r[0]} {r[1]} {r[2].split(' · ')[0]} · {r[2].split(' · ')[1]} {r[3]}
))}
A/R aging $12,450
{[ ['Current', 8420, 'ok'], ['1 – 30 d', 2100, 'cool'], ['31 – 60 d', 1430, 'warn'], ['60 + d', 500, 'bad'], ].map(([l, v, k], i) => { const palette = { ok: 'var(--ok)', cool: 'var(--cool)', warn: 'var(--warn)', bad: 'var(--bad)' }; return (
{l} ${v.toLocaleString()}
); })}
); } /* ======================= JOBS INDEX — AFTER ======================= */ function JobsIndexAfter() { const jobs = [ ['J-2041', 'Fence gate', 'Anodized black', 'Rodriguez Metal', 'Apr 19', 'Coating', 'bad', 'High', 780, 'hot'], ['J-2040', 'Wheel set (4)', 'Gloss white', 'D&T Auto', 'Apr 19', 'Queued', 'cool', 'Normal', 420, ''], ['J-2039', 'Patio table', 'Matte black', 'Mercer Residential', 'Apr 20', 'Curing', 'ember', 'Normal', 210, ''], ['J-2038', 'Trailer frame', 'Zinc primer', 'Bluegrass Trailers', 'Apr 22', 'Prep', 'warn', 'Low', 1640, ''], ['J-2037', 'Bumper', 'Satin bronze', 'Heritage Restoration', 'Apr 22', 'Ready for pickup', 'ok', 'Normal', 340, ''], ['J-2036', 'Railing', 'Hammered copper', 'Summit Builders', 'Apr 23', 'Queued', 'cool', 'High', 980, ''], ]; return (
{/* Single-row metric strip — no cards */}
Open value
$18,420
avg $392 / job
{/* Toolbar */}
Search jobs, customers, PO… /
{['All', 'Due ≤ 48h', 'On floor', 'Ready', 'Mine'].map((t, i) => ( ))}
{/* Table */}
{['Job', 'Description', 'Customer', 'Due', 'Status', 'Priority', 'Total', ''].map((h, i) => ( ))} {jobs.map((j, i) => { const hot = j[9] === 'hot'; return ( ); })}
{h}
{hot && } {j[0]}
{j[1]}
{j[2]}
{j[3]} {j[4]} {j[5]} {j[7]} ${j[8].toLocaleString()}
Showing 1 – 6 of 47 ↑↓ to move · ↵ to open · ⌘F to filter
); } /* ======================= JOBS BOARD — AFTER ======================= */ function JobsBoardAfter() { const cols = [ { title: 'Intake', id: 'INTAKE', count: 3, cards: [ { id: 'J-2049', cust: 'Pine Ridge Metal', desc: 'Gate hardware set', due: 'Apr 24', days: '+6', powder: 'Gloss black', parts: 12, prio: 'normal' }, { id: 'J-2048', cust: 'Highway Fabworks', desc: 'Railing brackets', due: 'Apr 25', days: '+7', powder: 'Matte white', parts: 24, prio: 'low' }, { id: 'J-2047', cust: 'Crestline Custom', desc: 'Bumper set', due: 'Apr 26', days: '+8', powder: 'Satin bronze', parts: 2, prio: 'normal' }, ]}, { title: 'Prep', id: 'PREP', count: 2, cards: [ { id: 'J-2045', cust: 'Rodriguez Metal', desc: 'Fence gate', due: 'Apr 19', days: '+1', powder: 'Anodized black', parts: 1, prio: 'high', hot: true }, { id: 'J-2044', cust: 'D&T Auto', desc: 'Wheel set (4)', due: 'Apr 19', days: '+1', powder: 'Gloss white', parts: 4, prio: 'normal' }, ]}, { title: 'Coating', id: 'COAT', count: 3, cards: [ { id: 'J-2042', cust: 'Mercer', desc: 'Patio table', due: 'Apr 20', days: '+2', powder: 'Matte black', parts: 1, prio: 'normal' }, { id: 'J-2041', cust: 'Bluegrass', desc: 'Trailer frame', due: 'Apr 22', days: '+4', powder: 'Zinc primer', parts: 1, prio: 'low' }, { id: 'J-2040', cust: 'Summit', desc: 'Railing', due: 'Apr 23', days: '+5', powder: 'Hammered copper', parts: 8, prio: 'high' }, ]}, { title: 'Curing', id: 'CURE', count: 2, meter: '180°C · 14 min', cards: [ { id: 'J-2038', cust: 'Heritage', desc: 'Bumper', due: 'Apr 22', days: '+4', powder: 'Satin bronze', parts: 1, prio: 'normal' }, { id: 'J-2037', cust: 'Parkside', desc: 'Chair set (6)', due: 'Apr 22', days: '+4', powder: 'Gloss red', parts: 6, prio: 'normal' }, ]}, { title: 'Ready', id: 'READY', count: 1, cards: [ { id: 'J-2034', cust: 'Lakeside Marina', desc: 'Railing kit', due: 'Apr 18', days: '0', powder: 'Matte white', parts: 4, prio: 'low' }, ]}, ]; const prioDot = { high: 'var(--bad)', normal: 'var(--steel)', low: 'var(--rule)' }; return (
{/* compact toolbar */}
{['Board', 'List', 'Oven'].map((t, i) => ( ))}
11 jobs on floor · 2 hot · avg cycle 3.2 d
{cols.map((c, i) => (
{/* column header */}
{c.id} {c.count}
{c.meter && (
{c.meter}
)}
{c.cards.map((card, j) => (
{card.hot && }
{card.id} {card.due} ({card.days}d)
{card.desc}
{card.cust}
{card.powder} {card.parts}p
))}
))}
); } function powderSwatch(name) { const m = { 'Gloss black': '#111', 'Matte white': '#f3f1eb', 'Satin bronze': '#8c6a3d', 'Anodized black': '#1a1a1c', 'Gloss white': '#ffffff', 'Matte black': '#222', 'Zinc primer': '#9aa0a6', 'Hammered copper': '#b87333', 'Gloss red': '#b91c1c', }; return m[name] || '#777'; } Object.assign(window, { DashboardAfter, JobsIndexAfter, JobsBoardAfter, Chip, Metric });