Update contact information, enhance form notification, and improve hero section content

This commit is contained in:
Daniel LaForce 2025-04-09 22:35:44 -06:00
parent fe33eddeab
commit a3a949ddc4
10 changed files with 79 additions and 35 deletions

View File

@ -14,12 +14,12 @@ export async function onRequestPost(context) {
}, },
body: JSON.stringify({ body: JSON.stringify({
from: { from: {
email: "daniel@laforceit.com", email: "contact@argobox.com",
name: "Daniel LaForce" name: "Daniel LaForce"
}, },
to: [ to: [
{ {
email: "daniel@laforceit.com", email: "daniel.laforce@argobox.com",
name: "Daniel LaForce" name: "Daniel LaForce"
} }
], ],

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

After

Width:  |  Height:  |  Size: 536 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 789 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -80,7 +80,7 @@
<h1 class="hero-title"> <h1 class="hero-title">
<span class="role-wrapper"> <span class="role-wrapper">
<span class="role active" data-role="admin" data-description="Building scalable infrastructure with optimized performance and bulletproof security — from server management to end-user support that keeps businesses running smoothly."> <span class="role active" data-role="admin" data-description="Building scalable infrastructure with optimized performance and bulletproof security — from server management to end-user support that keeps businesses running smoothly.">
<span class="highlight">System</span> <span class="highlight">Administrator</span> &amp; IT Expert <span class="highlight">Network</span> &amp; <span class="highlight">Cyber Security</span> Professional
</span> </span>
<span class="role" data-role="devops" data-description="Streamlining development workflows with CI/CD pipelines and infrastructure as code — automating deployments and improving reliability across your entire technology stack."> <span class="role" data-role="devops" data-description="Streamlining development workflows with CI/CD pipelines and infrastructure as code — automating deployments and improving reliability across your entire technology stack.">
<span class="highlight">DevOps</span> &amp; <span class="highlight">Automation</span> Engineer <span class="highlight">DevOps</span> &amp; <span class="highlight">Automation</span> Engineer
@ -92,7 +92,7 @@
</h1> </h1>
<p class="hero-description" id="role-description"> <p class="hero-description" id="role-description">
Building scalable infrastructure with optimized performance and bulletproof security — from server management to end-user support that keeps businesses running smoothly. Securing and optimizing your digital infrastructure with enterprise-grade solutions — from zero-trust architecture to automated security monitoring that keeps your business protected 24/7.
</p> </p>
<div class="inline-terminal"> <div class="inline-terminal">
@ -132,7 +132,7 @@
<span class="btn-icon"><i class="fas fa-arrow-right"></i></span> <span class="btn-icon"><i class="fas fa-arrow-right"></i></span>
</a> </a>
<a href="https://argobox.com/ansible-sandbox" class="btn btn-outline btn-featured" target="_blank"> <a href="https://www.argobox.com" class="btn btn-outline btn-featured" target="_blank">
<span class="pulse-ring"></span> <span class="pulse-ring"></span>
<span class="btn-text">Explore My Lab</span> <span class="btn-text">Explore My Lab</span>
<span class="btn-icon"><i class="fas fa-server"></i></span> <span class="btn-icon"><i class="fas fa-server"></i></span>
@ -584,7 +584,7 @@
<i class="fas fa-envelope"></i> <i class="fas fa-envelope"></i>
</div> </div>
<h3 class="contact-title">Email</h3> <h3 class="contact-title">Email</h3>
<p><a href="mailto:daniel@laforceit.com">daniel@laforceit.com</a></p> <p><a href="mailto:daniel.laforce@argobox.com">daniel.laforce@argobox.com</a></p>
</div> </div>
<div class="contact-item"> <div class="contact-item">
@ -631,6 +631,10 @@
Send Message Send Message
</button> </button>
</form> </form>
<div id="form-notification" class="form-notification" style="display: none;">
<i class="fas fa-check-circle"></i>
<span class="notification-text">Message sent successfully! We'll get back to you soon.</span>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -656,7 +660,7 @@
<div class="footer-social"> <div class="footer-social">
<a href="https://github.com/keyargo" target="_blank" aria-label="GitHub"><i class="fab fa-github"></i></a> <a href="https://github.com/keyargo" target="_blank" aria-label="GitHub"><i class="fab fa-github"></i></a>
<a href="https://www.linkedin.com/in/danlaforce" target="_blank" aria-label="LinkedIn"><i class="fab fa-linkedin"></i></a> <a href="https://www.linkedin.com/in/danlaforce" target="_blank" aria-label="LinkedIn"><i class="fab fa-linkedin"></i></a>
<a href="mailto:daniel@laforceit.com" aria-label="Email"><i class="fas fa-envelope"></i></a> <a href="mailto:daniel.laforce@argobox.com" aria-label="Email"><i class="fas fa-envelope"></i></a>
</div> </div>
</div> </div>

View File

@ -394,9 +394,6 @@ function updateMetrics() {
setInterval(updateMetricValues, 5000); setInterval(updateMetricValues, 5000);
} }
/**
* Initialize contact form handling
*/
/** /**
* Initialize contact form handling * Initialize contact form handling
*/ */
@ -427,16 +424,43 @@ function initFormHandling(form) {
const data = await res.json(); const data = await res.json();
const notification = document.getElementById('form-notification');
const notificationIcon = notification.querySelector('i');
const notificationText = notification.querySelector('.notification-text');
if (data.success) { if (data.success) {
alert("Thank you for your message! I will get back to you soon."); notification.style.display = 'block';
notification.classList.add('success');
notification.classList.remove('error');
notificationIcon.className = 'fas fa-check-circle';
notificationText.textContent = "Message sent successfully! We'll get back to you soon.";
form.reset(); form.reset();
} else { } else {
alert("Failed to send message. Please try again or contact me directly."); notification.style.display = 'block';
notification.classList.add('error');
notification.classList.remove('success');
notificationIcon.className = 'fas fa-exclamation-circle';
notificationText.textContent = "Failed to send message. Please try again or contact me directly.";
} }
// Hide notification after 5 seconds
setTimeout(() => {
notification.style.display = 'none';
}, 5000);
} catch (error) { } catch (error) {
console.error("Error:", error); console.error("Error:", error);
alert("Something went wrong while sending your message."); const notification = document.getElementById('form-notification');
notification.style.display = 'block';
notification.classList.add('error');
notification.classList.remove('success');
notification.querySelector('i').className = 'fas fa-exclamation-circle';
notification.querySelector('.notification-text').textContent = "Something went wrong while sending your message.";
// Hide notification after 5 seconds
setTimeout(() => {
notification.style.display = 'none';
}, 5000);
} finally { } finally {
submitButton.innerHTML = originalButtonText; submitButton.innerHTML = originalButtonText;
submitButton.disabled = false; submitButton.disabled = false;
@ -453,24 +477,3 @@ function updateYear() {
yearElement.textContent = new Date().getFullYear(); yearElement.textContent = new Date().getFullYear();
} }
} }
/**
* Utility function to add particle float animation
*/
document.addEventListener('DOMContentLoaded', function() {
// Initialize all website functionality
initNavigation();
initParticlesAndIcons();
initRoleRotation(); // Updated function
initTerminalTyping(); // Updated function
initSolutionsCarousel(); // Updated function
initScrollReveal();
updateMetrics();
updateYear();
// Initialize form handling
const contactForm = document.getElementById('contact-form');
if (contactForm) {
initFormHandling(contactForm);
}
});

View File

@ -1538,4 +1538,41 @@ text-shadow: 0 0 10px rgba(59, 130, 246, 0.8), 0 0 8px rgba(255, 255, 255, 0.3);
transform: scale(1.02); transform: scale(1.02);
} }
.form-notification {
margin-top: 1rem;
padding: 1rem;
border-radius: 0.5rem;
display: flex;
align-items: center;
gap: 0.75rem;
animation: slideIn 0.3s ease-out;
}
.form-notification.success {
background-color: #d1fae5;
color: #065f46;
border: 1px solid #34d399;
}
.form-notification.error {
background-color: #fee2e2;
color: #991b1b;
border: 1px solid #f87171;
}
.form-notification i {
font-size: 1.25rem;
}
@keyframes slideIn {
from {
transform: translateY(-10px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}