Skip to content

Fill gaps in Hall of Fame admin module #24

Description

@fr4nc1stein

Overview

The Hall of Fame management module has core functionality in place but is missing several admin-facing controls. This issue tracks the implementation of all pending items.

Completed Items

1. Manual public title editing

Admins can override the auto-generated disclosed title for any Hall of Fame entry. The override is stored as public_title on the hall_of_fame table (null means use the auto-generated title). Changes are logged to audit_logs.

2. Manual point adjustment

Admins can adjust the points awarded for any entry with a mandatory reason field. The researcher total points in researcher_stats is recalculated from scratch after each adjustment to prevent drift. The related hacktivity row is also synced. All adjustments are logged to audit_logs.

3. Leaderboard CSV export

An Export CSV button in the leaderboard section generates a downloadable CSV with rank, researcher name, points, severity counts, accepted reports, and first/last report dates.

4. Bulk visibility toggle

Checkbox selection on the entries table with a select-all-on-page header checkbox. A floating toolbar appears when entries are selected with Make Public and Hide actions. Backed by a new bulk-visibility API endpoint that handles up to 250 entries per request.

5. Researcher profile pages

A public-facing profile page at /researcher/[id] showing a researcher's stats and accepted reports. No authentication required. Stats are computed from public entries only so hidden entries do not leak through aggregates. The admin leaderboard links each researcher to their profile.

Additional fixes

  • Public leaderboard, stats, and hacktivity now exclude hidden entries consistently
  • Hacktivity respects the public_title override and reflects manual point adjustments
  • Whitespace-only reasons are rejected on the points adjustment endpoint

Database changes

  • New migration 0013_hof_enhancements.sql adds public_title TEXT column to hall_of_fame

New API endpoints

  • PATCH /api/admin/hall-of-fame/[id]/title
  • PATCH /api/admin/hall-of-fame/[id]/points
  • PATCH /api/admin/hall-of-fame/bulk-visibility
  • GET /api/researcher/[id]

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions