Screen: Client Portal (Operator View)
web/portal.html. This is the operator-facing view for managing the curated client-facing
surface — released updates, reviewable deliverables, request intake, and approved links. (The
underlying /api/client-portal route also serves the client-facing rendering itself; this page
covers the operator controls.)
Launcher and readiness
Lead users see one row per scoped client workspace. Readiness checks confirm access, active projects, and released material exist before a portal is actually shared with a client. Invite and reset controls record an audited prep action — the real auth delivery itself still happens in the identity tool, not here.
New requests
Clients can submit a general or project-scoped request from their own workspace. A request enters
SABLE as open intake and moves through review, waiting, converted, resolved, or closed states —
tracked in client_requests.
Deliverables
Clients can approve a deliverable, request changes with a required comment, or leave a
comment. Review history stays attached to the deliverable, in deliverable_reviews.
What actually reaches the client
Only published updates, released deliverables, released document links, and released meeting summaries appear on the client side. Raw transcripts, document bodies, storage paths, and internal operating rows never cross this boundary — the portal reads a deliberately narrow slice, not a filtered view of everything.
Visibility
Admin and lead users can preview across the org; client users see only the clients where they
have a client_memberships row.
Where the code lives
sable-agents-demo/web/portal.htmlsable-agents-demo/web/api/client-portal.js,_client_portal.jssable-agents-demo/web/api/deliverable-reviews.js,deliverable-release.js