From c3740a91b206526fab86ae58a4fbb79d4cf0299b Mon Sep 17 00:00:00 2001 From: jwinterm Date: Sun, 19 Jul 2026 16:47:02 -0400 Subject: [PATCH] docs: bring privacy + terms current with v0.3 - Privacy: add Nostr identity + name@smirk.cash, encrypted messaging, and IP-hashing sections; note the self-hostable backend (your data goes to that operator, not us). Correct the BTC/LTC description: addresses are queried against Electrum/Fulcrum servers, not mempool.space/litecoinspace.org. - Terms: usernames/identity, reporting unlawful content, DMCA, and relay/messaging abuse terms for v0.3. - smirk.d.ts: SmirkPaymentRequest.amount is a human decimal amount, not atomic units (matches the dapp protocol after the decimal-amount fix). --- src/app/privacy/page.tsx | 70 ++++++++++++++++++++++++++++++----- src/app/terms/page.tsx | 80 +++++++++++++++++++++++++++++++++++++++- src/types/smirk.d.ts | 4 +- 3 files changed, 142 insertions(+), 12 deletions(-) diff --git a/src/app/privacy/page.tsx b/src/app/privacy/page.tsx index 14615ce..edb158d 100644 --- a/src/app/privacy/page.tsx +++ b/src/app/privacy/page.tsx @@ -36,9 +36,12 @@ export default function Privacy() { Smirk is published by Such Software LLC, a single-member limited liability company organized under the laws of the Commonwealth of Pennsylvania, United States ("Such Software," "we," "us," or "our"). This policy - explains what stays on your device, what our backend receives to power tipping and - balances, and which independent third parties see what. It applies to the Smirk browser - extension, desktop application, and this website (smirk.cash). + explains what stays on your device, what our backend receives to power identity, + balances, tipping, and optional messaging, and which independent third parties see + what. It applies to the Smirk browser extension, desktop application, and this website + (smirk.cash). Smirk's v0.3 backend is open source and self-hostable: you can run + your own instance (or use another operator's), in which case the backend data + described here goes to that server, not ours.

{/* Section 1 */} @@ -101,9 +104,10 @@ export default function Privacy() {

D. Bitcoin & Litecoin Public Addresses

To show your BTC and LTC balances and broadcast your transactions, our backend - forwards your public wallet addresses to mainstream blockchain - indexers (e.g. mempool.space for Bitcoin, litecoinspace.org for Litecoin). - These are the same indexers most non-custodial wallets use. + queries Electrum/Fulcrum servers with your public + wallet addresses. The default configuration uses public Electrum servers, the same + kind most non-custodial wallets use; a self-hosted operator can point at their own + node instead.

+ +

H. Nostr Identity & name@smirk.cash

+

+ Smirk v0.3 gives your wallet a Nostr identity — a public key + ("npub") derived from your seed. If you choose a Smirk username and link your + npub, our backend stores that username ↔ npub mapping and + publishes it in a public NIP-05 directory at{' '} + /.well-known/nostr.json, so others can verify you as{' '} + name@smirk.cash and route messages to you. +

+ + +

I. Encrypted Messaging (Nostr Direct Messages)

+

+ Smirk v0.3 supports end-to-end encrypted direct messages over the + Nostr protocol (NIP-17 "gift-wrapping"). Messages are encrypted on your device + before they leave it. They travel through Nostr relays — public + relays and, optionally, one operated by Such Software — which carry only ciphertext + they cannot read. +

+ + +

J. IP Addresses

+

+ Like any internet server, our backend receives your device's IP address with + each request. We store only a salted, one-way hash of it, and only + for rate-limiting and abuse prevention (for example, throttling automated signups). + We do not use it to track you or link it to your wallet, and self-hosting avoids + sharing it with us at all. +

{/* Section 3 */} @@ -162,6 +205,12 @@ export default function Privacy() { No Sale of Data: We do not, and will never, sell your social handles, transaction history, or view key data to third parties. +
  • + Legal requests: We may access, preserve, or + disclose the limited data we hold to comply with valid legal process or applicable + law, or to report unlawful content (such as child sexual abuse material) as the law + requires. +
  • @@ -184,12 +233,15 @@ export default function Privacy() { @@ -198,7 +250,7 @@ export default function Privacy() {

    4. Third parties you choose to enable

    Some features connect you to independent third parties operated by others, - not by us — Trocador for swaps, the blockchain indexers noted above, and any + not by us — Trocador for swaps, the Electrum servers noted above, and any site you connect to through the window.smirk interface. Those endpoints see whatever your interactions with them entail, and each has its own privacy policy. We neither control nor monitor those connections, and we @@ -235,7 +287,7 @@ export default function Privacy() {

    For data held by third parties you've used through Smirk (Trocador, node - operators, blockchain indexers), contact those providers directly using the + operators, Electrum servers), contact those providers directly using the privacy contact in their respective policies.

    diff --git a/src/app/terms/page.tsx b/src/app/terms/page.tsx index bd2bc29..c981873 100644 --- a/src/app/terms/page.tsx +++ b/src/app/terms/page.tsx @@ -33,7 +33,8 @@ export default function Terms() { Smirk is non-custodial wallet software published by Such Software LLC. You hold your own keys; we never take custody of your coins and cannot recover them for you. Some features route you to independent third - parties (Trocador for swaps) that have their own terms. Crypto is risky + parties (like Trocador for swaps) that have their own terms, and Smirk can + send end-to-end encrypted messages over the Nostr network. Crypto is risky and largely irreversible. The software is provided "as is." These are the details.

    @@ -176,7 +177,10 @@ export default function Terms() { our permission, or to introduce viruses, malware, or other harmful code;
  • to infringe others' rights, impersonate others, provide false - information, or harass, abuse, or harm others.
  • + information, or harass, abuse, or harm others; +
  • to create, store, send, request, or distribute content that is unlawful — + including child sexual abuse material (CSAM) or any content that sexually + exploits or endangers a minor, and content that infringes intellectual property.
  • We may suspend, restrict, or terminate your access to the Software (or to @@ -185,6 +189,44 @@ export default function Terms() { your license does not affect your ability to access your funds with your seed phrase in other compatible wallet software.

    +

    + Usernames and identity. A Smirk username + (which backs your name@smirk.cash handle) is assigned on a first-come basis and + gives you no ownership of the name. You may not choose a username that impersonates + another person or project or that infringes a trademark, and we may refuse, reclaim, + or reassign usernames — including reserved names — to prevent impersonation or abuse. + Your Nostr keys are derived from your seed and remain yours regardless. +

    +

    + Reporting unlawful content. We report child + sexual abuse material to the National Center for Missing & Exploited Children + (NCMEC) and cooperate with law enforcement and valid legal process as required by + law. To report unlawful content or abuse, or to send a copyright or other legal + notice, contact{' '} + + legal@such.software + + . +

    +

    + Copyright (DMCA). Such Software LLC complies + with the Digital Millennium Copyright Act. If you believe content made available + through a service we operate infringes your copyright, send a notice containing the + elements required by 17 U.S.C. § 512(c)(3) to our registered Designated Agent: +

    +

    + Such Software LLC — DMCA Designated Agent
    + [mailing address, as registered with the U.S. Copyright Office]
    + + legal@such.software + +

    +

    + We remove or disable access to material in response to valid notices and, in + appropriate circumstances, terminate repeat infringers. If you believe your content + was removed in error, you may submit a counter-notification under § 512(g) to the + same contact. +

    {/* Section 7 */} @@ -233,6 +275,18 @@ export default function Terms() { and we are never in custody of or in the settlement path for the swapped funds, we act as a referrer, not as a money transmitter or exchanger.

    + +

    7.2 Additional providers

    +

    + We may add other independent swap, exchange, or fiat on-ramp/off-ramp providers + (and, in the future, peer-to-peer swap functionality) within the Software. Each such + provider is operated by others, not by us, and your use of it is governed by that + provider's own terms and privacy policy. Some providers — particularly fiat + on-ramps — may require identity verification (KYC) and may decline service under + their own policies and applicable law; any such verification is between you and that + provider, and Such Software does not perform it or receive that verification data. We + are not the counterparty to, and take no custody in, those transactions. +

    {/* Section 8 */} @@ -268,6 +322,27 @@ export default function Terms() { .

    + +

    9.1 Messaging and the Nostr relay

    +

    + Smirk supports optional end-to-end encrypted direct messages over the Nostr protocol. + Messages are encrypted on your device; relays carry only ciphertext. Such Software may + operate a Nostr relay that the Software can use, alongside independent public relays. A + relay we operate transmits and briefly stores encrypted messages so your devices can + retrieve them; we do not read, and cannot read, their contents. +

    +

    + Because a relay is a shared service, we may rate-limit, + refuse, or remove events and restrict who may publish, to protect the service + and other users from spam, abuse, or unlawful use, and to comply with the law. We do + not guarantee message delivery, ordering, or retention, and we are not the author of, + and are not responsible for, messages that users send. You are solely responsible for + the messages you send, and you must not use messaging for unlawful, abusive, or + infringing content or for spam. Because gift-wrapped messages are encrypted end to + end, we cannot read or proactively screen their contents; we act on reports and valid + legal process, and report unlawful material as described in Section 6. You may use + other Nostr relays instead of ours. +

    {/* Section 10 */} @@ -493,6 +568,7 @@ export default function Terms() {
  • Non-Custodial: You control your keys. We cannot access or recover your funds.
  • Your Responsibility: Back up your recovery phrase. Losing it means losing your funds forever.
  • Swaps: Executed by Trocador, not us. We earn a ~1% referral commission that's already baked into the quoted rate.
  • +
  • Messaging: Optional encrypted DMs over Nostr. Relays carry only ciphertext; we may rate-limit or refuse abuse, and aren't responsible for what users send.
  • Irreversible: Cryptocurrency transactions cannot be cancelled or reversed.
  • No Guarantees: We provide the service as-is. Use at your own risk.
  • Be Legal: Don't use Smirk for illegal activities.
  • diff --git a/src/types/smirk.d.ts b/src/types/smirk.d.ts index 0c321d8..52abfd5 100644 --- a/src/types/smirk.d.ts +++ b/src/types/smirk.d.ts @@ -45,7 +45,9 @@ interface SmirkClaimResult { interface SmirkPaymentRequest { asset: 'btc' | 'ltc' | 'xmr' | 'wow'; - amount: string; // Atomic-units string (avoid float) + amount: string; // Human decimal amount in whole coins, e.g. "9" or "9.5". The + // wallet converts to atomic units using the asset's decimals; do + // NOT pre-compute atomic units yourself. address: string; memo?: string; }