Repository source: docs/plans/archive/forte_profiles_step2_feature_description.md
Forte Profiles — Step 2: Feature Description
Problem
Forte has no user directory and no Forte-native profile destination; author names link out to classic today, inherited for free via a shared template helper.
User Stories
As a Forte board-view reader, I want to click an author's name and get a quick summary without leaving the board, so I can identify who I'm reading without losing my place.
As a Forte board-view reader who wants more detail, I want a link from that summary to a full, Forte-styled profile page, so the quick glance isn't a dead end.
As a Forte board-view reader, I want a way to browse all users, so I can find someone without already knowing their name.
As anyone with a link to a Forte profile or the user directory, I want it to load correctly on its own, so it's shareable the same way every other piece of Forte state already is.
Core Requirements
Author names in Forte (board content pane, reply tree) open a lightweight summary dialog on click — username, approval status, thread/post counts — reusing the existing
/api/get_profileendpoint verbatim (already used elsewhere, e.g.browser_signing.js's own profile check) for the dialog's content. The link itself still has a realhrefto the full profile page underneath, so it degrades gracefully without JS.The summary dialog links to a full, standalone Forte-styled profile page (
/forte/profiles/{slug}, plus/forte/user/{username}mirroring classic's dual scheme) with the same content as classic's profile page (approval status/by-whom, thread/post counts, public key details) — except the "Approve user" action, which stays out of scope here (that'sforte_user_approval's job).A Forte-styled user directory (
/forte/users/) lists approved users with thread/post counts, linking straight to each one's full profile page (no summary-dialog detour needed there — you're already looking at a list of names).Both new page types get a way back to the board (they're separate routes, not embedded in
/forteitself, per the approved Step 1 decision).No changes to classic's own
/profiles/{slug},/user/{username}, or/users/pages, and no navigation added from them into Forte (that'sforte_classic_nav_bridge's call to make, not this cycle's).
Shared Component Inventory
/api/get_profile— canonical profile-summary endpoint. Reused unchanged as the summary dialog's data source.fetchProfileBySlug()/fetchProfilesByUsernameToken()/fetchApprovedUserDirectoryUsers()— canonical data fetchers already backing classic's profile/directory pages. Reused unchanged for the new Forte pages.renderAuthorHtml()(shared by every page that shows an author) — extended, not forked: a new Forte-target variant point at/forte/profiles/...//forte/user/...instead of classic's, exposed as a sibling template helper alongside the existing one so classic's own rendering is untouched.The
forte_compose_threadNew Thread<dialog>(titlebar + body chrome) — pattern reused for the summary dialog's visual shape, not literally the same element.Classic's
profile.php/users.phptemplates — not reused directly (full page layout, not paned chrome); new Forte-styled templates render the same underlying data.
Simple User Flow
Reader clicks an author's name on the board.
A summary dialog opens in place: username, approval status, counts, a link to the full profile.
Reader follows that link (or navigates to
/forte/users/from the board) to a full, Forte-styled page with a way back to the board.
Success Criteria
Clicking any author name in Forte opens the summary dialog without navigating away or losing board state.
The summary dialog's "full profile" link,
/forte/profiles/{slug}and/forte/user/{username}directly, and/forte/users/all render correctly as fresh, standalone loads (shareable, not session-dependent).Approval status/counts shown in Forte match classic's own profile page exactly (same underlying data, no drift).
No "Approve user" affordance appears anywhere in Forte's new pages.
Classic's
/profiles/{slug},/user/{username}, and/users/are completely unaffected.