diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..84b2e8d --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,88 @@ + +:root { + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 111, 66, 193; + --brand-light: #f8f9fa; + --brand-dark: #212529; + --brand-surface: #ffffff; + --bs-font-sans-serif: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + --bs-border-radius: 0.5rem; + --bs-border-radius-lg: 1rem; + --bs-border-radius-sm: 0.25rem; +} + +body { + background-color: var(--brand-light); + color: var(--brand-dark); +} + +.navbar { + transition: background-color 0.3s ease-in-out, padding 0.3s ease-in-out; +} + +.navbar.scrolled { + background-color: var(--brand-surface); + box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.section-py { + padding-top: 5rem; + padding-bottom: 5rem; +} + +.hero { + background: linear-gradient(to bottom, rgba(13, 110, 253, 0.05), rgba(248, 249, 250, 0.05)); + padding: 8rem 0; +} + +.hero h1 { + font-weight: 700; +} + +.btn-primary { + padding: 0.75rem 1.5rem; + font-weight: 600; +} + +.btn-secondary { + padding: 0.75rem 1.5rem; + font-weight: 600; +} + +.social-proof-logos img { + height: 40px; + filter: grayscale(100%); + opacity: 0.6; + transition: filter 0.3s, opacity 0.3s; +} + +.social-proof-logos img:hover { + filter: grayscale(0%); + opacity: 1; +} + +.testimonial-card { + border: none; + background-color: var(--brand-surface); +} + +.testimonial-card .card-body { + padding: 2rem; +} + +.testimonial-card img { + width: 80px; + height: 80px; + object-fit: cover; +} + +.form-control:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-primary-rgb), 0.25); + border-color: rgba(var(--bs-primary-rgb), 0.5); +} + +.footer { + background-color: var(--brand-surface); +} diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..a17855a --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,69 @@ + +document.addEventListener('DOMContentLoaded', function () { + // Navbar shrink on scroll + const navbar = document.querySelector('.navbar'); + if (navbar) { + window.addEventListener('scroll', () => { + if (window.scrollY > 50) { + navbar.classList.add('scrolled'); + } else { + navbar.classList.remove('scrolled'); + } + }); + } + + // Smooth scroll for anchor links + document.querySelectorAll('a.smooth-scroll[href^="#"]').forEach(anchor => { + anchor.addEventListener('click', function (e) { + e.preventDefault(); + const targetId = this.getAttribute('href'); + const targetElement = document.querySelector(targetId); + if(targetElement){ + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + }); + }); + + // Pricing Toggle + const pricingToggle = document.getElementById('pricingToggle'); + if(pricingToggle) { + pricingToggle.addEventListener('change', function () { + const isYearly = this.checked; + document.querySelectorAll('.price-monthly').forEach(p => p.style.display = isYearly ? 'none' : 'block'); + document.querySelectorAll('.price-yearly').forEach(p => p.style.display = isYearly ? 'block' : 'none'); + }); + } + + // Lead Form Validation + const leadForm = document.getElementById('leadForm'); + if (leadForm) { + leadForm.addEventListener('submit', function (e) { + let isValid = true; + const name = document.getElementById('name'); + const email = document.getElementById('email'); + const message = document.getElementById('message'); + + // Reset validation + [name, email, message].forEach(el => { + el.classList.remove('is-invalid'); + }); + + if (name.value.trim() === '') { + name.classList.add('is-invalid'); + isValid = false; + } + if (email.value.trim() === '' || !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/.test(email.value)) { + email.classList.add('is-invalid'); + isValid = false; + } + if (message.value.trim() === '') { + message.classList.add('is-invalid'); + isValid = false; + } + + if (!isValid) { + e.preventDefault(); + } + }); + } +}); diff --git a/assets/pasted-20250911-115131-dbff0810.png b/assets/pasted-20250911-115131-dbff0810.png new file mode 100644 index 0000000..4239775 Binary files /dev/null and b/assets/pasted-20250911-115131-dbff0810.png differ diff --git a/assets/pasted-20250911-120710-50ef238b.png b/assets/pasted-20250911-120710-50ef238b.png new file mode 100644 index 0000000..f3c7c8c Binary files /dev/null and b/assets/pasted-20250911-120710-50ef238b.png differ diff --git a/db/migrations/001_create_leads_table.sql b/db/migrations/001_create_leads_table.sql new file mode 100644 index 0000000..2637aa4 --- /dev/null +++ b/db/migrations/001_create_leads_table.sql @@ -0,0 +1,8 @@ +-- Create leads table +CREATE TABLE IF NOT EXISTS leads ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + email VARCHAR(255) NOT NULL, + message TEXT, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); diff --git a/index.php b/index.php index e13ae95..54222bc 100644 --- a/index.php +++ b/index.php @@ -1,131 +1,395 @@ '; +var_dump(require 'mail/config.php'); +echo ''; +$form_message = ''; +$form_error = ''; -$phpVersion = PHP_VERSION; -$now = date('Y-m-d H:i:s'); +if ($_SERVER["REQUEST_METHOD"] == "POST") { + require_once 'db/config.php'; + require_once 'mail/MailService.php'; + + $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING); + $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL); + $message = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING); + + if (empty($name) || empty($email) || empty($message) || !filter_var($email, FILTER_VALIDATE_EMAIL)) { + $form_error = "Please fill out all fields with valid information."; + } else { + try { + $pdo = db(); + $stmt = $pdo->prepare("INSERT INTO leads (name, email, message) VALUES (?, ?, ?)"); + $stmt->execute([$name, $email, $message]); + + $mailResult = MailService::sendContactMessage($name, $email, $message); + + if ($mailResult['success']) { + $form_message = "Thank you for your message! We will get back to you shortly."; + } else { + $form_error = "Sorry, there was an error sending your message. Please try again later."; + // Optionally log the detailed error: error_log($mailResult['error']); + } + } catch (PDOException $e) { + $form_error = "Sorry, there was a database error. Please try again later."; + // Optionally log the detailed error: error_log($e->getMessage()); + } + } +} ?> - + - - - New Style - - - - + + + Nimbus - Streamline Your Success + + + + + + + + + + + + + -
-
-

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

-
-
- + + +
+ +
+ +
+ +
+
+
+
+

Streamline Your Success.

+

Nimbus is the all-in-one platform to automate workflows, manage projects, and scale your business.

+ Get Started Free + Watch Demo +
+
+ Abstract blue and white digital art representing cloud data streams. +
+
+ + +
+
+
TRUSTED BY LEADING COMPANIES WORLDWIDE
+ +
+
+ + +
+
+ A clean and modern dashboard UI for the Nimbus application. +
+
+ + +
+
+
+

Everything you need, nothing you don't.

+

Focus on what matters with our core features.

+
+
+
+
+ +

Automated Workflows

+

Set up triggers and actions to automate repetitive tasks and save countless hours.

+
+
+
+
+ +

Project Management

+

Visualize your progress with kanban boards, task lists, and team assignments.

+
+
+
+
+ +

Team Collaboration

+

Communicate seamlessly with integrated chat, file sharing, and real-time updates.

+
+
+
+
+
+ + +
+
+
+

Loved by teams everywhere

+
+
+
+
+
+ A portrait of a satisfied Nimbus customer. +

"Nimbus transformed how we manage projects. We're more organized and efficient than ever before."

+
Alex Johnson
+ CEO, Innovate Inc. +
+
+
+
+
+
+ A portrait of a satisfied Nimbus customer. +

"The automation features are a game-changer. We've saved at least 10 hours per week."

+
Samantha Bee
+ Marketing Director, Creative Co. +
+
+
+
+
+
+ A portrait of a satisfied Nimbus customer. +

"The user interface is so intuitive. My team was able to get started with minimal training."

+
David Chen
+ Head of Operations, Logistics Pro +
+
+
+
+
+
+ + +
+
+
+

Find the right plan for you

+
+ + + +
+
+
+ +
+
+
+
Basic
+
+ $29 + / month +
+ +
    +
  • Up to 5 users
  • +
  • Core Features
  • +
  • 10GB Storage
  • +
  • Community Support
  • +
+ Choose Plan +
+
+
+ +
+
+
Most Popular
+
+
Pro
+
+ $79 + / month +
+ +
    +
  • Up to 25 users
  • +
  • Advanced Features
  • +
  • 100GB Storage
  • +
  • Priority Support
  • +
+ Choose Plan +
+
+
+ +
+
+
+
Enterprise
+
+ Custom +
+ +
    +
  • Unlimited users
  • +
  • Dedicated Infrastructure
  • +
  • Unlimited Storage
  • +
  • 24/7 Dedicated Support
  • +
+ Contact Us +
+
+
+
+
+
+ + +
+
+
+

Frequently Asked Questions

+
+
+
+
+
+

+ +

+
+
+ Yes, we offer a 14-day free trial on our Pro plan. No credit card required. +
+
+
+
+

+ +

+
+
+ Absolutely. You can upgrade, downgrade, or cancel your plan at any time from your account settings. +
+
+
+
+

+ +

+
+
+ We accept all major credit cards, including Visa, Mastercard, and American Express. For Enterprise plans, we also support invoicing. +
+
+
+
+

+ +

+
+
+ Data security is our top priority. We use industry-standard encryption and security practices to keep your data safe. +
+
+
+
+
+
+
+
+ + +
+
+
+
+

Ready to Grow?

+

Fill out the form below and a member of our team will get back to you shortly.

+
This is for testing purposes only — Flatlogic does not guarantee usage of the mail server. Please set up your own SMTP in .env (MAIL_/SMTP_ vars).
+ + +
+ + +
+ + +
+
+ +
Please enter your name.
+
+
+ +
Please enter a valid email address.
+
+
+ +
Please enter a message.
+
+ +
+
+
+
+
+
+ + + + + + + + - + \ No newline at end of file