// ============================================================
// 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 (
);
}
function MockFilterBar() {
return (
FILTER
Format:
All
Tier:
Premium
Role:
All
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 (
{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,
});