← Back to Bitcoin Education Archive

Privacy Policy

Last updated: October 28, 2026

Our commitment: We do not sell, share, or monetize your data. Ever.

We collect the bare minimum needed to power your experience. No tracking, no ads, no third-party analytics.

Safety monitoring

To protect users from scams, phishing, impersonation, spam, and abuse, we may automatically scan chat, direct messages, and account activity. That includes automated anti-abuse checks and bot detection. A moderator may review content those checks flag. While a review is open, we may temporarily restrict an account, or a feature such as direct messages.

Messages are also checked in your browser before they are stored, as described in Sections 9 and 10. We do not send that text to an outside moderation company. Bot checks include Cloudflare Turnstile on sats claims and a Lightning-address reset. We use App Check to help block automated abuse. A flagged direct message can still be delivered, with a warning. Reports you file are stored so a moderator can review them. We do not publish how the anti-abuse checks decide.

Features and the data they use

The tables later on this page are the detailed record. This section says, in plain language, what the current app actually stores for the features below.

Referral tracking

An invite link can attach a referral to a new account: the code, who shared it, and whether it is still pending. At signup we keep a one-way, non-reversible fingerprint of your network address, kept 90 days, in a server-only referral_signals record. Other users cannot read it. Deleting the account deletes that record. The raw address is not stored in that referral record. A referral is paid only after the checks in the Terms, including account age, active days, and a verified sign-in. Each verified referral adds one to referralCount for the person who shared the link.

Referral tiers

Badge tiers count verified referrals: friends whose referral was paid after they reached Maxi. The tiers are 1, 5, 10, 25, 50, and 100. The server grants those badges from referralCount. The invite card shows how many friends were invited and how many reached Maxi.

Two-factor authentication

You can turn on an authenticator app. We store an encrypted TOTP secret on the account. After a successful code you can remember this browser for 30 days, counted from the day you checked the box. That record stores a hash of a random device token, a short browser and operating-system label, and the times it was added, last used, and when the 30 days end. It does not store an IP address. The token itself stays in this browser. Turning off two-factor authentication, using a recovery code, the in-app password reset, or an admin reset revokes every remembered device.

Profile saved on this device

A display copy of your profile is saved on this device. It never skips 2FA. It is removed on sign-out, when a different account signs in, and when you delete the account. It is not a second copy we keep on our servers.

Account deletion

Settings → Account deletes the account on the server after you confirm your username, including the Firebase sign-in. Section 11 lists what is removed and what we keep. This browser then clears the display copy saved on this device.

App Check

We use App Check to help block automated abuse.

Lightning sats

A claim pays out over Lightning to the address saved on the account. We store the amount, the time, a truncated invoice (the first 50 characters), and the daily and lifetime totals. The faucet log at claim time can include an IP address and a device fingerprint hash. That log is separate from the referral fingerprint above. Payouts we send are resolved to an invoice and paid through our Lightning wallet. We do not receive your seed or private keys.

Nacho

A saved answer is tried in your browser first. If that is not enough, the question goes to Cloudflare Workers AI, which runs Meta Llama 3.3 70B Instruct. We send your question, up to the last 8 turns of the recent Nacho chat, your display name, rank, and point total, your language, whether simple-explanation mode is on, a knowledge snippet, and matching app-feature text. A Firebase sign-in token may be attached to the request. Email, Lightning address, and wallet are not put in the prompt. A question in a topic thread sends the question text and a short topic excerpt, without your username or user id. We do not use your questions to train our own models.

Timechain TV and Bitcoin Beats

Timechain TV plays videos with YouTube's embedded player, including youtube-nocookie embeds. YouTube may collect data under its own policy. We do not send your account id to YouTube. A YouTube link in a topic or in chat can be shown the same way. Bitcoin Beats does not embed YouTube. It plays audio you upload, plus embedded players from Wavlake, Twitch, and LNBeats. We do not send your account id to Wavlake. Uploaded tracks are public.

Share cards and referral links

A share card is built on this device. The text is a title, a short line, and one link that includes your referral code. You can pass that text to your phone's share sheet, or to X or Telegram. Sharing does not award XP, sats, or tickets. We store a short shareCardsShown note on the account so the same card is not offered again. The referral code is stored on the account, and that is what the invite link carries.

Satoshi's Favor

A hash attempt is recorded on the server with your account id, the public username from your profile, the hash value, whether it won, and the window it belongs to. A missing name is left empty, and the app can show Anon. The account id is not included in the public response. Cooldown timestamps stay on the server. The name that is saved comes from your public profile, not from a name typed into the hash request.

Peers, keys, and ciphers

A peer is a mutual follow. Requests and accepted peers are stored on the account. Gifts exchanged with a peer can raise a friendship level that the server records. A key you send stores the sender. When an accepted peer opens a matching cipher with a key you sent, the server can pay the same prize to both of you. The share record stores the sender's account, the opener's display name, and the prize. It does not store the opener's account id.

Leaderboard

The public leaderboard shows usernames, points, and rank on the all-time, weekly, and monthly boards. The username on that board is the public name on your profile. Online status can appear there unless you turn presence off in Settings.

Guest accounts

Continue as a guest is an anonymous Firebase sign-in. It has no email. A guest can look around. The daily spin, Say hi, posting in Global Chat, direct messages, and sats claims stay off until you sign in with a real account. If you later sign in with a login that is new, that same guest account is upgraded. If the login already belongs to another account, the server can copy the guest's progress once, using a code that expires after 30 minutes. A guest's welcome-tour flag stays in this browser only.

1. What We Collect

Account Data (stored in Firebase)

DataPurpose
UsernameDisplay on leaderboard, PlebTalk forum, LightningMart, and direct messages. The name is checked and reserved on the server (unique, 3 to 20 characters, letters, numbers, underscores, hyphens, or periods, no spaces, no HTML, no profanity, and not a reserved impersonation). A lowercase copy is stored so two people cannot claim the same name. You can rename once a day. A released name is held for you for 30 days (usernameChangedAt). When a name that contained a space is converted, the server keeps a migration record of the old name, the new name, and the date (username_migrations) until the account is deleted, and it stores the previous name on the public profile (usernameMigratedFrom) so an older mention can still open it. That conversion also sets a one-time free rename (usernameFreeRename) that skips the 24 hour wait once and is cleared when you use it. A later rename, including that free change, removes the previous name from your account and from the public profile. The browser cannot set the migration record, the previous name, or the free-rename flag.
Welcome tour seen (introSeen, introSeenAt)Remember that a signed-in user has already seen the welcome tour, so it is not shown again. Guests store this only in this browser.
First-quest progress (onboardingQuest)Which first-quest steps are done, and the XP and orange tickets the server granted for them. The browser cannot mark the quest complete or set the reward.
Nacho quest note (onboarding evidence)For the first quest only: that you asked Nacho something, the length of that question, and the time. The question text is not stored in this record.
Guest link (guestLinkNonce, guestLinkNonceAt, mergedInto, mergedFromGuest)A single-use code, valid for 30 minutes, that lets the server copy a guest session onto an existing account when that login is already in use. Signing in with a new login upgrades the guest account itself instead. An account can receive one guest copy. The code and the time it was issued are removed after a link or when it expires. Linking an email or Google sign-in from the Account tab is separate: it is added to the account you are using, and a sign-in that already belongs to another account is not copied over.
Email (if provided)Account verification via magic link sign-in. Linking an email from the Account tab uses Firebase sign-in linking. This flow does not write the email onto your profile from the browser.
Sign-in providerGoogle, Twitter/X, GitHub, Facebook, Nostr (NIP-07), Lightning (LNURL-auth), email link, or a guest (anonymous) session. A guest or Lightning-only account can link an email or Google sign-in from the Sign-in methods card. That sign-in stays on the same account. If it already belongs to another account, the two accounts stay separate.
Profile pictureOptional avatar upload (resized to 128px JPEG, stored in Firestore)
TOTP 2FA secretEncrypted TOTP secret for two-factor authentication (if enabled)
Remembered deviceIf you check “Remember this device for 30 days” after an authenticator code, we store only a hash of a random device token (not the token), a short browser and operating-system label, and the times the device was added, last used, and when the 30 days end. The 30 days are counted from the day you checked the box and do not slide forward. We do not store an IP address on that record. This browser keeps the token. You can remove a device, or sign out other devices, in Settings. Signing out revokes this device. At most 10 devices stay remembered; adding another removes the oldest. Turning off two-factor authentication, using a recovery code, the in-app password reset, or an admin reset revokes every remembered device right away. A password change finished outside the app, including a reset email, also stops devices that were remembered before that change. Clients cannot read or write these records. Expired device and fresh-code records are deleted on a schedule.
Points & rankGamification and leaderboard
Streak & visit countDaily streak tracking and visit bonus
Channels visitedProgress tracking and exploration map
Orange TicketsGiveaway eligibility and referral rewards
Referral codeReferral program tracking
Giveaway entry (Lightning address)Prize distribution if you win
Hidden badges earnedBadge/achievement tracking
Weekly XP (weeklyXP)Weekly leaderboard ranking (resets every Monday)
Quiz stats (lastQuizDate, quizStreak, quizAnswered, quizCorrect)Server record of the quiz day, streak, questions answered, and correct answers. The browser cannot set these.
Quest completions (quest_completions)Quiz parts already finished, so that part cannot pay XP again
Quest passes (quest_passes)Quiz parts scored high enough to count once toward quest progress
XP bank payout (xpBankPayoutApplied, xpBankPayoutAmount, xpBankPayoutBank, xpBankPayoutAt)One-time record if leftover XP from before the shared daily cap is paid. New XP is not saved past the cap.
Monthly XP (monthlyXP)Monthly leaderboard ranking (resets on the 1st of each month)
Nook inventory (streakFreezes, hintTokens, hashBoosters, doubleXPCharges, bonusSpins, raffleEntries)Consumable item counts for Nacho's Nook shop
Owned cosmetics (ownedCosmetics)List of purchased cosmetic items (Profile Frame, Chat Flair, Pinned Badge, Nacho Skin, Second Mining Rig)
Double XP expiry (doubleXPExpiry)Tracks when Double XP multiplier expires
Shop purchase history (shop_purchases subcollection)Server-side log of Nook purchases for audit and dispute purposes
Scholar certification statusCertification tracking
FavoritesSaved channel list sync across devices
BookmarksSaved channel bookmarks synced across devices via Firestore
Social links (Twitter/X, Instagram, TikTok, GitHub, Nostr)Display on public profile (optional, user-provided)
Contact email (if provided)Display on public profile for contact (optional, separate from sign-in email)
Online presence (lastSeen timestamp)Show online/away/offline status on leaderboard and profiles (can be disabled in Settings)
Blocked users listSynced block list to prevent unwanted messages across devices
Faction (Cyber Hornets or Honey Badgers)Displayed publicly on profile and leaderboard; used in community charity and challenge leaderboards
Peer connections (peer_requests subcollection)Mutual-follow social graph — sent/received peer requests and confirmed connections
Price prediction history (predictions subcollection)Daily up/down predictions, resolution status, accuracy streak
Say hi progressWhether you armed and claimed the daily greeting, and which chat message was used
Gifts, keys, and locked ciphersVirtual items on your account, including keys you send to peers. A sent key stores the sender on the server. A cipher-share record stores the sender's account, the opener's display name, and the prize so the same open is not paid twice. It does not store the opener's account id
Notification preferencesWhich push categories you have turned on or off, including a master off switch
Web push tokensA token per device you opt in, so we can deliver push notifications. Older accounts may also have a single token on the profile

Direct Messages (stored in Firebase)

DataPurpose
Message textDeliver private messages between users
Sender & recipient IDsRoute messages to correct users
TimestampsDisplay message times, sort conversations
Unread countsShow unread badge notifications
⚠️ Direct messages are private between participants but are stored on Firebase servers. We may access messages when investigating abuse reports. Messages are not end-to-end encrypted.

PlebTalk Forum (stored in Firebase)

DataPurpose
Posts & repliesCommunity discussion
Author username & IDAttribution and profile linking
UpvotesContent ranking

LightningMart Marketplace (stored in Firebase)

DataPurpose
Listing details (title, description, price, images)Display marketplace listings
Seller username & IDAttribution and profile linking
Buyer-seller messagesFacilitate transactions
Uploaded imagesStored as base64 in Firestore (max 5MB, resized to 800px)

Bitcoin Beats (stored in Firebase)

DataPurpose
Audio file (Firebase Storage or base64)Store and play user-uploaded music tracks (max 50MB each via Storage)
Track metadata (title, artist, genre)Display track information in the music player
Album/EP metadata (album title, type, year, track number)Group tracks into albums or EPs for organized display
Cover art (image file)Album/track artwork shared across grouped uploads
Play countTrack popularity and display play statistics
LikesTrack popularity and user preferences
Author ID & usernameAttribution and track ownership
Copyright confirmationRecord that uploader confirmed rights ownership
Uncensored titles preference (beatsShowUncensored)Signed-in choice to show strong language in Bitcoin Beats titles, artist names, album names, and descriptions. Stored on your profile and in this browser (btc_beats_uncensored). Guests start censored and that switch is not saved.
⚠️ Music uploads are public. Any audio you upload to Bitcoin Beats (including bulk album/EP uploads of up to 20 tracks) is visible and playable by all users. You must own the copyright or have permission to upload. Third-party tracks are shown with the source credit, such as the artist, the feed title, or Wavlake. A takedown request goes to info.603btc@gmail.com. See our Terms of Service for the copyright and takedown policy. We do not send your account id to Wavlake.

Global Chat (stored in Firebase)

DataPurpose
Chat messagesDisplay in the public global chat room
Sender username & IDAttribution and user identification
TimestampsMessage ordering and display
Reply referencesThreading replies to specific messages
⚠️ Global Chat messages are public. All messages in Global Chat are visible to every user on the site in real time.

DJ Mode (stored in Firebase)

DataPurpose
DJ username & IDDisplay who is currently DJing
Current track info (title, artist, audio URL)Broadcast now-playing info and stream audio to listeners
Playback positionSync listener playback to DJ's current position
Sound effect eventsRelay DJ sound effects to listeners in real time
DJ queueManage turn-based DJ booth access

Online Presence (stored in Firebase)

DataPurpose
User ID & usernameIdentify who is online
Last seen timestampDetermine active users (within last 3 minutes)

Presence data is automatically deleted when you leave the site. The online user count is displayed next to the Global Chat icon.

PvP lobby

When you wait for a PvP match, your username is shown to other signed-in users. Nacho may post that username in Global Chat, and that post can be mirrored to the linked Telegram group. Your mute preference for in-app lobby alerts (pvpAlertsMuted) is stored on your account. PvP lobby push notifications are off unless you opt in, and when enabled they follow the notification frequency described in Settings.

IRL Sync Events (stored in Firebase)

DataPurpose
Event title, date, locationDisplay and search for meetups
Event description & linkProvide event details to attendees
Cover photo (Firebase Storage)Display event imagery (max 3MB)
Host user ID & display nameAttribution and event management
Attendee list (user IDs)RSVP tracking and attendance count
⚠️ IRL Sync events are public. Event details (title, date, location, description, host name, attendee count) are visible to all users. Your user ID is added to the attendee list when you RSVP. 603BTC LLC is not responsible for events organized by users — see our Terms of Service for liability details.

In-App Notifications (stored in Firebase)

DataPurpose
Notification type & messageAlert you about sats claims, new DMs, streak milestones, and exploration achievements
Sender & recipient IDsRoute notifications to the correct user
TimestampsDisplay notification times and expiration
Read/unread statusBadge count and notification management

Community Statistics (stored in Firebase)

DataPurpose
Aggregate counters (channel reads, quests, spins, chats, PVP matches)Display community-wide activity stats — no individual user data
Badge distribution countsShow how common each badge is across real, non-guest accounts. The public stats document has totals only, never a list of who earned a badge
User countDisplay total registered users

Community statistics are fully anonymous aggregate counters. They do not contain any personally identifiable information. Activity counters used for badges (chat, marketplace, polls, visits, and similar actions) are stored on your server profile and are not included in the public distribution document. A daily poll vote is stored as a server record for that day so the vote can be counted once.

A badge the server awards you is posted publicly in GGs chat with your username. That announcement is separate from the aggregate badge distribution counts above.

Proof of Walk / Strava Integration (stored in Firebase)

DataPurpose
Strava OAuth token (stored server-side in Cloud Function only)Authorize API calls to Strava on your behalf — never stored in Firestore or exposed to the client
Athlete name (display only)Confirm which Strava account is connected on the Proof of Walk dashboard
Activity metrics (steps, distance, duration per session)Calculate and award points for physical activity
Daily activity stats (proof_of_walk_stats subcollection)Track daily totals to enforce per-day point limits
Individual activity records (proof_of_walk subcollection)Log synced activities for audit and badge progress

Strava data is only collected while your Strava account is connected. Disconnecting Strava from the Proof of Walk settings page immediately and permanently deletes all stored Strava data (integration record, activity logs, and daily stats) from Firebase. We do not access GPS routes, heart rate, social graph, or any Strava data beyond activity metrics.

Peers (stored in Firebase)

DataPurpose
Sender & recipient user IDsRoute peer requests to the correct users
Request status (pending / accepted)Track the state of each peer connection
TimestampDisplay when a connection was made

Peer connection data is stored in the peer_requests Firestore collection. Your peer list is visible on your public profile. You can remove a peer or withdraw a request at any time from your profile settings.

Price Predictions (stored in Firebase)

DataPurpose
Prediction (up/down), price at timeTrack daily prediction accuracy
Accuracy stats (total, correct, streak)Display prediction stats on profile
Active predictionsPending predictions resolved server-side via Cloud Function every 6 hours

Telegram Bridge (via Cloud Function)

GGs chat and Global Chat messages are mirrored to the public Telegram group, and messages from that group can appear in Global Chat. The copy includes your username and the message text. It can also include an image or GIF link and a short quote of the message you replied to. Your account id is not sent to Telegram. The server keeps a record of the mirrored line for up to 7 days so it can retry a failed send or remove the Telegram message, then deletes that record. Nacho posts that tag a username are mirrored the same way. People in the Telegram group can see the username and the text. Badge awards are posted publicly in GGs chat with your username, and those posts are mirrored with the rest of GGs chat.

Bitcoin Dashboard / Top Indicators

The Bitcoin Dashboard fetches public market data from third-party APIs including CoinGecko, ColintalksCrypto (CBBI), alternative.me (Fear & Greed), mempool.space, and Bitbo.io. No user data is sent in these requests — they are read-only public API calls. Indicator data may be cached in your browser's localStorage for up to 1 hour.

PVP Battles (stored in Firebase)

DataPurpose
Battle results & scoresTrack PVP battle history and rankings
Opponent pairingMatch players for competitive quizzes

Nacho's Trails (stored in Firebase)

DataPurpose
Trail progress (channels completed)Track which channels you've read in each guided learning path
Exam scores & answersGrade trail exams (25 questions each) and award badges/points
Trail badges earnedTrack Meadow/Mountain/Summit completion

Bitcoin Buddy (stored in Firebase)

DataPurpose
Username & experience levelMatch teachers with learners
Goal (Learn or Teach)Complementary matching logic
Optional intro messageShared with matched buddy to start conversation
Timezone estimateProximity matching preference

Buddy pool entries are deleted when matched or after 30 days of inactivity.

Shareable Certificates (stored in Firebase)

DataPurpose
Certificate ID & verification URLGenerate a public shareable link to your Scholar Certification
Username, score, dateDisplay on the public verification page

Certificate verification pages are publicly accessible by design — they prove your achievement.

Sats vs Bits Vote (stored in Firebase)

DataPurpose
Vote (sats or bits)Community denomination poll
Device fingerprint hashAnti-cheat: prevent duplicate voting (hashed, not personally identifiable)

Your First Bitcoin Purchase (local only)

DataPurpose
Selected regionShow region-appropriate exchange recommendations
Step progressRemember where you left off in the guided flow

No purchase data, exchange credentials, or financial information is collected or stored. Referral links redirect to third-party sites governed by their own privacy policies.

Meetup-in-a-Box (no data collected)

Template downloads are generated client-side as text files. No data is sent to our servers.

Reports (stored in Firebase)

DataPurpose
Reporter & reported user IDsProcess abuse reports
Report reasonCategorize and prioritize reports
TimestampTrack report timeline

Timechain TV (YouTube & Local Data)

Timechain TV embeds content using standard YouTube IFrame embeds. When you use the video player, YouTube may collect data according to their own privacy policy. We do not transmit your identity to YouTube. Locally in your browser, we store your 'last station' and 'mute/autoplay' preferences so your experience is preserved between visits.

Third-party content & opinions. All videos shown on Timechain TV are publicly embeddable third-party uploads from YouTube. Bitcoin Education Archive does not own, host, verify, or endorse the content. Opinions, price predictions, investment theses, and statements expressed belong solely to the individual creators and speakers — not to us. Nothing on Timechain TV is financial, investment, legal, or tax advice. See our Terms for the full disclaimer.

Anonymous live-viewer presence. To show the live viewer counter on each channel, your browser writes a small presence record to our database every ~30 seconds containing only: (1) the channel id you are currently watching, and (2) a server timestamp. For signed-in users this record is keyed by your auth UID; for anonymous users it is keyed by a randomly-generated local id (stored in your browser's localStorage as tctv_viewerId). The record is deleted when you leave Timechain TV or close the tab, and automatically expires after ~65 seconds of inactivity. No IP, location, or identifying information is stored in the presence record.

Watch-time tracking. Minutes you watch are counted in this browser for badges. Signed-in viewers also add one minute at a time to a site-wide watch counter that is not labeled with your name. The first time you tune a channel on a given day, we may store a view record with the channel id, the day, and your viewer id. Clear local watch time from your browser settings. Presence heartbeats are described above and expire on their own.

Daily watch-reward heartbeat. If you are signed in and use the daily "Watch 10 minutes of Timechain TV" challenge, the app sends a heartbeat about once a minute while the YouTube player is playing and this tab is visible. The server stores one ledger for your account (tctv_watch/{uid}) with: the reward day (the UTC date, with the day changing at 5:00 AM UTC), credited seconds for that day (never more than 600), the server time of the last credited heartbeat, the day the reward was granted, and whether the first reward notice was already shown. We store this so we can grant 100 XP and 1 orange ticket once per reward day, and so your browser cannot invent the elapsed time, the day, or the reward. Each heartbeat can add at most about one minute, measured on the server. A pause, a hidden tab, a closed player, or a gap longer than about three minutes does not fill in the missing time. Other open tabs share the same ledger and do not add extra credit. You can read your own progress. Only the server can write the ledger. It is separate from the short-lived live-viewer presence record above, and separate from the localStorage and cumulative watch time used for badge tracking.

Local Data (stored in your browser only — never sent to us)

DataPurpose
Theme preferenceDark/light mode
Language preferenceTranslation setting
Audio/sound settingsSound effect preferences (site + Nacho)
Nacho interaction countFriendship level calculation
Nacho questions askedQuestion badge tracking
Nacho equipped accessory & colorsCloset/outfit selection and customization
Nacho chat history (Nacho Mode)Conversation continuity within sessions
Nacho question analyticsLast 100 questions (local only, helps improve answers)
Nacho trivia progressWhich trivia questions you've answered
Blocked users (local copy)Fast block checking without server round-trip
Referral code (pre-signup)Stores referral link code before account creation
Pending signup dataTemporarily stores username/email during email verification
Visited channelsCheckmarks and exploration map (also synced to Firebase if signed in)
BTC price cacheCached price for marketplace USD conversion
Liked tracks (Bitcoin Beats)Remember which tracks you hearted
Chat message countTrack total messages for chat badges
Chat streak & last chat dateDaily chat streak tracking for rewards
DJ sets countTrack total DJ sessions for DJ badges
DJ songs broadcast countTrack songs broadcast for DJ badges
DJ tune-in countTrack how many DJ sets you've listened to
Nacho position and minimized stateWhere you placed bubble Nacho (btc_nacho_position), where you placed the restore button (btc_nacho_toggle_position), and whether he is minimized (btc_nacho_hidden). These stay in this device's localStorage only and are never sent to the server.
First Purchase step & regionResume buying guide where you left off
Trail progress (local cache)Fast load of trail status (also synced to Firebase)
NWC connection stringStored in sessionStorage (cleared when tab closes) for Lightning wallet connection

Device, platform, IP, and push

DataPurpose
Web push token, per deviceDeliver optional notifications. Stored when you opt in. Removed or ignored when you turn push off or the token is no longer valid
Notification category choicesHonor the switches in Settings. A master switch turns push off
Device and browser signals, stored as a hashAbuse checks on sats claims and some votes. The hash can reflect signals such as user agent, screen size, language, and timezone. It is not shown on your public profile
IP addressRate limiting and abuse prevention on sats claims, Nostr and Lightning sign-in, and some votes. Operator audit logs for admin actions can also store an IP address and user agent. We do not put your IP on your public profile

We do not use a third-party analytics product, advertising network, or tracking pixel. Thumbs up or down on a Nacho answer can be stored on our servers as feedback. We do not sell that feedback. We do not collect your real name, precise location, or browsing history outside the Site. The financial details we store are the ones you type in, such as a Lightning address for withdrawals and giveaways. A withdrawal address stays on the account. A one-time reset marker records that a fresh address was saved, and a later change is a support request to info.603btc@gmail.com. We do not receive your wallet seed or private keys.

IP addresses are collected only for multi-account abuse checks: during sats faucet claims, and once at referral signup. The referral IP is not stored in raw form. The server keeps a one-way, non-reversible fingerprint of your network address, kept 90 days, in a server-only record. Other users cannot read it. That record is deleted when you delete your account. IPs are not collected during normal browsing or sign-in.

2. How We Use Your Data

Push notifications

If you turn notifications on, we store a push token for that device on your account. Each device has its own token, and we keep at most 10 devices. The token is used only to deliver the categories you leave on. Turn notifications off anytime in Settings → Notifications, or in your browser or phone settings. Signing out removes this device's token, so the next person on a shared phone does not receive your notifications. If a device already had a push token and you had not turned notifications off, that registration stays on.

3. User Profiles

When you create an account, a public profile is visible to other signed-in users. Your profile displays:

Your email, sign-in provider, and blocked list are never visible to other users.

4. Data Storage

Server-side data is stored in Google Firebase (Firestore), hosted in the United States. Firebase is operated by Google and subject to Google's enterprise security practices and certifications.

Client-side data is stored in your browser's localStorage and in the PWA's service worker cache. This data stays on your device and is never transmitted to us.

Direct messages and forum posts are stored in Firebase Firestore. Messages are not end-to-end encrypted. We may access message content when investigating abuse reports.

5. Third-Party Services

We use the following third-party services:

ServicePurposeData Shared
Firebase AuthenticationAccount sign-inEmail, provider token
Firebase FirestoreData storageAccount data, messages, posts, listings
Firebase Cloud MessagingPush notifications (opt-in)Device token
Google OAuthGoogle sign-inGoogle account email/name
Twitter/X OAuthTwitter sign-inTwitter account info
GitHub OAuthGitHub sign-inGitHub account email
Facebook OAuthFacebook sign-inFacebook account info
Nostr (NIP-07)Nostr sign-in via browser extensionPublic key, signed auth event
LNURL-authLightning wallet sign-inLinking key, signed challenge
QR codesLightning sign-in and payment codes drawn in your browserNone sent to a QR-code website. The code stays on the page
Cloudflare Workers AINacho answers, using Meta Llama 3.3 70B Instruct. A separate weekly summary of public posts may use another Llama model on CloudflareYour question, a short recent Nacho chat, display name, rank, point total, language, simple-explanation flag, a knowledge snippet, and matching app-feature text. A Firebase sign-in token may be attached to the request. Email, Lightning address, and wallet are not put in the prompt
Cloudflare TurnstileBot check on sats claimsThe challenge token. Cloudflare may see connection data under its own policy
Alby (Nostr Wallet Connect)Lightning payouts we send from the faucet and similar rewards. Your own NWC or WebLN wallet, if you connect one, sends tips you chooseFor our payouts: the Lightning invoice we resolve from the address you provide. Your NWC secret stays in this browser and is sent to your wallet, not stored by us
YouTubeTimechain TV video playerWhatever YouTube collects in its embedded player. We do not send your account id to YouTube
WavlakeOptional embedded music player inside Bitcoin BeatsWhatever Wavlake collects in its player. We do not send your account id to Wavlake
mempool.space APILive BTC price, block height, feesNone (read-only public API)
GitHub PagesWebsite hostingStandard web server logs
CoinGecko APIMarket data, price charts, dominanceNone (read-only public API)
ColintalksCrypto (CBBI)On-chain indicator dataNone (read-only public API)
alternative.meFear & Greed IndexNone (read-only public API)
Bitbo.ioETF flow dataNone (read-only public data)
RainbowChart.comRainbow chart formula referenceNone (formula only, no API calls)
Firebase Cloud FunctionsSecure Telegram bridge, server-side operationsGGs and Global Chat messages (username + text)
Telegram Bot APIMirror GGs chat and Global Chat to the public Telegram groupUsername and message text
Strava APIProof of Walk — read activity metrics (steps, distance, duration) to award pointsOAuth token (server-side only); activity metrics. No GPS routes, heart rate, or social data.
Timechain Arcade / Sat Arcade / RyRacer / Galaxy MindThird-party Bitcoin games embedded in Proof of Play hubNone from us — games open on the third-party site; their own privacy policies apply

We do not use Google Analytics, Facebook Pixel, ad networks, or any tracking/analytics services.

6. Data Sharing

We do not share, sell, rent, or monetize your data with anyone. Data visible to other users includes:

7. Cookies & Local Storage

We take a minimal, privacy-first approach to browser storage. Here is an exact breakdown of what we store and why:

Cookies

We set one first-party cookie under normal operation:

Firebase Authentication may set a short-lived __session cookie to manage your sign-in state. This is an HttpOnly, first-party session cookie. It contains no personal data beyond an opaque auth token and is cleared when you sign out or it expires.

We do not use:

Because we do not use non-essential cookies, you are not required to give cookie consent under GDPR/ePrivacy rules. There is no cookie banner because there is nothing to consent to beyond functional operation.

Browser localStorage

The majority of your in-app state is stored in your browser's localStorage — entirely on your device, never transmitted to us unless you create an account. Examples of what we store locally:

You can clear all localStorage data at any time from your browser settings, which will reset app preferences and cached progress. If you have a signed-in account, your server-side profile (XP, badges, wallet balance, posts) is unaffected.

Service Worker Cache

The app operates as a Progressive Web App (PWA). A service worker caches app assets (scripts, stylesheets, images) on your device for offline access and faster loading. This cache contains only static app files — no personal data. You can clear it via your browser's "Clear site data" or "Clear cache" function.

8. Nacho (AI Mascot) Privacy

Nacho's answers can be wrong. When a saved answer is not enough, the question goes to Cloudflare Workers AI, which runs Meta Llama 3.3 70B Instruct. Cloudflare processes that request under their Privacy Policy. The model is Meta's. We do not use your questions to train our own models. A weekly summary of public posts may use a different Llama model on Cloudflare. That job reads public sources, not your account.

9. Content Moderation & Filtering

All user-generated content (Global Chat messages, forum posts, DMs, usernames, articles) is filtered client-side before submission. No content is sent to external moderation services. Usernames are checked again on the server before they are reserved. Filters include:

Filtering for Global Chat, PlebTalk, DMs, usernames, and articles is performed in your browser. No message content is sent to external moderation APIs or third-party services. Blocked messages are never stored in Firebase.

Topic discussion comments are checked again on the server before they are stored. Hate, scams, spam, shortened links, and invite links are rejected and not stored. Other links are replaced, and ordinary profanity is masked. A question that Nacho answers is sent to the Cloudflare Workers AI proxy described in Section 8, as question text plus a topic excerpt only.

10. Messaging & Communication Safety

11. Your Rights

You can:

Delete runs on the server. The button calls the deleteAccount function. That function deletes the Firebase sign-in itself, for the account owner and for an admin, and it revokes refresh tokens. Daily points, daily action counts, and badge awards are removed only in that same step, after the sign-in is gone, so those caps cannot be reset while the account still exists. Only that account, with a recent sign-in, or an admin, can start it. Running it again after the data is already gone is safe. This browser then clears site data whose keys start with btc_, session storage, and the service-worker cache. If the server already removed the sign-in, this browser treats that as finished. There is no waiting period in the app.

Before the sign-in is deleted, the server writes a hashed record of the verified email, of earlier verified emails, and of Google, X, GitHub, Facebook, Nostr, and Lightning identities, including sign-in providers this account used before. The record is a keyed hash. It stores whether the account was banned, whether sats were disabled, whether the faucet was used, how many sats were withdrawn, whether the account already received its referee bonus, whether it already earned a referrer bonus, the account age in days, and the time of the last faucet claim. It does not store the email address, the IP address, the username, or any post. A banned account, an account that withdrew sats, or an account that used the faucet is kept. A clean record expires after about a year. The same person can delete at most 3 times in 30 days. A new signup, faucet claim, referral, or username that matches the hash gets the ban, the sats block, the faucet cap, the account age, the faucet cooldown, and the referee-bonus block again.

The server deletes:

Global Chat messages you wrote stay in place, because other messages point at them. The server replaces your name and the message text with [deleted], clears images, GIFs, and captions on those messages, and replaces quotes of those messages with [deleted]. The reply link stays so the thread still lines up. The chat hides the profile, reply, and tip controls on a deleted message.

We keep some records after deletion so someone cannot wipe an abuse trail or a payout that already happened:

A GGs chat or Global Chat message may already have been copied to the public Telegram group. If that copy was sent on its own and the server still has the Telegram message id, deleting, hiding, or moderating the web message removes the Telegram copy. Deleting the account does that for your own chat lines, because those lines are marked deleted. A line that was sent together with other people's messages stays, so their lines stay. Email info.603btc@gmail.com if something of yours is still visible and should not be.

12. Children

The Site is educational and suitable for all ages. We do not knowingly collect personal information from children under 13. The direct messaging feature is available only to registered users. If you are a parent and believe your child has provided personal information or been contacted inappropriately, please contact us immediately and we will take action.

13. Data Security

We use industry-standard security measures including:

14. Data Retention

Account data stays while your account exists. Forum posts, marketplace listings, Global Chat messages, and music uploads stay until you delete them, we remove them, or you delete the account. Deleting the account removes the profile, direct messages in dm_conversations, uploads, notifications, and push tokens, and it replaces your Global Chat name and text with [deleted]. Say hi records sit on the profile and go away with that profile. Timechain TV presence heartbeats also expire on their own after a short idle period (the client sets about 10 minutes, and a cleanup job removes stale rows). Push tokens are dropped when they stop working or when you turn push off, and they are deleted with the account.

After deletion we still keep the faucet ledger and faucet abuse logs, Lightning address locks, cipher win records, charity donations, referral records, admin audit logs (including suspicious-activity notes, watchlist snapshots, and Beats reports), moderation reports, and prediction payout records. Satoshi's Favor cooldowns and hash values stay, with the name replaced by [deleted]. The account-deletion limit for a network is a keyed hash of a server-only daily salt and expires after about a day. Those records are kept to prevent abuse, to stop a deleted account from resetting a cap or claiming a referral bonus again, and to keep a record of sats and pledges that already happened. Section 11 lists them.

15. Sats Faucet (Claim Sats)

Data Collected for Sats Claims (stored in Firebase)

DataPurpose
Withdrawal history (amounts, timestamps)Track claim activity and enforce daily/lifetime limits
Truncated Lightning invoice (first 50 characters + "...")Audit trail for payouts — we do NOT store full invoices
Daily claim trackingEnforce 1-claim-per-24-hours cooldown and 200 sats/day cap
Lifetime total claimedEnforce 15,000 sats lifetime cap per user
Device fingerprint hashAnti-abuse: detect multi-accounting (hashed, not personally identifiable)
IP address (faucet claim, and once at referral signup)Anti-abuse: detect multiple accounts on the same network. The referral copy is a one-way, non-reversible fingerprint of your network address, kept 90 days, in a server-only record, and is deleted with the account.
Server-side daily points trackingEnforce the shared 1,000 XP/day cap (full through 500, half through 900, then a quarter until 1,000, floor per tier, nothing banked) — tracked in Firebase, not the browser

Firestore Data Structure

Sats claim data is stored in the following Firebase subcollections under your user document:

The withdrawal list and daily totals stored on your profile are deleted with the account. The faucet ledger, invoice records, IP log, and device-fingerprint log are kept. Section 11 explains why.

Privacy note: We intentionally do NOT store full Lightning invoices. Only the first 50 characters are retained (followed by "...") for basic audit purposes. This means we cannot reconstruct the full payment destination after the claim is processed.

16. Donate XP for Charity — Data Practices

17. Changes

We may update this Privacy Policy from time to time. Changes will be reflected in the "Last updated" date above. Continued use of the Site after changes constitutes acceptance.

18. Ownership

The Bitcoin Education Archive is owned and operated by 603BTC LLC. "Bitcoin Education Archive" is a trademark (™) of 603BTC LLC. All original Site content, design, code, and branding are © 2026 603BTC LLC. All rights reserved.

19. Contact

Questions about privacy? Email info.603btc@gmail.com.


Terms · DMCA · TCTV Terms

© 2026 603BTC LLC · Bitcoin Education Archive™ · bitcoineducation.quest