Function
Optionalrepository: LearnerProfileRepositoryOverrides the learner store; tests inject a stub here
The current state and save
The client's composition root for the profile — the one place that names
the concrete adapter and composes the findLearnerProfile and
saveLearnerProfile use cases.
Without an injected repository it reads the learner store, which the server's snapshot seeds after hydration, and saves through the profile Server Action; every reader shares that store, so a save made on the Profile page reaches the header in the same render pass. A save made in another tab or on another device arrives with the next full load.
Browser-side only — do NOT call from a Server Component.
Client hook: the signed-in learner's card, and a way to save it.