Account Profile & Security
Two-Factor Authentication (2FA)
Secure your account by requiring an OTP sent to your registered mobile number upon log in.
Secure your account by requiring an OTP sent to your registered mobile number upon log in.
No family profiles added yet. Add family members to get smart size and outfit recommendations.
'; return; } container.innerHTML = data.profiles.map(p => `Failed to load family profiles.
'; } } function openFamilyProfileModal() { document.getElementById('familyProfileModal').style.display = 'flex'; } function closeFamilyProfileModal() { document.getElementById('familyProfileModal').style.display = 'none'; document.getElementById('familyProfileForm').reset(); } async function saveFamilyProfile(e) { e.preventDefault(); const btn = document.getElementById('saveFamilyBtn'); btn.innerHTML = ' Saving...'; btn.disabled = true; const body = { name: document.getElementById('fpName').value, relationship: document.getElementById('fpRelationship').value, age: document.getElementById('fpAge').value, gender: document.getElementById('fpGender').value, top_size: document.getElementById('fpTop').value, bottom_size: document.getElementById('fpBottom').value, shoe_size: document.getElementById('fpShoe').value }; try { const res = await fetch('/api/family-profiles', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${getToken()}` }, body: JSON.stringify(body) }); const data = await res.json(); if (data.success) { showToast('Family Profile saved!'); closeFamilyProfileModal(); loadFamilyProfiles(); } else { showToast(data.message, 'error'); } } catch (err) { showToast('Error saving profile', 'error'); } finally { btn.innerHTML = 'Save Profile'; btn.disabled = false; } } async function deleteFamilyProfile(id) { if(!confirm('Delete this family member profile?')) return; try { const res = await fetch('/api/family-profiles/' + id, { method: 'DELETE', headers: { 'Authorization': `Bearer ${getToken()}` } }); const data = await res.json(); if (data.success) { showToast('Profile deleted'); loadFamilyProfiles(); } } catch (err) { showToast('Error deleting profile', 'error'); } }