feat(ui): redesign the welcome empty state (LC-372) #382

Merged
longjacksonle merged 1 commit from feat/lc-372-welcome-empty-state into main 2026-06-19 16:40:19 +02:00

Closes LC-372. Part of the LC-364 redesign epic. This is the original headline problem from the reference screenshot.

What

Replaces the bare top-left "Welcome, {name}" heading + two muted prose lines with a centered, vertically balanced onboarding empty state (Linear/Slack feel). File: server/templates/home/welcome.html.

  • Centered layout. min-h-full flex centering keeps the content optically centered at common widths instead of floating top-left.
  • Hierarchy. A chat-bubble illustration in an accent-tinted circle, the Welcome, {name} heading (lc-display), and one supporting subtitle line.
  • Quick actions. Three cards:
    • Start a direct message - jumps the unified sidebar search (LC-369) to the People tab and focuses it, since DMs start from a people search and have no separate index page.
    • Discover or create an enclave - /enclaves/discover.
    • View invitations - /invitations, with a count badge when invitations are pending.
  • Preserved. The flash-error banner still renders (now above the centered group, role="alert"). Existing routes kept.

Backend

WelcomePage gains a pending_invites count (from list_invitations_for_user) to drive the badge; the home handler populates it, and the two dm.rs error-fallback renders pass 0. Seven new i18n keys added to en + es (subtitle + three card title/desc pairs).

Testing

  • New render test home_welcome_renders_quick_actions asserts the subtitle, the Start-a-DM action, and the discover / invitations links.
  • ./dev/cargo check -p lets-chat-server - clean.
  • just build-css - clean.
  • just test and just test-saas - both green (incl. i18n_catalog parity and the new test).

🤖 Generated with Claude Code

Closes LC-372. Part of the LC-364 redesign epic. This is the original headline problem from the reference screenshot. ## What Replaces the bare top-left "Welcome, {name}" heading + two muted prose lines with a centered, vertically balanced onboarding empty state (Linear/Slack feel). File: `server/templates/home/welcome.html`. - **Centered layout.** `min-h-full` flex centering keeps the content optically centered at common widths instead of floating top-left. - **Hierarchy.** A chat-bubble illustration in an accent-tinted circle, the `Welcome, {name}` heading (`lc-display`), and one supporting subtitle line. - **Quick actions.** Three cards: - **Start a direct message** - jumps the unified sidebar search (LC-369) to the People tab and focuses it, since DMs start from a people search and have no separate index page. - **Discover or create an enclave** - `/enclaves/discover`. - **View invitations** - `/invitations`, with a count badge when invitations are pending. - **Preserved.** The flash-error banner still renders (now above the centered group, `role="alert"`). Existing routes kept. ## Backend `WelcomePage` gains a `pending_invites` count (from `list_invitations_for_user`) to drive the badge; the home handler populates it, and the two `dm.rs` error-fallback renders pass `0`. Seven new i18n keys added to `en` + `es` (subtitle + three card title/desc pairs). ## Testing - New render test `home_welcome_renders_quick_actions` asserts the subtitle, the Start-a-DM action, and the discover / invitations links. - `./dev/cargo check -p lets-chat-server` - clean. - `just build-css` - clean. - `just test` and `just test-saas` - both green (incl. `i18n_catalog` parity and the new test). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(ui): redesign the welcome empty state (LC-372)
All checks were successful
check-secrets / Nosey parker (push) Successful in 5s
check-secrets / TruffleHog (push) Successful in 6s
check-secrets / Kingfisher (push) Successful in 7s
check-secrets / Nosey parker (pull_request) Successful in 4s
check-secrets / TruffleHog (pull_request) Successful in 6s
check-secrets / Kingfisher (pull_request) Successful in 7s
Create release / Create release from merged PR (pull_request) Has been skipped
Check / clippy + fmt + tests (pull_request) Successful in 3m51s
cc4d55b4cc
Replace the bare top-left "Welcome, {name}" heading + two muted prose lines with a centered, vertically balanced onboarding empty state (Linear/Slack feel): a chat-bubble illustration in an accent-tinted circle, the welcome heading + one supporting line, and three quick-action cards.

The cards are: Start a direct message (jumps the unified sidebar search to the People tab and focuses it, since DMs have no separate index page), Discover or create an enclave (/enclaves/discover), and View invitations (/invitations) with a count badge when invitations are pending. The pane uses min-h-full flex centering so the group stays optically centered at common widths instead of floating top-left.

WelcomePage gains a pending_invites count (from list_invitations_for_user) to drive the badge; the home handler populates it and the two dm.rs error-fallback renders pass 0. The flash-error banner is preserved (now above the centered card group, role="alert"). Seven new i18n keys added to en + es (subtitle + three card title/desc pairs). A render test asserts the quick actions and their links.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
longjacksonle deleted branch feat/lc-372-welcome-empty-state 2026-06-19 16:40:20 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/lets-chat!382
No description provided.