Skip to content

feat(me): Your activity page with the events you attended (#400) - #475

Open
adenarc wants to merge 1 commit into
mainfrom
feat/profile-attendance-400
Open

adenarc wants to merge 1 commit into
mainfrom
feat/profile-attendance-400

Conversation

@adenarc

@adenarc adenarc commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Closes #400.

What this does

Adds Your activity at /me, the member's own page in City Node:

  • the member's avatar, name and handle, with Edit profile (the auth plugin's Settings → Profile, so no profile fields move) and Public profile (/$accountId, when they have a NEAR account);
  • Your events across every community, from the attendance record in feat: show members the events they checked in at (#400) #463 (getMyAttendance): newest first, unclassified check-ins kept apart, incomplete sync shown honestly;
  • unlike Home, the section stays visible with its loading, empty and retryable-error states (AttendanceRecord alwaysShow);
  • Your activity in the account menu, plus a breadcrumb and page title;
  • new copy in en/es/fr/zh.

Why /me and not Settings → Profile

Following discussion with Elliot, this is a City Node route rather than an upstream profile slot (everything-dev#687 is no longer needed). The runtime lets the app's own route win only over a plugin route at the same path under the same parent, so overriding just /settings/profile would mean taking over the whole /settings layout (Security, API keys and the rest). /me adds the page without hiding any of that.

Not in this PR

Recording a member's check-in when they redeem a code (#400's member-side step) happens on the upstream onboard page. History still comes from organizer reconciliation (#463).

Tested

  • pnpm typecheck, pnpm lint, ui tests (1129) and api tests (431) pass.
  • New tests:
    • /me header and links, with and without a NEAR account;
    • the events list on /me;
    • the always-visible loading and empty states;
    • the /me breadcrumb.
  • Local stack, in the browser:
    • signed out, /me redirects to /login?redirect=%2Fme;
    • signed in with no check-ins, it shows the header, Edit profile (/settings/profile), Public profile and "No check-ins recorded yet.";
    • with seeded check-ins, it shows two events newest first, the walk-in code under Other check-ins, and the may-be-incomplete note;
    • the account menu has Your activity;
    • at 375px the buttons wrap with no sideways scroll, and there are no console errors.

Screenshots

/me is new, so there's no before: on main the route doesn't exist. Local stack with seeded data; the account name is blurred.

With events: two events newest first, a walk-in code under Other check-ins, and the may-be-incomplete note

after-me-events

No check-ins yet

after-me-empty

375px and account menu (new Your activity item)

after-me-375 after-account-menu

…400)

A normal City Node route at /me: the member's avatar and name, links to
edit the profile in Settings and to their public profile, and the events
they checked in at across every community. Reachable from the account
menu.
@adenarc
adenarc force-pushed the feat/profile-attendance-400 branch from 5dd16f6 to d68b96e Compare November 2, 2026 01:19
@adenarc adenarc changed the title feat(profile): add the events you attended to Settings → Profile (#400) feat(me): Your activity page with the events you attended (#400) Nov 2, 2026
@adenarc
adenarc marked this pull request as ready for review November 2, 2026 01:30
@multi-review

multi-review Bot commented Nov 2, 2026

Copy link
Copy Markdown

Multi Review · d68b96e

This PR adds a /me route with the member's header, links to Settings → Profile and their public profile, and an always-visible attendance section that works across every community. It also adds a menu item, a breadcrumb, i18n strings and an alwaysShow prop on AttendanceRecord. The change is small and only adds things; Home and community pages behave the same as before, and I found no defects.

No new issues found

What was checked (10 areas)
  • AttendanceRecord alwaysShow/hideWhenEmpty logic and its 3 callers (Home, node overview, /me)
  • FORBIDDEN/error/loading/empty branches still render correctly when alwaysShow is set
  • Default alwaysShow=false keeps Home's hide-when-empty behaviour
  • useIdentity returns nearAccountId/avatarSrc/displayName/handle/showHandle/initials
  • PageHeader props (title ReactNode, subtitle, actions, headerTestId)
  • pluginPath('/settings/profile') matches existing pluginPath usage
  • crumbsFor 'me' case and nav.activity message key in all 4 locales
  • user-nav-menu Link to /me and new icon import
  • route head title pattern matches other dashboard routes
  • static /me vs public /$accountId route precedence

Comment @multi-review to re-review new commits, or @multi-review full for a full review.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Show members the events they've attended

1 participant