Skip to content
TRVUE

Privacy

Everything TRVUE stores about you

This notice was written from the database schema, not from a template. Every field below is a real column in a real table, and the retention figures are the timeouts the code enforces.

Prepared for legal review

This describes how TRVUE works. It is not counsel-reviewed, binding terms.

Everything on this page was written by reading the platform's own source code — the database schema, the payment path, the campaign lifecycle — and describing what it does today. It is deliberately specific, and deliberately not boilerplate.

No lawyer has reviewed it. It is not a contract, it binds neither you nor TRVUE, and qualified counsel must redraft it for each relevant jurisdiction before it can. Where the code settles no question, this document says so rather than inventing an answer.

Reconciled against the code on 2026-09-09

01

Scope

This notice covers the TRVUE website and the TRVUE API. It describes what the platform stores about account holders, campaign supporters, company members and API consumers.

It does not cover what a company does with information you give it directly, and it does not cover a public blockchain, which nobody operates and nobody can edit.

The controller is not yet named

A privacy notice must name the legal entity that decides how your data is used, where it is established, and — where required — a representative and a data protection officer. TRVUE has not established those, so this notice does not name them. Until it does, this is a description of processing rather than a lawful notice.

02

What is stored

Each row is a table in TRVUE's database. Column names are given verbatim, because these are the fields a request for a copy of your data would be answered from.

Stored fields, purpose and retention
StoredWhy it existsHow long
users

email, displayName, passwordHash, role, createdAt

Your account: how you sign in, what your name shows as, and whether you hold an admin role. The password is kept only as a scrypt hash.For the life of the account.
users

emailVerifiedAt, emailVerificationToken, emailVerificationExpiresAt

Email verification. The token is a random identifier mailed to you as a link; the timestamp records that a verification actually happened.Token expires after 24 hours. The verified timestamp is kept.
users

passwordResetToken, passwordResetExpiresAt

Password reset. Created only when a reset is requested, and consumed when the new password is set.One hour.
users

totpSecret, totpConfirmedAt

Two-step sign-in with an authenticator app. Present only if you enrolled; the confirmation timestamp is what makes an enrolment count.Until you remove the authenticator.
users

walletAddress

Where campaign tokens are sent. Optional forever — a supporter who never wants tokens never gives one — and stored lowercased.Until you change or remove it.
sessions

id, userId, createdAt, expiresAt

Signed-in sessions. The row is keyed by a hash of the cookie value, so the database never holds the token that would let someone sign in as you.Seven days, and deleted on sign-out or password reset.
passkey_credentials

credentialId, publicKey, counter, transports, deviceType, createdAt

Passkey sign-in: a public key and a signature counter. The private key never leaves your device. Your email address is what the authenticator shows you when choosing a credential.Until you delete the passkey.
pledges

userId, launchId, tierId, amountUsd, tokens, status, paymentRef, checkoutSessionId, createdAt

Your support for a campaign: the amount, the tier, the tokens it earns and its payment state. The payment references are Stripe identifiers, never card details.Kept — a contribution record is the evidence a refund is owed.
launch_distributions

chain, merkleRoot, status, publishedAt, data

A frozen token allocation: the chain, the Merkle root, and the allocation snapshot, which contains payout addresses and amounts.Permanent, and mirrored on a public blockchain once published.
company_members · follows

userId, companyId, role, createdAt

Which companies you belong to and in what role, and which companies you follow.Until you leave or unfollow.
notification_prefs

user_id, rules, updatedAt

Your notification settings.Until you change them.
waitlist

email, interest, createdAt

An email address and a stated interest, submitted through the waitlist form.Kept until removed on request.
api_keys

keyHash, tier, label, ownerUserId, lastUsedAt, revokedAt

API access. Only a hash of the key is stored; the key itself is shown once and never again. The last-used stamp is written at most once a minute and is an operational signal, not a request log.Revocation is a timestamp, not a deletion.
launch_metrics

views, shares

Per-campaign view and share counts. Aggregate integers only — nothing identifying the viewer is written.For the life of the campaign.

Trust Scores are not in this list because they are never stored. They are recomputed from evidence records every time they are shown, which is what makes them impossible to edit by hand.

Campaign content, comments and updates you publish are stored as you wrote them and are visible to anyone who can see the campaign.

03

Payments

TRVUE never sees your card. Payment happens on Stripe's own checkout page; card numbers, expiry dates and security codes are entered there and never reach TRVUE's servers or database.

TRVUE sends Stripe only what is needed to create the charge: pledgeId, launchSlug, amount, product name. This code sends Stripe neither your name nor your email address — Stripe collects what it needs on its own page, under its own privacy terms.

What comes back is a payment reference and a checkout session id, stored on the contribution so that a refund can be issued against exactly that payment.

04

Wallet addresses and the blockchain

If you give a payout address it is stored on your account and, once a campaign's allocation is frozen, written into a published snapshot alongside the token amount you are owed.

Token allocations match on the address, not on your account. That is what lets you claim from a wallet TRVUE knows nothing else about — and it is also why the address, once published, is the thing that identifies the allocation.

A blockchain cannot be redacted

Once an allocation is published on-chain, the address and the amount are public, permanent and outside anyone's control, TRVUE's included. Deleting your account removes the payout address from TRVUE's database and the record binding that address to you; it cannot remove either from a chain. That is unlinking, not erasure — and it also means TRVUE can no longer produce your claim proof. The erasure section sets out the whole trade.

05

Who else receives your data

These are the only third parties the code sends data to. Nothing is listed here aspirationally.

Third parties and what each receives
WhoWhat it receivesWhere

Vercel

Hosting and serving

Every request to the site, and therefore your IP address and request headers, as a normal consequence of serving a page.iad1 · US East (N. Virginia)

Neon (Postgres)

Managed Postgres

The database itself — every field in the table above lives here.iad1 · US East (N. Virginia)

Stripe

Card payments and refunds

The contribution amount, a campaign reference, and whatever you enter on Stripe's own checkout page.US · global

Resend

Transactional email

Your email address, the subject line and the plain-text body — which for reset and verification mail contains a sign-in link.US

Public chain RPC

Public blockchain nodes

Contract addresses being checked. No personal data is sent; these are lookups about tokens, not about people.

There is no advertising network, no data broker, and no third party that receives your data for its own purposes. TRVUE does not sell personal data.

Everything is processed in the United States

The functions that serve this site and the Postgres database behind them both run in one US East region — iad1, in Northern Virginia — which is a recorded provisioning decision rather than a default nobody looked at. Stripe and Resend process in the United States as well. For anyone in the UK or the EU every request is therefore an international transfer, and a transfer needs a lawful mechanism behind it. Stated plainly: no standard contractual clauses have been entered into, no transfer risk assessment has been carried out, and no data processing agreement has been signed with Vercel, Neon, Stripe or Resend. None of that can be created by code. Counsel must put it in place before this notice can be relied on.

06

How long things are kept

These are the timeouts the code enforces, not policy aspirations:

  • 7da signed-in session, from creation
  • 24han email verification link
  • 1ha password reset link
  • 5ma two-step sign-in challenge, held only in memory
  • 15mthe sign-in rate-limit window, in memory and lost on restart
  • 60san API rate-limit counter, which expires on its own

Everything else — your account, your contributions, your company memberships — is kept until you or the operator removes it. You can delete your own account at any time, and the erasure section says exactly what that reaches. The code implements no automatic deletion of an inactive account.

There is no defined retention period for what a deleted account leaves behind — its contributions, its payout entries, and any allocation already published — and no scheduled purge of anything. This page states that gap rather than papering over it.

07

Cookies

TRVUE sets four cookies. All four are strictly functional, none of them follows you across sites, and there is no advertising or analytics cookie to consent to.

Cookies set by TRVUE
CookieWhat it doesLifetime
trvue_session

HttpOnly · SameSite=Lax · Secure

Keeps you signed in. Holds a random token; the server stores only its hash.7 days
trvue_csrf

SameSite=Lax · Secure

Protects against cross-site request forgery. Readable by the page's own scripts on purpose, so a form can echo it back in a header.7 days
trvue_mfa

HttpOnly · SameSite=Lax · Secure

Carries a short-lived two-step sign-in challenge between the password step and the code step.5 minutes
trvue_locale

SameSite=Lax

Remembers the language you chose. Set by your browser and sent nowhere but back to TRVUE.1 year

The Secure flag is set in production. Every cookie is SameSite=Lax and scoped to the whole site.

Because none of these is used for advertising, measurement or profiling, no consent banner is shown. Whether that analysis holds in every jurisdiction is a question for counsel.

08

What TRVUE does not do

Stated as absences, because an absence is what a reader cannot verify for themselves:

  • No analytics product, tag manager, session recorder or advertising pixel — the site loads no third-party script at all.
  • No IP address or user agent is written to a log, a database or a metrics label.
  • No tracking cookie, no fingerprinting, no cross-site identifier.
  • No profiling and no automated decision-making about you.
  • No sale or sharing of personal data, and no enrichment from outside sources.

IP addresses are read for one purpose only: bucketing sign-in attempts and API requests for rate limiting. Those buckets hold a number, not a request, and expire within a minute for API traffic and fifteen minutes for sign-in traffic. Campaign view and share counts are aggregate integers with nothing about the viewer attached.

09

How it is protected

Passwords are hashed with scrypt N=16384 r=8 p=1 and a random per-account salt, then compared in constant time. Session cookies are stored as hashes, so a database read alone cannot produce a usable session, and API keys are stored the same way.

The database connection verifies TLS. The site sends a content security policy that forbids third-party connections, strict transport security, and a referrer policy that withholds paths from other origins. Camera, microphone and location are switched off at the browser level.

One known weakness, stated plainly

Authenticator secrets are stored unencrypted, so a database read would expose the seed behind an account's two-factor codes. It is named here because a privacy notice that describes only strengths is not honest. Password reset and email verification tokens were stored the same way until recently; they are now kept only as SHA-256 digests, so a read of the table no longer yields a usable link.

10

Your choices

You can change your display name, add or remove an authenticator app or a passkey, set or clear a payout address, and change notification settings from your account at any time.

Depending on where you live you may have rights to access, correct, delete, restrict, port or object to the processing of your data. Deletion is self-service, and the next section sets out precisely what it removes and what it cannot. The rest are still handled by hand, because no export or correction flow exists yet.

The only published contact is sales@trvue.com. A dedicated privacy contact has not been established, and establishing one is a precondition for answering rights requests on any defined timescale.

11

Erasure, and its limits

A signed-in account holder can delete their own account. It is a real deletion of the data TRVUE controls: the account row, its credentials, its passkeys, its authenticator secret, its one-time link digests, its payout address, its notification settings, its follows and its company memberships all go, in one transaction.

The flow, with the figures for your own account, is at Delete your account.

What account deletion removes, unlinks and keeps
StoredEffectWhy
users

The account row: your email address, display name, password hash, role and sign-up date.

DeletedNothing about the person survives in the account table. That is what makes the account id left on the records further down stop resolving to anyone.
users · emailVerificationToken, passwordResetToken, totpSecret, totpConfirmedAt

The email-verification and password-reset link digests, and the authenticator secret with its confirmation stamp.

DeletedThey exist only to let this account prove something. With the account gone there is nothing left for them to prove — and the authenticator seed is the one field this platform admits to storing unencrypted.
users · walletAddress

The payout address held on your account.

DeletedRemoving it keeps this account out of any allocation frozen from now on. It does not reach an allocation already published — see the row below.
sessions

Every signed-in session, on every device.

DeletedDeleted in the same transaction as the account, so a session cannot outlive the row it authenticates.
passkey_credentials

Every registered passkey: its public key, signature counter and device type.

DeletedThe private half never left your device and was never here. What TRVUE held is the half that names you to this site.
notification_prefs · follows

Your notification settings, and every company you follow.

DeletedBoth describe the preferences of someone who no longer holds an account here, and neither is a record of anything that happened.
company_members

Your membership of every company you belong to, and the role you held in it.

DeletedMembership is a live permission, not a record of a transaction. Deletion is refused outright while you are a company's only member, because nothing else could then operate its campaigns.
waitlist

A waitlist signup matching your email address.

DeletedThe waitlist is keyed by address and carries no account link, so it would otherwise survive as the one field you asked to have removed.
launches · data → comments[]

Comments you posted on a campaign keep their text. The display name is replaced and the account link is dropped.

UnlinkedDeleting the text would rewrite a campaign's public discussion for everyone who read it. If you want your words gone as well, remove them before deleting the account.
launches · data → ownerUserId

The creator link on any campaign you started. The campaign, and the company it belongs to, stay.

UnlinkedA campaign is operated by its creator or by any member of its company, so the company keeps running its own campaign without you on the record.
launch_distributions · data → accountOwners

The record binding your payout address to your account inside every published allocation.

UnlinkedThis binding is what turns a public wallet address into an identified person. Removing it is the most any platform can do about an entry already committed to a blockchain.
pledges

Every contribution you made: amount, tier, tokens, status, and the Stripe payment reference.

KeptA contribution is the evidence that a refund is owed and the handle a refund is issued against. Deleting it would break settlement for a campaign that has not resolved, and in most jurisdictions a record of a transaction has to be retained.
pledge_payouts

The transfer ledger recording money paid out to a company against your contribution.

KeptThe same reason as the contribution itself, and it is also what stops a payout run paying the same charge twice.
launch_distributions · data → entries

The address and amount inside a published allocation, and the same pair on the public blockchain.

KeptThe stored snapshot is the pre-image of a Merkle root that is already published. Editing it would put TRVUE at odds with the chain and invalidate every proof handed out, including other people's. The chain itself nobody can edit at all.
launch_metrics

Campaign view and share counts.

KeptAggregate integers. Nothing identifying a viewer was ever written to them, so there is nothing here to erase.

An allocation on a blockchain cannot be erased by anyone

Once a campaign publishes its token allocation, a wallet address and an amount are written to a public blockchain, and to a frozen snapshot that commits to them. Neither can be removed: not by the supporter, not by the company, not by TRVUE, not by an order addressed to TRVUE. There is no key that edits a chain.

What erasure achieves there is unlinking, not removal. TRVUE holds a record binding each published address to the account it was committed for, and deletion removes that record — the address and the amount stay exactly where they are, and afterwards nothing in TRVUE's data says whose they were. The same act carries a cost, which the account holder is shown before confirming: with the binding gone, TRVUE can no longer produce that entry's claim proof for them either.

Contributions are kept. A contribution record carries the Stripe reference a refund is issued against, and it is the evidence that a refund is owed at all — deleting it would break settlement for a campaign that has not resolved, and in most jurisdictions it would destroy a record of a transaction that has to be retained. Payout records are kept for the same reason.

Deletion is refused, rather than improvised, while an account is the only member of a company. Removing the last member would leave that company's campaigns, payout account and review correspondence with nobody able to act on them, and there is no ownership-transfer flow to offer instead. The refusal names the company.

The other rights are not self-service. Access, portability, correction, restriction and objection are still handled by hand, and there is no defined retention period for what deletion leaves behind — see the section below.

12

What counsel must still decide

This notice is not complete as a legal document. These are the gaps:

  • The identity and establishment of the controller, and any required representative or data protection officer.
  • A lawful basis for each purpose above, and how consent, contract and legitimate interests are allocated between them.
  • A transfer mechanism for holding UK and EU data in the United States, with the processor agreements behind it.
  • Retention periods for the records a deleted account leaves behind, and a purge that enforces them.
  • Whether unlinking an address from an account satisfies a right to erasure, where the allocation itself sits on a public blockchain and cannot be removed by anyone.

The campaign mechanics this notice refers to are described under Terms, and what a contribution costs under Fees.