Privacy Policy
For tickerbrian.com. Last updated: 22 August 2026. ← Back to BRIAN Pool
1. The short version
This site runs no analytics, no advertising, no tracking pixels and no third-party tracking cookies. It has no user accounts with names or e-mail addresses. The only personal-adjacent data it ever processes is the public stake address of a wallet you actively connect, plus what hosting inevitably sees (your IP address in standard server operation).
2. What is processed, and when
Just browsing: nothing beyond standard hosting logs. The site is served by the configured hosting provider (Vercel and/or Cloudflare Pages), which processes IP addresses to deliver pages, as every web host does.
Wallet Portfolio: when you connect a wallet, your public stake address is sent to this site's own server, which looks up the address's public balances via the Koios API and, for token prices, via the DexHunter API. The address is used for the lookup and is not stored by this site. If the wallet holds NFTs whose artwork lives on IPFS, the preview pictures are fetched by this site's own server and passed on to you: your browser talks only to this site, and the IPFS gateway never sees your IP address or which NFTs you hold.
Members sign-in: your public stake address, a one-time login
challenge and a session record (a random session id with an expiry) are stored in
this site's database for the duration of the session (up to 30 days, so you stay
signed in on this device without confirming a new wallet signature each visit).
While a session is active, the site re-checks your delegation to the pool about
once a day against public on-chain data; if the access condition is no longer met,
the session ends. The session id is
kept in a strictly functional cookie (brian_session — HttpOnly, Secure,
SameSite=Strict). Signing out deletes the session server-side. A separate,
persistent record links to your stake address alone (when you first sign in) and
stores nothing beyond that address, an optional display name and an optional
location you may set yourself on the Profile page — both entirely voluntary. A
display name starting with “$” names an ADA Handle: that one is checked
against public on-chain data when you save it, so it can only be a handle your own
wallet holds. This
record is what keeps your account when a session ends, so you can sign back in
with the same wallet and find it as you left it. You can clear both fields
at any time with “Delete profile” on the Profile page; your access stays,
and comments or chat messages you have already written stay too, under the name
they were written with.
Blog comments: a comment you post under a blog post in the members area is stored with the display name from your profile, its text, the post it belongs to and the time it was written, and is readable by every other signed-in member. Your stake address is stored with it so the operator can moderate, and is never shown to anyone. Each comment is also e-mailed to the operator so they can follow and answer from their mailbox — name, text and the post title only, never your address. Only the operator can delete a comment. Write nothing there you would not want other members to read.
Members chat: a message you post is stored with the display name from your profile, its text and the time it was written, and is readable by every other signed-in member. Your stake address is stored with it so the operator can moderate, and is never shown to anyone. Each message is also e-mailed to the operator so they can follow the room from their mailbox — name and text only, never your address, and there is no address of yours to send. The operator's reply comes back into the room as its text alone: no mail address, no subject line, no headers. Only the operator can delete a message, and a deleted message is gone for good. Write nothing there you would not want other members to read.
FAQ assistant: the question text you type is forwarded to Google Gemini to generate an answer, without any account or wallet information attached. Do not include personal data in questions.
Swap interface (Portfolio page): the swap widget is an embedded frame operated by DexHunter. Within that frame, DexHunter's own privacy policy applies — this site does not receive what you do inside it.
3. What is deliberately never collected
No private keys, no seed phrases, no transaction signatures for the Portfolio feature, no e-mail addresses, no behavioural profiles. The Members sign-in uses a data signature (CIP-8) solely to prove control of a stake address — it cannot move funds. The only name ever stored is one you choose to type in yourself, never verified against anything and never used for access. It stays private to you everywhere on this site with one exception you choose to enter: post in the members chat and that name is shown next to your message, to other signed-in members and to the operator. Your stake address is never shown there.
The sister site clinic-tools.net: the operator also runs clinic-tools.net, where the same delegation to BRIAN unlocks a read-only blog about medical technology. It is a separate site with its own sign-in, its own database and its own delegation check — neither site can create a session for the other, and following the link from the Members area signs you into nothing. Two things do cross, and only these: when you sign in on either site, that site asks the other whether it holds a newer display name and location for your stake address, and adopts it if so. Your public stake address is sent to make that lookup; nothing else about you is shared, and no message, post or wallet balance ever crosses. The exchange is protected by a secret shared between the two sites; if it is switched off, both sites simply keep their own values.
4. Third-party services
Data leaves this site only to the services named above and only for the purpose
described: Koios (on-chain lookups), CoinGecko (ADA fiat rates — called directly by
your browser), Google Gemini (FAQ answers), DexHunter (token prices via this site's
server; the swap frame directly in your browser), the public IPFS gateway
ipfs.io (NFT preview pictures — requested by this site's server, not by
your browser), Resend (carries members-chat
messages to the operator's mailbox and their replies back), and the hosting
provider. Each operates under its own privacy policy.
5. Your choices and rights
Everything beyond plain browsing is opt-in by action: nothing wallet-related happens until you connect or sign in, and signing out ends and deletes the session. Depending on where you live, data-protection law may give you rights of access, correction and deletion; for anything this site actually stores (a session row), signing out already deletes it. For questions, contact the operator via the X (Twitter) link in the footer.
6. Changes
This policy may be updated at any time; the current version is always the one published on this page.
Appendix: how the Wallet Portfolio works, step by step
The real code behind the Wallet Portfolio, in the order it runs. This project's repository is private, so instead of a source link, the actual code behind every step is reproduced and explained here - read it yourself rather than take our word for it. Each excerpt is copied unmodified from this site's own source files.
1. Connecting only ever asks for read access, never a signature
Clicking a wallet button calls three wallet-API methods, in this exact order:
enable() - the wallet extension's own permission prompt, the one asking to let
this site read the wallet, nothing more - then getNetworkId() (rejects anything
but Cardano mainnet) and getRewardAddresses() (returns the stake address, already
plain data, nothing that needs signing to read). No other wallet method is called at this
step.
const api = await window.cardano[walletKey].enable();
const networkId = await api.getNetworkId();
if (networkId !== 1) {
setStatus("This wallet is on a test network. Switch it to Cardano mainnet and try again.", true);
return;
}
const rewardAddresses = await api.getRewardAddresses();
2. The stake address is derived entirely in your browser
The wallet already hands back the reward address as plain hex bytes - this function turns
those bytes into the familiar stake1… form, entirely on your device, following
Cardano's own CIP-19 address format. No private key, seed phrase or signature is involved at
any point.
// CIP-19: a mainnet reward/stake address is always 29 bytes (1 header
// byte + 28-byte credential hash), header byte 0xE1 (type 14 = stake
// credential, network tag 1 = mainnet). Anything else (wrong length,
// testnet address, a non-reward address type) is rejected rather than
// guessed at, since this pool and this widget are mainnet-only.
function rewardAddressHexToBech32(hex) {
const bytes = hexToBytes(hex);
if (bytes.length !== 29) throw new Error("Unexpected reward address length");
if (bytes[0] !== 0xe1) throw new Error("Not a mainnet stake address");
return bech32Encode("stake", bytes);
}
3. Only that public address is ever sent anywhere
That address - public information, the same one any Cardano block explorer would show for this wallet - is the only thing sent off your device, in a request to this site's own server. Nothing else about the wallet is included.
fetch(PORTFOLIO_PROXY_URL, {
method: "POST",
signal,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ stake_address: stakeAddress }),
})
4. The server only ever asks Koios, a public Cardano data provider
The server-side endpoint that receives that address queries exactly these three read-only Koios API endpoints and returns the combined result - the same public on-chain data any block explorer shows for any stake address.
const KOIOS_ACCOUNT_INFO_URL = "https://api.koios.rest/api/v1/account_info";
const KOIOS_ACCOUNT_ASSETS_URL = "https://api.koios.rest/api/v1/account_assets";
const KOIOS_ASSET_INFO_URL = "https://api.koios.rest/api/v1/asset_info";
5. Token prices are estimates from DexHunter - or honestly absent
For the tokens the wallet holds, this site's server asks the DexHunter DEX aggregator for a current ADA price per token. Many native tokens have no liquid market and therefore no price - those rows say "Price data not available" instead of showing a guessed number, and they are left out of the portfolio total (which says so). Every value is a market estimate, not a quote you could necessarily sell at.
6. What the code never does
Across the files behind the Portfolio page, none of the following ever appears:
signTx, signData, submitTx, or
getBalance() (the CBOR-encoded
balance method the wallet API also offers, deliberately unused here). Every value shown on
that page - stake address, token names, error messages - is written with
.textContent, never innerHTML, so nothing returned by a wallet or
the network can render as active markup.
See also the Terms of Use.