diff --git a/T-115_QuanDevs/.vscode/settings.json b/T-115_QuanDevs/.vscode/settings.json
new file mode 100644
index 00000000..6f3a2913
--- /dev/null
+++ b/T-115_QuanDevs/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "liveServer.settings.port": 5501
+}
\ No newline at end of file
diff --git a/T-115_QuanDevs/README.md b/T-115_QuanDevs/README.md
new file mode 100644
index 00000000..b67dff0d
--- /dev/null
+++ b/T-115_QuanDevs/README.md
@@ -0,0 +1,58 @@
+# π₯ HealthSpot
+**Your Health, Our Priority**
+
+π Hosted Website: [π Click Here](https://myhealthspot.netlify.app/)
+
+---
+
+## π Project Overview
+**HealthSpot** is a healthcare web application built to simplify storing, accessing, and managing medical records.
+It generates a **unique 9-digit Health ID Number πͺͺ** for every user, which securely stores their complete health history and records online.
+
+---
+
+## π Features
+- β
Generates a **9-digit unique Health ID**
+- π©Ί Stores and manages **complete health records**
+- π» Clean, responsive, and user-friendly interface
+- βοΈ Cloud-based access β no installation needed
+
+---
+
+## πΈ Screenshot
+
+
+### πΌοΈ Local Project Screenshot
+
+
+
+
+---
+
+## π¨βπ» Team Information
+
+| Team Name | QunDevs |
+|-----------|----------|
+| **Team ID** | t115 |
+
+### π₯ Members & Roles
+- **Rajdeep** β Team Leader & Overall Manager
+- **Gurkirat** β Backend Developer
+- **Nikhil** β Frontend Developer
+- **Armaan** β Frontend Developer
+- **Ipsit** β Presentation (PPT)
+
+---
+
+## π οΈ Tech Stack Used
+- **Frontend:** HTML, CSS, JavaScript
+- **Backend:** Python
+
+---
+
+## βοΈ How to Run the Project
+
+### π Option 1: Run Online
+The project is deployed and can be accessed directly here:
+π [HealthSpot Live Website](https://myhealthspot.netlify.app/)
+
diff --git a/T-115_QuanDevs/T-115_QuanDev.pptx b/T-115_QuanDevs/T-115_QuanDev.pptx
new file mode 100644
index 00000000..8ccb33de
Binary files /dev/null and b/T-115_QuanDevs/T-115_QuanDev.pptx differ
diff --git a/T-115_QuanDevs/index.html b/T-115_QuanDevs/index.html
new file mode 100644
index 00000000..75564205
--- /dev/null
+++ b/T-115_QuanDevs/index.html
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+ HealthSpot - Aadhaar For Healthcare
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Aadhaar For Healthcare
+
Simplify your medical records with HealthSpotβs secure,
+ Aadhaar-like Health ID. Access anytime, anywhere.
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
Why Choose HealthSpot?
+
+
+
π
+
Universal Health ID
+
Carry your complete medical history in one secure digital HealthSpot ID.
+
+
+
π±
+
QR Code for Easy Sharing
+
Generate a secure QR code to instantly share your health data with doctors, hospitals, or emergency
+ responders.
+
+
+
β‘
+
Instant Access
+
Access your health data anytime, from any device, in seconds.
+
+
+
+
+
+
+
+
+
Applications & Use Cases
+
+ -
+ π«
+ Colleges: Efficiently manage student health records for prompt emergency care.
+
+ -
+ π₯
+ Hospitals: Securely store patient histories to facilitate faster and accurate treatments.
+
+ -
+ π
+ Insurance: Simplify claim processing with verified and trusted medical data.
+
+ -
+ π€
+ Individuals: Securely store and share your personal health information anytime.
+
+ -
+ π
+ Emergency Services: Provide first responders with instant access to critical health data.
+
+ -
+ π’
+ Corporates: Monitor and promote wellness programs to enhance employee health.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/T-115_QuanDevs/pages/admin.html b/T-115_QuanDevs/pages/admin.html
new file mode 100644
index 00000000..98abf83a
--- /dev/null
+++ b/T-115_QuanDevs/pages/admin.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+ Admin Login - HealthSpot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/T-115_QuanDevs/pages/admin.js b/T-115_QuanDevs/pages/admin.js
new file mode 100644
index 00000000..b56e856d
--- /dev/null
+++ b/T-115_QuanDevs/pages/admin.js
@@ -0,0 +1,406 @@
+const BIN_ID = '68344ecd8a456b7966a583dd';
+const API_KEY = '$2a$10$zyQpm6tNv6SvPgWM2E1D1eDfvL1zWu8pc2YI1prGoUikZKK4Zwhd.';
+
+document.addEventListener('DOMContentLoaded', () => {
+ const loginForm = document.getElementById('loginForm');
+ loginForm.addEventListener('submit', handleLogin);
+
+ // Add loader CSS globally once
+ const style = document.createElement('style');
+ style.innerHTML = `
+ .loader {
+ border: 8px solid #e5e7eb;
+ border-top: 8px solid #3490dc;
+ border-radius: 9999px;
+ width: 6rem;
+ height: 6rem;
+ animation: spin 1s linear infinite;
+ }
+ @keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(360deg); }
+ }
+ `;
+ document.head.appendChild(style);
+});
+
+async function handleLogin(event) {
+ event.preventDefault();
+ const loginId = event.target.loginId.value.trim();
+ const password = event.target.password.value;
+
+ if (loginId === 'admin' && password === 'singh@armaan') {
+ const main = document.getElementById('mainContent');
+ main.innerHTML = `
+
+
+
Loading user data...
+
+ `;
+
+ await loadAllUsers();
+ } else {
+ alert('Invalid login ID or password');
+ }
+}
+
+async function loadAllUsers() {
+ const main = document.getElementById('mainContent');
+ main.innerHTML = `
+
+
+
Loading all users...
+
+ `;
+
+ try {
+ const response = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}/latest`, {
+ headers: { 'X-Master-Key': API_KEY }
+ });
+
+ if (!response.ok) throw new Error('Failed to fetch user data');
+
+ const data = await response.json();
+ const users = data.record || [];
+
+
+ showAllUsers(users);
+ } catch (error) {
+ main.innerHTML = `Error loading user data: ${error.message}
`;
+ }
+}
+
+
+
+
+ function renderSearchBar() {
+ const main = document.getElementById('mainContent');
+
+ // Remove existing search container if any
+ const existingSearch = document.getElementById('searchContainer');
+ if (existingSearch) existingSearch.remove();
+
+ const searchContainer = document.createElement('div');
+ searchContainer.id = 'searchContainer';
+ searchContainer.className = 'max-w-3xl mx-auto mb-6 flex items-center gap-2';
+
+ searchContainer.innerHTML = `
+
+
+
+ `;
+
+ main.appendChild(searchContainer);
+
+ document.getElementById('searchInput').addEventListener('keydown', (e) => {
+ if (e.key === 'Enter') searchUsers();
+ });
+ }
+
+ function resetSearch() {
+ const searchInput = document.getElementById('searchInput');
+ if (!searchInput) return;
+
+ searchInput.value = '';
+ // Reload all users
+ loadAllUsers(); // assuming you have a function to load and show all users
+ }
+
+function showAllUsers(users) {
+ const main = document.getElementById('mainContent');
+ main.innerHTML = '';
+ main.className = 'p-6 mt-20 min-h-screen';
+
+ // Add Search Bar at the top
+ renderSearchBar();
+
+ const deleteAllBtn = document.getElementById('deleteAllBtn');
+
+ if (users.length > 0) {
+ deleteAllBtn.style.display = 'inline-block';
+
+ users.sort((a, b) => {
+ // Check if a or b is the default user (no fullName or 'User')
+ const aIsDefault = !a.fullName || a.fullName === 'Default User';
+ const bIsDefault = !b.fullName || b.fullName === 'Default User';
+
+ if (aIsDefault && !bIsDefault) return 1; // a should come after b
+ if (!aIsDefault && bIsDefault) return -1; // a should come before b
+
+ // If both are default or both not default, sort by date desc
+ return new Date(b.registeredAt) - new Date(a.registeredAt);
+ });
+ } else {
+ deleteAllBtn.style.display = 'none';
+ renderSearchBar();
+ main.innerHTML += `No users found matching your search.
`;
+ return;
+ }
+
+ users.forEach(user => {
+ const container = document.createElement('div');
+ container.className = 'bg-white p-6 rounded-xl shadow-md mb-6 max-w-3xl mx-auto w-full text-blue-900';
+
+ const date = new Date(user.registeredAt);
+ const formattedDate = `${date.getDate()} ${date.toLocaleString('default', { month: 'short' })} ${date.getFullYear()} - ${date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: true })}`;
+
+ container.innerHTML = `
+
+
${user.fullName || 'User'}
+
+
+
+
Health ID: ${user.healthId || 'N/A'}
+
Email: ${user.email || 'N/A'}
+
Phone: ${user.phone || 'N/A'}
+
DOB: ${user.dob || 'N/A'}
+
Gender: ${user.gender || 'N/A'}
+
Blood Group: ${user.bloodGroup || 'Not Provided'}
+
Allergies: ${user.allergies || 'Not Provided'}
+
Chronic Conditions: ${user.chronicConditions || 'Not Provided'}
+
Current Medications: ${user.currentMedications || 'Not Provided'}
+
Medical History: ${user.medicalHistory || 'None'}
+
Registered At: ${user.registeredAt ? formattedDate : 'N/A'}
+
+ `;
+
+ main.appendChild(container);
+ });
+}
+
+async function searchUsers() {
+ const searchInput = document.getElementById('searchInput');
+ if (!searchInput) {
+ console.error("Search input not found!");
+ return;
+ }
+
+ const query = searchInput.value.trim().toLowerCase();
+ const main = document.getElementById('mainContent');
+
+ try {
+ const response = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}/latest`, {
+ headers: { 'X-Master-Key': API_KEY }
+ });
+ if (!response.ok) throw new Error('Failed to fetch user data');
+ const data = await response.json();
+ const users = data.record || [];
+
+ if (!query) {
+ showAllUsers(users);
+ return;
+ }
+
+ const filteredUsers = users.filter(user => {
+ const fullName = (user.fullName || '').toLowerCase();
+ const healthId = (user.healthId || '').toLowerCase();
+ return fullName.includes(query) || healthId.includes(query);
+ });
+
+ if (filteredUsers.length === 0) {
+ main.innerHTML = '';
+ main.className = 'p-6 mt-20 min-h-screen';
+ renderSearchBar();
+ main.innerHTML += `No users found matching "${query}".
`;
+ return;
+ }
+
+ showAllUsers(filteredUsers);
+
+ } catch (error) {
+ main.innerHTML = `Error loading user data: ${error.message}
`;
+ }
+}
+
+
+
+async function deleteAllUsers() {
+ if (!confirm("Are you sure you want to delete ALL users? This action cannot be undone.")) return;
+
+ // Default user to prevent blank bin error
+ const defaultUser = {
+ id: "default",
+ fullName: "Default User",
+ registeredAt: new Date().toISOString()
+ };
+
+ try {
+ const updateResponse = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Master-Key': API_KEY,
+ 'X-Bin-Versioning': 'false'
+ },
+ body: JSON.stringify([defaultUser])
+ });
+
+ if (!updateResponse.ok) {
+ const errorData = await updateResponse.json();
+ console.error('Delete all users error:', errorData);
+ throw new Error(errorData.message || 'Failed to delete all users');
+ }
+
+ alert('All users deleted successfully');
+ await loadAllUsers();
+
+ } catch (error) {
+ alert(`Error deleting all users: ${error.message}`);
+ }
+}
+
+
+
+async function deleteUser(healthId) {
+ if (!confirm("Are you sure you want to delete this user?")) return;
+
+ try {
+ // Fetch latest data
+ const response = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}/latest`, {
+ headers: { 'X-Master-Key': API_KEY }
+ });
+ const data = await response.json();
+ let users = data.record || [];
+
+ // Remove the selected user by healthId
+ users = users.filter(user => user.healthId !== healthId);
+
+ // PUT the updated data back (with versioning disabled)
+ const updateResponse = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Master-Key': API_KEY,
+ 'X-Bin-Versioning': 'false'
+ },
+ body: JSON.stringify(users)
+ });
+
+ if (!updateResponse.ok) throw new Error('Failed to delete user');
+
+ alert('User deleted successfully');
+ await loadAllUsers();
+
+ } catch (error) {
+ alert(`Error deleting user: ${error.message}`);
+ }
+}
+
+function closeEditModal() {
+ document.getElementById('editModal').classList.add('hidden');
+}
+
+async function editUser(healthId) {
+ try {
+ const response = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}/latest`, {
+ headers: { 'X-Master-Key': API_KEY }
+ });
+ const data = await response.json();
+ const users = data.record || [];
+ const user = users.find(u => u.healthId === healthId);
+
+ if (!user) {
+ alert('User not found!');
+ return;
+ }
+
+ // Fill form fields
+ const form = document.getElementById('editForm');
+ form.healthId.value = user.healthId;
+ form.fullName.value = user.fullName || '';
+ form.email.value = user.email || '';
+ form.phone.value = user.phone || '';
+ form.bloodGroup.value = user.bloodGroup || '';
+ form.allergies.value = user.allergies || '';
+ form.conditions.value = user.chronicConditions || '';
+ form.medications.value = user.currentMedications || '';
+ form.medicalHistory.value = user.medicalHistory || '';
+
+ // Show modal
+ document.getElementById('editModal').classList.remove('hidden');
+
+ } catch (error) {
+ alert(`Error fetching user: ${error.message}`);
+ }
+}
+
+document.getElementById('editForm').addEventListener('submit', async (event) => {
+ event.preventDefault();
+ const form = event.target;
+
+ try {
+ const response = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}/latest`, {
+ headers: { 'X-Master-Key': API_KEY }
+ });
+ const data = await response.json();
+ let users = data.record || [];
+
+ const index = users.findIndex(u => u.healthId === form.healthId.value);
+ if (index === -1) {
+ alert('User not found');
+ return;
+ }
+
+ // Update user object
+ users[index] = {
+ ...users[index],
+ fullName: form.fullName.value,
+ email: form.email.value,
+ phone: form.phone.value,
+ bloodGroup: form.bloodGroup.value,
+ allergies: form.allergies.value,
+ chronicConditions: form.conditions.value,
+ currentMedications: form.medications.value,
+ medicalHistory: form.medicalHistory.value
+ };
+
+ // PUT updated data back
+ const updateResponse = await fetch(`https://api.jsonbin.io/v3/b/${BIN_ID}`, {
+ method: 'PUT',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'X-Master-Key': API_KEY,
+ 'X-Bin-Versioning': 'false'
+ },
+ body: JSON.stringify(users)
+ });
+
+ if (!updateResponse.ok) throw new Error('Failed to update user');
+
+ alert('User updated successfully');
+ closeEditModal();
+ await loadAllUsers();
+
+ } catch (error) {
+ alert(`Error updating user: ${error.message}`);
+ }
+});
+
diff --git a/T-115_QuanDevs/pages/already-user.html b/T-115_QuanDevs/pages/already-user.html
new file mode 100644
index 00000000..cacb122b
--- /dev/null
+++ b/T-115_QuanDevs/pages/already-user.html
@@ -0,0 +1,73 @@
+
+
+
+
+
+ HealthSpot - Check Your Health Details
+
+
+
+
+
+
+
+
+