Client Status Review · Thomas Digital

The Migrant Mortality Database

A finished website, paid in full, and no launch. Everything that happened, everything outstanding, and what to do next.

The site is built, QA'd through two full rounds, and sitting on a development URL. Princeton paid the full $13,400 build price by ACH on 17 September 2025, and $4,950 for three years of hosting on 15 July 2026. Nothing is owed.

The research team has not sent a word since 9 June 2026 — 91 days ago. Their reason for waiting may already be obsolete, and nobody has closed the loop.

Correction to the first version of this page

The first version reported the $13,400 as unresolved and the silence as 19 days. Both are now settled by primary documents. Princeton's own Payment Advice PDF shows invoice 0000878689 paid in full, $13,400.00, ACH, reference AP0000833758. And 20 August was our last outgoing email — the last message from the client is 9 June.

00The six questions, answered

Did they pay in full?

Yes. Princeton Payment Advice, 17 Sept 2025: invoice 0000878689, voucher S0603535, gross $13,400.00, discount $0, paid $13,400.00 by ACH. PO 0000878689 reads "Web Development and Development for Arun Hendi", total $13,400.00. The signed Statement of Work totals $13,400.00 and caps payment there.

Total collected: $18,815 — $13,400 build, $4,950 hosting, $465 stock photography. I have not walked the QuickBooks ledger line by line, so "nothing outstanding" is bounded by these documents rather than a reconciled account — but the contract price is unambiguously paid.

Have they ever signed off on anything?

Three yeses and one gap.

DateWhat they signed off
18 Jul 2025Signed the contract. "Princeton University / Arun Hendi Website Services Agreement", Trustees of Princeton University and Thomas Digital
24 Apr 2026Approved extra spend. Jessica Ho: "Yes, we approve adding these to the invoice"
28 May 2026Approved the site in substance. You asked "is the site approved for launch?"; Arun: "The site looks good… I think we can just move forward"
—Never: a formal written launch approval. The Asana task chasing it is still open

The contract's §6 is worth knowing but not worth using. It says Princeton must give written notice of final acceptance within 30 days of completion, and that "failure to provide such notice shall be deemed Final Acceptance." The same clause also says they need not accept incomplete delivery — and the Services arguably aren't complete, since the SOW includes data entry of 200 files that hasn't happened. So treat §6 as background comfort that nobody is clawing money back. It is not launch permission, and not an argument to put to Princeton. My reading, not a legal opinion.

When did they last speak, and to whom?

Tuesday 9 June 2026. Arun Hendi, to you. Two short emails.

09:04 ET — "Thanks for sending this. I've started the approvals process at Princeton and hopefully they'll get back to us soon. I'll let you know as soon as I hear."

15:17 ET — "We've purchased the image and uploaded it to the shared drive."

Nothing from Arun, Jessica or Yana since. Princeton's finance side kept going — Josie Crutchley wrote on 11–12 June about invoice format, the PO issued 11 June, payment scheduled 16 June, remittance 15 July — so the institution was active into mid-July even though the researchers were not. Between 18 June and 20 August you sent ten follow-ups. None answered.

What data are they waiting on?

Their own research dataset — the migrant mortality and life-expectancy files that populate the DATA page, served as .csv, .txt and .xlsx. Not anything from us.

One scope detail that matters: the Statement of Work line-items "Data Entry of 200 files — $800.00", and it was paid. Loading those files is contracted Thomas Digital work. Their job is to finalize and hand over the data; ours is to enter it.

The thing actually worth acting on

On 28 May Arun asked a direct question: could the site go live for a couple of weeks while they finished the data, and would that hurt SEO? He added: "If so, we're happy to wait until the data is finalized to launch."

The three replies crossed three timezones, so here they are on the client's own clock, taken from the raw email headers:

Client local timeWhoWhat
Tue 26 May 18:19Victor"Is the site approved for launch?"
Thu 28 May 10:20Arun"Site looks good… does launching early hurt SEO?"
Thu 28 May 16:24Victor"Holding off is always the cleaner option from an SEO standpoint"
Fri 29 May 10:26Arun"OK, we'll hold off"
Fri 29 May 22:31VictorDeveloper: no negative SEO effect — batched uploads may even help

The corrected answer arrived twelve hours after Arun had already decided to wait. He never responded to it, and has said nothing since 9 June.

Two honest limits. Sending is not reading — I cannot prove he absorbed the reversal. And his 9 June note says Princeton approvals were still pending, which is an ordinary reason for a professor to go quiet over a summer. This is a plausible stale hold, not a proven one. One email tests it.

DONE — JUL 2025 TO MAY 2026 Design Build Int. QA QA 1 QA 2 QA 2.2 Videos PARKED — 29 May 2026 103 days · 10 unanswered emails BLOCKING LAUNCH — THREE FROM THE CLIENT, PLUS ONE ON US Finalized data files Client's stated reason for the hold Written approval Task deferred 17 times · no owner A domain + DNS Never supplied, never discussed LAUNCH no prod install exists yet Hosting $4,950 paid Build $13,400 unresolved Site live: no
Seven stages finished in ten months. Then one sentence from the client on 29 May halted the launch. Work continued after it — hosting was invoiced, approved by Princeton and paid — but the site itself has not moved in the 103 days since.

The bottom line: they paid every dollar — $18,815, in full, on time. The site has been finished and parked for 103 days. The research team last spoke on 9 June, and the reason they gave for waiting was answered twelve hours after they gave it.

Project state
Parked
Since 29 May 2026
Client silence
91 days
Since 9 Jun · 10 unanswered
Total collected
$18,815
Nothing owed
Build payment
$13,400
Paid in full · ACH 17 Sep 2025
Production install
None
Dev environment only
Live domain
None
Never supplied

01Who the client is

The work was commissioned by two academic co-leads. The money comes from Princeton University — purchase orders and remittance advices, not credit cards.

RolePersonEmail
Originated the project; gave most design feedbackJessica Y. Ho
Assoc. Prof. Sociology & Demography, Penn State
jessica.ho@psu.edu
Drove the last six months; arranged hosting paymentArun S. Hendi
Asst. Prof. Sociology & Public Affairs, Princeton
arun.hendi@princeton.edu
Third team memberYana Vierboom, Princetonyvierboom@princeton.edu
Princeton faculty assistant · invoice/PO pathJosephine "Josie" Crutchleyjc9451@princeton.edu
Worth pinning down

Nothing in the record establishes who holds final sign-off, or who decides when the research data is fit to publish. Jessica and Arun both give feedback; Arun handles money. Before a launch date is offered, get one named approver.

02What was built

A public research site hosting a downloadable database of migrant mortality and life-expectancy data across roughly 15 countries, expected to grow. Eight pages are live on dev: home, about, people, data, publications, contact, disclaimer, and a file-search page.

The core mechanic is gated downloads — around 200 files in xlsx, txt and csv, visible to anyone but downloadable only by registered users, with analytics on who downloads what.

Two requirements were never marked complete and were never explicitly dropped: an SVG world map with backend country toggles, and a question open since July 2025 about sending contact-form mail from a different address.

03Who worked on it — including Mackenzie

Mackenzie did work on this, but stopped nearly a year ago. She was account manager through roughly September–October 2025. Jessica Ho's 3 November 2025 email opens "Hi Mackenzie," and Arianna's daily report from 18 September 2025 references a Mackenzie onboarding session.

On 3 November 2025 you took the project over personally, in writing to the client: "Good news. I'll be handling your project personally moving forward. We've had a change of plans with Mackenzie…" Nothing from her appears after that date in any mailbox I can read.

PersonRoleStatus
MackenzieAccount manager (to Oct 2025)Gone · handed to Victor Nov 2025
Arianna KasabianCreative PM, 2025Gone · mailbox archived and searchable
Cheska FolgoDay-to-day PM, late 2025 → Aug 2026Finishing up
EricDesignerNo evidence of departure
BillyDeveloper — built the whole thingEnded 19 Aug 2026
KendrickDev leadEnded 19 Aug 2026
AhmedHosting & maintenanceActive

Everyone who touched this day to day is gone or leaving, except you and Ahmed.

04What happened, in order

11 Jun 2025
Inbound enquiry from Jessica Ho
18 Jul 2025
Asana project created; onboarding and sitemap done within ten days
18 Aug 2025
Build invoice submitted to Princeton under PO 0000878689
17 Sep 2025
Princeton remittance advice received
3 Nov 2025
Victor takes the project over from Mackenzie
23 Dec 2025
Design complete
5 Feb 2026
Development complete — 51 subtasks
2 Mar 2026
Internal QA done; dev site handed to the client
13 Mar 2026
Client returns QA Round 1 feedback
1 Apr 2026
QA Round 2 feedback returned. Asana marks "Final Payment Received" complete
1 May 2026
Stock photography invoice paid by Princeton
6 May 2026
Tutorial videos delivered
28 May 2026
Client: "The site looks good… still running into the filter problem on iOS, but that's fine — I think we can just move on"
29 May 2026
Arun: "We'll just hold off on launching until the data is finalized"
9 Jun 2026
3-year prepaid Platinum hosting invoiced — $4,950 (36 months billed as 33)
11 Jun 2026
Princeton issues PO 0000956382; revised invoice sent without the card fee
15 Jul 2026
Princeton remittance — hosting paid in full
18 Jun → 20 Aug
Ten follow-up emails asking for "the data and approvals". Not one reply.
19 Aug 2026
Kendrick, Billy, Decay and Darwin end; Cheska finishing
20 Aug 2026
Last email sent. Nothing back in the 19 days since.

05Where it stands today

Verified by direct probe on 8 September 2026:

CheckResult
Dev sitemigrantmortdev.wpenginepowered.com — HTTP 200, all eight pages present
WP Engine installmigrantmortdev · account TD1 · environment development · PHP 8.2 · created 1 Aug 2025
Second installthemigrantmdev exists but serves the WP Engine default page — an empty placeholder, not this project
Production installNone. All five TD credential sets checked with full pagination
Live domainNone. No domain, registrar, DNS or nameserver discussion in any mailbox searched
Search-engine blockingEnvironment-level robots.txt blocks crawlers; the WordPress setting already says index/follow. The Asana de-indexing step is effectively already handled at the WP layer
User registrationDisabled at WordPress level. Gated downloads are the core feature — either the download plugin handles its own registration, or this blocks launch
Honest limit

"No domain was ever supplied" rests on three mailboxes and four guessed domains that don't resolve. That is strong evidence, not proof — a domain could sit in Drive, in Cheska's deleted mailbox, or in a phone call I can't see.

06Money

ItemAmountStatus
Website build$13,400Paid in full — ACH 17 Sep 2025, Payment Advice AP0000833758, invoice 0000878689
Stock photographyseparatePaid — receipt confirmed 1 May 2026
Hosting & maintenance, Platinum, 3 yrs prepaid$4,950Paid — PO 0000956382, remittance 15 Jul 2026
Maintenance list rate$150/mo33 billed months × $150 = $4,950. Effective rate across the full 36-month term is $137.50/mo
WAS THE $13,400 BUILD PAID? THREE SOURCES, THREE ANSWERS Asana checkbox "Final Payment Received" ticked 1 Apr 2026 Says: PAID Princeton remittance PO 878689 · Sept 2025 amount not visible to me Says: DEPOSIT PAID Active Projects sheet connector report read 8 Sept 2026 Says: $0 OF $13,400 QuickBooks settles it not reachable from this session
A ticked box proves someone ticked a box. A remittance proves a payment of unknown size. Only the ledger proves a balance.
Resolved by primary document

The first version of this page reported the build payment as unresolved, because Asana, the sheet and the remittance trail disagreed. Pulling Princeton's actual Payment Advice PDF settles it: invoice 0000878689, voucher S0603535, gross $13,400.00, discount $0.00, paid $13,400.00 by ACH on 17 September 2025.

That is the entire Statement of Work total and the contract's stated cap ("Total payment shall not exceed $13,400.00"). The $0/$13,400 in the Active Projects sheet is simply a wrong cell, and it is understating collections and overstating remaining contract value on the roster.

One honest bound: I have not walked the QuickBooks ledger for this customer line by line, so "nothing outstanding" rests on these documents rather than a reconciled account.

On the hosting clock. The invoice describes the term as 2026–2029 and was paid on 15 July 2026. No contract text stating a service start date appears in what I read — so "the prepaid term is burning while the site sits on dev" is a reasonable inference, not an established fact. It still matters: if the term did start on payment, the client is two months into a plan for a site that isn't live. That is a conversation to have first, not second.

07Everything outstanding

Waiting on the client

Open on Thomas Digital

08Risks

Fix this regardless of what the client does

The Asana "Project Notes" task holds, in plaintext in a workspace-public project: the dev-site WP admin password, the client's own WP login password, a subscriber password, and the SFTP password. Several people who could read that task left the company three weeks ago.

Rotate now, not at launch, and strip the values out of Asana.

Support continuity. If this goes live and the iOS filter or a plugin breaks, the developer who built it is no longer here. Any fix starts cold.

Prepaid money against an unlaunched site. $4,950 collected, nothing live. Whatever the contract says about term start, that is the fact pattern a client remembers.

Silence. Nineteen days, after ten unanswered nudges. Hypothesis, not finding: this reads more like academic-calendar drift — data cleaning, semester start, a co-PI juggling two institutions — than dissatisfaction, since their last substantive words were "the site looks good." I have no evidence of the actual cause. What is certain is that the current weekly-identical-email approach has produced ten consecutive non-responses.

09What to do next

1

Fix the sheet — $13,400 is collected, not $0

Princeton paid it by ACH on 17 September 2025. The wrong cell is understating your collections and inflating remaining contract value across the roster. Two minutes.

2

Rotate the Asana credentials now

Four plaintext passwords in a workspace-public task that four departing people could read. Rotate and remove the values — not a launch-day task. One caution: one of them is Jessica's own site login. Rotate it and send her the new one in the same motion, or a client who has been quiet for three months discovers she is locked out of her own website.

3

Send one email that closes the SEO loopNeeds your go-ahead

Ten identical "is the data ready?" emails have failed. Surface the 29 May developer answer again — it landed twelve hours after Arun had already decided to wait, and may never have been absorbed — and put their own 28 May idea back on the table: site up now, data loaded in batches as it's finalized. Ask what they need from us rather than what they owe us; nothing in the record suggests fault on their side and the email should not imply any. Adding Jessica and Yana widens the net but can read as escalation — your call, not a default.

4

Give "follow up site approval" an owner in Asana

Seventeen deferrals by a departing PM is what an unowned task looks like. Either it is yours or it gets an automated cadence.

5

Answer two site questions before offering any launch date

Is registration actually working for gated downloads, and is the SVG map in scope or out.

6

Consider staging the production install ahead of time

It turns launch into a short task rather than a scramble against a team that no longer exists. Sequence this after the client conversation — building infrastructure for a launch that may be months away is optional. Items 1 and 2 are not.

10What I could not check

Google Drive, Sheets and Docs are unreadable from this system. The Workspace service account holds domain-wide delegation for Gmail read-only only; Drive, Sheets and Docs all return unauthorized_client. So the QA sheet, the QA feedback doc, the stock-photo sheet and the two Drive project folders were never opened — everything here about them comes from Asana task notes and email bodies that quote them. The likely fix is adding those read-only scopes to the existing client ID in Google Admin → Security → API controls → Domain-wide delegation, though I have not confirmed that scope authorization is the only barrier.

QuickBooks is not reachable from this session, which is why the $13,400 is reported as an unresolved disagreement rather than settled. Figma files were not opened.

Search boundaries. Gmail covered victor@, contact@ and support@ only. The cheska@, arianna@ and mackenzie accounts no longer exist on the domain — Arianna's is archived in InsightsLM and still searchable if it matters. Phone calls, Zoom, Slack and text messages are outside what I can see. "No client reply since 20 August" and "no domain was ever discussed" are both bounded by exactly that.