@@ -351,6 +351,7 @@ <h4 class="mb-1"><i class="bi bi-bar-chart"></i> My Stats</h4>
351351 <div class="d-flex flex-wrap gap-2 mb-3">
352352 <button class="btn btn-primary" id="refreshStatsBtn"><i class="bi bi-arrow-clockwise me-1"></i> Refresh stats</button>
353353 </div>
354+ <div id="levelProgression" class="mb-3"></div>
354355 <div id="statsResponse" class="response-area"></div>
355356 </div>
356357 ` ) ;
@@ -364,24 +365,32 @@ <h4 class="mb-1"><i class="bi bi-bar-chart"></i> My Stats</h4>
364365 try {
365366 const s = ( await apiCall ( 'GET' , `/api/stats/${ userId } ` ) ) . data ;
366367 const percent = ( s . currentExperience / s . maxLvlExperience ) * 100 ;
367- const progressBar = `
368- <div class="mt-3">
369- <strong>Level ${ s . level } progress:</strong> ${ s . currentExperience } / ${ s . maxLvlExperience } XP
370- <div class="progress mt-1" style="height: 20px;">
371- <div class="progress-bar bg-success" role="progressbar" style="width: ${ percent } %;" aria-valuenow="${ percent } " aria-valuemin="0" aria-valuemax="100">${ Math . round ( percent ) } %</div>
368+
369+ const progressHtml = `
370+ <div class="card p-3">
371+ <h5><i class="bi bi-graph-up"></i> Level Progression</h5>
372+ <strong>Level ${ s . level } </strong><br>
373+ <div class="progress mt-2" style="height: 25px;">
374+ <div class="progress-bar bg-success" role="progressbar" style="width: ${ percent } %;" aria-valuenow="${ percent } " aria-valuemin="0" aria-valuemax="100">
375+ ${ Math . round ( percent ) } %
376+ </div>
372377 </div>
378+ <small class="text-muted">${ s . currentExperience } / ${ s . maxLvlExperience } XP to next level</small>
373379 </div>
374380 ` ;
375- const html = `
381+
382+ const statsHtml = `
376383 <strong>Level:</strong> ${ s . level } <br>
377384 <strong>XP:</strong> ${ s . currentExperience } / ${ s . maxLvlExperience } <br>
378385 <strong>Avg Reading Time:</strong> ${ s . averageReadingTime } min<br>
379386 <strong>Books Read:</strong> ${ s . readingCount } <br>
380- ${ progressBar }
381387 ` ;
382- showResponse ( 'statsResponse' , html ) ;
388+
389+ $ ( '#levelProgression' ) . html ( progressHtml ) ;
390+ showResponse ( 'statsResponse' , statsHtml ) ;
383391 } catch ( e ) {
384392 showResponse ( 'statsResponse' , null , e . message ) ;
393+ $ ( '#levelProgression' ) . html ( '<div class="alert alert-danger">Failed to load progression</div>' ) ;
385394 }
386395 }
387396 async function updateStreak ( ) {
0 commit comments