diff --git a/index.html b/index.html
index c0015cf..f39471d 100644
--- a/index.html
+++ b/index.html
@@ -319,40 +319,47 @@
Contact Us
@@ -431,6 +438,7 @@ Contact Us
// Toggle icons
lightIcon.classList.toggle('hidden');
darkIcon.classList.toggle('hidden');
+
// Reset transforms
lightIcon.style.transform = 'rotate(0) scale(1)';
diff --git a/src/scripts/contact.js b/src/scripts/contact.js
index e409800..c25a2f8 100644
--- a/src/scripts/contact.js
+++ b/src/scripts/contact.js
@@ -7,24 +7,39 @@ import {
document.addEventListener("DOMContentLoaded", () => {
const form = document.getElementById("contactForm");
+ const status = document.getElementById("formStatus");
+ const submitBtn = document.getElementById("submitBtn");
if (!form) {
- console.error("❌ contactForm not found in DOM");
+ console.error("❌ contactForm not found");
return;
}
form.addEventListener("submit", async (e) => {
- e.preventDefault(); // ⛔ STOP PAGE RELOAD
+ e.preventDefault();
const name = document.getElementById("name").value.trim();
const email = document.getElementById("email").value.trim();
const message = document.getElementById("message").value.trim();
+ // Basic email regex
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
+
if (!name || !email || !message) {
- alert("⚠️ All fields are required");
+ showStatus("⚠️ All fields are required", "error");
return;
}
+ if (!emailRegex.test(email)) {
+ showStatus("⚠️ Please enter a valid email address", "error");
+ return;
+ }
+
+ // Loading state
+ submitBtn.disabled = true;
+ submitBtn.textContent = "Sending...";
+ showStatus("Sending your message...", "info");
+
try {
await addDoc(collection(db, "contactMessages"), {
name,
@@ -33,11 +48,28 @@ document.addEventListener("DOMContentLoaded", () => {
createdAt: serverTimestamp()
});
- alert("✅ Message sent successfully!");
+ showStatus("✅ Message sent successfully! We’ll get back to you soon.", "success");
form.reset();
+
} catch (error) {
console.error("❌ Firestore Error:", error);
- alert("❌ Failed to send message");
+ showStatus("❌ Failed to send message. Please try again.", "error");
+ } finally {
+ submitBtn.disabled = false;
+ submitBtn.textContent = "Send Message";
}
});
+
+ function showStatus(text, type) {
+ status.classList.remove("hidden");
+ status.textContent = text;
+
+ status.className =
+ "text-sm font-medium p-3 rounded " +
+ (type === "success"
+ ? "bg-green-100 text-green-700"
+ : type === "error"
+ ? "bg-red-100 text-red-700"
+ : "bg-blue-100 text-blue-700");
+ }
});