Planning material — fictional examples, no production behavior

Client Portal Revised Plan

Status

Current working direction — not yet approved for implementation. This document supersedes the initial plan as planning guidance. It incorporates the analysis in the counterproposal, beginning with the decision to use Stripe instead of building invoicing capability. It does not replace the historical documents, and implementation approval still requires resolving the remaining decisions and producing the revised cost estimate identified below.

Strategic direction

Build custom software only where it improves the client relationship, creates a useful consulting asset, or develops transferable agentic-AI capability. Use established services for commodity business functions when subscribing is safer and more economical than owning their implementation.

The client portal should therefore begin as a thin collaboration layer rather than a complete transaction platform. Its primary purpose is to preserve engagement context, support client review, and provide safe human control over AI-assisted work. It should not become the financial system of record.

Decisions

Use Stripe for invoicing and payments

Stripe will own invoice creation, delivery, hosted payment, payment status, receipts, and the authoritative financial record for the portal workflow.

The portal may eventually:

The portal will not initially implement invoice numbering, PDF generation, payment collection, receipts, reminders, reconciliation, disputes, taxes, or a parallel invoice state machine.

This decision trades a fully native invoice experience for faster launch, lower financial and operational risk, and a mature system of record. Building commodity invoicing does not provide enough strategic advantage or relevant AI learning to justify its ownership.

Use an external provider for electronic signatures

An established external provider will own the signing ceremony, signer authentication, consent evidence, audit trail, completed agreement, and authoritative signature status. The provider must be selected before the portal is used for real client agreements.

The portal may store only the integration data needed for the engagement workflow, including the provider’s agreement or envelope identifier, synchronized status, relevant timestamps, and a link to the provider-hosted experience. If synchronization is implemented, verified webhooks, idempotency, and reconciliation must prevent duplicate or stale transitions.

Portal-native approval or acknowledgment is distinct from an electronic signature and must never be described as signing. The portal will not recreate the signing ceremony, legal consent evidence, completed-document record, or provider audit trail.

This decision delegates a legally consequential commodity function to a qualified service. It preserves custom development for collaboration and human-gated AI workflows where the learning is more relevant to the consulting practice.

Preserve earlier plans as decision history

The initial plan remains the maximum-control AWS architecture and a record of the original assumptions. The counterproposal remains the critique and source of alternatives. This revision records the direction chosen after considering both; it does not rewrite either document.

Prioritize learning that transfers to AI consulting

Custom development should concentrate on capabilities such as:

Use JSON:API for the application API

The API boundary between the frontend and backend will follow the JSON:API specification. This provides a standards-based convention for resources, relationships, requests, responses, errors, filtering, pagination, and related metadata instead of creating a portal-specific protocol.

The API should be designed around stable business resources and behaviors that can be reused across different clients and use cases. Client-specific rules belong in domain services, authorization policies, configuration, or explicit extensions rather than incompatible response shapes.

Following JSON:API does not require splitting the first implementation into separate deployments or microservices. The frontend and backend may remain in one application and repository while communicating through a clearly defined, versioned interface. Framework-specific server actions may support local user interface behavior, but they should not become a competing public application protocol for capabilities intended to be reusable.

Initial API work should define and test:

Use Vercel and Supabase as separate managed platforms

Deploy the Next.js application to Vercel. The Vercel deployment will contain the user interface, server-rendered routes, JSON:API route handlers, and application domain services; it is the application tier, not only a static frontend. Next.js on Vercel

Use a directly owned Supabase project for managed PostgreSQL, authentication, and object storage. Create and administer the project through Supabase rather than purchasing or provisioning it as a Vercel Marketplace resource. Connect it to Vercel with environment variables or an external integration. This keeps the vendors, billing relationships, and administrative recovery paths independent even though the services work together. Supabase for Vercel

Use Stripe through a separately owned Stripe account. Vercel, Supabase, and Stripe remain independent vendors, and the design must not assume that an integration or consolidated dashboard transfers responsibility between them.

This selection intentionally replaces the initial plan’s Amplify Hosting, Cognito, Aurora Serverless and Data API, S3, CDK deployment, and custom local substitutes. AWS services may be reconsidered individually later under the evidence gates in Stage 4.

The principal vendor exposure is:

Reduce that exposure by keeping SQL migrations in source control, placing Auth and Storage behind provider interfaces, testing database and object exports, keeping roles and organization membership in the application schema, and avoiding Supabase Realtime, Edge Functions, and generated application APIs until a measured need justifies them.

Selected platform architecture

The initial runtime boundary is:

Browser
  |
  v
Vercel: Next.js UI, JSON:API, and domain services
  |
  +-- Supabase: PostgreSQL, Auth, and Storage
  +-- Stripe: invoices, hosted payments, and financial status
  +-- Agreement provider: agreement workflow, when selected
  +-- Model provider: bounded AI workflow, when approved

Implementation should follow these constraints:

Proposed first implementation

Stage 1 — Validate the operating process

Use familiar managed tools for one to three fictional, internal, or low-risk pilot engagements. Use shared documents for collaboration, Stripe for hosted invoices, and an established signing process where an agreement is needed.

Record:

Deliverable: a service blueprint and a small event vocabulary grounded in observed work rather than an assumed schema.

Stage 2 — Build only the useful collaboration surface

If Stage 1 supports a portal, build a branded workspace focused on context and review. Candidate capabilities are:

The initial portal should not duplicate functionality already provided reliably by Stripe, a signature provider, or a document collaboration tool.

Stage 3 — Add one bounded AI workflow

Introduce one human-gated workflow after its non-AI process is understood. Proposal drafting or client-message drafting is the leading candidate.

The workflow should:

Deliverable: a credible demonstration of practical, observable, human-controlled agentic automation.

Stage 4 — Expand only from evidence

Add or replace a component only when a paying-client requirement, measured workflow benefit, security need, provider limitation, scale constraint, or explicit learning objective justifies it. AWS services and deeper provider integrations should be selected independently instead of adopted as one large architectural commitment.

Architecture principles

Scope deliberately excluded from the first implementation

Validation and success measures

Before expanding the portal, collect evidence about:

Success is not measured by how much of the client transaction stack is custom. It is measured by a reliable client experience, reduced administrative effort, and defensible learning about safe AI-enabled workflows.

Cost documentation

The existing estimated operating costs apply to the historical AWS-centered initial plan. They are not an estimate for this revision and must not be used to approve or budget the Vercel, Supabase, and Stripe architecture.

Create revised-estimated-operating-costs.md as the single authoritative cost companion for this plan before implementation is approved. To make its scope unambiguous, that document should begin with:

Organize the revised estimate by the same implementation stages as this plan. For each stage, separate:

Show low, expected, and high planning scenarios instead of one monthly number, and state the usage assumptions that cause each scenario. Record actual spend beside the estimate once the service is operating. Cost figures should live in the companion document rather than being copied into this plan; this section defines cost scope and decision rules, while the companion remains the only source for amounts.

When the revised cost document is created, add a brief historical-status notice to estimated-operating-costs.md pointing to it without rewriting the original AWS estimates.

Open decisions

The following choices remain intentionally unresolved while this revision is developed:

Next planning pass

Review each open decision against three questions:

  1. Does this improve the experience or reliability of serving a client now?
  2. Does custom implementation create transferable AI-consulting knowledge or a useful demonstration?
  3. Is the ownership cost justified by observed needs instead of hypothetical future requirements?

Decisions that do not satisfy one of these tests should default to a managed service, a manual process, or deferral.