Privacy and Trust at Misoyan.Community
We are a volunteer-run fan site, not a corporation. Our goal is to celebrate the community, not harvest your data.
We believe privacy is a fundamental right, and we treat your personal data as something you are temporarily lending us. This page lists what we collect, where it is stored, who processes it, and what you can do about it.
Our core promise to you
- Zero Ads: We will never run third-party ads or trackers. The only "ads" you will ever see here are spotlights for fan artists and the VTuber herself.
- Zero Profit: We do not sell, trade, or monetize your data.
- Radical Honesty: We only collect what a feature strictly needs to function, and we describe it here in detail.
What we collect and why (by feature)
We only track what we need to keep the games running and the site safe. Below is a feature-by-feature breakdown.
- General browsing: Our host (Vercel) automatically logs basic connection data (like your IP address and user agent) to stop DDoS attacks and keep the site online. These server logs are retained by Vercel according to their policies; we do not use them to build profiles. We also use Vercel Web Analytics for anonymous page view counts only (which pages are popular). It does not use cookies, does not build profiles, and cannot identify you.
- Account and profile:
- Email and password sign-in: Your email address and a bcrypt-hashed password are stored by Supabase Auth. We never see or store your plain-text password. New passwords must meet complexity rules (8+ characters with uppercase, lowercase, and a special character). Optional TOTP MFA and passkeys are available from your profile. Supabase may send transactional emails on our behalf (password reset link, password-changed confirmation). We do not send marketing or newsletter email.
- Discord sign-in (optional): You can create an account or sign in with Discord OAuth (identify scope). Supabase Auth stores your Discord provider user ID and basic profile fields from Discord. This is separate from linking Discord later for Anniversary Wall verification.
- Profile record: When you create an account we store a username, display name, and optional avatar URL in our Supabase database (profiles table). You can edit display name and avatar on your profile page.
- Profile avatars you upload (WebP or GIF, up to 2 MB) are stored in Cloudflare R2 at a path like profile//avatar.webp. If you use a Discord avatar URL instead, that image stays on Discord servers; we only store the URL.
- Discord linking (optional): You can link or unlink Discord from your profile. When linked, we store your Discord user ID, username, display name, avatar URL, and provider metadata in linked_identities so features like the Anniversary Wall can verify membership. We cannot read your private messages or see your friends list.
- Auth emails: Password reset and password-changed notifications are sent through Supabase using our custom templates. They contain your email address and a one-time link or confirmation only; we do not include tracking pixels.
- The Anniversary Wall: Submitting to the Anniversary Wall requires a linked Discord identity and server membership verification (Discord ID, username, avatar hash). Your submission stores message text, moderation status, timestamps, and optional media URLs. Media files (images, video, or audio) you upload are stored in Cloudflare R2. If you use the Google Form alternative instead, your data is handled by Google Forms and manually moderated by us; it is used only for the wall. You may mark messages as read locally in your browser (see storage table); that preference is not sent to our servers.
- Guppy Gacha:
- Playing as a guest: We set an anonymous cookie (miso_gacha_sid) that identifies your guest session on our servers. Wallet balance (crumbs and chicken burgers), pity counters, and daily pull usage for guests are stored server-side in session tables tied to that cookie. The server is authoritative; we do not trust the browser for currency or limits. Your guppy collection may be cached locally (miso-gacha-collection:v1) for faster display and offline recovery only. Legacy miso-gacha-wallet, pity, or daily keys in localStorage are ignored once server state is available.
- Logged-in players: Your collection, guppies wallet (crumbs and chicken burgers in guppies_wallet), pity, daily usage, and kami-oshi claims are stored in Supabase and tied to your account ID. Pearls and keys are no longer used. The server is authoritative; we do not sync wallet changes from the browser.
- Crumbs minigames: After a minigame run you may optionally save a score with a display name. The display name is saved in your browser (miso_minigame_display_name) so we can pre-fill it next time; it is not uploaded until you submit a score. Submitted scores (game, score, difficulty, display name, timestamp) are stored in Supabase. If you are signed in, we link the score to your account; signed-in scores are included in data export and deleted with your account. Guest scores without account linkage remain on the leaderboard until manually removed. Crumb rewards for gameplay are granted server-side via POST /api/gacha/minigame-reward with a one-time grant ID; we record each grant in gacha_minigame_crumb_grant for deduplication and abuse prevention. Rewards update your server wallet (guppies_wallet or guest session wallet), not browser storage.
- Corrupt the Mods (NNNC multiplayer): This card game stores lobby and match state on our servers (nnnc_games, nnnc_players, nnnc_game_ticks, nnnc_game_rewards). When you join, we assign a display name and a secret player token (hashed on the server). If you are signed in, we optionally link your Supabase user ID to your player row. End-of-game crumb rewards are credited through the same server wallet system as other minigames. Your browser stores resume tokens per game (miso_nnnc_token_) and optional UI preferences (rules dismissed, control panel position). We cannot read your Discord messages from this feature.
- Discord Activity embed: When you open Misoyan features inside Discord (embedded activity iframe), the Discord Embedded App SDK runs in that frame. We call POST /api/discord/activity-token to exchange an OAuth authorization code for a short-lived Discord access token (identify scope only). That lets us read your Discord user ID, username, global name, and avatar hash for in-activity UI. This flow is separate from Supabase account sign-in unless you also log into the site. Discord processes data under its own privacy policy.
- Guppy Maker: Everything runs directly in your browser. We do not save your creations unless you explicitly click export.
- Floating music player: This uses YouTube's embedded player. When you press play, YouTube may set its own cookies according to Google's privacy policies.
The cookie jar
We keep cookies and browser storage to an absolute minimum. Here is exactly what we put on your device:
| Cookie / storage name | What it does | Type |
|---|---|---|
miso_gacha_sid | Anonymous guest session ID. Our server uses it for guest wallet, pity, daily pull limits, and minigame crumb grants. | Essential (Guest cookie) |
Supabase Auth cookies | Keeps you securely logged in with your account (session and refresh tokens). | Essential (Logged-in cookie) |
miso_consent | Remembers that you saw our cookie notice. | Essential (cookie) |
site-theme | Remembers your color theme (Miso Light/Dark or a mod palette). Older browsers may have used miso-theme; we migrate that once. | Functional (localStorage) |
miso-gacha-collection:v1 | Caches your guest guppy collection locally for display and crash recovery. Wallet, pity, and daily usage are server-side, not stored here as source of truth. | Functional (localStorage) |
miso-gacha-pending-pull:v1 | Temporarily holds a pull result between server commit and collection save (in-flight recovery). Cleared after the collection updates. | Functional (sessionStorage) |
miso_nnnc_token_ | Stores your secret player token so you can rejoin an NNNC lobby or match in the same browser. | Functional (localStorage) |
miso_nnnc_rules_dismissed_ | Remembers that you dismissed the in-game rules panel for a specific NNNC match. | Functional (localStorage) |
miso_nnnc_controls_drag_ | Remembers where you dragged the NNNC in-game control panel on screen. | Functional (localStorage) |
miso_minigame_display_name | Remembers the display name you last used for minigame leaderboard submissions. | Functional (localStorage) |
anniversary_read_messages | Remembers which Anniversary Wall messages you have marked as read (UI state only; not sent to our servers). | Functional (localStorage) |
Vercel Web Analytics | Anonymous aggregate page view counts (no cookies on your device). | Anonymous metrics |
How long we keep data
We keep data only as long as needed for the features below or until you delete your account.
- Account and profile: Kept until you delete your account or ask us to remove it. Supabase Auth logs may be retained by Supabase per their policy.
- Gacha and minigame data: Logged-in guppies wallet, collection, pity, daily usage, kami-oshi claims, and linked leaderboard scores are kept until account deletion. Guest session wallet and limits on our servers expire per maintenance rules; guest collection cache in your browser stays until you clear site data. Minigame crumb grant audit rows (gacha_minigame_crumb_grant) may outlive account deletion because they are not tied to auth.users with cascade delete.
- Corrupt the Mods (NNNC): Active games and player rows are cleaned up by scheduled maintenance (stale lobbies, timeouts). Finished game state and reward records may persist for a period. Deleting your account clears user_id on your player rows (SET NULL) but does not delete historical game or reward rows.
- Anniversary Wall submissions: Kept while your account exists or until moderators remove content. Associated R2 media is deleted when you delete your account (best effort).
- Server and analytics logs: Vercel hosting logs and anonymous page metrics are retained per Vercel retention schedules, not linked to your account.
The tools we use (processors)
To keep the site running for free, we rely on a few trusted third-party services. We ensure all of them comply with strict international privacy standards (like the EU's GDPR).
- Hosting and security: Vercel (site hosting, edge functions, anonymous Web Analytics)
- Database, auth, and transactional email: Supabase (PostgreSQL database, email/password and Discord OAuth auth, session management, password reset and password-changed emails)
- Media storage: Cloudflare R2 (profile avatars and Anniversary Wall uploads)
- Social login, Activity embed, and verification: Discord (OAuth sign-in and linking, Embedded Activity SDK and token exchange, server membership checks for the Anniversary Wall)
- Embedded media and forms: YouTube (music player embeds), Google Forms (optional Anniversary Wall submissions)
Your digital rights
You own your data. When you are signed in, you can download or delete your account data below. To update your profile, password, or Discord link, visit your account profile page . For edge cases, contact setsushiroi on Discord.
Sign in with your account (email/password or Discord) to export or delete your account data.
If your request is delayed or denied, contact setsushiroi on Discord and request a manual privacy review.
- Download your data: Get a JSON export of your profile, linked identities, Anniversary submission, gacha progress (wallet, collection, pity, daily usage), and minigame scores. It does not include NNNC matches, minigame grant audit rows, or data stored only in your browser.
- Delete your account: Permanently remove your auth user and linked application data listed in the delete confirmation dialog. NNNC game history is unlinked, not erased; minigame crumb grant audit rows may remain.
- Manage profile and sign-in: Update display name, avatar, password, or Discord link on your profile page without exporting or deleting.
- Report content: Flag inappropriate messages on the Anniversary Wall.