trails/e2e
Ullrich Schäfer 37f7a349b9 Implement /explore: local user discovery directory
Stream F implementation. Closes the gap between "I want to follow
someone on this instance" and "I have a username from outside the
app." Anonymous visitors and signed-in users both reach a paginated
directory of local public users; signed-in viewers also see Follow
buttons inline.

- apps/journal/app/lib/explore.server.ts — listDirectory (paginated,
  ordered by MAX(public-activity created_at) DESC NULLS LAST,
  tiebreaker users.id DESC), listActiveRecently (top 5 in last 30
  days), countDirectory, batched countFollowersBatch and
  getFollowStateBatch helpers so the page issues two extra queries
  regardless of page size. Excludes private profiles and the demo
  persona; banned/suspended scaffolding noted for forward-compat.
- apps/journal/app/routes/explore.tsx — loader fans out the four
  queries in parallel; component renders an "Active recently" strip
  (hidden when empty) above the main directory; FollowButton inlines
  per row for signed-in viewers. Bio truncated to 120 chars.
- apps/journal/app/routes.ts — register /explore.
- apps/journal/app/root.tsx — add Explore navbar entry for signed-in
  users.
- apps/journal/app/routes/home.tsx — visitor home gains a secondary
  "Browse who's here →" link to /explore alongside the Planner
  escape hatch.
- packages/i18n/src/locales/{en,de}.ts — explore.*, nav.explore,
  home.exploreLink keys.
- apps/journal/app/lib/explore.integration.test.ts — opt-in
  (EXPLORE_INTEGRATION=1) integration tests covering inclusion,
  exclusion, ordering, NULLS LAST behavior, "Active recently"
  30-day filter, count helpers.
- e2e/explore.test.ts — anonymous loads /explore (no auth needed);
  private profile is excluded from the directory.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 09:24:19 +02:00
..
fixtures Block unmocked external requests in E2E tests 2026-04-19 22:42:29 +02:00
auth.test.ts Block unmocked external requests in E2E tests 2026-04-19 22:42:29 +02:00
demo-bot.test.ts Fix e2e fallout from default-private profile_visibility 2026-04-25 23:46:56 +02:00
explore.test.ts Implement /explore: local user discovery directory 2026-04-26 09:24:19 +02:00
integration.test.ts Session-bind /api/route and /api/overpass 2026-04-21 22:18:45 +02:00
journal.test.ts Rebuild the Journal home around a public feed and flagship marketing 2026-04-24 20:00:23 +02:00
notifications.test.ts Merge /follows/requests into /notifications as a tabbed inbox 2026-04-26 08:24:59 +02:00
planner.test.ts Block unmocked external requests in E2E tests 2026-04-19 22:42:29 +02:00
public-content.test.ts Replace waitForLoadState("networkidle") in e2e helpers 2026-04-26 01:37:37 +02:00
settings.test.ts Block unmocked external requests in E2E tests 2026-04-19 22:42:29 +02:00
social.test.ts Merge /follows/requests into /notifications as a tabbed inbox 2026-04-26 08:24:59 +02:00