A short, deliberate reading of where authority leaks.
Ten questions. Roughly seven minutes. The audit asks how you respond under pressure that has consequence.
There is no score. The result is a private reading. One dominant signature of how your authority leaks under load, one secondary, and a short observation on each. The full distribution of all four signatures appears as supporting context, never as a ranking.
Not what this is
Not a personality test.Not therapy or journaling.Not a leadership self-assessment.Not optimised for a score.
What this is
A structured, psychologically intelligent reading of authority under consequence.
Each question presents a moment senior leaders actually live in. A board pushing back. A decision being revisited. A room that does not give. There is no right answer. The audit reads the pattern across your answers, not any one of them.
);
}
function Spec({ k, l }) {
return (
{k}
{l}
);
}
function NegItem({ children }) {
return (
{children}
);
}
/* The visual blueprint panel — gives the landing some atmospheric weight
without showing the questions */
function BlueprintPanel() {
return (
The territory
{[
{ idx: '01', area: 'Scrutiny response', d: 'How the body answers before the mouth.' },
{ idx: '02', area: 'Over-explanation', d: 'Where the case stops helping.' },
{ idx: '03', area: 'Pressure pattern', d: 'The shape of the room when it does not give.' },
{ idx: '04', area: 'Decision trust', d: 'What happens when your decision is revisited.' },
{ idx: '05', area: 'Composure cost', d: 'What gets paid privately when nothing slips publicly.' },
].map((it) => (
{it.idx}
{it.area}
{it.d}
))}
and five more
);
}
/* ============================================================
AUDIT FLOW — one question per screen
============================================================ */
function AuditFlowPage() {
const router = useRouter();
const tw = useTw();
const pacing = pacingMs(tw.diagnosticPacing || 'measured');
const [state, setState] = aState(() => loadAudit());
// Name-gate — required before Q1 so the audit can address them
// personally and so Daniel has a first name attached to any
// submitted reading.
const firstName = (state.contact && state.contact.firstName) || '';
const [showNameGate, setShowNameGate] = aState(() => !firstName);
const [pendingName, setPendingName] = aState('');
// If audit is already complete, route to results so the user doesn't
// land on Q10 again on revisit.
aEffect(() => {
if (state.completedAt && Object.keys(state.answers).length === AUDIT_QUESTIONS.length) {
router.go('/audit/results');
}
// intentionally only run on mount
// eslint-disable-next-line
}, []);
const submitName = (e) => {
e.preventDefault();
const name = pendingName.trim();
if (!name) return;
const next = {
...state,
contact: { ...(state.contact || {}), firstName: name },
};
setState(next);
saveAudit(next);
setShowNameGate(false);
};
const [step, setStep] = aState(() => {
const a = loadAudit();
// resume at first unanswered question
const answered = Object.keys(a.answers).length;
return Math.min(answered, AUDIT_QUESTIONS.length - 1);
});
const [transitioning, setTransitioning] = aState(false);
const [direction, setDirection] = aState(1);
// persist state on every change
aEffect(() => { saveAudit(state); }, [state]);
const total = AUDIT_QUESTIONS.length;
const q = AUDIT_QUESTIONS[step];
if (showNameGate) {
return (
Before we begin
What should I call you?
Your first name is enough. The audit reads better when it speaks to you, not at you.
Held in confidence. No newsletter. Nothing shared.
The reading reflects a pattern. Not a fixed identity. A habit of authority under pressure.
The next step is a discovery conversation to explore what shifts are possible.
{/* Reading */}
Reading
What the pattern says.
{primary.reading.map((line, i) => (
{String(i + 1).padStart(2, '0')}
{line}
))}
Pattern
{primary.pattern}
Cost
{primary.cost}
Work
{primary.work}
{/* Secondary */}
{secondary && (
Secondary signature
{secondary.name}
{secondary.short} It does not run the room as your primary signature does. It surfaces in moments of greater consequence.
)}
{/* Conversion */}
The next step
A reading is useful. A conversation is structural.
If the reading recognises something, that is the indication that the underlying structure is correctable. A short, private conversation is the next deliberate step.
A copy is in your inbox
The reading you are looking at has been sent to {(state.contact && state.contact.email) || 'your email'}. It will keep, and it will not be sent to anyone else.
When you are ready, the next step is a private conversation. No timeline pressure.
);
}
function SignatureBars({ counts, primary, secondary }) {
const labels = { E: 'Explanation', C: 'Composure', D: 'Deflection', R: 'Recovery' };
const total = Object.values(counts).reduce((a, b) => a + b, 0) || 1;
const max = Math.max(...Object.values(counts), 1);
const order = Object.entries(counts).sort((a, b) => b[1] - a[1]);
return (
{order.map(([sig, n]) => {
const isPrimary = sig === primary;
const isSecondary = sig === secondary;
return (