Skip to content

Commit 2e30755

Browse files
authored
Merge pull request #482 from priyakalamkar555-art/performance
[Project] Performance Evaluator
2 parents 7098ba6 + 519ee5a commit 2e30755

5 files changed

Lines changed: 443 additions & 0 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Performance Evaluator (Analytics App)
2+
3+
## Description
4+
5+
Added an Analytics App that helps users track and visualize their learning performance through detailed insights, progress monitoring, and subject-wise analysis.
6+
7+
## Features
8+
9+
* Performance data input (scores and study time)
10+
* Weekly and monthly analytics charts
11+
* Subject-wise performance analysis
12+
* Identification of weak and strong areas
13+
* Interactive progress dashboard
14+
* Learning trend visualization
15+
16+
## Benefits
17+
18+
* Tracks academic performance effectively
19+
* Helps identify strengths and improvement areas
20+
* Supports data-driven study planning
21+
* Encourages consistent progress monitoring
22+
23+
## Future Improvements
24+
25+
* Goal-setting and achievement tracking
26+
* Personalized study recommendations
27+
* Performance comparison reports
28+
* Revision and practice suggestions
29+
* Exportable analytics reports
30+
* Learning streak tracker
31+
32+
## Use Cases
33+
34+
* Exam preparation monitoring
35+
* Study performance tracking
36+
* Subject-wise progress evaluation
37+
* Academic self-assessment
38+
39+
## Learning Outcome
40+
41+
Users gain valuable insights into their study habits and performance, enabling smarter learning decisions and continuous improvement.
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Academic Performance Tracker • TaskQuest</title>
7+
<meta name="description" content="Track your course grades, topic mastery, and detailed academic performance reports." />
8+
<!-- Fonts & Icons -->
9+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700;800&family=Poppins:wght@600;800&display=swap" rel="stylesheet">
10+
<link href="https://cdn.jsdelivr.net/npm/remixicon@4.2.0/fonts/remixicon.css" rel="stylesheet">
11+
<link rel="stylesheet" href="style.css">
12+
</head>
13+
<body data-theme="cosmic">
14+
<div class="container">
15+
<header style="display: flex; justify-content: space-between; align-items: center; text-align: left; flex-wrap: wrap; gap: 15px;">
16+
<div>
17+
<h1>Performance Evaluator</h1>
18+
<p style="color: var(--text-light);">Analyze your academic progress and focus on what matters most.</p>
19+
</div>
20+
<a href="index.html" class="btn" style="background: rgba(255,255,255,0.05); border: 1px solid var(--border); color: var(--text); text-decoration: none; padding: 10px 18px;"><i class="ri-home-4-line"></i> Dashboard</a>
21+
</header>
22+
23+
<div class="glass-card">
24+
<div class="form-section">
25+
<div class="input-field">
26+
<label for="username">Scholar Name</label>
27+
<input type="text" id="username" placeholder="Enter your username...">
28+
</div>
29+
30+
<div class="input-field">
31+
<label>Manage Subjects</label>
32+
<div id="subjectList" class="subject-list">
33+
<div class="subject-row">
34+
<input type="text" class="sub-name" placeholder="Subject Name">
35+
<input type="number" class="sub-marks" placeholder="Obtained">
36+
<input type="number" class="sub-total" placeholder="Total Marks">
37+
<button class="btn btn-remove" onclick="this.parentElement.remove()"><i class="ri-delete-bin-line"></i></button>
38+
</div>
39+
</div>
40+
<button class="btn btn-add" onclick="addSubjectRow()">
41+
<i class="ri-add-line"></i> Add Subject
42+
</button>
43+
</div>
44+
45+
<button class="btn btn-track" onclick="evaluatePerformance()">
46+
<i class="ri-line-chart-line"></i> Track Progress
47+
</button>
48+
</div>
49+
50+
<div id="analysis-result"></div>
51+
</div>
52+
</div>
53+
<script src="script.js"></script>
54+
</body>
55+
</html>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"title": "Performance Evaluator",
3+
"description": "Track your course grades, topic mastery, and detailed academic performance reports.",
4+
"author": {
5+
"name": " Priya Kalamkar",
6+
"github": "priyakalamkar555-art"
7+
},
8+
"tags": [
9+
"academic",
10+
"performance",
11+
"grades",
12+
"evaluation",
13+
"tracking",
14+
"vanilla-js"
15+
],
16+
"entry": "index.html",
17+
"thumbnail": null
18+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
function loadSavedSubjects() {
2+
const savedPerf = localStorage.getItem('quests_performance');
3+
const container = document.getElementById('subjectList');
4+
container.innerHTML = '';
5+
6+
let loadedData = [];
7+
if (savedPerf) {
8+
try {
9+
loadedData = JSON.parse(savedPerf);
10+
} catch(e) {
11+
loadedData = [];
12+
}
13+
}
14+
15+
if (loadedData.length > 0) {
16+
loadedData.forEach(sub => {
17+
const div = document.createElement('div');
18+
div.className = 'subject-row';
19+
div.innerHTML = `
20+
<input type="text" class="sub-name" placeholder="Subject Name" value="${sub.name || ''}">
21+
<input type="number" class="sub-marks" placeholder="Obtained" value="${sub.obtained !== undefined ? sub.obtained : ''}">
22+
<input type="number" class="sub-total" placeholder="Total Marks" value="${sub.total !== undefined ? sub.total : ''}">
23+
<button class="btn btn-remove" onclick="this.parentElement.remove()"><i class="ri-delete-bin-line"></i></button>
24+
`;
25+
container.appendChild(div);
26+
});
27+
} else {
28+
addSubjectRow();
29+
}
30+
31+
const profile = JSON.parse(localStorage.getItem('quests_profile') || '{}');
32+
if (profile.name) {
33+
document.getElementById('username').value = profile.name;
34+
}
35+
}
36+
37+
function addSubjectRow() {
38+
const container = document.getElementById('subjectList');
39+
const div = document.createElement('div');
40+
div.className = 'subject-row';
41+
div.innerHTML = `
42+
<input type="text" class="sub-name" placeholder="Subject Name">
43+
<input type="number" class="sub-marks" placeholder="Obtained">
44+
<input type="number" class="sub-total" placeholder="Total Marks">
45+
<button class="btn btn-remove" onclick="this.parentElement.remove()"><i class="ri-delete-bin-line"></i></button>
46+
`;
47+
container.appendChild(div);
48+
}
49+
50+
function evaluatePerformance() {
51+
const user = document.getElementById('username').value.trim() || 'Scholar';
52+
53+
// Save profile name back to quests_profile if edited
54+
const profile = JSON.parse(localStorage.getItem('quests_profile') || '{"name": "Scholar"}');
55+
profile.name = user;
56+
localStorage.setItem('quests_profile', JSON.stringify(profile));
57+
58+
const rows = document.querySelectorAll('.subject-row');
59+
const results = [];
60+
const saveList = [];
61+
62+
rows.forEach(row => {
63+
const name = row.querySelector('.sub-name').value.trim();
64+
const marks = parseFloat(row.querySelector('.sub-marks').value);
65+
const total = parseFloat(row.querySelector('.sub-total').value);
66+
67+
if (name && !isNaN(marks) && !isNaN(total) && total > 0) {
68+
const percent = (marks / total) * 100;
69+
results.push({ name, percent });
70+
saveList.push({ name, obtained: marks, total, percentage: percent });
71+
}
72+
});
73+
74+
if (results.length === 0) return alert('Please enter at least one subject with valid marks!');
75+
76+
// Save performance details to localstorage for report page
77+
localStorage.setItem('quests_performance', JSON.stringify(saveList));
78+
79+
results.sort((a, b) => b.percent - a.percent);
80+
const strong = results[0];
81+
const weak = results[results.length - 1];
82+
const resDiv = document.getElementById('analysis-result');
83+
84+
resDiv.style.display = 'block';
85+
resDiv.innerHTML = `
86+
<div class="result-box strong">
87+
<i class="ri-medal-fill"></i>
88+
<div class="result-text">
89+
<h3>Peak Performance: ${strong.name}</h3>
90+
<p><strong>${user}</strong> Your Strong Subject is <strong>${strong.name}</strong>, Keep going champ!</p>
91+
</div>
92+
</div>
93+
<div class="result-box weak">
94+
<i class="ri-error-warning-fill"></i>
95+
<div class="result-text">
96+
<h3>Focus Required: ${weak.name}</h3>
97+
<p><strong>${user}</strong> Your Weak subject is <strong>${weak.name}</strong>, Study hard dude!</p>
98+
</div>
99+
</div>
100+
<div style="text-align: center; margin-top: 20px;">
101+
<a href="report.html" class="btn btn-track" style="display: inline-flex; text-decoration: none; padding: 12px 24px; font-size: 14px;"><i class="ri-file-chart-line"></i> View Academic Report</a>
102+
</div>
103+
`;
104+
resDiv.scrollIntoView({ behavior: 'smooth' });
105+
}
106+
107+
// Theme sync with TaskQuest
108+
const currentTheme = localStorage.getItem('quests_theme') || 'cosmic';
109+
document.body.setAttribute('data-theme', currentTheme);
110+
111+
// Load subjects on page load
112+
window.addEventListener('DOMContentLoaded', loadSavedSubjects);

0 commit comments

Comments
 (0)