KGH Consulting

A secure client portal for a physical-security, fraud and forensic-accounting practice. Invited clients upload thousands of files, every file is fingerprinted and catalogued by AI as it arrives, and the KGH team triages it all in one workspace, on top of the marketing site we rebuilt for them.

Client
KGH Consulting
Role
Lead Designer & Full-Stack Developer
Timeline
Ongoing product
Year
2026
Category
Web App

Overview

KGH Consulting is a boutique practice in physical security, fraud exposure and forensic accounting. We rebuilt their public site around the work they actually do, and later redesigned it with motion. The bigger piece is a secure client portal at kghconsultants.com, where clients hand over the records an engagement depends on (bank statements, ledgers, payroll registers, access logs, email exports) and the KGH team works through them with an AI catalogue at their side.

It runs on Firebase: an Expo Router web app, Firestore, Storage, Cloud Tasks and 27 portal Cloud Functions. Every portal screen in this case study comes from a fictional demo client, Harborline Distribution Co., seeded into a local emulator. No real KGH client data appears anywhere.

Why

Forensic accounting and fraud work lives or dies on the documents. KGH needed clients to hand over records quickly, and the firm to know, file by file, what arrived, what it contains and what looks wrong, with a trail that holds up later.

The portal sits on top of the marketing site we rebuilt for KGH earlier, which repositioned the firm around physical security, fraud exposure and forensic accounting and added a scored quote wizard. The site brings the engagement in; the portal runs it.

The challenge

KGH’s work depends on getting the right records from a client and knowing exactly what is in them. That intake ran through email attachments and shared links: no status for the client, no fingerprint or audit trail for the firm, and every file opened by hand before the real review could start.

What made it hard

  • Client records arrived as email attachments and shared-drive links, with no single record of what came in, when, or from whom.
  • Clients send hundreds or thousands of files at once, from large ledgers to whole folders, sometimes from a phone.
  • Someone had to open every file just to learn what it was before the real review could start.
  • Forensic work needs a chain of custody: proof a file is unchanged, who downloaded it, and a clean export when it leaves the firm.
  • Clients should see that their files arrived, never the firm’s internal analysis or notes.

Approach

We treated the portal as an evidence pipeline with a friendly front door. Clients get one sign-in page, one upload area and a plain status for every file. Behind it, each upload is checked, fingerprinted and catalogued as it arrives, and the KGH team gets a workspace built for triage rather than a file browser.

The privacy line was decided first and written down as an architecture decision: every document has a client-visible record (title and status) and a separate internal record (the AI analysis, triage and notes). Firestore and Storage security rules enforce that split, not just the screens.

Process

  • Data model and rules: Two records per document, decided and documented before any screen was built.
  • Upload pipeline: Register, upload to Storage, verify and fingerprint on arrival, then queue the AI catalogue through Cloud Tasks.
  • Client portal: Sign-in links, requests with due dates, bulk uploads, file status, account and photos, checked down to 375 px.
  • Admin workspace: Clients, documents, a cross-client review queue, triage, signed downloads, zip export and View as client.
  • Email and testing: Branded transactional emails, then unit, rules and emulator integration tests and a production smoke test.

What we built

  • One secure sign-in: A single /login for clients and the KGH team. Invited clients use a one-time sign-in link or a password. Links are single-use and wait for a button press, so corporate mail scanners can’t use them up.
  • Bulk uploads that survive: Thousands of files or whole folders per batch, any type except programs, up to 5 GB each. Pause and resume, automatic retry on dropped connections, and duplicates skipped.
  • Document requests: KGH asks for specific items with a due date. The client gets a branded email and sees the request on their home screen, and every file moves from Received to Analyzing to Catalogued.
  • AI document catalogue: Each upload is verified, SHA-256 fingerprinted and catalogued with OpenAI: summary, key points, parties, dates, amounts and period, plus risk signals with a one-sentence reason, a risk level, a suggested importance and sensitive-data flags such as bank account numbers. Very large files are catalogued from their metadata.
  • Review workspace: A client list with “Needs attention”, per-client documents with search, facets, grouping and bulk triage, and one review queue across every client. Flag a file, set importance and review status, add labels and internal notes.
  • Chain of custody: Downloads use signed links that expire after 10 minutes and are written to an audit log. A zip export of up to 500 files ships with a custody manifest.
  • View as client: A read-only preview of a client’s exact portal, so the team sees what the client sees before answering a question.
  • Branded email: Welcome, sign-in link, document request, upload receipt, admin digest, and password reset and change notices, all in KGH’s brand.
  • The public site underneath: Our earlier rebuild of kghconsultants.com: six practice areas, a three-step quote flow scored against live rates, optional AI proposal drafts and an admin for quotes, rates and testimonials.
  • A redesign with motion: Two passes on the public site: the “Ledger” direction (redaction bars, a ledger grid, editorial type), then a full-screen intro, video reels behind the hero that the team swaps from the admin, page transitions and gradient calls to action. Motion honours reduced-motion, and the hero image paints in the first moment under the intro, so mobile largest contentful paint is about 1.9 s (6.8 s before the rebuild).

How it was built

One Expo Router web app on Firebase project khgconsulting-fc7e0 serves the public site, the client portal and the admin. Uploads go straight to Storage. When a file lands, a trigger checks its type by content (programs are refused even when renamed), computes a SHA-256 fingerprint and skips duplicates, then Cloud Tasks hands it to the catalogue step, which extracts the text and asks OpenAI for the summary, facts and risk signals.

Clients and the team read different records: the client-visible document (title and status) and an internal analysis (summary, risk, triage and notes), split by Firestore and Storage security rules. Files only leave through 10-minute signed links that are logged. The release gate runs unit, rules and emulator integration tests, and a production smoke test passed end to end on 8 October 2026.

Stack

  • Expo Router: One web app for the client portal, admin and public site
  • Firebase: Auth, Firestore, Storage and Hosting
  • Cloud Functions + Cloud Tasks: 27 portal functions; queued document processing
  • OpenAI: Document catalogue and risk signals
  • SendGrid: Branded transactional email
  • Tests: Unit, Firestore/Storage rules, emulator integration, production smoke test

Outcomes

  • 27: Portal Cloud Functions in production
  • 5 GB: Per-file upload limit
  • 10 min: Signed download link lifetime
  • 500: Files per custody-manifest export
  • 90: Mobile Lighthouse performance, public site (was 69)
  • 1.9 s: Mobile largest contentful paint (was 6.8 s)
  • 100: Lighthouse accessibility, best practices and SEO
  • 0: Cumulative layout shift

Wins

  • Clients upload thousands of files or whole folders from a desktop or a phone, with pause, resume and automatic retry.
  • Every file is fingerprinted and catalogued by AI as it arrives, so the team starts from a summary instead of a blank file.
  • One review queue across every client, with triage, labels and internal notes.
  • Signed, logged downloads and a custody-manifest export for files that leave the firm.
  • Clients see status and title only; the analysis and notes stay internal, enforced in the security rules.
  • Production smoke test passed end to end on 8 October 2026.
  • Redesigned public site: mobile Lighthouse performance 90 (was 69), largest contentful paint 1.9 s, accessibility, best practices and SEO 100, layout shift 0.

Hard parts

  • Thousands of files, shaky connections: Uploads had to survive closed laptops and phone networks: per-file progress, pause and resume, automatic retry, and duplicates skipped by fingerprint.
  • Two audiences, one document: Clients need reassurance and the firm needs analysis. Splitting each document into a client record and an internal record, enforced in the rules, keeps the AI’s risk notes out of client hands.
  • Programs dressed as documents: Any file type is welcome except programs. The server checks the content, not just the extension, so a renamed executable is still refused.
  • Links that mail scanners click: Corporate mail filters open every link in an email. One-time sign-in links wait for a button press, so a scanner can’t use them up before the client does.

Services

  • Secure Client Portal (Expo Router Web)
  • Bulk Uploads up to 5 GB per File
  • AI Document Catalogue (OpenAI)
  • Admin Review Workspace & Triage
  • Signed Downloads, Audit Log & Custody Export
  • Branded Transactional Email
  • Marketing Site, Quote Wizard & Admin
  • Security Rules, Cloud Functions & Test Suite

Visit the live project

More case studies · Get a free development plan