// ============================================================ // PRODUCT MOCKS — Static (non-interactive) renderings of the // Process Builder UI, reusing styles.css classes so the visuals // match the real app pixel-for-pixel. // ============================================================ const D = window.DATA; // —— Tiny inline icons used in mocks const MockIcon = ({ name, size = 14 }) => { const paths = { chevDown: , search: , bell: , }; return ( {paths[name]} ); }; function MockHeader({ compact }) { const t = D.tenant; return (
PB
Process Builder
/
Workspace
Map Roles Admin
{t.name}
); } function MockFilterBar() { return (
FILTER
26 / 34 steps
); } // —— Status badge (static) function MockBadge({ status }) { const label = { stable: 'Stable', draft: 'Draft', gap: 'Gap', review: 'Review' }[status] || status; return {label}; } // —— Stage card (no nav) function MockStageCard({ stage }) { const phase = D.phases.find(p => p.id === stage.phase); const allRoles = D.roles; const stepsAll = D.steps.filter(s => s.stage === stage.id); const coveredRoles = new Set(stage.roles); const phaseVar = `var(--phase-${phase.color})`; return (
{String(stage.order).padStart(2, '0')} · {phase.name}
{stage.name}
{stage.desc}
{stepsAll.length} step{stepsAll.length === 1 ? '' : 's'}
{allRoles.map(r => ( ))}
{coveredRoles.size}/{allRoles.length}
); } // —— Full Process Map (3 columns) function MockProcessMap({ showHeader = true, showFilter = true }) { return (
{showHeader && } {showFilter && }
Process Builder · 3 phases · {D.stages.length} stages

The process, from inquiry to long tail.

Every stage of bringing an Inicio Press title to market, organized by phase. Click any stage to drill into its steps.

{D.phases.map(phase => { const phaseStages = D.stages.filter(s => s.phase === phase.id); const phaseVar = `var(--phase-${phase.color})`; return (
{phase.name}
{phaseStages.length} stages
{phase.tagline}
{phaseStages.map(s => )}
); })}
); } // —— Step Detail (just the hero card + sidebar) function MockStepDetail() { const step = D.steps.find(s => s.id === 's16'); const stage = D.stages.find(s => s.id === step.stage); const phase = D.phases.find(p => p.id === stage.phase); const role = D.roles.find(r => r.id === step.role); const docs = D.linkedDocs[step.id] || []; return (
Process Map {phase.name} {stage.name} Step {step.order}
{phase.name} {role.name} STEP {String(step.order).padStart(2, '0')}

{step.title}

Paperback Ebook All tiers

When this step starts

The manuscript has cleared developmental edit and the author has signed off on the chapter structure. We do not start cover work before that — too many last-minute cuts shift the spine width.

Deliverables

Three distinct cover concepts, delivered as 1500×2400 JPEGs in a single Figma file:

  • A type-led concept (no imagery, all typographic mood)
  • A photographic concept (licensed or commissioned)
  • A conceptual concept (illustration or abstraction)
The worst covers come from designers who tried to please. The best come from designers who made a confident call and let the author push back.
Linked documents
{docs.map(d => (
{d.icon} {d.type}
{d.title}
))}
); } // —— A miniature "step" card used inside Hero A's floating small frame function MockMiniStep() { const step = D.steps.find(s => s.id === 's16'); const role = D.roles.find(r => r.id === step.role); return (
PRODUCTION · STEP 04
{step.title}
Cover Designer Paperback Ebook
); } // Expose globally for landing.jsx Object.assign(window, { MockHeader, MockFilterBar, MockStageCard, MockProcessMap, MockStepDetail, MockMiniStep, });