feat(stats): add stats page and pile trend
Build, Test & Push Frontend / quality-check (push) Successful in 15s
Build, Test & Push Frontend / docker (push) Successful in 22s

Show the stat groups on /stats, the pile trend on the dashboard card,
one switch per group in the settings, and the shared groups on the
public profile.
This commit is contained in:
lobo committed 2026-09-27 07:16:10 +02:00
1 parent 83bbc2730d
commit 9d1c7bb40d
31 files changed
+978 -11

No files matched your search

+90 -1
View File
@@ -34,6 +34,9 @@
"ERROR_TOO_MANY_ATTEMPTS": "Zu viele fehlgeschlagene Versuche. Bitte in {{minutes}} Minuten erneut versuchen."
},
"SETTINGS": {
"PROFILE_STATS": "Statistik im öffentlichen Profil",
"PROFILE_STATS_HINT": "Wähle, was Besucher sehen. Deine Summen und Status sind immer da.",
"PROFILE_STATS_NEEDS_PUBLIC": "Mach dein Profil zuerst öffentlich.",
"TITLE": "Einstellungen",
"LOADING": "Einstellungen werden geladen …",
"ACCOUNT": "Konto",
@@ -257,7 +260,8 @@
"LANGUAGE": "Sprache",
"DARK_MODE": "Dunkles Design",
"LIGHT_MODE": "Helles Design",
"PLAY_NEXT": "Nächstes Spiel"
"PLAY_NEXT": "Nächstes Spiel",
"STATS": "Statistik"
},
"BACKLOG": {
"TITLE": "Mein Backlog",
@@ -369,5 +373,90 @@
"REMOVE_NO": "Abbrechen",
"REMOVED": "Spiel entfernt.",
"NO_ACHIEVEMENTS": "Erfolge gibt es nur für Steam-Spiele."
},
"STATS": {
"TITLE": "Deine Statistik",
"SUBTITLE": "Zahlen zu deiner Bibliothek. Ausgeblendete Spiele zählen nicht.",
"ERROR_LOAD": "Deine Statistik konnte nicht geladen werden.",
"OVERVIEW": {
"TITLE": "Überblick",
"GAMES": "Spiele",
"PLAYTIME": "Spielzeit gesamt",
"PLAYED": "Angefangen",
"NEVER_STARTED": "Nie gestartet"
},
"PILE": {
"TITLE": "Pile of Shame",
"GAMES": "Spiele auf dem Stapel",
"NORMAL": "Zum Durchspielen",
"COMPLETIONIST": "Für 100 %",
"KNOWN_one": "IGDB kennt {{count}} davon",
"KNOWN_other": "IGDB kennt {{count}} davon",
"PACE": "In deinem Tempo ({{perWeek}} pro Woche in den letzten 90 Tagen) sind das {{weeks}} Wochen.",
"PACE_NONE": "Keine Spielzeit in den letzten 90 Tagen, daher noch kein Tempo.",
"WORK_YEARS": "Das sind mindestens {{years}} Jahre Vollzeitarbeit (40 Stunden pro Woche).",
"OLDEST": "Ältestes ungespieltes Spiel",
"SINCE": "seit {{date}}"
},
"TREND": {
"TITLE": "Stapel-Verlauf",
"THIS_MONTH": "Diesen Monat: +{{added}} dazu, −{{done}} vom Stapel",
"STARTS": "Der Verlauf beginnt heute. Morgen gibt es die erste Linie."
},
"TOP_GAMES": {
"TITLE": "Top-Spiele",
"EMPTY": "Noch keine Spielzeit.",
"LOYAL": "Treuestes Spiel",
"MONTHS_one": "in {{count}} Monat gespielt",
"MONTHS_other": "in {{count}} Monaten gespielt"
},
"TASTE": {
"TITLE": "Dein Geschmack",
"GENRES": "Genres",
"MOODS": "Stimmungen",
"GAMES_one": "{{count}} Spiel",
"GAMES_other": "{{count}} Spiele",
"EMPTY": "Noch keine Genres. Sie kommen von IGDB und füllen sich in den nächsten Stunden."
},
"HABITS": {
"TITLE": "Fun Facts",
"MOON": "Flüge zum Mond und zurück",
"MOON_HINT": "Apollo 11 brauchte 195 Stunden.",
"LONGEST_DAY": "Längster Spieltag",
"UNDER_ONE_HOUR": "Angefangen, aber unter 1 Stunde",
"UNDER_ONE_HOUR_HINT_one": "{{count}} Spiel",
"UNDER_ONE_HOUR_HINT_other": "{{count}} Spiele"
},
"FINISHED": {
"TITLE": "Durchgespielt pro Jahr",
"EMPTY": "Seit Beginn des Verlaufs noch kein Spiel durchgespielt.",
"BEFORE_one": "{{count}} weiteres Spiel wurde vor Beginn des Verlaufs durchgespielt.",
"BEFORE_other": "{{count}} weitere Spiele wurden vor Beginn des Verlaufs durchgespielt."
},
"GENRE": {
"ADVENTURE": "Adventure",
"ARCADE": "Arcade",
"CARD_BOARD_GAME": "Karten- & Brettspiel",
"FIGHTING": "Beat 'em up",
"HACK_AND_SLASH_BEAT_EM_UP": "Hack and Slash",
"INDIE": "Indie",
"MOBA": "MOBA",
"MUSIC": "Musik",
"PINBALL": "Flipper",
"PLATFORM": "Jump 'n' Run",
"POINT_AND_CLICK": "Point & Click",
"PUZZLE": "Rätsel",
"QUIZ_TRIVIA": "Quiz",
"RACING": "Rennspiel",
"REAL_TIME_STRATEGY_RTS": "Echtzeitstrategie",
"ROLE_PLAYING_RPG": "Rollenspiel",
"SHOOTER": "Shooter",
"SIMULATOR": "Simulation",
"SPORT": "Sport",
"STRATEGY": "Strategie",
"TACTICAL": "Taktik",
"TURN_BASED_STRATEGY_TBS": "Rundenstrategie",
"VISUAL_NOVEL": "Visual Novel"
}
}
}
+90 -1
View File
@@ -34,6 +34,9 @@
"ERROR_TOO_MANY_ATTEMPTS": "Too many failed attempts. Please try again in {{minutes}} minutes."
},
"SETTINGS": {
"PROFILE_STATS": "Stats on the public profile",
"PROFILE_STATS_HINT": "Pick what visitors see. Your totals and statuses are always there.",
"PROFILE_STATS_NEEDS_PUBLIC": "Make your profile public first.",
"TITLE": "Settings",
"LOADING": "Loading settings …",
"ACCOUNT": "Account",
@@ -257,7 +260,8 @@
"LANGUAGE": "Language",
"DARK_MODE": "Dark mode",
"LIGHT_MODE": "Light mode",
"PLAY_NEXT": "Play next"
"PLAY_NEXT": "Play next",
"STATS": "Stats"
},
"BACKLOG": {
"TITLE": "My backlog",
@@ -369,5 +373,90 @@
"REMOVE_NO": "Cancel",
"REMOVED": "Game removed.",
"NO_ACHIEVEMENTS": "Achievements exist only for Steam games."
},
"STATS": {
"TITLE": "Your stats",
"SUBTITLE": "Numbers about your library. Hidden games do not count.",
"ERROR_LOAD": "Could not load your stats.",
"OVERVIEW": {
"TITLE": "Overview",
"GAMES": "Games",
"PLAYTIME": "Total playtime",
"PLAYED": "Started",
"NEVER_STARTED": "Never started"
},
"PILE": {
"TITLE": "Pile of Shame",
"GAMES": "Games on the pile",
"NORMAL": "To finish them",
"COMPLETIONIST": "To 100 % them",
"KNOWN_one": "IGDB knows {{count}} of them",
"KNOWN_other": "IGDB knows {{count}} of them",
"PACE": "At your pace ({{perWeek}} a week in the last 90 days) that is {{weeks}} weeks.",
"PACE_NONE": "No playtime in the last 90 days, so no pace yet.",
"WORK_YEARS": "That is at least {{years}} years of full-time work (40 hours a week).",
"OLDEST": "Oldest unplayed game",
"SINCE": "since {{date}}"
},
"TREND": {
"TITLE": "Pile trend",
"THIS_MONTH": "This month: +{{added}} added, −{{done}} off the pile",
"STARTS": "The trend starts today. Come back tomorrow for the first line."
},
"TOP_GAMES": {
"TITLE": "Top games",
"EMPTY": "No playtime yet.",
"LOYAL": "Most loyal game",
"MONTHS_one": "played in {{count}} month",
"MONTHS_other": "played in {{count}} months"
},
"TASTE": {
"TITLE": "Your taste",
"GENRES": "Genres",
"MOODS": "Moods",
"GAMES_one": "{{count}} game",
"GAMES_other": "{{count}} games",
"EMPTY": "No genres yet. They come from IGDB and fill in over the next hours."
},
"HABITS": {
"TITLE": "Fun facts",
"MOON": "Trips to the moon and back",
"MOON_HINT": "Apollo 11 took 195 hours.",
"LONGEST_DAY": "Longest gaming day",
"UNDER_ONE_HOUR": "Started, but under 1 hour",
"UNDER_ONE_HOUR_HINT_one": "{{count}} game",
"UNDER_ONE_HOUR_HINT_other": "{{count}} games"
},
"FINISHED": {
"TITLE": "Finished per year",
"EMPTY": "No finished game since the history started.",
"BEFORE_one": "{{count}} more game was finished before the history started.",
"BEFORE_other": "{{count}} more games were finished before the history started."
},
"GENRE": {
"ADVENTURE": "Adventure",
"ARCADE": "Arcade",
"CARD_BOARD_GAME": "Card & board game",
"FIGHTING": "Fighting",
"HACK_AND_SLASH_BEAT_EM_UP": "Hack and slash",
"INDIE": "Indie",
"MOBA": "MOBA",
"MUSIC": "Music",
"PINBALL": "Pinball",
"PLATFORM": "Platformer",
"POINT_AND_CLICK": "Point-and-click",
"PUZZLE": "Puzzle",
"QUIZ_TRIVIA": "Quiz",
"RACING": "Racing",
"REAL_TIME_STRATEGY_RTS": "Real-time strategy",
"ROLE_PLAYING_RPG": "Role-playing",
"SHOOTER": "Shooter",
"SIMULATOR": "Simulation",
"SPORT": "Sports",
"STRATEGY": "Strategy",
"TACTICAL": "Tactics",
"TURN_BASED_STRATEGY_TBS": "Turn-based strategy",
"VISUAL_NOVEL": "Visual novel"
}
}
}