Skip to content

feat: add achievement showcase to player profile - #1222

Merged
Samuel1-ona merged 2 commits into
Samuel1-ona:mainfrom
temisan0x:feat/achievement-showcase-1203
Aug 27, 2026
Merged

feat: add achievement showcase to player profile#1222
Samuel1-ona merged 2 commits into
Samuel1-ona:mainfrom
temisan0x:feat/achievement-showcase-1203

Conversation

@temisan0x

Copy link
Copy Markdown
Contributor

Closes #1203

Summary

Adds an achievement showcase to player profiles, allowing players to pin up to three achievements and view their artwork, criteria, and progress.

What changed

  • Added AchievementShowcase to player profiles.
  • Added pin/unpin functionality with a maximum of 3 pinned achievements.
  • Added server-backed showcase persistence.
  • Added public GET and authenticated PUT showcase API endpoints.
  • Added achievement artwork, titles, descriptions, and criteria.
  • Added progress tracking toward applicable achievement milestones.
  • Updated the shared API schema for showcase payload validation.
  • Removed obsolete local pin/unpin service functions that were superseded by the new showcase implementation.

Acceptance criteria

  • Players can pin achievements to their profile.
  • Achievements have artwork and criteria.
  • Progress toward the next achievement is shown.

Verification

  • ESLint passed across all changed and new files.

  • git diff --check passed.

  • pnpm tsc --noEmit -p apps/web was run.

  • TypeScript reports two pre-existing, unrelated syntax errors in:

    • apps/web/app/api/push-tokens/route.ts
    • apps/web/hooks/useHuntDraftAutoSave.ts
  • Working tree is clean after commit.

Scope

This PR keeps the existing achievement earning system unchanged. It does not introduce a server-side source of truth for earned achievements or migrate the existing localStorage-backed achievement system.

Server-side persistence is limited to the profile showcase data. Server-authoritative achievement ownership/validation can be addressed separately if needed.

- Add AchievementShowcase component with pin/unpin via server-backed
  showcase (apps/web/app/api/v1/achievements/showcase)
- Add ownerSecret-authenticated PUT + public GET route, backed by
  showcaseStore.ts (app_settings table)
- Add progress tracking (getAchievementProgress) against
  PROGRESS_THRESHOLDS in config.ts
- Remove dead localStorage-based pin/unpin functions from service.ts
  (superseded by server-backed showcase)
- Wire AchievementShowcase into PlayerProfileView

Note: pnpm tsc --noEmit -p apps/web reports 2 pre-existing syntax
errors in apps/web/app/api/push-tokens/route.ts and
apps/web/hooks/useHuntDraftAutoSave.ts. These are unrelated to this
change, present in HEAD prior to this branch, and intentionally left
untouched per scope discipline.
@Samuel1-ona
Samuel1-ona merged commit 01ef233 into Samuel1-ona:main Aug 27, 2026
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.

[FEAT] Achievement showcase on the player profile

2 participants