Planning material — fictional examples, no production behavior

Client Portal Phase 1 Implementation Backlog

Status and purpose

This document preserves the issue plan derived from the feature roadmap for implementing the Phase 1 inquiry intake and consultant-approved onboarding workflow. The corresponding issues were created in the client portal repository in their intended delivery order.

The issues remain subject to the client portal repository’s normal planning, approval, implementation, and review workflow. GitHub is authoritative for their current state; this document records the scope and sequencing decision that produced them.

Decisions applied

Planned issue sequence

1. #74 — Establish inquiry persistence, lifecycle, and audit foundation

Outcome: Add the domain and persistence foundation for inquiries, consultant decisions, and append-only lifecycle history.

Acceptance focus:

Dependencies: None.

Scope boundary: No public endpoint, consultant interface, provisioning, email, or AI analysis.

2. #75 — Support pre-auth invitee identities and pending memberships

Outcome: Represent an invited person and their pending access before they authenticate, without weakening invitation-only activation.

Acceptance focus:

Dependencies: None.

Scope boundary: No inquiry workflow, outbound email, authentication UI, or production identity-provider integration.

3. #76 — Add authenticated idempotent inquiry intake API

Outcome: Provide the portal-owned intake contract that a public website can eventually call through a trusted integration boundary.

Acceptance focus:

Dependencies: #74.

Scope boundary: No public website change, confirmation email, CAPTCHA, production rate limiting, or organization creation.

4. #77 — Implement staff inquiry review and decision APIs

Outcome: Give authorized staff a complete application-service and API boundary for reviewing and deciding inquiries.

Acceptance focus:

Dependencies: #74.

Scope boundary: No review UI, provisioning, invitations, email, or AI.

5. #78 — Build the staff inquiry review queue and detail experience

Outcome: Let staff review normalized inquiries, see their history, record notes, and make explicit decisions from the portal.

Acceptance focus:

Dependencies: #77.

Scope boundary: No provisioning, invitation controls, public intake form, email, or AI briefing.

6. #79 — Implement idempotent qualified-inquiry provisioning

Outcome: Convert a qualified inquiry into a prepared organization, workspace, pending invitee, and pending membership exactly once.

Acceptance focus:

Dependencies: #74, #75, and #77.

Scope boundary: No outbound invitation, account activation, review UI, or AI.

7. #80 — Connect inquiry onboarding to deliberate invitation and activation

Outcome: Reuse the portal’s invitation-only authentication design for inquiry-derived workspaces while keeping sending and activation explicit.

Acceptance focus:

Dependencies: #79.

Scope boundary: No production email provider, notification operations, public-site change, or workspace redesign.

8. #81 — Add prepared-workspace and invitation controls to inquiry review

Outcome: Complete the consultant-controlled Phase 1 journey in the staff interface.

Acceptance focus:

Dependencies: #78 and #80.

Milestone: Completion of #74 through #81 establishes the core human-controlled Phase 1 workflow. It does not by itself make the workflow production-ready or integrate the public website.

9. #82 — Establish the staff-triggered inquiry analysis lifecycle

Outcome: Add a provider-neutral, auditable analysis boundary after the human workflow is complete.

Acceptance focus:

Dependencies: #81.

Scope boundary: No live provider, automatic trigger, autonomous decision, background queue, or client-visible AI output.

10. #83 — Add the OpenAI inquiry-analysis adapter

Outcome: Implement the first live provider adapter without coupling the domain workflow to OpenAI.

Acceptance focus:

Dependencies: #82.

Scope boundary: No prompt-management product, agent framework, web search, autonomous actions, or additional provider.

11. #84 — Present AI inquiry briefings and consultant feedback

Outcome: Present advisory analysis to staff in the inquiry review experience without displacing the source inquiry or consultant judgment.

Acceptance focus:

Dependencies: #82. It can proceed in parallel with #83.

Milestone: The OpenAI-backed advisory experience is complete only when both #83 and #84 are complete.

Dependency and parallel-work map

Wave 1
  #74 Inquiry foundation ───────────────┐
  #75 Pre-auth invitees ────────────────┤  parallel
                                        │
Wave 2                                  │
  #76 Intake API (after #74) ───────────┤
  #77 Review APIs (after #74) ──────────┤  parallel
                                        │
Wave 3                                  │
  #78 Review UI (after #77) ────────────┤
  #79 Provisioning (after #74/#75/#77) ─┤  parallel
                                        │
Wave 4                                  │
  #80 Invitation connection (after #79) │  may overlap #78
                                        │
Wave 5                                  │
  #81 Onboarding controls (after #78/#80)
                                        │
Wave 6                                  │
  #82 Analysis lifecycle (after #81) ───┤
                                        │
Wave 7                                  │
  #83 OpenAI adapter (after #82) ───────┤
  #84 AI briefing UI (after #82) ───────┘  parallel

The dependency graph permits two independent foundation issues first, parallel API work after the inquiry model exists, and parallel UI and provisioning work once their respective contracts are available. AI work begins only after the core onboarding milestone.

Cross-cutting interfaces and validation

Deferred and external work

This backlog intentionally does not include:

Those concerns require their own evidence, planning, and approval. The multi-tenant platform architecture remains the reference for later productization decisions.

Client portal issue #73 records the UI implementation strategy: prefer accessible custom components built with semantic HTML and Tailwind CSS, add focused headless primitives when needed, and avoid adopting a broad component framework by default. It informs the portal issues above but is not a dependency that blocks this backlog.