Spaces:
Running
Running
Add 1 files
Browse files- index.html +110 -3
index.html
CHANGED
@@ -70,6 +70,13 @@
|
|
70 |
background-color: #6e8efb !important;
|
71 |
color: #ffffff;
|
72 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
</style>
|
74 |
</head>
|
75 |
<body class="bg-gray-50 min-h-screen">
|
@@ -95,6 +102,16 @@
|
|
95 |
|
96 |
<!-- Main Content -->
|
97 |
<main class="container mx-auto px-4 py-8">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
98 |
<!-- Hero Section -->
|
99 |
<section class="mb-12">
|
100 |
<div class="bg-white rounded-xl p-8 card-shadow">
|
@@ -109,6 +126,9 @@
|
|
109 |
<button id="exploreBtn" class="border border-purple-600 text-purple-600 hover:bg-purple-50 px-6 py-3 rounded-lg font-medium transition duration-300 flex items-center">
|
110 |
<i class="fas fa-search mr-2"></i> Explore Cards
|
111 |
</button>
|
|
|
|
|
|
|
112 |
</div>
|
113 |
</div>
|
114 |
<div class="md:w-1/2 flex justify-center">
|
@@ -145,9 +165,14 @@
|
|
145 |
<section class="mb-12">
|
146 |
<div class="flex justify-between items-center mb-6">
|
147 |
<h2 class="text-2xl font-bold text-gray-800">My Credit Cards</h2>
|
148 |
-
<
|
149 |
-
<
|
150 |
-
|
|
|
|
|
|
|
|
|
|
|
151 |
</div>
|
152 |
<div id="myCardsContainer" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
153 |
<!-- Cards will be added here dynamically -->
|
@@ -566,10 +591,15 @@
|
|
566 |
const cardNameInput = document.getElementById('cardName');
|
567 |
const myCardsContainer = document.getElementById('myCardsContainer');
|
568 |
const refreshCardsBtn = document.getElementById('refreshCardsBtn');
|
|
|
|
|
569 |
const chatContainer = document.getElementById('chatContainer');
|
570 |
const chatInput = document.getElementById('chatInput');
|
571 |
const sendChatBtn = document.getElementById('sendChatBtn');
|
572 |
const quickQuestionBtns = document.querySelectorAll('.quick-question-btn');
|
|
|
|
|
|
|
573 |
|
574 |
// Modal toggle
|
575 |
addCardBtn.addEventListener('click', () => {
|
@@ -1012,6 +1042,83 @@
|
|
1012 |
addChatMessage('assistant', 'Your cards have been refreshed!');
|
1013 |
});
|
1014 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1015 |
// Initial render
|
1016 |
renderCards();
|
1017 |
</script>
|
|
|
70 |
background-color: #6e8efb !important;
|
71 |
color: #ffffff;
|
72 |
}
|
73 |
+
.rotate {
|
74 |
+
animation: rotate 1s linear infinite;
|
75 |
+
}
|
76 |
+
@keyframes rotate {
|
77 |
+
from { transform: rotate(0deg); }
|
78 |
+
to { transform: rotate(360deg); }
|
79 |
+
}
|
80 |
</style>
|
81 |
</head>
|
82 |
<body class="bg-gray-50 min-h-screen">
|
|
|
102 |
|
103 |
<!-- Main Content -->
|
104 |
<main class="container mx-auto px-4 py-8">
|
105 |
+
<!-- Sync Status Bar -->
|
106 |
+
<div id="syncStatus" class="hidden bg-blue-100 border-l-4 border-blue-500 text-blue-700 p-4 mb-6 rounded">
|
107 |
+
<div class="flex items-center">
|
108 |
+
<div id="syncSpinner" class="mr-3 rotate">
|
109 |
+
<i class="fas fa-sync-alt text-blue-500"></i>
|
110 |
+
</div>
|
111 |
+
<p id="syncMessage">Syncing your cards from connected banks...</p>
|
112 |
+
</div>
|
113 |
+
</div>
|
114 |
+
|
115 |
<!-- Hero Section -->
|
116 |
<section class="mb-12">
|
117 |
<div class="bg-white rounded-xl p-8 card-shadow">
|
|
|
126 |
<button id="exploreBtn" class="border border-purple-600 text-purple-600 hover:bg-purple-50 px-6 py-3 rounded-lg font-medium transition duration-300 flex items-center">
|
127 |
<i class="fas fa-search mr-2"></i> Explore Cards
|
128 |
</button>
|
129 |
+
<button id="syncCardsBtn" class="bg-blue-600 hover:bg-blue-700 text-white px-6 py-3 rounded-lg font-medium transition duration-300 flex items-center">
|
130 |
+
<i class="fas fa-sync-alt mr-2"></i> Sync Cards
|
131 |
+
</button>
|
132 |
</div>
|
133 |
</div>
|
134 |
<div class="md:w-1/2 flex justify-center">
|
|
|
165 |
<section class="mb-12">
|
166 |
<div class="flex justify-between items-center mb-6">
|
167 |
<h2 class="text-2xl font-bold text-gray-800">My Credit Cards</h2>
|
168 |
+
<div class="flex space-x-4">
|
169 |
+
<button id="refreshCardsBtn" class="text-purple-600 hover:text-purple-800 flex items-center">
|
170 |
+
<i class="fas fa-sync-alt mr-2"></i> Refresh
|
171 |
+
</button>
|
172 |
+
<button id="bankSyncBtn" class="text-blue-600 hover:text-blue-800 flex items-center">
|
173 |
+
<i class="fas fa-university mr-2"></i> Sync with Banks
|
174 |
+
</button>
|
175 |
+
</div>
|
176 |
</div>
|
177 |
<div id="myCardsContainer" class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
|
178 |
<!-- Cards will be added here dynamically -->
|
|
|
591 |
const cardNameInput = document.getElementById('cardName');
|
592 |
const myCardsContainer = document.getElementById('myCardsContainer');
|
593 |
const refreshCardsBtn = document.getElementById('refreshCardsBtn');
|
594 |
+
const bankSyncBtn = document.getElementById('bankSyncBtn');
|
595 |
+
const syncCardsBtn = document.getElementById('syncCardsBtn');
|
596 |
const chatContainer = document.getElementById('chatContainer');
|
597 |
const chatInput = document.getElementById('chatInput');
|
598 |
const sendChatBtn = document.getElementById('sendChatBtn');
|
599 |
const quickQuestionBtns = document.querySelectorAll('.quick-question-btn');
|
600 |
+
const syncStatus = document.getElementById('syncStatus');
|
601 |
+
const syncMessage = document.getElementById('syncMessage');
|
602 |
+
const syncSpinner = document.getElementById('syncSpinner');
|
603 |
|
604 |
// Modal toggle
|
605 |
addCardBtn.addEventListener('click', () => {
|
|
|
1042 |
addChatMessage('assistant', 'Your cards have been refreshed!');
|
1043 |
});
|
1044 |
|
1045 |
+
// Simulate syncing with banks
|
1046 |
+
function syncWithBanks() {
|
1047 |
+
syncStatus.classList.remove('hidden');
|
1048 |
+
syncMessage.textContent = "Connecting to your bank accounts...";
|
1049 |
+
|
1050 |
+
// Simulate API calls to different banks
|
1051 |
+
setTimeout(() => {
|
1052 |
+
syncMessage.textContent = "Fetching cards from HDFC Bank...";
|
1053 |
+
|
1054 |
+
setTimeout(() => {
|
1055 |
+
syncMessage.textContent = "Fetching cards from ICICI Bank...";
|
1056 |
+
|
1057 |
+
setTimeout(() => {
|
1058 |
+
syncMessage.textContent = "Fetching cards from SBI...";
|
1059 |
+
|
1060 |
+
setTimeout(() => {
|
1061 |
+
// Simulate finding new cards
|
1062 |
+
const newCards = [
|
1063 |
+
{
|
1064 |
+
name: "ICICI Amazon Pay",
|
1065 |
+
type: "cashback",
|
1066 |
+
annualFee: 0,
|
1067 |
+
rewardsRate: "5% cashback",
|
1068 |
+
benefits: [
|
1069 |
+
"5% cashback on Amazon",
|
1070 |
+
"2% cashback on other spends",
|
1071 |
+
"No annual fee"
|
1072 |
+
]
|
1073 |
+
},
|
1074 |
+
{
|
1075 |
+
name: "SBI SimplyCLICK",
|
1076 |
+
type: "online shopping",
|
1077 |
+
annualFee: 499,
|
1078 |
+
rewardsRate: "10x rewards",
|
1079 |
+
benefits: [
|
1080 |
+
"10x rewards on Amazon, BookMyShow",
|
1081 |
+
"5x rewards on other online spends",
|
1082 |
+
"E-vouchers worth ₹2,000 annually"
|
1083 |
+
]
|
1084 |
+
}
|
1085 |
+
];
|
1086 |
+
|
1087 |
+
// Only add cards that don't already exist
|
1088 |
+
newCards.forEach(newCard => {
|
1089 |
+
if (!myCards.some(card => card.name === newCard.name)) {
|
1090 |
+
myCards.push(newCard);
|
1091 |
+
}
|
1092 |
+
});
|
1093 |
+
|
1094 |
+
renderCards();
|
1095 |
+
|
1096 |
+
syncMessage.textContent = "Sync complete! Found 2 new cards.";
|
1097 |
+
syncSpinner.classList.remove('rotate');
|
1098 |
+
syncSpinner.innerHTML = '<i class="fas fa-check-circle text-green-500"></i>';
|
1099 |
+
|
1100 |
+
setTimeout(() => {
|
1101 |
+
syncStatus.classList.add('hidden');
|
1102 |
+
syncSpinner.innerHTML = '<i class="fas fa-sync-alt text-blue-500"></i>';
|
1103 |
+
syncSpinner.classList.add('rotate');
|
1104 |
+
|
1105 |
+
if (newCards.length > 0) {
|
1106 |
+
addChatMessage('assistant', `I've found ${newCards.length} new cards in your bank accounts! They've been added to your wallet.`);
|
1107 |
+
} else {
|
1108 |
+
addChatMessage('assistant', "Your cards are up to date. No new cards found in your bank accounts.");
|
1109 |
+
}
|
1110 |
+
}, 2000);
|
1111 |
+
|
1112 |
+
}, 1500);
|
1113 |
+
}, 1500);
|
1114 |
+
}, 1500);
|
1115 |
+
}, 1000);
|
1116 |
+
}
|
1117 |
+
|
1118 |
+
// Sync buttons
|
1119 |
+
bankSyncBtn.addEventListener('click', syncWithBanks);
|
1120 |
+
syncCardsBtn.addEventListener('click', syncWithBanks);
|
1121 |
+
|
1122 |
// Initial render
|
1123 |
renderCards();
|
1124 |
</script>
|