Living portfolio
Rendering system that builds a per-user portfolio from their real work and refreshes itself after every touchpoint they complete.
A rendering system that builds a per-user portfolio from their actual work on the platform (submissions, conversations, calibration verdicts, journey entries) and keeps it current. When the user is preparing for two different roles, the system renders two coherent stories from the same underlying work instead of one averaged-out summary.
When someone is preparing for two different roles, they need two different portfolios that tell two different stories from the same underlying work. And the portfolio needs to be living, updating itself as they keep working, not a one-time snapshot that goes stale the moment they finish the next stage. A static portfolio is fine for a snapshot in time. A learner who is still moving needs a portfolio that moves with them.
Two Postgres tables (profile and assessment) keyed by user-plus-focus so two role tracks render as two coherent rows. A Temporal workflow runs the refresh: RefreshLearnerPortfolioWorkflow walks four activities (gather inputs, synthesize profile, synthesize assessment, persist) and writes the rows the UI and PDF renderer read. The trigger lives upstream in the calibration ingest workflow: every time a touchpoint finishes calibration, a fire-and-forget child workflow kicks the portfolio refresh, carrying the touchpoint label and source tag in the payload. So the portfolio updates within seconds of the user finishing a conversation, a submission, or a session, without the calibration path having to wait on it. Lazy seeding picks a track template from the user's headline if no portfolio exists yet, so the first session already has shape behind it.
Co-contributor on the per-touchpoint refresh trigger, the input-gathering activity, and the wiring back from the calibration substrate to the portfolio refresh.
Want the full technical depth, the tradeoffs, what broke, what I'd do differently? Ask the agent about this project.