feat: Gravatar opt-in (off by default), configurable in Settings

Previously every account without a custom avatar automatically got
its email MD5-hashed and sent to gravatar.com at signup, with no way
to turn it off. Adds users.useGravatar (default false): removed the
automatic signup-time lookup entirely, and "remove photo" now falls
back to the initials placeholder instead of silently re-deriving a
Gravatar URL. New toggle in Settings -> Profile, off by default,
description explains the MD5-hash-to-third-party tradeoff. Existing
accounts' current avatarUrl is left untouched either way — no
retroactive avatar changes for anyone already using one.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Arnaud
2026-07-14 09:37:29 +02:00
parent 38516bff63
commit a08588cf85
14 changed files with 5132 additions and 14 deletions
@@ -0,0 +1 @@
ALTER TABLE "users" ADD COLUMN "use_gravatar" boolean DEFAULT false NOT NULL;
File diff suppressed because it is too large Load Diff
@@ -267,6 +267,13 @@
"when": 1783976055649,
"tag": "0037_big_nehzno",
"breakpoints": true
},
{
"idx": 38,
"version": "7",
"when": 1784014063004,
"tag": "0038_peaceful_norrin_radd",
"breakpoints": true
}
]
}
+4
View File
@@ -21,6 +21,10 @@ export const users = pgTable("users", {
name: text("name").notNull(),
avatarUrl: text("avatar_url"),
hasCustomAvatar: boolean("has_custom_avatar").notNull().default(false),
// Off by default — Gravatar is looked up by an MD5 hash of the user's
// email, sent to a third party (gravatar.com), which some users won't want
// regardless of MD5 being effectively reversible for a known email.
useGravatar: boolean("use_gravatar").notNull().default(false),
bio: text("bio"),
privateBio: text("private_bio"),
isPrivate: boolean("is_private").notNull().default(false),