← Index
Shipped A Manila-based relocation & logistics group 2026

Client-facing delivery portal built to replace static PDFs and email chains across a 7-deliverable, 90-day AI consulting engagement

I built a live delivery portal for a Manila-based moving and storage company undergoing a 90-day AI operating system engagement. The portal surfaces real-time progress across 7 deliverables, hosts the full discovery findings as an interactive report, presents the competitive analysis, manages decisions and formal sign-offs, and tracks invoices — replacing the usual deck-and-email update cycle with a single URL the client checks any time.

7Parallel deliverables tracked in the portal
5 / 5Departments fully mapped in discovery (all complete)
6Local moving competitors mapped and scored in competitive analysis
12Cross-department operational patterns identified and ranked by impact in discovery

The brief

A Manila-based moving and storage company signed a 90-day AI consulting engagement covering 7 parallel workstreams: a full discovery audit, competitive analysis, lead-gen website, accounting modernization, LinkedIn marketing, a custom AI intelligence system, and an end-of-engagement review.

The default delivery format for engagements like this is a rotating stack of PDFs, Loom recordings, and email threads. The client has no single place to see what is actually happening, what decisions are pending, or what they owe. Status lives in the consultant’s head. Trust degrades between updates.

I wanted to fix that from day one.

What I built

A bespoke client portal that is the live delivery workspace for the entire engagement. One URL. No login complexity for the client. The portal covers:

  • Dashboard — engagement overview, milestone strip, deliverable tiles with live percentage progress and status badges, stat cards showing total engagement value, deliverables count, departments mapped, and next milestone date.
  • Your Company, Mapped — the interactive discovery findings report. Eight sections: anonymized department voice cards, an org wheel-and-spoke diagram, a value-leak pipeline tracing one job from inquiry to collection, a 12-pattern impact heatmap ranked by severity and evidence strength, five root causes with supporting quotes, a before/after state toggle, the three strategic bets for the engagement, and a live “Ask Donna” panel.
  • Where You Stand — the competitive analysis, structured as a two-tier market read (agent-controlled international vs. open local), a digital capability matrix across 5 international networks, a local-field teardown of 6 local competitors with tag, signal, and weakness per player, structural edge mapping, and a recommended lane to own.
  • Decisions — a decision log with formal sign-off panels for key scoping decisions, routed to a Google Apps Script endpoint that logs to a sheet and emails both parties.
  • Invoices — a live payment schedule with status (paid / due / scheduled / conditional), invoice numbers, and PDF links.
  • Accounting Choice — a structured platform comparison between QNE Cloud and Xero, built to help the client make the accounting system decision directly inside the portal rather than through a separate memo.
  • Change Order — a plain-language summary of the mid-engagement scope refocus (from lead-gen website to ATG compliance bridge, TMS selection, and Quote Machine MVP), with a formal sign-off panel.
  • SOW, Contacts, Software — the full scope of work, project directory, and itemized pass-through cost breakdown with required vs. optional flags.

Every section is statically exported, so the portal loads instantly. Motion-powered reveals and animated counters make the experience feel alive rather than static.

How it’s built

The stack is Next.js 16 App Router with TypeScript, statically exported via output: "export" and deployed to Cloudflare Pages. All data lives in a single update surface — lib/data.ts — so updating deliverable progress, decision status, or invoice state means editing one file and pushing. No CMS, no database, no ops overhead.

All client-facing content is separated from internal strategy. The portal shows what clients need to see; nothing confidential (bank details, key-person framing, internal KPI math, source mapping) is in the repo.

Discovery findings in lib/discovery.ts and competitive data in lib/competitive.ts are fully anonymized to roles, not names — structured so the same pattern can be reused for any future engagement.

The formal sign-off flow hits a Google Apps Script web app that logs the timestamp and signer name to a sheet and sends confirmation emails to both parties. No third-party e-signature tool needed.

Why it matters

The portal makes the engagement self-evidently professional before a single deliverable lands. Clients see their money working in real time, not on a monthly Loom. Decision latency drops because the context for each decision is always one click away. Sign-offs are captured automatically, with an audit trail.

The architecture — one data file, static export, client-safe separation — is reusable as a template for every future fCAIO engagement. The competitive analysis and discovery data structures are generic enough to port to any new client in hours. The portal itself is the productized delivery model.

consultingai-systemsclient-portaldiscoverycompetitive-analysisnext-js

Want something like this?

That's the kind of thing I build. Tell me about yours.