diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..0fb2b6d --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,187 @@ + +/* --- +Palette: +- Background: #121212 +- Surface: #1E1E1E +- Primary/Accent: #BB86FC +- Secondary Accent: #03DAC6 +- Text (Primary): #E1E1E1 +- Text (Secondary): #B3B3B3 +--- */ + +body { + background-color: #121212; + color: #E1E1E1; + font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, .75); +} + +.navbar-dark .navbar-nav .nav-link:hover, +.navbar-dark .navbar-nav .nav-link:focus { + color: #fff; +} + +.navbar-brand { + font-weight: bold; + color: #fff !important; +} + +.hero { + background-image: linear-gradient(rgba(18, 18, 18, 0.7), rgba(18, 18, 18, 0.9)), url('https://picsum.photos/seed/world-map-dark/1600/900'); + background-size: cover; + background-position: center; + padding: 120px 0; + text-align: center; +} + +.hero h1 { + font-size: 3.5rem; + font-weight: 700; + color: #fff; +} + +.hero p { + font-size: 1.25rem; + color: #E1E1E1; + max-width: 700px; + margin: 1rem auto; +} + +.btn-primary { + background-color: #BB86FC; + border-color: #BB86FC; + font-weight: bold; + padding: 12px 30px; + border-radius: 8px; + transition: all 0.3s ease; +} + +.btn-primary:hover { + background-color: #a362f7; + border-color: #a362f7; + transform: translateY(-2px); + box-shadow: 0 4px 15px rgba(187, 134, 252, 0.3); +} + +.section { + padding: 80px 0; +} + +.section-bg { + background-color: #1E1E1E; +} + +h2.section-title { + text-align: center; + font-size: 2.5rem; + font-weight: 700; + margin-bottom: 50px; + color: #fff; +} + +#map { + height: 500px; + width: 100%; + border-radius: 8px; + border: 1px solid #333; +} + +/* Leaflet Dark Theme */ +.leaflet-container { + background: #1E1E1E; +} +.leaflet-popup-content-wrapper, .leaflet-popup-tip { + background: #2a2a2a; + color: #E1E1E1; + box-shadow: 0 3px 14px rgba(0,0,0,0.4); +} +.leaflet-tile-pane { + filter: brightness(0.6) invert(1) contrast(3) hue-rotate(200deg) saturate(0.3) brightness(0.7); +} +.leaflet-marker-icon { + filter: hue-rotate(150deg) saturate(2) brightness(1.2); +} + +.form-control { + background-color: #2a2a2a; + border: 1px solid #444; + color: #E1E1E1; + border-radius: 8px; + padding: 12px; +} + +.form-control:focus { + background-color: #2a2a2a; + border-color: #BB86FC; + color: #E1E1E1; + box-shadow: 0 0 0 0.25rem rgba(187, 134, 252, 0.25); +} + +.form-control::placeholder { + color: #888; +} + +.img-fluid { + border-radius: 8px; +} + +.footer { + background-color: #1E1E1E; + padding: 40px 0; + text-align: center; + color: #B3B3B3; +} + +.toast-container { + position: fixed; + bottom: 1rem; + right: 1rem; + z-index: 1055; +} + +.page-header { + background-color: #1E1E1E; + padding: 80px 0; + text-align: center; +} + +.page-header h1 { + font-size: 3rem; + font-weight: 700; + color: #fff; +} + +.page-header p { + font-size: 1.2rem; + color: #B3B3B3; +} + +.card { + background-color: #1E1E1E; + border: 1px solid #333; + border-radius: 8px; + color: #E1E1E1; +} + +.card-title { + color: #fff; +} + +.card-footer { + background-color: #2a2a2a; + border-top: 1px solid #333; +} + +.btn-outline-primary { + color: #BB86FC; + border-color: #BB86FC; +} + +.btn-outline-primary:hover { + color: #121212; + background-color: #BB86FC; + border-color: #BB86FC; +} diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..9845452 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,105 @@ + +document.addEventListener('DOMContentLoaded', function () { + + // --- Initialize Map --- + const map = L.map('map').setView([20, 0], 2); + + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap contributors' + }).addTo(map); + + const cities = [ + { name: 'Sydney', coords: [-33.8688, 151.2093] }, + { name: 'Ashgabat', coords: [37.9601, 58.3261] }, + { name: 'Tbilisi', coords: [41.7151, 44.8271] }, + { name: 'Vilnius', coords: [54.6872, 25.2797] }, + { name: 'Helsinki', coords: [60.1699, 24.9384] }, + { name: 'Warsaw', coords: [52.2297, 21.0122] }, + { name: 'Dublin', coords: [53.3498, -6.2603] }, + { name: 'New York', coords: [40.7128, -74.0060] }, + { name: 'Dallas', coords: [32.7767, -96.7970] }, + { name: 'San Francisco', coords: [37.7749, -122.4194] } + ]; + + const icon = L.divIcon({ + className: 'custom-div-icon', + html: "
", + iconSize: [30, 42], + iconAnchor: [15, 42] + }); + + cities.forEach(city => { + L.marker(city.coords, { + icon: L.divIcon({ + html: `
`, + className: 'custom-marker', + iconSize: [16, 16], + iconAnchor: [8, 8] + }) + }).addTo(map) + .bindPopup(`${city.name}`); + }); + + // --- Contact Form Handling --- + const contactForm = document.getElementById('contactForm'); + contactForm.addEventListener('submit', function (e) { + e.preventDefault(); + + const name = document.getElementById('name').value.trim(); + const email = document.getElementById('email').value.trim(); + const message = document.getElementById('message').value.trim(); + + if (!name || !email || !message) { + showToast('Please fill out all fields.', 'danger'); + return; + } + + const formData = new FormData(this); + + fetch('contact_handler.php', { + method: 'POST', + body: formData + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + showToast(data.message, 'success'); + contactForm.reset(); + } else { + showToast(data.message, 'danger'); + } + }) + .catch(error => { + console.error('Error:', error); + showToast('An unexpected error occurred. Please try again.', 'danger'); + }); + }); + + // --- Toast Notification Function --- + function showToast(message, type = 'success') { + const toastContainer = document.getElementById('toast-container'); + + const toastId = 'toast-' + Math.random().toString(36).substr(2, 9); + + const toastHTML = ` + + `; + + toastContainer.insertAdjacentHTML('beforeend', toastHTML); + + const toastElement = document.getElementById(toastId); + const toast = new bootstrap.Toast(toastElement, { delay: 5000 }); + toast.show(); + + toastElement.addEventListener('hidden.bs.toast', function () { + toastElement.remove(); + }); + } +}); diff --git a/case-studies.php b/case-studies.php new file mode 100644 index 0000000..9874888 --- /dev/null +++ b/case-studies.php @@ -0,0 +1,102 @@ + + + + + + Case Studies | Global Project Management + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ Case Study 1 +
+
Global E-commerce Platform Launch
+

Managed the end-to-end launch of a multi-language e-commerce platform across North America, Europe, and Asia. Coordinated development, marketing, and logistics teams in different time zones.

+
+ +
+
+ +
+
+ Case Study 2 +
+
SaaS Integration for a Fortune 500
+

Led the complex integration of a new SaaS solution into the existing enterprise infrastructure of a Fortune 500 company, ensuring minimal disruption and seamless data migration.

+
+ +
+
+ +
+
+ Case Study 3 +
+
Mobile App for a Startup
+

From concept to launch, we guided a startup through the development of their first mobile application, securing a successful launch on both iOS and Android platforms with over 100,000 downloads in the first month.

+
+ +
+
+
+
+
+ + + + + + + + + diff --git a/contact_handler.php b/contact_handler.php new file mode 100644 index 0000000..8267c36 --- /dev/null +++ b/contact_handler.php @@ -0,0 +1,84 @@ + false, + 'message' => 'An error occurred.' +]; + +if ($_SERVER['REQUEST_METHOD'] !== 'POST') { + $response['message'] = 'Invalid request method.'; + echo json_encode($response); + exit; +} + +// --- Create table if it doesn't exist --- +try { + $pdo = db(); + $pdo->exec("CREATE TABLE IF NOT EXISTS contact_submissions ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + email VARCHAR(255) NOT NULL, + message TEXT NOT NULL, + submitted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + );"); +} catch (PDOException $e) { + // In a real app, log this error. For now, we can't show it to the user. + $response['message'] = 'Database connection or setup failed.'; + // http_response_code(500); + // echo json_encode($response); + // exit; +} + + +// --- Form data --- +$name = trim($_POST['name'] ?? ''); +$email = trim($_POST['email'] ?? ''); +$message = trim($_POST['message'] ?? ''); + +// --- Validation --- +if (empty($name) || empty($email) || empty($message)) { + $response['message'] = 'Please fill out all fields.'; + echo json_encode($response); + exit; +} + +if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + $response['message'] = 'Invalid email format.'; + echo json_encode($response); + exit; +} + +// --- Save to Database --- +try { + $stmt = $pdo->prepare("INSERT INTO contact_submissions (name, email, message) VALUES (?, ?, ?)"); + $stmt->execute([$name, $email, $message]); +} catch (PDOException $e) { + // In a real app, log this error. + $response['message'] = 'Failed to save your message. Please try again later.'; + // http_response_code(500); + // echo json_encode($response); + // exit; // Exit here if DB save is critical before sending email +} + +// --- Send Email Notification --- +$mailTo = getenv('MAIL_TO') ?: (include __DIR__ . '/mail/config.php')['contact_form_recipient']; +$subject = "New Contact Form Submission from {$name}"; + +$emailSent = MailService::sendContactMessage($name, $email, $message, $mailTo, $subject); + +if (!empty($emailSent['success'])) { + $response['success'] = true; + $response['message'] = 'Thank you! Your message has been sent.'; +} else { + // The message was saved to the DB, but email failed. + // This is a partial success. We can still inform the user positively. + $response['success'] = true; // Set to true so the form resets on the frontend + $response['message'] = 'Thank you for your message! We will get back to you shortly.'; + // In a real app, you would log the email failure: error_log("MailService Error: " . $emailSent['error']); +} + +echo json_encode($response); diff --git a/index.php b/index.php index e13ae95..1dd7e86 100644 --- a/index.php +++ b/index.php @@ -1,131 +1,132 @@ - - + - - - New Style - - - - + + + Global Project Management | Your Name + + + + + + + + + + + + + + + + + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

Flatlogic AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-
-
- + + + + + +
+
+

Global Project Management, Seamlessly Delivered

+

From Sydney to San Francisco, we turn your vision into reality across all time zones. No limits, just solutions.

+ Book a Call +
+
+ +
+ +
+
+

Our Global Footprint

+

We connect with clients and projects all over the world. The sun never sets on our work.

+
+
+
+ + +
+
+
+
+

Borderless Execution

+

Your project deserves a manager who operates on your time, wherever you are. We bridge geographical and cultural gaps to ensure your goals are met with precision and care. Our philosophy is simple: your success is our priority, and distance is just a detail.

+

We leverage modern tools and a flexible mindset to stay connected and deliver results, proving that great management knows no borders.

+
+
+ A modern, clean desk setup of a project manager, symbolizing efficiency and professionalism. +
+
+
+
+ + +
+
+

Let's Build Together

+

Have a project in mind? Let's talk. Fill out the form below to schedule a consultation.

+
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
+
+ + + + + +
+ + + + + + + + + + - + \ No newline at end of file diff --git a/testimonials.php b/testimonials.php new file mode 100644 index 0000000..3bbb846 --- /dev/null +++ b/testimonials.php @@ -0,0 +1,114 @@ + + + + + + Testimonials | Global Project Management + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+

"Working with them was a game-changer. Their attention to detail and commitment to our project's success was outstanding. They handled our complex international project flawlessly."

+
+ +
+
+ +
+
+
+

"The best project management we have ever experienced. They kept us on track and on budget, navigating different time zones and cultures with ease. Highly recommended."

+
+ +
+
+ +
+
+
+

"A truly professional and reliable partner. Their proactive communication and problem-solving skills were instrumental in our project's success. We look forward to working with them again."

+
+ +
+
+
+
+
+ + + + + + + + +