271 lines
14 KiB
PHP
271 lines
14 KiB
PHP
<?php
|
|
session_start();
|
|
$message_status = null;
|
|
|
|
if ($_SERVER["REQUEST_METHOD"] == "POST") {
|
|
require_once __DIR__ . '/mail/MailService.php';
|
|
|
|
$name = filter_var(trim($_POST['name']), FILTER_SANITIZE_STRING);
|
|
$email = filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL);
|
|
$message = filter_var(trim($_POST['message']), FILTER_SANITIZE_STRING);
|
|
$to = null; // Destination email (from .env)
|
|
$subject = 'New Contact Form Submission from ' . $name;
|
|
|
|
if (filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($name) && !empty($message)) {
|
|
$result = MailService::sendContactMessage($name, $email, $message, $to, $subject);
|
|
if ($result['success']) {
|
|
$_SESSION['message_status'] = ['type' => 'success', 'text' => 'Thank you! Your message has been sent.'];
|
|
} else {
|
|
// For security, don't expose detailed error messages to the user.
|
|
error_log($result['error']);
|
|
$_SESSION['message_status'] = ['type' => 'danger', 'text' => 'Sorry, there was an error sending your message. Please try again later.'];
|
|
}
|
|
} else {
|
|
$_SESSION['message_status'] = ['type' => 'danger', 'text' => 'Invalid input. Please check your form entries.'];
|
|
}
|
|
|
|
// Redirect to the same page to clear the POST data
|
|
header("Location: " . $_SERVER['PHP_SELF'] . "#contact");
|
|
exit();
|
|
}
|
|
|
|
if (isset($_SESSION['message_status'])) {
|
|
$message_status = $_SESSION['message_status'];
|
|
unset($_SESSION['message_status']);
|
|
}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Ava Reed | Creative Developer & Designer</title>
|
|
<!-- Bootstrap 5 CDN -->
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<!-- Custom CSS -->
|
|
<link rel="stylesheet" href="assets/css/custom.css">
|
|
</head>
|
|
<body>
|
|
|
|
<!-- Navbar -->
|
|
<nav class="navbar navbar-expand-lg navbar-dark fixed-top">
|
|
<div class="container">
|
|
<a class="navbar-brand" href="#">Ava Reed</a>
|
|
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
|
<span class="navbar-toggler-icon"></span>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navbarNav">
|
|
<ul class="navbar-nav ms-auto">
|
|
<li class="nav-item"><a class="nav-link" href="#work">Work</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="#services">Services</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="#about">About</a></li>
|
|
<li class="nav-item"><a class="nav-link" href="#contact">Contact</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Hero Section -->
|
|
<header class="hero text-center">
|
|
<div class="container">
|
|
<h1 class="display-4">Ava Reed: Creative Developer & Designer</h1>
|
|
<p class="lead">Building beautiful, functional websites and applications.</p>
|
|
<a href="#contact" class="btn btn-light btn-lg mt-3">Contact Me</a>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
<!-- Work Gallery -->
|
|
<section id="work" class="section">
|
|
<div class="container">
|
|
<h2 class="text-center mb-5">Selected Work</h2>
|
|
<div class="row">
|
|
<!-- Project 1 -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card">
|
|
<img src="https://picsum.photos/seed/work-1/600/400" class="card-img-top" alt="Placeholder for project showcase item 1">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Project One</h5>
|
|
<p class="card-text">A brief description of the project goes here.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Project 2 -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card">
|
|
<img src="https://picsum.photos/seed/work-2/600/400" class="card-img-top" alt="Placeholder for project showcase item 2">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Project Two</h5>
|
|
<p class="card-text">A brief description of the project goes here.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Project 3 -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card">
|
|
<img src="https://picsum.photos/seed/work-3/600/400" class="card-img-top" alt="Placeholder for project showcase item 3">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Project Three</h5>
|
|
<p class="card-text">A brief description of the project goes here.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Project 4 -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card">
|
|
<img src="https://picsum.photos/seed/work-4/600/400" class="card-img-top" alt="Placeholder for project showcase item 4">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Project Four</h5>
|
|
<p class="card-text">A brief description of the project goes here.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Project 5 -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card">
|
|
<img src="https://picsum.photos/seed/work-5/600/400" class="card-img-top" alt="Placeholder for project showcase item 5">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Project Five</h5>
|
|
<p class="card-text">A brief description of the project goes here.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- Project 6 -->
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card">
|
|
<img src="https://picsum.photos/seed/work-6/600/400" class="card-img-top" alt="Placeholder for project showcase item 6">
|
|
<div class="card-body">
|
|
<h5 class="card-title">Project Six</h5>
|
|
<p class="card-text">A brief description of the project goes here.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Services -->
|
|
<section id="services" class="section bg-light">
|
|
<div class="container">
|
|
<h2 class="text-center mb-5">What I Do</h2>
|
|
<div class="row text-center">
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card p-4">
|
|
<h5 class="card-title">Web Design</h5>
|
|
<p class="card-text">Creating modern and responsive designs that are intuitive and user-friendly.</p>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card p-4">
|
|
<h5 class="card-title">Web Development</h5>
|
|
<p class="card-text">Building fast, secure, and scalable web applications from the ground up.</p>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4 mb-4">
|
|
<div class="card p-4">
|
|
<h5 class="card-title">UI/UX Consulting</h5>
|
|
<p class="card-text">Improving user satisfaction by enhancing the usability and accessibility of products.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Testimonials -->
|
|
<section id="testimonials" class="section">
|
|
<div class="container">
|
|
<h2 class="text-center mb-5">What Clients Say</h2>
|
|
<div class="row">
|
|
<div class="col-md-6 mb-4">
|
|
<div class="card p-4">
|
|
<div class="d-flex align-items-center">
|
|
<img src="https://picsum.photos/seed/avatar-1/96/96" class="avatar me-3" alt="Avatar of a satisfied client">
|
|
<div>
|
|
<p class="mb-0">"Ava is a pleasure to work with. Her attention to detail is second to none."</p>
|
|
<footer class="blockquote-footer mt-2">Client One</footer>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-6 mb-4">
|
|
<div class="card p-4">
|
|
<div class="d-flex align-items-center">
|
|
<img src="https://picsum.photos/seed/avatar-2/96/96" class="avatar me-3" alt="Avatar of a satisfied client">
|
|
<div>
|
|
<p class="mb-0">"The final product exceeded our expectations. Highly recommended!"</p>
|
|
<footer class="blockquote-footer mt-2">Client Two</footer>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- About -->
|
|
<section id="about" class="section bg-light">
|
|
<div class="container">
|
|
<div class="row align-items-center">
|
|
<div class="col-md-4 text-center">
|
|
<img src="https://picsum.photos/seed/ava-reed/256/256" class="about-avatar img-fluid mb-4 mb-md-0" alt="Headshot of Ava Reed">
|
|
</div>
|
|
<div class="col-md-8">
|
|
<h2 class="mb-4">About Me</h2>
|
|
<p>I'm Ava Reed, a passionate developer and designer with a knack for creating elegant solutions in the least amount of time. I specialize in front-end development and love bringing ideas to life in the browser.</p>
|
|
<p>When I'm not coding, you can find me exploring new technologies, hiking, or enjoying a good cup of coffee.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Contact Form -->
|
|
<section id="contact" class="section">
|
|
<div class="container">
|
|
<h2 class="text-center mb-5">Let's Get in Touch</h2>
|
|
<div class="row justify-content-center">
|
|
<div class="col-md-8">
|
|
<?php if ($message_status): ?>
|
|
<div class="alert alert-<?php echo htmlspecialchars($message_status['type']); ?> alert-dismissible fade show" role="alert">
|
|
<?php echo htmlspecialchars($message_status['text']); ?>
|
|
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
|
</div>
|
|
<?php endif; ?>
|
|
<form id="contactForm" action="index.php#contact" method="POST" novalidate>
|
|
<div class="mb-3">
|
|
<label for="name" class="form-label">Name</label>
|
|
<input type="text" class="form-control" id="name" name="name" required>
|
|
<div class="invalid-feedback" id="nameError">Please enter your name.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="email" class="form-label">Email</label>
|
|
<input type="email" class="form-control" id="email" name="email" required>
|
|
<div class="invalid-feedback" id="emailError">Please enter a valid email address.</div>
|
|
</div>
|
|
<div class="mb-3">
|
|
<label for="message" class="form-label">Message</label>
|
|
<textarea class="form-control" id="message" name="message" rows="5" required></textarea>
|
|
<div class="invalid-feedback" id="messageError">Please enter a message.</div>
|
|
</div>
|
|
<button type="submit" class="btn btn-primary">Send Message</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<!-- Footer -->
|
|
<footer class="bg-dark text-white text-center p-4">
|
|
<div class="container">
|
|
<p class="mb-0">© 2025 Ava Reed. All Rights Reserved.</p>
|
|
<!-- Add social links here if you have them -->
|
|
</div>
|
|
</footer>
|
|
|
|
<!-- Bootstrap 5 JS Bundle with Popper -->
|
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
|
<!-- Custom JS -->
|
|
<script src="assets/js/main.js"></script>
|
|
</body>
|
|
</html>
|