diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..381aaf8 --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,61 @@ + +body { + padding-top: 56px; /* Adjust for fixed-top navbar */ +} + +.navbar { + background: linear-gradient(45deg, #0A74DA, #1F85DE) !important; + box-shadow: 0 2px 4px rgba(0,0,0,0.1); +} + +.navbar-brand { + font-family: 'Lora', serif; + font-weight: 700; +} + +body { + font-family: 'Inter', sans-serif; + background-color: #F8F9FA; + color: #212529; +} + +h1, h2, h3, h4, h5, h6 { + font-family: 'Lora', serif; +} + +.hero { + background: linear-gradient(45deg, #0A74DA, #1F85DE); + color: white; + padding: 4rem 0; +} + +.form-step { + display: none; +} + +.form-step.active { + display: block; +} + +.progress-bar { + transition: width 0.3s ease-in-out; +} + +.card { + border-radius: 8px; + box-shadow: 0 4px 6px rgba(0,0,0,0.1); +} + +/* Landing Page Sections */ +#features .card, #goals .card { + transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; +} + +#features .card:hover, #goals .card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 12px rgba(0,0,0,0.15); +} + +#outputs img, #dashboard img { + border: 1px solid #dee2e6; +} diff --git a/assets/images/pexels/1181311.jpg b/assets/images/pexels/1181311.jpg new file mode 100644 index 0000000..face550 Binary files /dev/null and b/assets/images/pexels/1181311.jpg differ diff --git a/assets/images/pexels/34128237.jpg b/assets/images/pexels/34128237.jpg new file mode 100644 index 0000000..59122a0 Binary files /dev/null and b/assets/images/pexels/34128237.jpg differ diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..8ff3ac2 --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,64 @@ + +document.addEventListener('DOMContentLoaded', function() { + const steps = document.querySelectorAll('.form-step'); + const nextButtons = document.querySelectorAll('.btn-next'); + const prevButtons = document.querySelectorAll('.btn-prev'); + const progressBar = document.querySelector('.progress-bar'); + const form = document.getElementById('gtm-form'); + + let currentStep = 0; + + function updateProgress() { + const progress = ((currentStep + 1) / steps.length) * 100; + progressBar.style.width = progress + '%'; + progressBar.setAttribute('aria-valuenow', progress); + } + + function showStep(stepIndex) { + steps.forEach((step, index) => { + step.classList.toggle('active', index === stepIndex); + }); + currentStep = stepIndex; + updateProgress(); + } + + nextButtons.forEach(button => { + button.addEventListener('click', () => { + if (currentStep < steps.length - 1) { + showStep(currentStep + 1); + } + }); + }); + + prevButtons.forEach(button => { + button.addEventListener('click', () => { + if (currentStep > 0) { + showStep(currentStep - 1); + } + }); + }); + + form.addEventListener('submit', function(e) { + e.preventDefault(); + const formData = new FormData(form); + + fetch('submit_profile.php', { + method: 'POST', + body: formData + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + document.getElementById('form-container').innerHTML = '
Thank you! Your GTM profile has been submitted.
'; + } else { + alert('An error occurred: ' + data.error); + } + }) + .catch(error => { + console.error('Error:', error); + alert('A network error occurred. Please try again.'); + }); + }); + + showStep(0); +}); diff --git a/db/migrations/001_create_gtm_profiles_table.sql b/db/migrations/001_create_gtm_profiles_table.sql new file mode 100644 index 0000000..3bdc22c --- /dev/null +++ b/db/migrations/001_create_gtm_profiles_table.sql @@ -0,0 +1,12 @@ +CREATE TABLE IF NOT EXISTS gtm_profiles ( + id INT AUTO_INCREMENT PRIMARY KEY, + business_name VARCHAR(255) NOT NULL, + sells_what TEXT NOT NULL, + icp TEXT NOT NULL, + market_size VARCHAR(50) NOT NULL, + sales_motions VARCHAR(255) NOT NULL, + org_size VARCHAR(50) NOT NULL, + roles TEXT NOT NULL, + goals TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); \ No newline at end of file diff --git a/includes/pexels.php b/includes/pexels.php new file mode 100644 index 0000000..0c04a85 --- /dev/null +++ b/includes/pexels.php @@ -0,0 +1,25 @@ + 0 ? $k : 'Vc99rnmOhHhJAbgGQoKLZtsaIVfkeownoQNbTj78VemUjKh08ZYRbf18'; +} +function pexels_get($url) { + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HTTPHEADER => [ 'Authorization: '. pexels_key() ], + CURLOPT_TIMEOUT => 15, + ]); + $resp = curl_exec($ch); + $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + if ($code >= 200 && $code < 300 && $resp) return json_decode($resp, true); + return null; +} +function download_to($srcUrl, $destPath) { + $data = file_get_contents($srcUrl); + if ($data === false) return false; + if (!is_dir(dirname($destPath))) mkdir(dirname($destPath), 0775, true); + return file_put_contents($destPath, $data) !== false; +} diff --git a/index.php b/index.php index 7205f3d..b678297 100644 --- a/index.php +++ b/index.php @@ -1,150 +1,172 @@ - - + - - - New Style - - - - - - - - - - - - - - - - - - - + + + GTM Maximizer + + + + + + + + + + + + + -
-
-

Analyzing your requirements and generating your website…

-
- Loading… -
-

AI is collecting your requirements and applying the first changes.

-

This page will update automatically as the plan is implemented.

-

Runtime: PHP — UTC

-
-
- + + + +
+
+

GTM Maximizer

+

AI Powered Solutions Generating Profitable and Efficient Revenue and Customer Growth

+ Build New Process and Organization + Existing Process + Existing Organization +
+
+ +
+ +
+
+

Key Features

+

Everything you need to build a world-class GTM strategy.

+
+
+
+
+
+
GTM Profile Builder
+

Input your business, market, and sales data to create a comprehensive GTM profile.

+
+
+
+
+
+
+
Process Flow Generator
+

Automatically generate customized GTM process flows based on your unique profile.

+
+
+
+
+
+
+
Tool & Integration Recommendations
+

Get AI-powered suggestions for the best tools and integrations to execute your strategy.

+
+
+
+
+
+ + +
+
+

Visualize Your Strategy

+

From high-level diagrams to detailed dashboards, see your GTM plan come to life.

+
+
+
+

Sample Process Diagram

+

Our AI generates clear, actionable diagrams that map out your entire customer journey and the internal processes required to support it.

+
+
+ Sample GTM Process Diagram +
+
+
+ + +
+
+

Track Your Progress

+

A centralized dashboard to monitor your key metrics and GTM goals.

+
+
+
+ Sample GTM Dashboard +
+
+

Unified Dashboard

+

Monitor customer acquisition cost, lifetime value, conversion rates, and other critical KPIs in real-time. Align your team around a single source of truth.

+
+
+
+ + +
+
+

Achieve Your Goals

+

Align your entire organization around clear, measurable objectives.

+
+
+
+
+
+
Revenue Growth
+

Optimize your sales and marketing funnels to drive predictable revenue growth.

+
+
+
+
+
+
+
Customer Acquisition
+

Lower your customer acquisition costs by targeting the right ICP with the right message.

+
+
+
+
+
+ +
+ + + + + - + \ No newline at end of file diff --git a/profile.php b/profile.php new file mode 100644 index 0000000..086d80b --- /dev/null +++ b/profile.php @@ -0,0 +1,99 @@ +query("SELECT * FROM gtm_profiles ORDER BY created_at DESC LIMIT 1"); + $profile = $stmt->fetch(PDO::FETCH_ASSOC); +} catch (PDOException $e) { + // Handle database connection error + error_log($e->getMessage()); +} + +?> + + + + + + My GTM Profile + + + + + + + + + + +
+

My GTM Profile

+ +
+
+
Business Name:
+

What we sell:

+
+
Market & Sales
+

Ideal Customer Profile (ICP):

+

Market Size:

+

Existing Sales Motions:

+
+
Team & Roles
+

Organization Size:

+

Marketing and Sales Roles:

+
+
Goals
+

Growth Goals:

+
+
+ + + +
+ + + + + + + diff --git a/start.php b/start.php new file mode 100644 index 0000000..4bcdd75 --- /dev/null +++ b/start.php @@ -0,0 +1,173 @@ + + + + + + GTM Maximizer + + + + + + + + + + + + + + + + + + +
+
+

Build Your GTM Strategy

+

AI Powered Solutions Generating Profitable and Efficient Revenue and Customer Growth

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

Business Information

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

Market & Sales

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

Team & Roles

+
+ + +
+
+ + +
Enter roles separated by commas.
+
+
+ + +
+
+ + +
+

Goals

+
+ + +
+
+ + +
+
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/submit_profile.php b/submit_profile.php new file mode 100644 index 0000000..455996f --- /dev/null +++ b/submit_profile.php @@ -0,0 +1,32 @@ + false, 'error' => 'Invalid request method.']); + exit; +} + +try { + $pdo = db(); + + $sql = "INSERT INTO gtm_profiles (business_name, sells_what, icp, market_size, sales_motions, org_size, roles, goals) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"; + $stmt = $pdo->prepare($sql); + + $stmt->execute([ + $_POST['business_name'] ?? '', + $_POST['sells_what'] ?? '', + $_POST['icp'] ?? '', + $_POST['market_size'] ?? '', + implode(', ', $_POST['sales_motions'] ?? []), + $_POST['org_size'] ?? '', + implode(', ', $_POST['roles'] ?? []), + $_POST['goals'] ?? '' + ]); + + echo json_encode(['success' => true]); +} catch (PDOException $e) { + // In a real app, you would log this error, not expose it to the user. + echo json_encode(['success' => false, 'error' => 'Database error: ' . $e->getMessage()]); +}