feat(profile): add round avatar with upload and cropping

- backend: user_avatar_objects binding (PG+SQLite), GC preserves avatar blobs,
  avatar service (EXIF-stripping WebP 128/512), public avatar read route
- web: avatar upload/crop on profile, round avatar in header/members/comments/author
- android: avatar upload/crop, round avatar on profile and albums header
- openspec: add-user-avatar proposal/design/specs/tasks
This commit is contained in:
iu
2026-10-12 16:16:47 +03:00
parent 657a04309e
commit 04617d1cdb
49 changed files with 2362 additions and 21 deletions
+3 -2
View File
@@ -2,6 +2,7 @@
import { onMount } from 'svelte';
import { goto } from '$app/navigation';
import { authApi } from '$lib/api';
import Avatar from './Avatar.svelte';
import Emblem from './Emblem.svelte';
import Icon from './Icon.svelte';
import ThemeSwitcher from './ThemeSwitcher.svelte';
@@ -135,10 +136,10 @@
{#if auth.isAuthenticated}
<a
href="/profile"
class="text-text-muted hover:text-text inline-flex items-center gap-1 text-xs"
class="text-text-muted hover:text-text inline-flex items-center gap-1.5 text-xs"
title="Профиль"
>
<Icon name="settings" class="size-4" />
<Avatar name={auth.user?.name} url={auth.user?.avatar_url} size="size-6" />
<span class="hidden sm:inline">{auth.user?.name ?? 'Профиль'}</span>
</a>
<button