Profiles: presentation, picture, recent posts; avatars by names #168

Merged
littlefox merged 4 commits from issue-151-profiles into main 2026-10-19 17:51:10 +00:00
Owner

Closes #151

D-048, D-049. Built on #165 (Browse channels), so until that merges this diff includes it as well.

  • Profile page: opened from a post's author, a name in the who-is-on list, or a person link. It shows the avatar, presence or last login, number of posts, the presentation in full, the latest posts, and 'Skriv brev'.
  • Avatars: the first picture in the presentation, otherwise initials on a colour from the person number. Initials come from the name before any comma ('Johan Holtz, Lysator' → JH).
    • They appear on post headers (sized to the line) and in the who-is-on list.
  • My profile: 'Redigera presentation och bild' edits the text and picks, changes or removes the picture (scaled to 64 kB).
    • Saving writes a new presentation the elisp way: same recipients, a comment to the old one, then set-presentation.
    • Old presentations stay.
  • New accounts (#152) start on their profile with the editor open.
  • kom_client::profile: Kom::profile, Kom::avatar, Kom::change_presentation, first_image, text_part.

Verified:

  • new profile.spec on desktop, Android and iPhone: sign up, write a presentation with a picture that becomes the avatar (also in the who list), remove it and get initials back with the text kept; another person's profile from a post's author, with Skriv brev.
  • the full suite locally: 254 passed. The two failures were the _visual reading shot, fixed by sizing header avatars to the line, and post-image's big-image scaling timing out under load, which passes alone twice.
  • unit tests for first_image/text_part and initials; screenshots checked; clippy desktop, web and wasm.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8

Closes #151 D-048, D-049. Built on #165 (Browse channels), so until that merges this diff includes it as well. - **Profile page:** opened from a post's author, a name in the who-is-on list, or a person link. It shows the avatar, presence or last login, number of posts, the presentation in full, the latest posts, and 'Skriv brev'. - **Avatars:** the first picture in the presentation, otherwise initials on a colour from the person number. Initials come from the name before any comma ('Johan Holtz, Lysator' → JH). - They appear on post headers (sized to the line) and in the who-is-on list. - **My profile:** 'Redigera presentation och bild' edits the text and picks, changes or removes the picture (scaled to 64 kB). - Saving writes a new presentation the elisp way: same recipients, a comment to the old one, then set-presentation. - Old presentations stay. - **New accounts (#152)** start on their profile with the editor open. - `kom_client::profile`: `Kom::profile`, `Kom::avatar`, `Kom::change_presentation`, `first_image`, `text_part`. Verified: - new profile.spec on desktop, Android and iPhone: sign up, write a presentation with a picture that becomes the avatar (also in the who list), remove it and get initials back with the text kept; another person's profile from a post's author, with Skriv brev. - the full suite locally: 254 passed. The two failures were the _visual reading shot, fixed by sizing header avatars to the line, and post-image's big-image scaling timing out under load, which passes alone twice. - unit tests for first_image/text_part and initials; screenshots checked; clippy desktop, web and wasm. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Browse channels: a directory of all channels, join with one tap
Some checks failed
ci / check (push) Has started running
ci / e2e (push) Has started running
ci / desktop (push) Has been cancelled
0e69031479
#150. Every conference from one lookup-z-name, recommended first (the
server's recommended-conf items), filtered as you type, with members
and last written for the rows shown, and sortable by those after a
paced, on-request fetch. Join, leave, or enter from the list. The seed
recommends Allmänt so the tests see it.

Refs #150

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Merge origin/main into issue-150-channels
Some checks failed
ci / check (push) Successful in 10m34s
ci / desktop (push) Successful in 14m23s
ci / e2e (push) Failing after 30m34s
2ca23c88f6
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Alla kanaler: its own class, not inbox-link
Some checks failed
ci / check (push) Successful in 8m34s
ci / desktop (push) Successful in 18m20s
ci / e2e (push) Failing after 33m2s
9f4f378f4f
Specs (and anything else) finding the Inkorg button by its class found
two (CI run #283).

Refs #150

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
# Conflicts:
#	app/assets/main.css
#	app/src/i18n.rs
#151, D-048, D-049. A tap on an author, a name in the who-is-on list or
a person link opens a profile: avatar, presence or last login, the
presentation, recent posts, and Skriv brev. Avatars are the first
picture in the presentation, otherwise initials. On my own profile the
presentation and picture are edited by writing a new presentation as
elisp does (same recipients, a comment to the old one, then
set-presentation). A new account starts there.

Refs #151

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Profiles: person links open the profile; header avatars fit the line
Some checks failed
ci / check (push) Successful in 10m20s
ci / desktop (push) Successful in 12m30s
ci / e2e (push) Failing after 29m23s
dc0b72755f
links.spec now expects the profile (no longer the status page). A
post header's avatar is no taller than its text, so the lines below
don't shift.

Refs #151

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8
Merge origin/main into issue-151-profiles
All checks were successful
ci / check (push) Successful in 8m17s
ci / desktop (push) Successful in 13m1s
ci / e2e (push) Successful in 24m48s
3e0f9cfb8a
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XJW2ocwLunyaLiUwCBHEP8

# Conflicts:
#	app/assets/main.css
#	app/src/i18n.rs
littlefox referenced this pull request from a commit 2026-10-19 21:34:01 +00:00
Sign in to join this conversation.
No description provided.