diff --git a/apps/api/src/routes/profile.ts b/apps/api/src/routes/profile.ts index dc711ae..91a0e3e 100644 --- a/apps/api/src/routes/profile.ts +++ b/apps/api/src/routes/profile.ts @@ -30,6 +30,8 @@ const parseProfileSettings = (raw: unknown): ProfileSettings => { showCurrentGold: obj.showCurrentGold !== false, showCurrentClicks: obj.showCurrentClicks !== false, showPrestige: obj.showPrestige !== false, + showTranscendence: obj.showTranscendence !== false, + showApotheosis: obj.showApotheosis !== false, showBossesDefeated: obj.showBossesDefeated !== false, showQuestsCompleted: obj.showQuestsCompleted !== false, showAdventurersRecruited: obj.showAdventurersRecruited !== false, @@ -54,6 +56,8 @@ profileRouter.get("/:discordId", async (context) => { const state = gameStateRecord?.state as unknown as GameState | undefined; const prestigeCount = state?.prestige.count ?? 0; + const transcendenceCount = state?.transcendence?.count ?? 0; + const apotheosisCount = state?.apotheosis?.count ?? 0; const profileSettings = parseProfileSettings(player.profileSettings); const bossesDefeated = state?.bosses.filter((b) => b.status === "defeated").length ?? 0; @@ -81,6 +85,8 @@ profileRouter.get("/:discordId", async (context) => { currentRunGold: state?.player.totalGoldEarned ?? 0, currentRunClicks: state?.player.totalClicks ?? 0, prestigeCount, + transcendenceCount, + apotheosisCount, bossesDefeated, questsCompleted, adventurersRecruited, @@ -108,6 +114,8 @@ profileRouter.put("/", authMiddleware, async (context) => { showCurrentGold: body.profileSettings?.showCurrentGold !== false, showCurrentClicks: body.profileSettings?.showCurrentClicks !== false, showPrestige: body.profileSettings?.showPrestige !== false, + showTranscendence: body.profileSettings?.showTranscendence !== false, + showApotheosis: body.profileSettings?.showApotheosis !== false, showBossesDefeated: body.profileSettings?.showBossesDefeated !== false, showQuestsCompleted: body.profileSettings?.showQuestsCompleted !== false, showAdventurersRecruited: body.profileSettings?.showAdventurersRecruited !== false, diff --git a/apps/web/src/components/game/EditProfileModal.tsx b/apps/web/src/components/game/EditProfileModal.tsx index d805dae..d332f71 100644 --- a/apps/web/src/components/game/EditProfileModal.tsx +++ b/apps/web/src/components/game/EditProfileModal.tsx @@ -17,6 +17,8 @@ interface StatToggle { const CURRENT_RUN_TOGGLES: StatToggle[] = [ { key: "showCurrentGold", label: "Gold Earned This Run", icon: "🪙" }, { key: "showCurrentClicks", label: "Clicks This Run", icon: "👆" }, + { key: "showApotheosis", label: "Apotheosis Badge", icon: "✨" }, + { key: "showTranscendence", label: "Transcendence Badge", icon: "🌌" }, { key: "showPrestige", label: "Prestige Level", icon: "⭐" }, { key: "showBossesDefeated", label: "Bosses Defeated", icon: "💀" }, { key: "showQuestsCompleted", label: "Quests Completed", icon: "📜" }, diff --git a/apps/web/src/components/game/ProfilePage.tsx b/apps/web/src/components/game/ProfilePage.tsx index 6843cd3..45dd615 100644 --- a/apps/web/src/components/game/ProfilePage.tsx +++ b/apps/web/src/components/game/ProfilePage.tsx @@ -179,6 +179,16 @@ export const ProfilePage = ({ discordId }: ProfilePageProps): React.JSX.Element
@{profile.username}
+ {s.showApotheosis && profile.apotheosisCount > 0 && ( + + ✨ Apotheosis {profile.apotheosisCount} + + )} + {s.showTranscendence && profile.transcendenceCount > 0 && ( + + 🌌 Transcendence {profile.transcendenceCount} + + )} {s.showPrestige && profile.prestigeCount > 0 && ( ⭐ Prestige {profile.prestigeCount} diff --git a/apps/web/src/styles.css b/apps/web/src/styles.css index b84dff5..21b885b 100644 --- a/apps/web/src/styles.css +++ b/apps/web/src/styles.css @@ -1466,6 +1466,27 @@ body { margin: 0; } +.profile-apotheosis-badge { + background: linear-gradient(135deg, rgba(120, 53, 15, 0.2), rgba(217, 119, 6, 0.2)); + border: 1px solid rgba(217, 119, 6, 0.5); + border-radius: 1rem; + color: #fbbf24; + font-size: 0.8rem; + font-weight: 700; + padding: 0.2rem 0.6rem; + width: fit-content; +} + +.profile-transcendence-badge { + background: rgba(124, 58, 237, 0.15); + border: 1px solid rgba(124, 58, 237, 0.4); + border-radius: 1rem; + color: #a78bfa; + font-size: 0.8rem; + padding: 0.2rem 0.6rem; + width: fit-content; +} + .profile-prestige-badge { background: rgba(255, 215, 0, 0.15); border: 1px solid rgba(255, 215, 0, 0.4); diff --git a/packages/types/src/interfaces/Api.ts b/packages/types/src/interfaces/Api.ts index eb2c226..f69d98c 100644 --- a/packages/types/src/interfaces/Api.ts +++ b/packages/types/src/interfaces/Api.ts @@ -109,6 +109,8 @@ export interface PublicProfileResponse { currentRunGold: number; currentRunClicks: number; prestigeCount: number; + transcendenceCount: number; + apotheosisCount: number; bossesDefeated: number; questsCompleted: number; adventurersRecruited: number; diff --git a/packages/types/src/interfaces/ProfileSettings.ts b/packages/types/src/interfaces/ProfileSettings.ts index 0aa8abc..33c7a6a 100644 --- a/packages/types/src/interfaces/ProfileSettings.ts +++ b/packages/types/src/interfaces/ProfileSettings.ts @@ -13,6 +13,8 @@ export interface ProfileSettings { showCurrentGold: boolean; showCurrentClicks: boolean; showPrestige: boolean; + showTranscendence: boolean; + showApotheosis: boolean; showBossesDefeated: boolean; showQuestsCompleted: boolean; showAdventurersRecruited: boolean; @@ -31,6 +33,8 @@ export const DEFAULT_PROFILE_SETTINGS: ProfileSettings = { showCurrentGold: true, showCurrentClicks: true, showPrestige: true, + showTranscendence: true, + showApotheosis: true, showBossesDefeated: true, showQuestsCompleted: true, showAdventurersRecruited: true,