Zivoe · dApp & Landing · Copy Inventory

Every string we ship, and what makes it appear

A complete inventory of user-facing copy across both applications — including the copy you can't reach by clicking: transaction loading states, on-chain error messages, form validation, SEO metadata, PostHog event names, and lifecycle emails. Every entry below shows the exact text, the condition that triggers it, and where it lives in the codebase.

Generated 29 July 2026 Branch feat/centrifuge-review-fixes @ 507e447d Entries 490 across 44 blocks Snapshot regenerate after any copy change
490 entries across 44 blocks
dApp

Sign in — Email step

app.zivoe.com/sign-in — first screen for a signed-out visitor

One combined sign-up / sign-in screen: entering any email either creates an account or signs into an existing one. The user is never told which happened.

Sign Up or Sign In
Visible copy
Heading on load.
app/(auth)/sign-in/_components/sign-in-form.tsx:69
Enter your email to sign in to your account. If you don't have an account yet, one will be created for you.
Visible copy
Subheading under the title.
sign-in-form.tsx:70
Email
Visible copy
Field label.
sign-in-form.tsx:209
Enter Your Email
Visible copy
Field placeholder.
sign-in-form.tsx:210
Continue
Visible copy
Submit button, resting state.
sign-in-form.tsx:228
Sending code...
Loading state
Replaces “Continue” while the OTP request is in flight.
sign-in-form.tsx:226
Or
Visible copy
Divider between email and social sign-in.
sign-in-form.tsx:232
Sign in with Google
Visible copy
Screen-reader label on the Google button — the button itself shows only a logo.
sign-in-form.tsx:236
Sign in with X
Visible copy
Screen-reader label on the X button — logo only, no visible text.
sign-in-form.tsx:249
Email is required
Validation
Submit with the field empty.
sign-in-form.tsx:115
Please enter a valid email address
Validation
Submit with text that fails email validation.
sign-in-form.tsx:115
Sign In Failed
Error
Toast. Two paths: returning to /sign-in with an ?error param (a failed social callback), or a Google/X sign-in throwing. The provider message appears underneath when present.
sign-in-form.tsx:54, 144
Failed to Send Verification Code
Error
Toast when the OTP send request fails. The auth provider's raw message is shown as the description.
sign-in-form.tsx:184
Verify You Are Human to Continue
Error
Warning toast when the Turnstile bot check needs interaction before it will issue a token.
sign-in-form.tsx:105
Human Verification Failed
Error
Toast when the Turnstile bot check fails to produce a token. Blocks submission. Description reads “Please try again.”
sign-in-form.tsx:169, 332
By clicking continue, you agree to our Terms of Use & Privacy Policy, comply with our Reg S Compliance Policy, and consent to receive communications from Zivoe.
Visible copy
Legal footer, email step only. “Terms of Use & Privacy Policy” and “Reg S Compliance Policy” are outbound links.
app/(auth)/_components/common.tsx:93
dApp

Sign in — Verification code step

app.zivoe.com/sign-in — after an email is submitted

Six-digit code entry. The code verifies automatically on the sixth digit; there is no submit button.

Verify Your Email
Visible copy
Heading once the code step opens.
sign-in-form.tsx:78
We've sent an OTP code to {email}.
Visible copy
Subheading. The address is echoed back from what the user typed.
sign-in-form.tsx:81
Back
Visible copy
Returns to the email step.
sign-in-form.tsx:87
Didn't receive an email?
Visible copy
Shown next to the resend control, until resend attempts are exhausted.
sign-in-form.tsx:404
Resend code
Visible copy
Resend control, resting state with attempts remaining.
sign-in-form.tsx:412
Resending code...
Loading state
While a resend request is in flight.
sign-in-form.tsx:407
Resend code ({n}s)
Loading state
Cooldown countdown after a resend. Counts down in seconds.
sign-in-form.tsx:409
Resend code ({n} left)
Loading state
Shown once fewer than 3 resend attempts remain — a rationing warning.
sign-in-form.tsx:411
Verifying Code...
Loading state
Pending toast, dismissed when verification resolves either way.
sign-in-form.tsx:294
Verification code is required
Validation
Submit with no code entered.
sign-in-form.tsx:269
Please enter the complete verification code
Validation
Fewer than six digits entered.
sign-in-form.tsx:270
Invalid Verification Code
Error
Toast title when the code is wrong or expired — the most common failure on this screen. The auth provider's message is the description.
sign-in-form.tsx:304
Failed to Resend Code
Error
Toast when a resend request fails. The auth provider's message is the description.
sign-in-form.tsx:348
Code Sent
Visible copy
Success toast title after a resend.
sign-in-form.tsx:358
A new verification code has been sent to your email
Visible copy
Success toast description after a resend.
sign-in-form.tsx:359
Need help? Contact us at investors@zivoe.com
Visible copy
Footer, code step only — replaces the legal terms line from the email step.
common.tsx:106
dApp

Onboarding — Step 1 — Account type

app.zivoe.com/onboarding — immediately after first sign-in

Branches the remaining flow: Individual is 2 steps total, Organization is 3.

Select Account Type
Visible copy
Heading.
app/(auth)/onboarding/_components/account-type-form.tsx:30
Are you registering as an individual or on behalf of an organization?
Visible copy
Subheading.
account-type-form.tsx:31
Step 1
Visible copy
Step indicator. Note it has no “of N” — the total isn't known until the account type is chosen.
account-type-form.tsx:33
Individual
Visible copy
First radio option.
account-type-form.tsx:109
Organization
Visible copy
Second radio option.
account-type-form.tsx:114
Continue
Visible copy
Submit.
account-type-form.tsx:56
Please select an account type
Validation
Submit with neither option chosen.
lib/schemas/onboarding.ts:28
dApp

Onboarding — Step 2 — Individual details

app.zivoe.com/onboarding — Individual branch
Tell Us About Yourself
Visible copy
Heading.
individual-form.tsx:47
Please fill out the fields below.
Visible copy
Subheading.
individual-form.tsx:47
Step 2 of 2
Visible copy
Step indicator.
individual-form.tsx:48
First Name
Visible copy
Field label.
individual-form.tsx:60
Johnny
Visible copy
First name placeholder — a sample value, not an instruction.
individual-form.tsx:61
Last Name
Visible copy
Field label.
individual-form.tsx:74
Appleseed
Visible copy
Last name placeholder.
individual-form.tsx:75
Country Of Residence
Visible copy
Select label.
individual-form.tsx:89
Amount Of Interest
Visible copy
Select label — how much the user intends to deposit.
individual-form.tsx:141
How'd You Find Zivoe?
Visible copy
Attribution select label.
individual-form.tsx:173
Select
Visible copy
Placeholder on all three selects.
individual-form.tsx:92, 144, 176
Continue
Visible copy
Submit.
individual-form.tsx:201
Onboarding...
Loading state
Submit button while the profile is being saved.
individual-form.tsx:200
First name is required
Validation
Empty first name on submit.
lib/schemas/onboarding.ts:34
Last name is required
Validation
Empty last name on submit.
onboarding.ts:35
Please select a country
Validation
No country chosen.
onboarding.ts:36
Please select an amount of interest
Validation
No deposit range chosen.
onboarding.ts:13
Please select how you found Zivoe
Validation
No attribution source chosen.
onboarding.ts:20
dApp

Onboarding — Steps 2–3 — Organization details

app.zivoe.com/onboarding — Organization branch

Splits personal details (step 2) from company details (step 3). The “Amount Of Interest” options differ from the individual set — they start at “< $10k” and go up to “> $5M”.

Your Information
Visible copy
Step 2 heading.
organization-form.tsx:80
Tell us about the person managing this account.
Visible copy
Step 2 subheading.
organization-form.tsx:80
Step 2 of 3
Visible copy
Step 2 indicator.
organization-form.tsx:81
Job Title
Visible copy
Field label, organization branch only.
organization-form.tsx:123
e.g., CEO, Investment Manager
Visible copy
Job title placeholder.
organization-form.tsx:124
Organization Details
Visible copy
Step 3 heading.
organization-form.tsx:198
Tell us about your organization.
Visible copy
Step 3 subheading.
organization-form.tsx:198
Step 3 of 3
Visible copy
Step 3 indicator.
organization-form.tsx:199
Entity Name
Visible copy
Field label.
organization-form.tsx:210
Legal name of your organization
Visible copy
Entity name placeholder.
organization-form.tsx:211
Country Of Incorporation
Visible copy
Select label.
organization-form.tsx:224
Job title is required
Validation
Empty job title on submit.
onboarding.ts:46
Entity name is required
Validation
Empty entity name on submit.
onboarding.ts:53
dApp

Onboarding — Dropdown options

Shared across both onboarding branches

Individual and Organization see different deposit ranges. Both share the attribution list.

$1k - $10k · $10k - $100k · $100k - $250k · $250k - $1M · > $1M
Visible copy
Amount of Interest options, Individual branch.
onboarding/_utils/onboarding.types.ts:4
< $10k · $10k - $100k · $100k - $250k · $250k - $1M · $1M - $5M · > $5M
Visible copy
Amount of Interest options, Organization branch.
onboarding.types.ts:12
X (Twitter) · Google Search · Media Coverage · Conference / Event · Word of Mouth
Visible copy
“How'd You Find Zivoe?” options, both branches.
onboarding.types.ts:21
dApp

Onboarding — Completion

Fires on successful submission of the final onboarding step
Welcome to Zivoe!
Visible copy
Success toast title. The user is redirected to the offerings list immediately after.
onboarding/_hooks/useCompleteOnboarding.ts:26
Your account has been set up successfully.
Visible copy
Success toast description.
useCompleteOnboarding.ts:27
Onboarding Failed
Error
Error toast title when the server action rejects.
useCompleteOnboarding.ts:20
An unexpected error occurred. Please try again.
Error
Fallback description when the server returns no specific message.
useCompleteOnboarding.ts:36
Failed to complete onboarding. Please try again.
Error
Returned by the server action when the profile write fails.
server/actions/onboarding.ts:66
Invalid form data
Error
Server-side schema rejection — should be unreachable, since the client validates the same schema first.
server/actions/onboarding.ts:30
dApp

App shell — Navigation and wallet

Persistent header on every signed-in page
Offerings
Visible copy
The only top-level nav item. Links to the dashboard root.
app/(dashboard)/_components/layout.tsx:60
Connect Wallet
Visible copy
Wallet button, desktop width.
layout.tsx:74
Connect
Visible copy
Wallet button, mobile width — same control, shortened.
layout.tsx:75
Pending
Loading state
Wallet button while a wallet connection is resolving.
components/connected-account.tsx:47
Loading...
Loading state
Wallet button during the initial account fetch.
connected-account.tsx:46
Disconnect
Visible copy
Menu item under the connected wallet address.
connected-account.tsx:62
Settings
Visible copy
User menu item.
layout.tsx:163
Logout
Visible copy
User menu item.
layout.tsx:175
Logging out...
Loading state
Replaces “Logout” while the sign-out request is in flight.
layout.tsx:172
User menu
Visible copy
Screen-reader label on the avatar button.
layout.tsx:143
Zivoe home
Visible copy
Screen-reader label on the logo link.
app/(dashboard)/layout.tsx:40
Open navigation menu
Visible copy
Screen-reader label on the mobile hamburger.
app/(dashboard)/layout.tsx:79
Navigation menu
Visible copy
Screen-reader label on the mobile drawer itself.
packages/ui/src/components/navigation-mobile-dialog.tsx:7
Error Disconnecting Wallet
Error
Toast when wallet disconnection throws.
connected-account.tsx:38
Error signing out
Error
Toast when the sign-out server action fails.
layout.tsx:128; server/actions/auth.ts:21
Unexpected error signing out
Error
Fallback when sign-out throws without a message.
layout.tsx:133
dApp

Error pages — Failure and not-found screens

Rendered when a route throws or a URL doesn't resolve
Something went wrong
Error
Dashboard error boundary — any uncaught render or data error inside the signed-in area.
app/(dashboard)/error.tsx:20
Try again
Error
Retry button on the error boundary. Re-runs the failed segment.
error.tsx:29
404 Error
Visible copy
Not-found page eyebrow.
app/(dashboard)/not-found.tsx:26
Page not found
Visible copy
Not-found page heading.
not-found.tsx:27
Go Home
Visible copy
Not-found page action.
not-found.tsx:32
An Error Occurred
Error
Default toast title for any unhandled React Query mutation error that supplies no message of its own.
lib/get-query-client.ts:27
dApp

Offerings list — Dashboard home

app.zivoe.com/ — the landing screen after sign-in

One offering exists today. The registry throws at import time if a second is added before the data layer is parameterised, so this list is effectively single-item.

Offerings
Visible copy
Page heading.
app/(dashboard)/page.tsx:20
Assets Under Management
Visible copy
Label above the protocol-wide AUM figure. Deliberately not “NAV” — that word is internal only.
app/(dashboard)/_offerings/aum-header.tsx:13
Global MCA Offerings Fund
Visible copy
Offering name on the card and the detail page.
offerings/index.ts:58
Merchant Cash Advance
Visible copy
Category label on the offering card.
offerings/index.ts:60
Short-duration, revenue-based financing for small businesses, diversified across thousands of merchants in the US, UK, Europe and APAC with daily repayment.
Visible copy
Offering description on the card.
offerings/index.ts:62
Issuer
Visible copy
Card row label. Value is “Zivoe”.
_offerings/offering-card.tsx:40
Target APY
Visible copy
Card row label. Value is a hardcoded 14%, not a live read.
offering-card.tsx:41; offerings/index.ts:53
Accepted stablecoins
Visible copy
Card row label. Value is USDC only.
offering-card.tsx:52
Available on
Visible copy
Card row label. Value is Ethereum only.
offering-card.tsx:71
Invest now
Visible copy
Card call-to-action, bottom right.
offering-card.tsx:88
dApp

Offering detail — Header and tabs

app.zivoe.com/offerings/global-mca-offerings
Offerings
Visible copy
Breadcrumb back to the list.
offerings/[slug]/offering-header.tsx:16
Breadcrumb
Visible copy
Screen-reader label on the breadcrumb nav.
offering-header.tsx:12
Deposit
Visible copy
First tab.
offerings/[slug]/deposit/index.tsx:37
Redeem
Visible copy
Second tab.
deposit/index.tsx:41
Earn
Visible copy
Mobile-only third tab holding the info panel that sits alongside the form on desktop.
deposit/index.tsx:50
Deposit and Redeem tabs
Visible copy
Screen-reader label on the tab list.
deposit/index.tsx:105
Centrifuge current share metrics are unavailable
Error
Server-side log when the Token Price / AUM read fails. Not user-visible — the UI shows skeletons or the retry state instead.
offerings/[slug]/page.tsx:76
dApp

Offering detail · Deposit — Deposit form

Deposit tab — the primary conversion surface

Two transactions in sequence: an ERC-20 approval, then the deposit itself. The button reflects which one is next.

Deposit
Visible copy
Amount field label, and the submit button once USDC is approved.
deposit/deposit-flow.tsx:171, 271
Approve
Visible copy
Submit button when the current allowance is below the entered amount — the first of two transactions.
deposit-flow.tsx:253
Estimated receive
Visible copy
Label on the read-only zMCA output field.
deposit-flow.tsx:206
Max
Visible copy
Fills the amount field with the full wallet balance.
deposit/_components/max-button.tsx:24
Select Asset
Visible copy
Desktop label on the deposit-asset picker. USDC is the only option today.
deposit-flow.tsx:313
Select deposit asset
Visible copy
Screen-reader label on the mobile asset select.
deposit-flow.tsx:349
Retry
Visible copy
Appears in place of the estimate when the zMCA preview read fails. Re-runs the preview.
deposit-flow.tsx:216
Loading...
Loading state
Submit button while balances, allowance, and wallet screening are still loading.
deposit-flow.tsx:236
Estimating zMCA...
Loading state
Submit button while the deposit preview resolves for the entered amount.
deposit-flow.tsx:245, 263
Approving USDC...
Loading state
Submit button after the approval is signed, while it confirms on-chain.
deposit-flow.tsx:247
Depositing USDC...
Loading state
Submit button after the deposit is signed, while it confirms on-chain.
deposit-flow.tsx:265
Signing Transaction...
Loading state
Submit button while the wallet is showing its signature prompt — before anything reaches the chain.
deposit-flow.tsx:249, 267
Deposit amount is required
Validation
Submit with the amount field empty.
deposit-flow.tsx:67
Deposit amount exceeds balance
Validation
Entered amount is greater than the wallet's USDC balance.
deposit-flow.tsx:68
Deposit amount exceeds current vault capacity.
Validation
Entered amount is above the vault's remaining capacity. Checked client-side before any transaction is attempted.
deposit-flow.tsx:69
Deposits are currently unavailable.
Error
Shown in place of the form when the vault capacity read fails — the form cannot safely validate without it.
deposit-flow.tsx:174, 214
Unable to estimate zMCA.
Error
Estimate field text when the deposit preview read fails.
deposit-flow.tsx:214
You can now deposit USDC.
Visible copy
Success dialog description after the approval transaction confirms.
deposit-flow.tsx:133
There was an error approving USDC
Error
Failure dialog description when the approval transaction reverts.
deposit-flow.tsx:134
dApp

Offering detail · Deposit — Deposit failure messages

Inline above the submit button — decoded from a failed transaction simulation, before the wallet is asked to sign

These are the hardest strings in the product to see. Each maps a specific on-chain revert to plain English. They only appear when simulation catches the condition.

You don't have enough USDC for this deposit.
Error
Balance fell below the entered amount between typing and submitting.
centrifuge/use-deposit.ts:14, 24
Your USDC approval is no longer sufficient. Approve the amount again and retry.
Error
Allowance was spent or reduced after approval — the deposit would revert on the transfer.
use-deposit.ts:15
This vault can't accept that deposit right now. Try a smaller amount or try again later.
Error
Vault reserve is insufficient for the deposit size.
use-deposit.ts:16, 17
The current deposit price is unavailable. Try again later.
Error
The share price read reverted — the pool has no valid price to issue against.
use-deposit.ts:18
This deposit can't be completed for this wallet right now.
Error
The transfer-restriction hook blocked the wallet — the real-world case is an address not cleared to hold zMCA.
use-deposit.ts:19, 20, 25
Enter an amount greater than zero.
Error
The SDK rejected a zero-value order.
use-deposit.ts:26
Enter a valid USDC amount.
Error
The entered amount has more decimal places than USDC supports.
use-deposit.ts:27
Deposit Successful
Visible copy
Dialog title once the deposit transaction confirms.
use-deposit.ts:84
zMCA has been transferred to your wallet.
Visible copy
Success dialog description.
use-deposit.ts:85
Deposit Failed
Error
Dialog title when the deposit transaction reverts on-chain.
use-deposit.ts:76
Your deposit could not be completed.
Error
Failure dialog description.
use-deposit.ts:77
Depositing USDC...
Loading state
Pending toast, distinct from the button state.
use-deposit.ts:68
Error Depositing USDC
Error
Error toast title.
use-deposit.ts:69
dApp

Offering detail · Redeem — Redemption request form

Redeem tab

Redemptions are asynchronous: the user requests, the pool fulfils on its own schedule, then the user claims. The form reflects all three phases plus cancellation.

Redeem
Visible copy
Amount field label.
deposit/redeem-flow.tsx:262
Request redemption
Visible copy
Submit button when no request is currently pending.
redeem-flow.tsx:356
Add to redemption
Visible copy
Submit button when a request is already pending — a second request tops up the first rather than replacing it.
redeem-flow.tsx:356
Estimated receive
Visible copy
Label on the read-only USDC output field.
redeem-flow.tsx:297
Redemptions are processed periodically. Your final USDC amount is determined using the Token Price when your request is processed.
Visible copy
Standing callout under the form. Sets the expectation that the estimate is not a quote.
redeem-flow.tsx:326
Loading...
Loading state
Submit button during the initial load of balances, position, and metrics.
redeem-flow.tsx:333
Estimating USDC...
Loading state
Submit button while the USDC estimate resolves.
redeem-flow.tsx:348
Requesting redemption...
Loading state
Submit button while the request confirms on-chain.
redeem-flow.tsx:350
Signing Transaction...
Loading state
Submit button while the wallet prompt is open.
redeem-flow.tsx:352
Retry
Visible copy
Shown when the Token Price read fails, leaving the estimate unresolvable.
redeem-flow.tsx:307
Redeem amount is required
Validation
Submit with the amount field empty.
redeem-flow.tsx:70
Redeem amount exceeds balance
Validation
Entered amount is greater than the wallet's zMCA balance.
redeem-flow.tsx:71
dApp

Offering detail · Redeem — Claiming and cancellation

Redeem tab — appears above the form once the user has an in-flight position

When a cancellation lands after partial fulfilment, both claims appear at once and the USDC claim is gated behind the zMCA claim.

USDC ready to claim
Visible copy
Shown when the pool has fulfilled some or all of a request.
redeem-flow.tsx:202
Claim USDC
Visible copy
Claims fulfilled redemption proceeds.
redeem-flow.tsx:227
Claiming USDC...
Loading state
While the USDC claim confirms.
redeem-flow.tsx:221
Claim zMCA
Visible copy
Claims shares handed back by a cancellation.
redeem-flow.tsx:191
Claiming zMCA...
Loading state
While the returned-shares claim confirms.
redeem-flow.tsx:185
Claim your returned zMCA first.
Visible copy
Explains why the USDC claim is disabled — the protocol empties the returned-shares bucket first, so the claims must happen in order.
redeem-flow.tsx:232
Cancel request
Visible copy
Cancels a pending redemption request.
redeem-flow.tsx:396
Cancelling...
Loading state
While the cancellation confirms.
redeem-flow.tsx:393
Cancellation in progress
Loading state
Submit button text while the pool unwinds the cancellation. The whole form is locked — a new request would revert on-chain until the unwind lands.
redeem-flow.tsx:336
Cancelling redemption request
Visible copy
Callout heading during the unwind window.
redeem-flow.tsx:407
Your zMCA will be available to claim once the cancellation is processed. Any portion already approved still executes as USDC.
Visible copy
Callout body during the unwind. The success dialog states the same fact in more words.
redeem-flow.tsx:414
dApp

Offering detail · Redeem — Redemption request failure messages

Inline above the submit button — decoded from a failed simulation before signing
You don't have enough shares for this redemption request.
Error
zMCA balance is below the requested amount. Note “shares” — flagged below as inconsistent with the zMCA vocabulary used elsewhere.
centrifuge/use-request-redeem.ts:12, 23
Wait for your cancellation to complete before requesting another redemption.
Error
A cancellation is still unwinding. The form is normally locked in this state, so this is the backstop.
use-request-redeem.ts:13
Enter an amount greater than zero.
Error
Zero-value order rejected.
use-request-redeem.ts:14, 25
Redemption requests are temporarily unavailable for this vault.
Error
The vault is not linked to the pool — an operational state, not a user error.
use-request-redeem.ts:15
This redemption request can't be submitted from this wallet right now.
Error
The transfer-restriction hook blocked the wallet.
use-request-redeem.ts:16, 17, 24
Redemptions are temporarily paused. Try again later.
Error
Redemptions are paused pool-wide by the hub.
use-request-redeem.ts:18
The network fee estimate changed. Try again.
Error
Gas estimate went stale between simulation and submission.
use-request-redeem.ts:19
Enter a valid zMCA amount.
Error
Too many decimal places for the share token.
use-request-redeem.ts:26
Requesting Redemption...
Loading state
Pending toast.
use-request-redeem.ts:63
Error Requesting Redemption
Error
Error toast title.
use-request-redeem.ts:64
Redemption Requested
Visible copy
Success dialog title once the request confirms.
use-request-redeem.ts:78
Your final USDC amount is determined when your request is processed.
Visible copy
Success dialog description — repeats the estimate caveat at the moment of commitment.
use-request-redeem.ts:79
Redemption Request Failed
Error
Failure dialog title.
use-request-redeem.ts:71
Your redemption request could not be completed.
Error
Failure dialog description.
use-request-redeem.ts:72
dApp

Offering detail · Redeem — Cancellation failure messages

Inline — decoded from a failed cancellation simulation
There is no redemption request to cancel.
Error
The pending request was fulfilled or already cancelled before the cancel landed.
centrifuge/use-cancel-redeem.ts:10, 20
Your cancellation is already being processed.
Error
A cancellation is already unwinding.
use-cancel-redeem.ts:11
Cancellations are temporarily unavailable for this vault.
Error
The vault is not linked to the pool.
use-cancel-redeem.ts:12
This cancellation can't be submitted from this wallet right now.
Error
Blocked by the transfer-restriction hook.
use-cancel-redeem.ts:13, 14
Redemptions are temporarily paused. Try again later.
Error
Paused pool-wide.
use-cancel-redeem.ts:15
The network fee estimate changed. Try again.
Error
Stale gas estimate.
use-cancel-redeem.ts:16
Cancelling Redemption Request...
Loading state
Pending toast.
use-cancel-redeem.ts:58
Error Cancelling Redemption
Error
Error toast title.
use-cancel-redeem.ts:59
Cancellation Requested
Visible copy
Success dialog title.
use-cancel-redeem.ts:73
Your zMCA will be available to claim once the cancellation is processed. Any portion already approved by the pool manager still executes and arrives as USDC.
Visible copy
Success dialog description. The in-form callout says the same thing in fewer words.
use-cancel-redeem.ts:75
Cancellation Failed
Error
Failure dialog title.
use-cancel-redeem.ts:66
Your redemption request could not be cancelled.
Error
Failure dialog description.
use-cancel-redeem.ts:67
dApp

Offering detail · Redeem — Claim failure messages

Inline — decoded from failed claim simulations (USDC proceeds and returned zMCA)

The “Could Not Be Verified” pair is unusual: the transaction confirmed on-chain, but the receipt couldn't be decoded, so the UI refuses to claim success it can't prove.

There are no redemption proceeds available to claim yet.
Error
Claim attempted with nothing fulfilled.
centrifuge/use-claim-redeem.ts:25
Claims are temporarily unavailable for this vault.
Error
Vault not linked to the pool. Same string on both claim types.
use-claim-redeem.ts:15; use-claim-returned-shares.ts:15
These proceeds can't be claimed to this wallet right now.
Error
USDC claim blocked by the transfer-restriction hook.
use-claim-redeem.ts:16, 17
Your claimable amount changed. Refresh and try again.
Error
The claimable balance moved between simulation and submission.
use-claim-redeem.ts:18, 19
Redemption proceeds are temporarily unavailable. Try again later.
Error
Claims paused pool-wide.
use-claim-redeem.ts:20, 21
Claimable balances changed. Claim your returned zMCA first.
Error
Returned shares appeared between load and submit — the ordering rule now applies.
use-claim-redeem.ts:53
There is no returned zMCA available to claim yet.
Error
Returned-shares claim attempted with an empty bucket.
use-claim-returned-shares.ts:23
These shares can't be claimed to this wallet right now.
Error
Returned-shares claim blocked by the transfer-restriction hook.
use-claim-returned-shares.ts:16, 17
Returned zMCA is temporarily unavailable. Try again later.
Error
Returned-shares claims paused.
use-claim-returned-shares.ts:18
Claimable balances changed. Refresh and try again.
Error
Returned-shares balance moved before submission.
use-claim-returned-shares.ts:56
Claiming USDC...
Loading state
Pending toast for the proceeds claim.
use-claim-redeem.ts:74
Error Claiming USDC
Error
Error toast title.
use-claim-redeem.ts:75
USDC Claimed
Visible copy
Success dialog title.
use-claim-redeem.ts:99
USDC has been transferred to your wallet.
Visible copy
Success dialog description.
use-claim-redeem.ts:100
Claiming zMCA...
Loading state
Pending toast for the returned-shares claim.
use-claim-returned-shares.ts:76
Error Claiming zMCA
Error
Error toast title.
use-claim-returned-shares.ts:77
zMCA Claimed
Visible copy
Success dialog title.
use-claim-returned-shares.ts:101
Your zMCA has been returned to your wallet.
Visible copy
Success dialog description.
use-claim-returned-shares.ts:102
Claim Failed
Error
Failure dialog title. Same string for both claim types.
use-claim-redeem.ts:82; use-claim-returned-shares.ts:84
Your USDC claim could not be completed.
Error
Failure dialog description, proceeds claim.
use-claim-redeem.ts:83
Your zMCA claim could not be completed.
Error
Failure dialog description, returned-shares claim.
use-claim-returned-shares.ts:85
Claim Could Not Be Verified
Error
The transaction confirmed but its receipt could not be decoded. Deliberately not shown as a failure — the funds may well have moved.
use-claim-redeem.ts:91; use-claim-returned-shares.ts:93
The transaction was confirmed, but the USDC claim could not be verified. Refresh your balances.
Error
Description of the above, proceeds claim.
use-claim-redeem.ts:93
The transaction was confirmed, but the zMCA claim could not be verified. Refresh your balances.
Error
Description of the above, returned-shares claim.
use-claim-returned-shares.ts:95
dApp

Offering detail — Shared transaction copy

Applies to every on-chain action in the product

These strings sit above the per-flow messages — they fire regardless of which transaction was attempted.

See transaction details
Visible copy
Link in every transaction dialog, opening the block explorer at the transaction hash.
deposit/_components/transaction-dialog.tsx:72
Close
Visible copy
Dismisses the transaction dialog.
transaction-dialog.tsx:173
Approving {token}...
Loading state
Pending toast during any ERC-20 approval. Token name is interpolated.
hooks/useApproveSpending.ts:52
Error Approving {token}
Error
Error toast for a failed approval.
useApproveSpending.ts:53
Approval Successful
Visible copy
Dialog title once an approval confirms.
useApproveSpending.ts:77
Approval Failed
Error
Dialog title when an approval reverts.
useApproveSpending.ts:84
Transaction rejected
Error
The user dismissed the wallet's signature prompt. Treated as a distinct outcome, not an error.
centrifuge/useCentrifugeTx.ts:274; hooks/useTx.tsx:124
Your wallet is connected to the wrong network. Switch networks and try again.
Error
The wallet's chain doesn't match the deployment's. Submission is refused rather than risking funds on the wrong network.
useCentrifugeTx.ts:285
Your wallet did not respond. If you approved the transaction in your wallet, wait for it to land before trying again.
Error
The wallet never returned a result. Deliberately does not tell the user to retry — a duplicate transaction is the worse outcome.
useCentrifugeTx.ts:130
Wallet not connected
Error
A transaction was attempted with no connected wallet. Should be unreachable through the UI.
useCentrifugeTx.ts:75, 102
Another transaction is already in progress
Error
A second transaction was started while one was still running.
centrifuge/client.ts:45
Error checking transaction receipt
Error
Receipt polling failed after submission.
hooks/useTx.tsx:156
dApp

Offering detail · Earn — Stats, details and documents

Info panel beside the form on desktop; the “Earn” tab on mobile
Stats
Visible copy
Section heading.
deposit-info/deposit-stats.tsx:13
Target APY
Visible copy
Stat label. Value is the hardcoded 14%.
deposit-stats.tsx:17
Token Price
Visible copy
Stat label and chart series name. Deliberately not “Share Price” — that stays internal.
deposit-stats.tsx:19
About
Visible copy
Section heading over the offering description.
deposit-info/deposit-about.tsx:15
Show More / Show Less
Visible copy
Expands and collapses the About text, which is clamped to two lines.
deposit-about.tsx:37
Details
Visible copy
Section heading over the fact table.
deposit-info/deposit-details.tsx:11
Eligibility — Institutions & Non-US Retail
Visible copy
Details row.
deposit-details.tsx:35
Underlying Assets — Business & Consumer Loans
Visible copy
Details row.
deposit-details.tsx:36
Geography — Americas and EU
Visible copy
Details row. Note the landing page writes this as “Americas & EU”.
deposit-details.tsx:37
Legal Structure — SPV
Visible copy
Details row.
deposit-details.tsx:38
Regulatory Compliance — Reg S Compliant Offering
Visible copy
Details row.
deposit-details.tsx:39
Management Fee — 2.5% APR
Visible copy
Details row. Note the landing FAQ separately states a 15% protocol fee on interest income — two different fees, stated in two different places.
deposit-details.tsx:40
Liquidity — Available upon request
Visible copy
Details row.
deposit-details.tsx:41
Audits — View Reports
Visible copy
Details row linking to the audits page in docs.
deposit-details.tsx:48
Available Networks — Ethereum
Visible copy
Details row.
deposit-details.tsx:51
Documents
Visible copy
Section heading.
deposit-info/deposit-documents.tsx:9
Protocol Documentation
Visible copy
Document link to docs.zivoe.com.
deposit-documents.tsx:40
Reg S Compliance
Visible copy
Document link to the Reg S terms page.
deposit-documents.tsx:41
Contact Us
Visible copy
Section heading over the investor relations email link.
deposit-info/deposit-contact.tsx:10
Select a chart view
Visible copy
Screen-reader label on the chart series picker.
deposit-info/deposit-charts.tsx:49
dApp

Offering detail · Earn — Highlights

Info panel — three selling points above the fact table
Highlights
Visible copy
Section heading.
deposit-info/deposit-highlights/index.tsx:15
Flexible Liquidity
Visible copy
First highlight title.
deposit-highlights/index.tsx:19
Contact us at investors@zivoe.com to initiate a redemption or with any questions about liquidity before depositing.
Visible copy
First highlight body. Worth reviewing against the Redeem tab, which lets users request a redemption directly without contacting anyone.
deposit-highlights/index.tsx:20
Autocompounding
Visible copy
Second highlight title.
deposit-highlights/index.tsx:26
As borrowers make interest payments, the proceeds are automatically redeployed into new loans, maximizing returns.
Visible copy
Second highlight body.
deposit-highlights/index.tsx:27
Decades of Experience
Visible copy
Third highlight title.
deposit-highlights/index.tsx:33
Our team has over 40 years of combined experience managing credit risk at leading financial institutions and DeFi protocols including JP Morgan Chase, Wells Fargo, Capital One, and Maple Finance.
Visible copy
Third highlight body. The landing page makes a similar claim with a different institution list — worth aligning.
deposit-highlights/index.tsx:34
Meet the Team
Visible copy
Link out to the landing site's team page.
deposit-highlights/index.tsx:38
dApp

Wallet screening — Connection denied dialog

Blocks the whole app when Chainalysis flags a connected wallet

The most consequential dialog in the product — it ends the session. There is no path forward except a different wallet or an email.

Wallet Connection Denied
Visible copy
Dialog title. Fires when the risk assessment returns a flagged result for the connected address.
app/(dashboard)/_components/chainalysis-assessment-dialog.tsx:49
We've detected irregular or sanctioned activity associated with the wallet you attempted to connect.
Visible copy
Dialog body, first paragraph.
chainalysis-assessment-dialog.tsx:52
This may affect your ability to interact with our services. If you believe this is a mistake, please contact inquire@zivoe.com
Visible copy
Dialog body, second paragraph, with the appeal address as a mailto link.
chainalysis-assessment-dialog.tsx:53
Denial reason
Visible copy
Label above the risk reason returned by the screening provider. The reason itself is third-party text we don't author.
chainalysis-assessment-dialog.tsx:71
Back to Homepage
Visible copy
Primary action — leaves for the landing site.
chainalysis-assessment-dialog.tsx:78
Disconnect
Visible copy
Secondary action — disconnects the wallet so another can be tried.
chainalysis-assessment-dialog.tsx:82
Wallet connection denied
Visible copy
Screen-reader label on the dialog.
chainalysis-assessment-dialog.tsx:41
Error Assessing Account Risk!
Error
Toast when the screening request itself fails. The user is not blocked, but the check did not complete.
hooks/useChainalysis.ts:43
The request has been rate limited.
Error
API response when screening is called too often from one address — 10-minute window.
app/api/chainalysis/assessment/route.ts:54
Address is not valid
Error
API response for a malformed address.
api/chainalysis/assessment/route.ts:63
dApp

Email preferences — Manage notifications

app.zivoe.com/unsubscribe — reached from a link in any Zivoe email

Works signed-out via a signed token in the link. An expired or malformed token shows the invalid-link state instead of the form.

Manage Notifications
Visible copy
Page heading.
app/unsubscribe/page.tsx:90
Choose the emails you'd like to receive from Zivoe. You can update your preferences anytime you'd like.
Visible copy
Page subheading on the valid-token path.
unsubscribe/page.tsx:72
Transaction Receipts
Visible copy
First toggle label.
unsubscribe/_components/email-preferences-form.tsx:54
Receive email confirmations for deposits and redemptions
Visible copy
First toggle description.
email-preferences-form.tsx:55
Product Tips
Visible copy
Second toggle label.
email-preferences-form.tsx:60
Reminders and helpful product tips
Visible copy
Second toggle description.
email-preferences-form.tsx:61
Newsletter
Visible copy
Third toggle label.
email-preferences-form.tsx:66
Product updates, announcements, and market insights
Visible copy
Third toggle description, normal state.
email-preferences-form.tsx:70
Newsletter preference is temporarily unavailable. Please try again later.
Error
Replaces the newsletter description when the Beehiiv subscription state can't be read. The toggle is disabled.
email-preferences-form.tsx:69
Save
Visible copy
Submit button.
email-preferences-form.tsx:109
Saving...
Loading state
Submit button while preferences are being written.
email-preferences-form.tsx:105
Looking to unsubscribe from all email notifications? Turn off every available toggle above and click save.
Visible copy
Standing note under the form — there is no single “unsubscribe from everything” control.
email-preferences-form.tsx:117
Preferences Saved
Visible copy
Success toast title.
unsubscribe/_hooks/useSaveEmailPreferences.ts:47
Your email preferences have been updated.
Visible copy
Success toast description.
useSaveEmailPreferences.ts:48
Failed to save preferences.
Error
Toast when the save action rejects.
useSaveEmailPreferences.ts:37
Failed to update preferences. Please try again.
Error
Returned by the server action when the write fails.
server/actions/email-preferences.ts:78
Newsletter preference could not be updated right now. Please try again.
Error
Returned when the newsletter provider specifically fails, while other toggles saved fine.
server/actions/email-preferences.ts:100
At least one preference change is required.
Validation
Save pressed with nothing changed.
email-preferences.ts:29
dApp

Emails — Sign-in verification code

Sent on every OTP request — the highest-volume email we send
Sign in to Zivoe
Email
Subject line, and the heading inside the email.
server/utils/send-email.ts:31; emails/otp-email.tsx:9
Your Zivoe verification code is ready. It expires in 5 minutes.
Email
Preview text — the grey line shown next to the subject in an inbox list.
emails/otp-email.tsx:7
Enter this verification code to access your account:
Email
Body line above the code block.
otp-email.tsx
This code expires in 5 minutes
Email
Notice under the code.
otp-email.tsx:25
If you didn't request this code, you can safely ignore this email. Someone may have entered your email address by mistake.
Email
Security footer.
otp-email.tsx
Zivoe <verify@auth.zivoe.com>
Email
Sender identity for verification emails.
send-email.ts:28
Failed to send OTP email
Error
Server-side failure when the provider rejects the send. The user sees the generic send-failure toast.
server/auth.ts:113
dApp

Emails — Welcome

Sent after a user completes onboarding, unless Product Tips are off

Written in the first person from a named team member, not from the brand. The whole lifecycle series shares this voice.

Welcome to Zivoe
Email
Subject line and body heading.
send-email.ts:71; emails/welcome-email.tsx:12
Let's connect
Email
Preview text.
welcome-email.tsx:10
Hi There,
Email
Greeting. Note the capital T, which differs from the other emails' “Hi there,”.
welcome-email.tsx:7
I'm Thor from Zivoe's onboarding team, nice to meet you. I help support new users joining the platform.
Email
Opening paragraph.
welcome-email.tsx:18
I saw your account creation come through and wanted to check in to see if you have any immediate questions I can help answer.
Email
Second paragraph.
welcome-email.tsx:22
zMCA is a return-generating token providing on-chain access to short-duration private credit strategies, primarily revenue-based financing for small and medium-sized businesses.
Email
Product explainer paragraph.
welcome-email.tsx
Worth a quick chat?
Email
Closing line above the booking call-to-action.
welcome-email.tsx:31
Book a Call
Email
Call-to-action button, shared across the lifecycle emails.
emails/components/contact-cta-section.tsx:7
Thor · Onboarding, Zivoe · @thorabbasi
Email
Signature block under the call-to-action.
contact-cta-section.tsx:39
Thor from Zivoe <hello@auth.zivoe.com>
Email
Sender identity for all lifecycle emails.
send-email.ts:68
dApp

Emails — Onboarding reminder

Sent to users who signed in but never finished onboarding
Almost There
Email
Subject line.
send-email.ts:50
Finish your onboarding
Email
Preview text.
emails/onboarding-reminder-email.tsx:10
Hi there,
Email
Greeting.
onboarding-reminder-email.tsx:7
Looks like you started signing up but didn't finish. Zivoe is designed to provide eligible users on-chain access to short-duration private credit strategies, primarily revenue-based financing for small and medium-sized businesses.
Email
Body paragraph.
onboarding-reminder-email.tsx:14
If you hit any snags or have questions, happy to help get you set up.
Email
Closing line.
onboarding-reminder-email.tsx:20
Finish Onboarding
Email
Call-to-action button.
onboarding-reminder-email.tsx:23
dApp

Emails — Deposit reminders

Two-part series to onboarded users with no deposit activity

Both emails have two regional variants of the same paragraph — one saying “eligible users” / “eligible individuals”, one omitting eligibility. Only one is sent per recipient.

Getting Started
Email
Subject line, first reminder.
send-email.ts:102
Ready to earn yield on private credit?
Email
Preview text, first reminder.
emails/first-deposit-reminder-email.tsx:18
Just wanted to follow up and say thanks for signing up. As a refresher, Zivoe is designed to provide eligible users on-chain access to private credit strategies backed by real business cash flows.
Email
Body paragraph, first reminder — eligibility-gated variant.
first-deposit-reminder-email.tsx:23
Just wanted to follow up and say thanks for signing up. As a refresher, Zivoe is designed to provide on-chain access to private credit strategies linked to real business cash flows.
Email
Body paragraph, first reminder — alternate variant with no eligibility language.
first-deposit-reminder-email.tsx:28
If you have any questions or want a walkthrough of how Zivoe works, happy to help.
Email
Closing line, first reminder, variant A.
first-deposit-reminder-email.tsx:35
If you have any questions or want to walk through the structure or diligence materials, happy to help.
Email
Closing line, first reminder, variant B.
first-deposit-reminder-email.tsx:36
Last Nudge
Email
Subject line, second reminder.
send-email.ts:133
Last chance to get started
Email
Preview text, second reminder.
emails/second-deposit-reminder-email.tsx:18
One more nudge, then I'll leave you alone.
Email
Opening line, second reminder.
second-deposit-reminder-email.tsx:21
Private credit has traditionally been reserved for institutional investors. Zivoe is designed to provide eligible individuals on-chain access to short-duration private credit strategies, primarily revenue-based financing for small and medium-sized businesses.
Email
Body paragraph, second reminder.
second-deposit-reminder-email.tsx:25
We're deploying into short-duration private credit, primarily merchant cash advances with 3 to 6 month turnover.
Email
Second paragraph, second reminder.
second-deposit-reminder-email.tsx:31
If you have any questions about how the protocol works or how to get started, happy to walk through it.
Email
Closing line, second reminder, variant A.
second-deposit-reminder-email.tsx:38
If you're still evaluating, happy to share access to our data room. Just let me know.
Email
Closing line, second reminder, variant B.
second-deposit-reminder-email.tsx:39
Go to App
Email
Call-to-action button on both reminders.
first-deposit-reminder-email.tsx:39
Unsubscribe
Email
Footer link in every lifecycle email, carrying the signed preference token.
emails/components/email-footer-row.tsx:35
Zivoe - RWA Credit Protocol
Email
Footer wordmark alt text in the shared email layout.
emails/components/email-layout.tsx:32
Product Tips <product-tips.zivoe.com>
Email
List identity used for unsubscribe headers on the reminder series.
send-email.ts:22
dApp

Analytics — PostHog event names

Not visible anywhere — this is the vocabulary of every dashboard and funnel built on our data

Renaming any of these breaks existing PostHog dashboards. The transaction events follow one shape: tx:{flow}_{step}, across six flows.

auth:sign-up
Analytics
A new account is created.
lib/analytics/events.ts:7
auth:otp_requested
Analytics
The user submits their email and a code is sent. Property: method = email_otp.
events.ts:8
auth:otp_resent
Analytics
The user presses resend and it succeeds.
events.ts:9
onboarding:started
Analytics
The onboarding page renders for a user who has not completed it. Captured server-side.
events.ts:11
onboarding:completed
Analytics
The final onboarding step is submitted successfully.
events.ts:10
wallet_connected
Analytics
A wallet is connected. Rate-limited to once per day per wallet.
events.ts:12
tx:deposit_started · _signature_rejected · _submitted · _receipt · _failed · _confirmed
Analytics
The six-step deposit funnel, from button press to confirmed receipt.
events.ts:13
tx:redeem_started · _signature_rejected · _submitted · _receipt · _failed · _confirmed
Analytics
The redemption-request funnel.
events.ts:19
tx:redeem_claim_started · _signature_rejected · _submitted · _receipt · _failed
Analytics
The USDC proceeds claim funnel.
events.ts:25
tx:redeem_cancel_started · _signature_rejected · _submitted · _receipt · _failed
Analytics
The cancellation funnel.
events.ts:30
tx:redeem_claim_returned_started · _signature_rejected · _submitted · _receipt · _failed
Analytics
The returned-shares claim funnel.
events.ts:35
tx:approval_started · _signature_rejected · _submitted · _confirmed · _failed
Analytics
The ERC-20 approval funnel that precedes a first deposit.
events.ts:40
dApp

Analytics — Event properties

Attached to every transaction event

Property names are snake_case in PostHog even though the code uses camelCase. Wallet addresses and hashes are lowercased before sending.

flow · step
Analytics
Which transaction type and which stage of it. flow is one of: deposit, redeem, redeem_claim, redeem_cancel, redeem_claim_returned, approval.
events.ts:86
wallet_address · chain_id · spender
Analytics
Who and where. chain_id defaults to the deployment's configured chain rather than a hardcoded mainnet.
events.ts:89
token_in · token_out · amount_in_raw · amount_out_raw
Analytics
What moved. Amounts are raw on-chain integers sent as strings, not decimal-adjusted.
events.ts:92
tx_hash · block_number · log_index · event_id · receipt_status
Analytics
On-chain identity of the transaction, populated from the receipt.
events.ts:96
error_type: user_rejected | simulation_failed | failed
Analytics
Attached to failure events. Distinguishes a user dismissing the wallet prompt from a transaction that could never have succeeded.
events.ts:107
Landing

Site-wide — Default SEO

<head> of every landing page unless a page overrides it
Zivoe | RWA Private Credit & Stablecoin Yield Protocol
SEO
Default browser tab title, OG title, and Twitter title. Note it differs from the dApp's title.
lib/seo.tsx:5
Zivoe is an RWA credit protocol helping qualified users access private credit yield through diversified loan portfolios, USDC deposits, and zMCA.
SEO
Default meta description, OG description, and Twitter description.
lib/seo.tsx:7
https://www.zivoe.com
SEO
Canonical origin — used for metadataBase, the sitemap, robots.txt host, and all structured-data IDs.
lib/seo.tsx:3
Zivoe
SEO
Author and creator in page metadata, and the Organization name in structured data.
app/layout.tsx:22; app/page.tsx:28
Landing

Home — Hero

zivoe.com — first screen
Your Portal to Private Credit
Visible copy
Hero headline.
app/home/_components/hero/index.tsx:33
Grow your wealth through a diversified, short-duration portfolio designed to generate sustainable yield.
Visible copy
Hero subheadline.
hero/index.tsx:35
Start Earning
Visible copy
Hero call-to-action into the dApp.
hero/index.tsx:67
Target APY
Visible copy
Hero stat label.
hero/index.tsx:79
Token Price
Visible copy
Hero stat label — a live read, matching the dApp's vocabulary.
hero/index.tsx:82
Landing

Home — Diversify Your Portfolio

zivoe.com — second section
Diversify Your Portfolio
Visible copy
Section eyebrow.
home/_components/diversify/index.tsx:13
Tap into an Institutional-Grade Asset Class
Visible copy
Section headline.
diversify/index.tsx:16
Zivoe gives you access to the private credit market, a proven asset class that has delivered strong returns to Wall Street for over 50 years.
Visible copy
Section body.
diversify/index.tsx:19
Earn Real Yield — Backed by Private Credit
Visible copy
First feature card: title and label.
diversify/index.tsx:30
Autocompounding — For maximum growth
Visible copy
Second feature card.
diversify/index.tsx:34
Flexible Liquidity — Via Direct Redemptions
Visible copy
Third feature card. The dApp's equivalent highlight instead tells users to email investors@zivoe.com.
diversify/index.tsx:38
Live now — On Ethereum
Visible copy
Fourth feature card, naming the deployment network.
diversify/index.tsx:42
Landing

Home — How it works

zivoe.com — three-step explainer

The only genuinely sequential block on the page — the numbering carries real order.

Built For Institutions, Perfect For Retail
Visible copy
Section eyebrow.
home/_components/how-it-works/index.tsx:16
Earning Has Never Been Simpler
Visible copy
Section headline.
how-it-works/index.tsx:21
Start earning steady, risk-adjusted returns today — just deposit USDC.
Visible copy
Section body.
how-it-works/index.tsx:25
Step 1 · Deposit — Deposit USDC into Zivoe and receive zMCA.
Visible copy
First step card.
how-it-works/index.tsx:32
Step 2 · Earn — zMCA grows in value as interest is earned.
Visible copy
Second step card.
how-it-works/index.tsx:41
Step 3 · Redeem — Request to redeem your zMCA for USDC, subject to liquidity availability.
Visible copy
Third step card. This is the clearest statement anywhere that redemption is a request, not an instant swap.
how-it-works/index.tsx:50
Landing

Home — Portfolio and security

zivoe.com — lower sections
Meet the Portfolio Behind the Performance
Visible copy
Portfolio section headline.
home/_components/portfolio/index.tsx:18
Earn yield from a well-diversified private credit portfolio.
Visible copy
Portfolio section body.
portfolio/index.tsx:21
Live Since — September 2024
Visible copy
Portfolio stat. A hardcoded date.
portfolio/index.tsx:28
Geography — Americas & EU
Visible copy
Portfolio stat. The dApp writes the same fact as “Americas and EU”.
portfolio/index.tsx:34
Loan Portfolio
Visible copy
Label on the portfolio visualisation.
portfolio/index.tsx:61
View Portfolio
Visible copy
Call-to-action out to the portfolio breakdown.
portfolio/index.tsx:44
Wall Street-Grade Security
Visible copy
Infrastructure section eyebrow.
home/_components/infrastructure/index.tsx:13
Rest Easy, Knowing Your Assets Are Protected
Visible copy
Infrastructure section headline.
infrastructure/index.tsx:15
SPV Structure — User assets are held in special purpose vehicles, ensuring user assets remain protected.
Visible copy
First infrastructure card.
infrastructure/index.tsx:20
Custody Solutions — Zivoe will be integrating with industry-leading crypto custodians, offering an easy and secure way to deposit funds and manage positions.
Visible copy
Second infrastructure card. Future tense — worth a periodic check that it is still accurate.
infrastructure/index.tsx:28
Landing

Home — Experience and partners

zivoe.com — credibility section
Driven by Experience. Powered by Collaboration.
Visible copy
Section headline.
home/_components/experience/index.tsx:39
Zivoe is run by a team of industry veterans and supported by world-class partners in finance, security, and compliance.
Visible copy
Section body.
experience/index.tsx:44
Interested in working together?
Visible copy
Prompt above the contact call-to-action.
experience/index.tsx:48
Let's Talk
Visible copy
Contact call-to-action.
experience/index.tsx:53
Experienced Leadership — Our team combines expertise from leading financial institutions and DeFi protocols.
Visible copy
First credibility card.
experience/index.tsx:59
Meet the Team
Visible copy
Link to the about-us page.
experience/index.tsx:63
Audited by Top Security Firms — We work with industry-leading auditors to ensure our platform is secure and reliable.
Visible copy
Second credibility card.
experience/index.tsx:88
Review Our Audits
Visible copy
Link to the audits page in docs.
experience/index.tsx:98
Compliance-First Approach — We collaborate with Securitize and Chainalysis to ensure we meet the highest standards of regulatory compliance.
Visible copy
Third credibility card. Names two vendors publicly.
experience/index.tsx:113
Collaborating with Industry Leaders — We are proud to work with top-tier partners across the DeFi ecosystem to deliver the best results for our users.
Visible copy
Fourth credibility card, above the partner logo wall.
experience/index.tsx:126
Landing

About us — Mission and team

zivoe.com/about-us and /team

Ten team members are defined in code, each with a name, title, and biography. Editing any of them requires a deploy.

Meet the Team
Visible copy
Page hero headline.
about-us/_components/hero.tsx:13
We come from leading financial institutions and DeFi protocols including JP Morgan Chase, Wells Fargo, and Maple Finance.
Visible copy
Page hero body. The dApp's equivalent claim adds Capital One and quantifies it as “over 40 years”.
about-us/_components/hero.tsx:15
Our Mission
Visible copy
Mission section heading.
about-us/_components/mission/index.tsx:12
Zivoe ("z-eye-voh") is a Balkan word meaning "to life," reflecting our belief that finance should improve life, not limit it. We are modernizing private credit by connecting on-chain capital to real-world lending offerings that provide greater transparency, access, and efficiency. By building open financial infrastructure that enables sustainable yield and expands credit access to underserved markets, Zivoe is reshaping how capital moves across the global lending landscape.
Visible copy
Full mission statement — the longest single piece of brand copy on the site.
about-us/_components/mission/index.tsx:14
Jay Abbasi — Founder
Visible copy
Team member card and detail panel.
about-us/_components/team/index.tsx:213
Kristal Gruevski — Founder & General Counsel
Visible copy
Team member.
team/index.tsx:221
John Quarnstrom — Head of Technology
Visible copy
Team member.
team/index.tsx:229
Walt Ramsey — Head of Risk
Visible copy
Team member.
team/index.tsx:237
Chad Deal — Head of Compliance
Visible copy
Team member.
team/index.tsx:244
Shannon Wright — Controller
Visible copy
Team member.
team/index.tsx:251
Stephanie Puzzo — Head of Marketing
Visible copy
Team member.
team/index.tsx:258
Dennis Baca — Head of Product
Visible copy
Team member.
team/index.tsx:265
Thor Abbasi — Head of Investor Relations
Visible copy
Team member. The named sender of every lifecycle email.
team/index.tsx:272
Alex Serban — Lead Engineer
Visible copy
Team member.
team/index.tsx:280
Bio coming soon.
Visible copy
Fallback shown in the detail panel if a team member has no biography. Currently unreachable — all ten have one.
team/index.tsx:90
Next team member
Visible copy
Advances to the next biography inside the detail panel.
team/index.tsx:158
Close team member
Visible copy
Screen-reader label on the panel close button.
team/index.tsx:57
Team | Zivoe
SEO
Page title for /team.
app/team/page.tsx:10
Meet the team behind Zivoe.
SEO
Meta description for /team.
app/team/page.tsx:11
Landing

FAQ — Questions and answers

zivoe.com/faq — also published as FAQPage structured data for search engines

Eight questions, all hardcoded. These are the most substantive claims we make about fees, risk, and liquidity, and they are also what Google may surface directly in results.

Your Questions, Answered
Visible copy
Page headline.
app/faq/page.tsx:44
Here you can find answers to common questions about Zivoe, our features, and services.
Visible copy
Page subheading.
faq/page.tsx:46
What is Zivoe? — Zivoe is a real world asset (RWA) credit protocol that allows anyone who qualifies to gain tokenized exposure to the private credit market, an asset class historically favored by institutions for its strong risk-adjusted returns. By connecting stablecoin deposits to off-chain lending, Zivoe makes access to this segment available to individuals through yield offerings that were traditionally out of reach.
Visible copy
First question.
faq/page.tsx:73
How have these loans performed historically? — Private credit has shown consistent performance across market cycles, providing stable returns even when public markets experienced volatility. During the 2008 financial crisis, when traditional credit contracted sharply, many private lenders continued to perform, supported by disciplined underwriting and diversified borrower bases. This history underscores the resilience of private credit as an asset class.
Visible copy
Second question. Makes a historical performance claim about the asset class, not about Zivoe.
faq/page.tsx:78
What are the risks? — Note, Zivoe only serves as a technology interface, and as with all forms of private credit exposure, there are risks. Borrower defaults, underwriting errors, and broader economic conditions can all impact loan performance. Liquidity is also a consideration, as withdrawals are contingent on available liquidity. To mitigate these risks, Zivoe partners with established asset originators who handle underwriting and loan origination.
Visible copy
Third question — the primary risk disclosure outside the footer disclaimer.
faq/page.tsx:83
How do I earn yield? — Depositors receive zMCA, the Centrifuge pool's share token, by depositing USDC. These funds are deployed off-chain into yield-generating private credit assets originated by Zivoe's partners. Interest and principal payments from those assets increase the pool's assets under management and are reflected in the zMCA Token Price.
Visible copy
Fourth question. Names Centrifuge explicitly and uses the Token Price / AUM vocabulary.
faq/page.tsx:88
What are the fees? — Zivoe currently takes a 15% protocol fee on the gross interest income generated from loan repayments. This fee supports ongoing operational costs, audits, and future development of the protocol. The remaining yield accrues to zMCA holders through the pool's Token Price.
Visible copy
Fifth question. The dApp separately states a 2.5% APR management fee — two different fees disclosed in two different places.
faq/page.tsx:93
Is there a minimum deposit amount? — Unlike many other real world asset credit protocols, Zivoe is built to be accessible to all who qualify, and as such there is no minimum deposit amount. You can deposit as much or as little as you would like.
Visible copy
Sixth question.
faq/page.tsx:98
What is the lockup and liquidity policy? — Zivoe enforces no lockup period. You can submit a redemption request in the dApp at any time. Requests are processed periodically and remain subject to available liquidity; once processed, the USDC is ready to claim in the dApp.
Visible copy
Seventh question. This one has a separate plain-text copy for structured data, so a change must be made twice in the same file.
faq/page.tsx:103
Has Zivoe been audited? — Yes. Zivoe's smart contracts have been audited by Runtime Verification and Sherlock, two leading security firms in the blockchain industry. In addition to these audits, Zivoe employs continuous monitoring systems to track protocol activity, flag anomalies, and uphold operational security standards.
Visible copy
Eighth question. Names both audit firms publicly.
faq/page.tsx:110
FAQ | Zivoe
SEO
Page title.
faq/page.tsx:16
Answers to common questions about Zivoe, our features, and services.
SEO
Meta description.
faq/page.tsx:17
Landing

Insights — Index and article pages

zivoe.com/insights — the article shell. Article content itself is CMS-managed.
Insights
Visible copy
Index page heading.
app/insights/page.tsx:80
Learn more about Zivoe, our approach and company updates.
Visible copy
Index page subheading.
insights/page.tsx:82
All
Visible copy
The default category filter, shown before the CMS-defined categories.
insights/page.tsx:90
Search articles
Visible copy
Search field label and placeholder.
insights/_components/search-form.tsx:65
Clear search
Visible copy
Screen-reader label on the clear button inside the search field.
search-form.tsx:72
No insights matched your filters.
Visible copy
Empty state heading when a search or category filter returns nothing.
insights/page.tsx:136
Try a different search term or reset the category filter to explore the latest updates from Zivoe.
Visible copy
Empty state body.
insights/page.tsx:138
Have any questions? Contact us
Visible copy
Contact banner at the foot of the index.
insights/page.tsx:113
Previous page / Next page
Visible copy
Screen-reader labels on the pagination arrows.
insights/_components/pagination.tsx:47
Back
Visible copy
Returns from an article to the index.
insights/[slug]/page.tsx:141
Published · Category · Author
Visible copy
Metadata labels on an article page. The values come from the CMS.
insights/[slug]/page.tsx:172, 227
Related Articles
Visible copy
Heading above the recommendation row at the foot of an article.
insights/[slug]/page.tsx:191
Unknown author
Visible copy
Fallback when a published article has no author set in the CMS.
server/insights/normalize.ts:129
Uncategorized
Visible copy
Fallback when a published article has no category set in the CMS.
server/insights/normalize.ts:140
Insights | Zivoe
SEO
Index page title.
insights/page.tsx:31
Read the latest Zivoe insights, updates, and perspectives on private credit.
SEO
Index page meta description.
insights/page.tsx:32
Insight Not Found | Zivoe
SEO
Page title when an article slug does not resolve.
insights/[slug]/page.tsx:49
Preview mode is enabled. Draft CMS content is visible on this page.
Visible copy
Banner shown only to editors following a CMS preview link.
insights/page.tsx:153
Preview mode is enabled for this article.
Visible copy
Same banner on an individual article.
insights/[slug]/page.tsx:184
Leave preview
Visible copy
Exits CMS preview mode and returns to published content.
insights/_components/leave-preview.tsx:19
Embedded LinkedIn post / Embedded YouTube video
Visible copy
Screen-reader titles on embeds inside article bodies.
insights/_components/rich-text/embeds.tsx:65
Landing

Newsletter — Signup form

Footer block on the home page and the insights index
Join Our Newsletter
Visible copy
Block heading.
components/newsletter/common/newsletter-header.tsx:13
Receive news and updates on new offerings straight to your inbox
Visible copy
Block subheading.
newsletter-header.tsx:17
Email address
Visible copy
Field label.
newsletter/common/newsletter-form.tsx:71
Your email address
Visible copy
Field placeholder.
newsletter-form.tsx:75
Sign up
Visible copy
Submit button.
newsletter-form.tsx:85
Email is required
Validation
Submit with the field empty.
newsletter-form.tsx:26
Invalid email address
Validation
Submit with text that fails email validation.
newsletter-form.tsx:26
Successfully joined newsletter
Visible copy
Success message after the subscription is created.
newsletter/common/join-newsletter.ts:59
Already subscribed to the newsletter
Visible copy
Shown when the address is already on the list. Deliberately not an error.
join-newsletter.ts:57
Error joining newsletter, please try again
Error
Toast when the subscription request fails.
newsletter-form.tsx:108
Error Verifying User
Error
Toast title when the bot check fails.
newsletter-form.tsx:48
Error verifying user, please refresh the page.
Error
Server-side equivalent when the Turnstile token can't be verified.
join-newsletter.ts:10
Verify You Are Human to Continue
Error
Warning toast when Turnstile needs interaction.
newsletter-form.tsx:95
Email is not valid
Validation
Server-side email rejection.
join-newsletter.ts:19
Landing

Error pages — Not found

Any unresolved landing URL
This page is not available
Visible copy
Not-found heading. Softer than the dApp's “Page not found”.
app/not-found.tsx:26
The link may be outdated, or the page may have moved.
Visible copy
Not-found body.
app/not-found.tsx:28
Return Home
Visible copy
Not-found action. The dApp's equivalent says “Go Home”.
app/not-found.tsx:34
Page Not Found | Zivoe
SEO
Not-found page title.
app/not-found.tsx:10
The Zivoe page you are looking for could not be found.
SEO
Not-found meta description.
app/not-found.tsx:11
Shared UI

Component defaults — Built into the design system

packages/ui — inherited by both applications unless a caller overrides them

These are the strings nobody writes and nobody reviews, because they arrive with the component.

Loading...
Loading state
What the Button spinner announces to screen readers when a caller passes no pendingContent. Matches the visible text callers do pass.
packages/ui/src/core/button/button.tsx:119
Close dialog
Visible copy
Screen-reader label on the close button of every dialog.
packages/ui/src/core/dialog/dialog.tsx:89
Clear input
Visible copy
Screen-reader label on the clear button inside search inputs.
packages/ui/src/core/input/input.tsx:50
More information
Visible copy
Screen-reader label on the contextual help trigger — the small “?” affordance next to labels.
packages/ui/src/core/contextual-help/contextual-help.tsx:26
©Zivoe {year}. All Rights Reserved.
Visible copy
Shown at the foot of the mobile navigation drawer, from the same shared helper as both app footers.
packages/ui/src/components/navigation-mobile-dialog.tsx:11

What's in here

Seven layers of copy. The first is what a product manager sees by clicking around; the rest are the ones that need a specific state, a failed transaction, or an inbox to encounter.

Visible copy275
Loading state30
Error92
Validation21
SEO16
Analytics17
Email39

Open questions

Three things a copy review should still decide on. Each is a real string in the current branch. The typos, the stale copyright year, the unnamed OTP error and the casing inconsistencies that this audit originally flagged were fixed in 507e447d, and the entries above reflect the corrected copy.

Review
Terminology split: “shares” vs “zMCA”

The redeem error map says “You don't have enough shares for this redemption request”, while the adjacent validation message for the same field says “Enter a valid zMCA amount.” The product vocabulary treats zMCA as the user-facing name — “shares” is the protocol's internal word.

Conflict
Two different fees, disclosed in two different places

The dApp's Details table states a 2.5% APR management fee. The landing FAQ states a 15% protocol fee on gross interest income. Presumably both are true, but they are never stated together, and neither page mentions the other.

Conflict
Liquidity: email us, or use the Redeem tab?

The dApp's “Flexible Liquidity” highlight says to contact investors@zivoe.com to initiate a redemption. The Redeem tab immediately beside it lets users submit one themselves. The landing page describes the same feature as “Via Direct Redemptions”.

What this document does and doesn't cover

Copy that lives outside the two application codebases isn't listed above — here's where it actually lives.

Covered

  • All visible UI text in the dApp and landing site
  • Button labels and their loading states
  • Form validation messages
  • Toasts, dialogs, and on-chain error messages
  • Page titles, descriptions, and structured data
  • PostHog event names and properties
  • Lifecycle emails and their subject lines
  • Screen-reader labels on icon-only controls

Editable in the CMS, not here

  • Insights articles — title, body, excerpt
  • Author names and biographies
  • Category names
  • Article images and alt text

These are Payload collections, edited directly in the CMS admin — no engineering needed.

Not ours to change

  • The wallet connection modal (Dynamic)
  • The Cloudflare Turnstile challenge widget
  • Wallet-side signature prompts (MetaMask et al.)
  • Unmapped Centrifuge SDK errors — these fall through to the SDK's own English
  • Email client rendering of our templates