Repository source: docs/plans/forte_users_lessons_for_board_activity.md
Lessons from Building Forte Users → Carry Back to Board/Activity
Findings from implementing the Users three-pane view (docs/plans/archive/forte_users_three_pane_step4_implementation_summary.md) that are relevant to Board and Activity too. Each item below was actually checked against Board/Activity's current code/rendering, not assumed — see "Verified" notes.
✅ Confirmed applicable — worth doing
Board:
templates/partials/paned_board_thread_list.phpline ~77 (<span class="paned-list-date">)Activity:
templates/partials/paned_activity_item_row.phpline ~25,paned_activity_commit_row.phpline ~27Leave
$timestamp(full format) alone everywhere it's already used — the new closure is additive, not a replacement of existing behavior. Decide per-view whether content-pane headers should also switch, or stay full-format for precision.
Board's Subject column collapses to 16px at a 400px viewport width ("thanks" truncates to "tl").
Activity's Label column collapses to 31px at the same width.
Reproduce with a headless-browser check: load the page at
viewport: {width: 400, height: 800}and read.paned-list-subject'sgetBoundingClientRect().width.Root cause:
.paned-list-subject { flex: 1; min-width: 0; }lets the flexible column shrink to nothing instead of the row overflowing, while the fixed-width columns (Board: From 9rem + Date 13rem + Replies 5rem = 27rem; Activity similar) never shrink.Fix already built and verified for Users (
public/assets/forte.css, Stage 20 in the Users summary): give the list pane its ownoverflow-x: autoplus amin-widthfloor on.paned-list-head/.paned-list-row, scoped to that view only, so it scrolls internally instead of squeezing. Confirmed zero effect at desktop width and zero page-level horizontal scroll.Not a copy-paste: Board's and Activity's fixed-column widths differ from Users' (and from each other), so each view needs its own tuned
min-widthfloor, not the literal34remUsers uses. Also worth considering whether to lift this into the shared, unscoped.paned-list-pane/.paned-list-head/.paned-list-rowrules now that it's confirmed common to all three views, rather than three separately-scoped copies — a real design decision, not just mechanical repetition.
❌ Checked, not applicable — don't re-investigate these
Raw post/thread ID shown instead of a title. This was a real bug in the new Users detail pane (Stage 16), inherited from the older
forte_username.phpfull-profile page it was modeled on. Verified: Board'spaned_board_thread_list.phpalready uses$threadTitle($thread)correctly, and Activity's rows uselabel/kindfields that are native to activity records (not raw post IDs) — neither has this bug.Redundant "by {username}" attribution. Removed from Users' detail pane (Stage 17) because every row on that page is already known to be authored by the one selected user. Doesn't apply to Board or Activity — both show content from many different authors, where attribution is the actual point.
📝 Related, but not Board/Activity — separate follow-up if wanted
templates/pages/forte_username.php(the older, non-"paned" full profile page at/forte/user/{username}) has both issues found and fixed during this feature:The same raw-post-ID-as-title bug (already flagged in the Stage 16 summary).
The same double-fetch inefficiency fixed in Stage 18: it calls
countVisibleAuthoredRows()(which internally re-fetches the full thread/post list) and separately fetches the same lists again, instead of fetching once and usingcount(). Confirmed viagrep—Application.phplines ~1097-1100 still have the old pattern; the Users detail endpoint (~line 1543) is the only place already fixed.