Last changes

This commit is contained in:
Flatlogic Bot 2025-08-31 09:55:15 +00:00
parent d90b02d3ac
commit 2dee2bda19
17 changed files with 2638 additions and 72 deletions

146
analytics.php Normal file
View File

@ -0,0 +1,146 @@
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Analytics</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.coming-soon {
text-align: center;
padding: 4rem;
background-color: var(--card-bg);
border-radius: 12px;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
}
.coming-soon h2 {
font-size: 1.8rem;
margin-bottom: 1rem;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-library.php">Video Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php" class="active">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>Analytics</h1>
<div class="coming-soon">
<h2>Coming Soon!</h2>
<p>This feature is under development. Check back later for updates.</p>
</div>
</main>
</body>
</html>

287
dashboard.php Normal file
View File

@ -0,0 +1,287 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$user = $_SESSION['user'];
if (isset($_GET['action']) && $_GET['action'] === 'logout') {
session_destroy();
header('Location: login.php');
exit;
}
// Get stats
$userDesignsDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/designs';
$userImagesDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/images';
$userVideosDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/videos';
$designCount = count(glob($userDesignsDir . '/*'));
$imageCount = count(glob($userImagesDir . '/*'));
$videoCount = count(glob($userVideosDir . '/*'));
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Dashboard - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #6a11cb;
--primary-color-dark: #5a0fb3;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 4px 6px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #f1eafa;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: var(--primary-color-dark);
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.5rem;
margin-bottom: 2.5rem;
}
.stat-card {
background-color: var(--card-bg);
border-radius: 12px;
padding: 1.5rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
display: flex;
align-items: center;
}
.stat-card .icon {
font-size: 2rem;
margin-right: 1rem;
padding: 0.8rem;
border-radius: 50%;
color: #fff;
}
.stat-card:nth-child(1) .icon { background-color: #6a11cb; }
.stat-card:nth-child(2) .icon { background-color: #2575fc; }
.stat-card:nth-child(3) .icon { background-color: #ff6b6b; }
.stat-card .value {
font-size: 2rem;
font-weight: 700;
}
.stat-card .label {
font-size: 0.9rem;
color: #6c757d;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.card {
background-color: var(--card-bg);
border-radius: 12px;
padding: 2rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
transition: transform 0.2s, box-shadow 0.2s;
}
.card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.08);
}
.card h3 {
margin: 0 0 0.75rem;
font-size: 1.3rem;
font-weight: 700;
color: var(--heading-color);
}
.card p {
margin: 0 0 1.5rem;
font-size: 1rem;
line-height: 1.6;
}
.card .btn {
display: inline-block;
padding: 0.7rem 1.5rem;
border-radius: 8px;
background-color: var(--primary-color);
color: #ffffff;
text-decoration: none;
font-weight: 500;
transition: background-color 0.2s;
}
.card .btn:hover {
background-color: var(--primary-color-dark);
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">
Digital Suite
</div>
<nav class="sidebar-nav">
<a href="dashboard.php" class="active">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-library.php">Video Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<header>
<h1>Dashboard</h1>
<div>Welcome, <strong><?= htmlspecialchars($user['business_name']) ?></strong>!</div>
</header>
<div class="stats-grid">
<div class="stat-card">
<div class="icon">🎨</div>
<div>
<div class="value"><?= $designCount ?></div>
<div class="label">Designs Created</div>
</div>
</div>
<div class="stat-card">
<div class="icon">🖼️</div>
<div>
<div class="value"><?= $imageCount ?></div>
<div class="label">Images Uploaded</div>
</div>
</div>
<div class="stat-card">
<div class="icon">🎬</div>
<div>
<div class="value"><?= $videoCount ?></div>
<div class="label">Videos Uploaded</div>
</div>
</div>
</div>
<div class="grid">
<div class="card">
<h3>AI Post Generator</h3>
<p>Create engaging social media posts from text descriptions.</p>
<a href="post-generator.php" class="btn">Generate Post</a>
</div>
<div class="card">
<h3>Image Library</h3>
<p>Upload and manage your image assets for your marketing campaigns.</p>
<a href="image-library.php" class="btn">View Images</a>
</div>
<div class="card">
<h3>Video Library</h3>
<p>Upload and manage your video assets for your marketing campaigns.</p>
<a href="video-library.php" class="btn">View Videos</a>
</div>
<div class="card">
<h3>AI Website Builder</h3>
<p>Generate a professional website for your business in just a few clicks.</p>
<a href="website-builder.php" class="btn">Build Your Site</a>
</div>
</div>
</main>
</body>
</html>

7
data/users.json Normal file
View File

@ -0,0 +1,7 @@
[
{
"business_name": "Qwerty LLP",
"email": "qwerty@gmail.com",
"password": "$2y$10$0qE1vtMnakmsBJu8lhFXruB1\/I4t.1Ezr0KsIGHSnaXPUV47p5b3i"
}
]

4
healthz.php Normal file
View File

@ -0,0 +1,4 @@
<?php
header('Content-Type: text/plain');
http_response_code(200);
echo "ok";

262
image-library.php Normal file
View File

@ -0,0 +1,262 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$user = $_SESSION['user'];
$error = null;
$success = null;
$userImagesDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/images';
if (!is_dir($userImagesDir)) {
mkdir($userImagesDir, 0777, true);
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['image'])) {
$image = $_FILES['image'];
if ($image['error'] === UPLOAD_ERR_OK) {
$imageFileType = strtolower(pathinfo($image['name'], PATHINFO_EXTENSION));
$allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
if (in_array($imageFileType, $allowedTypes)) {
$imageName = uniqid() . '.' . $imageFileType;
$imagePath = $userImagesDir . '/' . $imageName;
if (move_uploaded_file($image['tmp_name'], $imagePath)) {
$success = 'Image uploaded successfully!';
} else {
$error = 'Could not save uploaded image.';
}
} else {
$error = 'Invalid file type. Only JPG, JPEG, PNG, and GIF are allowed.';
}
} else {
$error = 'Error uploading file.';
}
}
$images = glob($userImagesDir . '/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Image Library - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.upload-form {
background-color: var(--card-bg);
border-radius: 12px;
padding: 2.5rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
margin-bottom: 2rem;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
}
.submit-btn {
display: inline-block;
padding: 0.8rem 1.5rem;
border: none;
border-radius: 8px;
background-color: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
}
.image-gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1.5rem;
}
.image-card {
border-radius: 12px;
overflow: hidden;
box-shadow: var(--shadow);
position: relative;
}
.image-card img {
width: 100%;
height: 200px;
object-fit: cover;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
}
.message.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="designs.php">My Designs</a>
<a href="image-library.php" class="active">Image Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>Image Library</h1>
<?php if ($success): ?>
<div class="message success"><?= $success ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="message error"><?= $error ?></div>
<?php endif; ?>
<div class="upload-form">
<form method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="image">Upload Image</label>
<input type="file" id="image" name="image" accept="image/*" required>
</div>
<button type="submit" class="submit-btn">Upload</button>
</form>
</div>
<div class="image-gallery">
<?php foreach ($images as $image): ?>
<div class="image-card">
<img src="<?= str_replace('/home/blari/executor/workspace/', '', $image) ?>" alt="User Image">
</div>
<?php endforeach; ?>
<?php if (empty($images)): ?>
<p>No images uploaded yet.</p>
<?php endif; ?>
</div>
</main>
</body>
</html>

227
index.php
View File

@ -3,101 +3,184 @@ declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
@date_default_timezone_set('UTC');
$phpVersion = PHP_VERSION;
$now = date('Y-m-d H:i:s');
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>New Style</title>
<title>MarketingSuite - AI-Powered Digital Marketing</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color-start: #6a11cb;
--bg-color-end: #2575fc;
--text-color: #ffffff;
--card-bg-color: rgba(255, 255, 255, 0.01);
--card-border-color: rgba(255, 255, 255, 0.1);
--primary-color: #6a11cb;
--secondary-color: #2575fc;
--text-color: #333;
--light-gray: #f8f9fa;
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
font-family: 'Poppins', sans-serif;
color: var(--text-color);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
text-align: center;
overflow: hidden;
position: relative;
}
body::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M-10 10L110 10M10 -10L10 110" stroke-width="1" stroke="rgba(255,255,255,0.05)"/></svg>');
animation: bg-pan 20s linear infinite;
z-index: -1;
}
@keyframes bg-pan {
0% { background-position: 0% 0%; }
100% { background-position: 100% 100%; }
}
main {
padding: 2rem;
}
.card {
background: var(--card-bg-color);
border: 1px solid var(--card-border-color);
border-radius: 16px;
padding: 2rem;
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1);
}
h1 {
font-size: 3rem;
.navbar-brand {
font-weight: 700;
margin: 0 0 1rem;
letter-spacing: -1px;
color: var(--primary-color) !important;
}
p {
margin: 0.5rem 0;
font-size: 1.1rem;
.hero {
background: linear-gradient(45deg, rgba(106, 17, 203, 0.8), rgba(37, 117, 252, 0.8)), url('https://images.unsplash.com/photo-1460925895917-afdab827c52f?q=80&w=1920&auto=format&fit=crop') no-repeat center center;
background-size: cover;
color: white;
padding: 180px 0;
text-align: center;
position: relative;
overflow: hidden;
}
code {
background: rgba(0,0,0,0.2);
padding: 2px 6px;
border-radius: 4px;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
.hero h1 {
font-size: 4.5rem;
font-weight: 700;
animation: fadeInDown 1s;
}
footer {
position: absolute;
bottom: 1rem;
font-size: 0.8rem;
opacity: 0.7;
.hero p {
font-size: 1.6rem;
animation: fadeInUp 1s;
}
.hero .btn {
animation: fadeInUp 1s;
}
.feature-icon {
font-size: 3.5rem;
color: var(--primary-color);
transition: transform 0.3s;
}
.feature-icon:hover {
transform: scale(1.2);
}
#features h3 {
font-weight: 600;
}
.testimonial {
background-color: var(--light-gray);
}
.testimonial .card {
border: none;
box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}
.btn-primary {
background-color: var(--primary-color);
border-color: var(--primary-color);
padding: 12px 30px;
font-weight: 600;
transition: background-color 0.3s, transform 0.3s;
}
.btn-primary:hover {
background-color: var(--secondary-color);
border-color: var(--secondary-color);
transform: translateY(-2px);
}
@keyframes fadeInDown {
from { opacity: 0; transform: translateY(-20px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes fadeInUp {
from { opacity: 0; transform: translateY(20px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<main>
<div class="card">
<h1>Welcome!</h1>
<p>Your project is ready to conquer the peaks.</p>
<p>PHP version: <code><?= htmlspecialchars($phpVersion) ?></code></p>
<nav class="navbar navbar-expand-lg navbar-light bg-light shadow-sm">
<div class="container">
<a class="navbar-brand" href="#" style="font-weight: 700; color: #6a11cb;">MarketingSuite</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<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="login.php">Login</a>
</li>
<li class="nav-item">
<a class="btn btn-primary" href="register.php" role="button">Get Started</a>
</li>
</ul>
</div>
</div>
</nav>
<header class="hero">
<div class="container">
<h1 class="display-3">Supercharge Your Marketing with AI</h1>
<p class="lead">The all-in-one platform to generate content, build websites, and drive growth.</p>
<a href="register.php" class="btn btn-primary btn-lg mt-3">Sign Up for Free</a>
</div>
</header>
<section id="features" class="py-5">
<div class="container text-center">
<h2 class="mb-5">Everything You Need to Succeed</h2>
<div class="row">
<div class="col-md-4">
<div class="feature-icon mb-3">
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" class="bi bi-magic" viewBox="0 0 16 16">
<path d="M9.5 2.672a.5.5 0 1 0 1 0V.672a.5.5 0 0 0-1 0zM11.293.293a.5.5 0 0 0-.707.707L12.293 2.707a.5.5 0 0 0 .707-.707zM1.5 11.672a.5.5 0 1 0 1 0v2a.5.5 0 0 0-1 0zm1.707 1.707a.5.5 0 0 0-.707-.707L.793 14.293a.5.5 0 0 0 .707.707zM6 0.5a.5.5 0 0 0 0 1h4a.5.5 0 0 0 0-1zM.5 6a.5.5 0 0 0 1 0V2a.5.5 0 0 0-1 0zm11.293 9.293a.5.5 0 0 0-.707.707l1.707 1.707a.5.5 0 0 0 .707-.707zM1.5 2.672a.5.5 0 1 0 1 0V.672a.5.5 0 0 0-1 0z"/>
<path d="M6.5 3A.5.5 0 0 1 6 3.5V12h3.5a.5.5 0 0 1 0 1H6v1.5a.5.5 0 0 1-1 0V13H1.5a.5.5 0 0 1 0-1H5V3.5A.5.5 0 0 1 6.5 3"/>
<path d="M8.5 4.5a.5.5 0 0 0-1 0v3h-3a.5.5 0 0 0 0 1h3v3a.5.5 0 0 0 1 0v-3h3a.5.5 0 0 0 0-1h-3z"/>
</svg>
</div>
<h3>AI Post Generator</h3>
<p>Effortlessly create engaging social media content and overcome writer's block.</p>
</div>
<div class="col-md-4">
<div class="feature-icon mb-3">
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" class="bi bi-layout-text-window-reverse" viewBox="0 0 16 16">
<path d="M13 6.5a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5m0 3a.5.5 0 0 0-.5-.5h-5a.5.5 0 0 0 0 1h5a.5.5 0 0 0 .5-.5m.5 2.5a.5.5 0 0 1-.5.5h-5a.5.5 0 0 1 0-1h5a.5.5 0 0 1 .5.5"/>
<path d="M14 0a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2a2 2 0 0 1 2-2zM2 1a1 1 0 0 0-1 1v1h14V2a1 1 0 0 0-1-1zM1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4z"/>
</svg>
</div>
<h3>AI Website Builder</h3>
<p>Instantly build a professional, mobile-friendly website for your business.</p>
</div>
<div class="col-md-4">
<div class="feature-icon mb-3">
<svg xmlns="http://www.w3.org/2000/svg" width="48" height="48" fill="currentColor" class="bi bi-bar-chart-line-fill" viewBox="0 0 16 16">
<path d="M11 2a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v12h.5a.5.5 0 0 1 0 1H.5a.5.5 0 0 1 0-1H1v-3a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v3h1V7a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v7h1z"/>
</svg>
</div>
<h3>Analytics & Insights</h3>
<p>Track your growth and make data-driven decisions with a powerful analytics dashboard.</p>
</div>
</div>
</div>
</section>
<section id="testimonials" class="py-5 testimonial">
<div class="container">
<h2 class="text-center mb-5">Loved by Businesses Worldwide</h2>
<div class="row">
<div class="col-md-6 offset-md-3">
<div class="card text-center">
<div class="card-body">
<p class="lead">"This platform has been a game-changer for our marketing efforts. We're saving hours every week and our engagement has skyrocketed."</p>
</div>
<div class="card-footer text-muted">
- Sarah L., Founder of a Small Business
</div>
</div>
</div>
</div>
</div>
</section>
<footer class="py-4 bg-dark text-white text-center">
<div class="container">
<p class="mb-0">&copy; <?= date('Y') ?> MarketingSuite. All Rights Reserved.</p>
</div>
</main>
<footer>
Page updated: <?= htmlspecialchars($now) ?> (UTC)
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

191
login.php Normal file
View File

@ -0,0 +1,191 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
$users_file = __DIR__ . '/data/users.json';
$errors = [];
$email = '';
if (isset($_SESSION['user'])) {
header('Location: dashboard.php');
exit;
}
$success_message = '';
if (isset($_SESSION['success_message'])) {
$success_message = $_SESSION['success_message'];
unset($_SESSION['success_message']);
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = trim($_POST['email'] ?? '');
$password = $_POST['password'] ?? '';
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'A valid email is required.';
}
if (empty($password)) {
$errors[] = 'Password is required.';
}
if (empty($errors)) {
$users = json_decode(file_get_contents($users_file), true);
$found_user = null;
foreach ($users as $user) {
if ($user['email'] === $email) {
$found_user = $user;
break;
}
}
if ($found_user && password_verify($password, $found_user['password'])) {
$_SESSION['user'] = [
'email' => $found_user['email'],
'business_name' => $found_user['business_name']
];
header('Location: dashboard.php');
exit;
} else {
$errors[] = 'Invalid email or password.';
}
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Login - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.login-container {
width: 100%;
max-width: 400px;
padding: 2.5rem;
background-color: var(--card-bg);
border-radius: 12px;
box-shadow: var(--shadow);
}
h1 {
font-size: 2rem;
font-weight: 700;
color: var(--heading-color);
text-align: center;
margin-bottom: 2rem;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
transition: border-color 0.2s, box-shadow 0.2s;
}
.form-group input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
.submit-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
transition: background-color 0.2s;
}
.submit-btn:hover {
background-color: #0056b3;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
text-align: center;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.form-footer {
text-align: center;
margin-top: 1.5rem;
}
</style>
</head>
<body>
<main>
<div class="card">
<h1>Login</h1>
<?php if ($success_message): ?>
<div class="success">
<p><?= htmlspecialchars($success_message) ?></p>
</div>
<?php endif; ?>
<?php if (!empty($errors)): ?>
<div class="errors">
<?php foreach ($errors as $error): ?>
<p><?= htmlspecialchars($error) ?></p>
<?php endforeach; ?>
</div>
<?php endif; ?>
<form action="login.php" method="post">
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email" name="email" value="<?= htmlspecialchars($email) ?>" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Login</button>
</form>
<div class="register-link">
<p>Don't have an account? <a href="register.php">Sign Up</a></p>
</div>
</div>
</main>
</body>
</html>

286
post-generator.php Normal file
View File

@ -0,0 +1,286 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$user = $_SESSION['user'];
$error = null;
$success = null;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'] ?? 'Untitled';
$content = $_POST['content'] ?? 'Hello, world!';
$bgColor = $_POST['bg_color'] ?? '#ffffff';
// Sanitize title to use as a filename
$filename = preg_replace('/[^a-zA-Z0-9_\-]/ ', '_', strtolower($title)) . '_' . time() . '.png';
$userDesignsDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/images';
if (!is_dir($userDesignsDir)) {
mkdir($userDesignsDir, 0777, true);
}
$filePath = $userDesignsDir . '/' . $filename;
try {
// --- Image Generation using GD Library ---
$image = imagecreatetruecolor(1080, 1080);
if ($image === false) {
throw new Exception('Cannot Initialize new GD image stream');
}
// Allocate colors
list($r, $g, $b) = sscanf($bgColor, "#%02x%02x%02x");
$backgroundColor = imagecolorallocate($image, $r, $g, $b);
$textColor = imagecolorallocate($image, 0, 0, 0);
// Fill background
imagefill($image, 0, 0, $backgroundColor);
// Add text
$font = '/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf'; // A default font path
if (!file_exists($font)) {
// Fallback if font not found
$font = null;
}
// Add title text
imagettftext($image, 72, 0, 50, 150, $textColor, $font, $title);
// Add content text
imagettftext($image, 40, 0, 50, 300, $textColor, $font, wordwrap($content, 40, "\n"));
// Save the image
if (!imagepng($image, $filePath)) {
throw new Exception('Could not save image.');
}
// Free up memory
imagedestroy($image);
$success = "Image generated successfully! <a href='image-library.php'>View Image Library</a>";
} catch (Exception $e) {
$error = "Error generating image: " . $e->getMessage();
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Post Generator - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.generator-form {
background-color: var(--card-bg);
border-radius: 12px;
padding: 2.5rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
max-width: 700px;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input, .form-group textarea, .form-group select {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
transition: border-color 0.2s, box-shadow 0.2s;
}
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
.form-group textarea {
min-height: 120px;
resize: vertical;
}
.submit-btn {
display: inline-block;
padding: 0.8rem 1.5rem;
border: none;
border-radius: 8px;
background-color: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
transition: background-color 0.2s;
}
.submit-btn:hover {
background-color: #0056b3;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
}
.message.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php" class="active">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-library.php">Video Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>AI Post Generator</h1>
<?php if ($success): ?>
<div class="message success"><?= $success ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="message error"><?= $error ?></div>
<?php endif; ?>
<form class="generator-form" method="POST" action="post-generator.php">
<div class="form-group">
<label for="title">Post Title</label>
<input type="text" id="title" name="title" placeholder="e.g., Summer Sale!" required>
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea id="content" name="content" placeholder="e.g., Get 50% off all items this weekend." required></textarea>
</div>
<div class="form-group">
<label for="bg_color">Background Color</label>
<input type="color" id="bg_color" name="bg_color" value="#6a11cb">
</div>
<button type="submit" class="submit-btn">Generate Post</button>
</form>
</main>
</body>
</html>

191
register.php Normal file
View File

@ -0,0 +1,191 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
$data_dir = __DIR__ . '/data';
if (!is_dir($data_dir)) {
mkdir($data_dir, 0777, true);
}
$users_file = $data_dir . '/users.json';
if (!file_exists($users_file)) {
file_put_contents($users_file, json_encode([]));
}
$errors = [];
$success_message = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$business_name = trim($_POST['business_name'] ?? '');
$email = trim($_POST['email'] ?? '');
$password = $_POST['password'] ?? '';
if (empty($business_name)) {
$errors[] = 'Business name is required.';
}
if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'A valid email is required.';
}
if (empty($password) || strlen($password) < 8) {
$errors[] = 'Password must be at least 8 characters long.';
}
if (empty($errors)) {
$users = json_decode(file_get_contents($users_file), true);
foreach ($users as $user) {
if ($user['email'] === $email) {
$errors[] = 'An account with this email already exists.';
break;
}
}
if (empty($errors)) {
$users[] = [
'business_name' => $business_name,
'email' => $email,
'password' => password_hash($password, PASSWORD_DEFAULT),
];
file_put_contents($users_file, json_encode($users, JSON_PRETTY_PRINT));
$_SESSION['success_message'] = 'Registration successful! You can now log in.';
header('Location: login.php');
exit;
}
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Sign Up - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.register-container {
width: 100%;
max-width: 400px;
padding: 2.5rem;
background-color: var(--card-bg);
border-radius: 12px;
box-shadow: var(--shadow);
}
h1 {
font-size: 2rem;
font-weight: 700;
color: var(--heading-color);
text-align: center;
margin-bottom: 2rem;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
transition: border-color 0.2s, box-shadow 0.2s;
}
.form-group input:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
.submit-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
transition: background-color 0.2s;
}
.submit-btn:hover {
background-color: #0056b3;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
text-align: center;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
.form-footer {
text-align: center;
margin-top: 1.5rem;
}
</style>
</head>
<body>
<main>
<div class="card">
<h1>Create Account</h1>
<?php if (!empty($errors)): ?>
<div class="errors">
<?php foreach ($errors as $error): ?>
<p><?= htmlspecialchars($error) ?></p>
<?php endforeach; ?>
</div>
<?php endif; ?>
<form action="register.php" method="post">
<div class="form-group">
<label for="business_name">Business Name</label>
<input type="text" id="business_name" name="business_name" required>
</div>
<div class="form-group">
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" id="password" name="password" required minlength="8">
</div>
<button type="submit">Sign Up</button>
</form>
<div class="login-link">
<p>Already have an account? <a href="login.php">Log In</a></p>
</div>
</div>
</main>
</body>
</html>

146
settings.php Normal file
View File

@ -0,0 +1,146 @@
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Settings</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.coming-soon {
text-align: center;
padding: 4rem;
background-color: var(--card-bg);
border-radius: 12px;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
}
.coming-soon h2 {
font-size: 1.8rem;
margin-bottom: 1rem;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-library.php">Video Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php" class="active">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>Settings</h1>
<div class="coming-soon">
<h2>Coming Soon!</h2>
<p>This feature is under development. Check back later for updates.</p>
</div>
</main>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{BUSINESS_NAME}}</title>
<style>
body { font-family: serif; margin: 0; }
.hero { background-color: #333; color: white; padding: 4rem 2rem; text-align: center; }
.hero h1 { font-size: 3rem; margin: 0; }
.hero p { font-size: 1.2rem; }
.content { padding: 2rem; }
</style>
</head>
<body>
<header class="hero">
<h1>{{BUSINESS_NAME}}</h1>
<p>{{TAGLINE}}</p>
</header>
<main class="content">
<h2>Welcome to our website!</h2>
<p>This is a classic website generated for your business.</p>
</main>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{BUSINESS_NAME}}</title>
<style>
body { font-family: sans-serif; margin: 0; }
.hero { background-color: #6a11cb; color: white; padding: 4rem 2rem; text-align: center; }
.hero h1 { font-size: 3rem; margin: 0; }
.hero p { font-size: 1.2rem; }
.content { padding: 2rem; }
</style>
</head>
<body>
<header class="hero">
<h1>{{BUSINESS_NAME}}</h1>
<p>{{TAGLINE}}</p>
</header>
<main class="content">
<h2>Welcome to our website!</h2>
<p>This is a simple, modern website generated for your business.</p>
</main>
</body>
</html>

View File

@ -0,0 +1,25 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{BUSINESS_NAME}}</title>
<style>
body { font-family: sans-serif; margin: 0; }
.hero { background-color: #ff6b6b; color: white; padding: 4rem 2rem; text-align: center; }
.hero h1 { font-size: 3rem; margin: 0; }
.hero p { font-size: 1.2rem; }
.content { padding: 2rem; }
</style>
</head>
<body>
<header class="hero">
<h1>{{BUSINESS_NAME}}</h1>
<p>{{TAGLINE}}</p>
</header>
<main class="content">
<h2>Welcome to our website!</h2>
<p>This is a vibrant website generated for your business.</p>
</main>
</body>
</html>

284
video-generator.php Normal file
View File

@ -0,0 +1,284 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$user = $_SESSION['user'];
$error = null;
$success = null;
// Check for ffmpeg
$ffmpeg_path = 'ffmpeg'; // or provide full path
$ffmpeg_check = shell_exec("command -v $ffmpeg_path");
if (empty($ffmpeg_check)) {
$error = "Error: ffmpeg is not installed or not in the system\'s PATH. Video generation is disabled.";
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($error)) {
$title = $_POST['title'] ?? 'Untitled Video';
$images = $_FILES['images'] ?? [];
$userVideosDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/videos';
if (!is_dir($userVideosDir)) {
mkdir($userVideosDir, 0777, true);
}
$uploaded_files = [];
if (!empty($images)) {
for ($i = 0; $i < count($images['name']); $i++) {
if ($images['error'][$i] === UPLOAD_ERR_OK) {
$tmp_name = $images['tmp_name'][$i];
$name = basename($images['name'][$i]);
$upload_path = '/tmp/' . uniqid() . '-' . $name;
move_uploaded_file($tmp_name, $upload_path);
$uploaded_files[] = $upload_path;
}
}
}
if (count($uploaded_files) > 0) {
$filename = preg_replace('/[^a-zA-Z0-9_\-]/ ', '_', strtolower($title)) . '_' . time() . '.mp4';
$outputPath = $userVideosDir . '/' . $filename;
// Create a text file for ffmpeg input
$list_file_path = '/tmp/ffmpeg_list_' . uniqid() . '.txt';
$list_content = "";
foreach ($uploaded_files as $file) {
$list_content .= "file '" . $file . "'\n";
$list_content .= "duration 3\n"; // Each image shows for 3 seconds
}
file_put_contents($list_file_path, $list_content);
// FFmpeg command
$cmd = "$ffmpeg_path -f concat -safe 0 -i $list_file_path -c:v libx264 -r 30 -pix_fmt yuv420p $outputPath 2>&1";
$output = shell_exec($cmd);
if (file_exists($outputPath)) {
$success = "Video generated successfully! <a href='video-library.php'>View Video Library</a>";
} else {
$error = "Error generating video. Please check server logs. FFmpeg output: <pre>$output</pre>";
}
// Clean up temporary files
unlink($list_file_path);
foreach ($uploaded_files as $file) {
unlink($file);
}
} else {
$error = "Please upload at least one image to generate a video.";
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Video Generator - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.generator-form {
background-color: var(--card-bg);
border-radius: 12px;
padding: 2.5rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
max-width: 700px;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input, .form-group textarea, .form-group select {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
transition: border-color 0.2s, box-shadow 0.2s;
}
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
.submit-btn {
display: inline-block;
padding: 0.8rem 1.5rem;
border: none;
border-radius: 8px;
background-color: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
transition: background-color 0.2s;
}
.submit-btn:hover {
background-color: #0056b3;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
}
.message.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-generator.php" class="active">Video Generator</a>
<a href="video-library.php">Video Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>AI Video Generator</h1>
<?php if ($success): ?>
<div class="message success"><?= $success ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="message error"><?= $error ?></div>
<?php endif; ?>
<form class="generator-form" method="POST" action="video-generator.php" enctype="multipart/form-data">
<div class="form-group">
<label for="title">Video Title</label>
<input type="text" id="title" name="title" placeholder="e.g., My Awesome Slideshow" required>
</div>
<div class="form-group">
<label for="images">Images</label>
<input type="file" id="images" name="images[]" accept="image/*" multiple required>
</div>
<button type="submit" class="submit-btn" <?php if (!empty($error) && strpos($error, 'ffmpeg') !== false) echo 'disabled'; ?>>Generate Video</button>
</form>
</main>
</body>
</html>

266
video-library.php Normal file
View File

@ -0,0 +1,266 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$user = $_SESSION['user'];
$error = null;
$success = null;
$userVideosDir = '/home/blari/executor/workspace/users_data/' . session_id() . '/videos';
if (!is_dir($userVideosDir)) {
mkdir($userVideosDir, 0777, true);
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['video'])) {
$video = $_FILES['video'];
if ($video['error'] === UPLOAD_ERR_OK) {
$videoFileType = strtolower(pathinfo($video['name'], PATHINFO_EXTENSION));
$allowedTypes = ['mp4', 'mov', 'avi', 'webm'];
if (in_array($videoFileType, $allowedTypes)) {
$videoName = uniqid() . '.' . $videoFileType;
$videoPath = $userVideosDir . '/' . $videoName;
if (move_uploaded_file($video['tmp_name'], $videoPath)) {
$success = 'Video uploaded successfully!';
} else {
$error = 'Could not save uploaded video.';
}
} else {
$error = 'Invalid file type. Only MP4, MOV, AVI, and WEBM are allowed.';
}
} else {
$error = 'Error uploading file.';
}
}
$videos = glob($userVideosDir . '/*.{mp4,mov,avi,webm}', GLOB_BRACE);
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Video Library - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.upload-form {
background-color: var(--card-bg);
border-radius: 12px;
padding: 2.5rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
margin-bottom: 2rem;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
}
.submit-btn {
display: inline-block;
padding: 0.8rem 1.5rem;
border: none;
border-radius: 8px;
background-color: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
}
.video-gallery {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1.5rem;
}
.video-card {
border-radius: 12px;
overflow: hidden;
box-shadow: var(--shadow);
position: relative;
}
.video-card video {
width: 100%;
height: 200px;
object-fit: cover;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
}
.message.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-library.php" class="active">Video Library</a>
<a href="website-builder.php">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>Video Library</h1>
<?php if ($success): ?>
<div class="message success"><?= $success ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="message error"><?= $error ?></div>
<?php endif; ?>
<div class="upload-form">
<form method="POST" enctype="multipart/form-data">
<div class="form-group">
<label for="video">Upload Video</label>
<input type="file" id="video" name="video" accept="video/*" required>
</div>
<button type="submit" class="submit-btn">Upload</button>
</form>
</div>
<div class="video-gallery">
<?php foreach ($videos as $video): ?>
<div class="video-card">
<video controls>
<source src="<?= str_replace('/home/blari/executor/workspace/', '', $video) ?>" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<?php endforeach; ?>
<?php if (empty($videos)): ?>
<p>No videos uploaded yet.</p>
<?php endif; ?>
</div>
</main>
</body>
</html>

14
view-website.php Normal file
View File

@ -0,0 +1,14 @@
<?php
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$websitePath = '/home/blari/executor/workspace/users_data/' . session_id() . '/websites/index.html';
if (file_exists($websitePath)) {
readfile($websitePath);
} else {
echo "Website not found. Please generate it first from the Website Builder.";
}

324
website-builder.php Normal file
View File

@ -0,0 +1,324 @@
<?php
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
$user = $_SESSION['user'];
$error = null;
$success = null;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (!isset($_SESSION['user']) || !session_id()) {
$error = "Error: Your session has expired or is invalid. Please log in again.";
} else {
$template = $_POST['template'] ?? 'modern';
$businessName = $_POST['business_name'] ?? $user['business_name'];
$tagline = $_POST['tagline'] ?? '';
$baseUserDir = '/home/blari/executor/workspace/users_data/';
if (!is_dir($baseUserDir)) {
$error = "Error: The base user data directory does not exist. Please contact support.";
} elseif (!is_writable($baseUserDir)) {
$error = "Error: The user data directory is not writable. Please check permissions.";
} else {
$userWebsitesDir = $baseUserDir . session_id() . '/websites';
if (!is_dir($userWebsitesDir) && !mkdir($userWebsitesDir, 0777, true)) {
$error = "Error: Could not create website directory at '{$userWebsitesDir}'. Please check permissions.";
} else {
$websiteFilename = 'index.html';
$websitePath = $userWebsitesDir . '/' . $websiteFilename;
$templatePath = "templates/website/{$template}.html";
if (!file_exists($templatePath)) {
$error = "Error: The selected template file could not be found.";
} else {
$templateContent = file_get_contents($templatePath);
$templateContent = str_replace('{{BUSINESS_NAME}}', htmlspecialchars($businessName), $templateContent);
$templateContent = str_replace('{{TAGLINE}}', htmlspecialchars($tagline), $templateContent);
if (file_put_contents($websitePath, $templateContent) === false) {
$error = "Could not save website to '{$websitePath}'. Please ensure the directory is writable.";
} else {
$success = "Website generated successfully! <a href='view-website.php' target='_blank'>View Website</a>";
}
}
}
}
}
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Website Builder - Digital Marketing Suite</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #f8f9fa;
--sidebar-bg: #ffffff;
--text-color: #343a40;
--heading-color: #212529;
--primary-color: #007bff;
--border-color: #dee2e6;
--card-bg: #ffffff;
--shadow: 0 0 15px rgba(0, 0, 0, 0.05);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background-color: var(--bg-color);
color: var(--text-color);
display: flex;
}
.sidebar {
width: 260px;
background-color: var(--sidebar-bg);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
height: 100vh;
position: fixed;
box-shadow: var(--shadow);
}
.sidebar-header {
padding: 1.5rem;
font-size: 1.5rem;
font-weight: 700;
color: var(--primary-color);
border-bottom: 1px solid var(--border-color);
text-align: center;
}
.sidebar-nav {
flex-grow: 1;
list-style: none;
padding: 1rem 0;
margin: 0;
}
.sidebar-nav a {
display: flex;
align-items: center;
padding: 1rem 1.5rem;
text-decoration: none;
color: var(--text-color);
font-weight: 500;
transition: background-color 0.2s, color 0.2s;
border-left: 3px solid transparent;
}
.sidebar-nav a:hover, .sidebar-nav a.active {
background-color: #e9ecef;
color: var(--primary-color);
border-left-color: var(--primary-color);
}
.sidebar-footer {
padding: 1.5rem;
border-top: 1px solid var(--border-color);
}
.logout-btn {
display: block;
width: 100%;
padding: 0.8rem;
border: none;
border-radius: 8px;
background: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
text-align: center;
text-decoration: none;
transition: background-color 0.2s;
}
.logout-btn:hover {
background-color: #0056b3;
}
.main-content {
margin-left: 260px;
flex-grow: 1;
padding: 3rem;
}
h1 {
font-size: 2.2rem;
font-weight: 700;
color: var(--heading-color);
margin-bottom: 2rem;
}
.builder-form {
background-color: var(--card-bg);
border-radius: 12px;
padding: 2.5rem;
border: 1px solid var(--border-color);
box-shadow: var(--shadow);
max-width: 800px;
}
.form-group {
margin-bottom: 1.5rem;
}
.form-group label {
display: block;
font-weight: 500;
margin-bottom: 0.5rem;
}
.form-group input, .form-group textarea {
width: 100%;
padding: 0.8rem;
border-radius: 8px;
border: 1px solid var(--border-color);
font-size: 1rem;
transition: border-color 0.2s, box-shadow 0.2s;
}
.form-group input:focus, .form-group textarea:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
.template-selector {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1.5rem;
margin-bottom: 1.5rem;
}
.template-card {
border: 2px solid var(--border-color);
border-radius: 8px;
cursor: pointer;
transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s;
}
.template-card:hover {
transform: translateY(-5px);
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
}
.template-card.active {
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.3);
}
.template-card .template-preview {
width: 100%;
height: 150px;
border-radius: 6px 6px 0 0;
}
.template-card .template-name {
padding: 0.8rem;
font-weight: 500;
text-align: center;
}
.submit-btn {
display: inline-block;
padding: 0.8rem 1.5rem;
border: none;
border-radius: 8px;
background-color: var(--primary-color);
color: #ffffff;
font-size: 1rem;
font-weight: 700;
cursor: pointer;
transition: background-color 0.2s;
}
.submit-btn:hover {
background-color: #0056b3;
}
.message {
padding: 1rem;
border-radius: 8px;
margin-bottom: 1.5rem;
font-weight: 500;
}
.message.success {
background-color: #d4edda;
color: #155724;
border: 1px solid #c3e6cb;
}
.message.error {
background-color: #f8d7da;
color: #721c24;
border: 1px solid #f5c6cb;
}
</style>
</head>
<body>
<div class="sidebar">
<div class="sidebar-header">Digital Suite</div>
<nav class="sidebar-nav">
<a href="dashboard.php">Dashboard</a>
<a href="post-generator.php">Post Generator</a>
<a href="image-library.php">Image Library</a>
<a href="video-library.php">Video Library</a>
<a href="website-builder.php" class="active">Website Builder</a>
<a href="analytics.php">Analytics</a>
<a href="settings.php">Settings</a>
</nav>
<div class="sidebar-footer">
<a href="?action=logout" class="logout-btn">Logout</a>
</div>
</div>
<main class="main-content">
<h1>AI Website Builder</h1>
<?php if ($success): ?>
<div class="message success"><?= $success ?></div>
<?php endif; ?>
<?php if ($error): ?>
<div class="message error"><?= $error ?></div>
<?php endif; ?>
<form class="builder-form" method="POST" action="website-builder.php">
<div class="form-group">
<label>Select a Template</label>
<div class="template-selector">
<div class="template-card active" data-template="modern">
<div class="template-preview" style="background-color: #e9ecef;"></div>
<div class="template-name">Modern</div>
</div>
<div class="template-card" data-template="classic">
<div class="template-preview" style="background-color: #f8f9fa;"></div>
<div class="template-name">Classic</div>
</div>
<div class="template-card" data-template="vibrant">
<div class="template-preview" style="background-color: #6a11cb;"></div>
<div class="template-name">Vibrant</div>
</div>
</div>
<input type="hidden" name="template" id="template-input" value="modern">
</div>
<div class="form-group">
<label for="business_name">Business Name</label>
<input type="text" id="business_name" name="business_name" value="<?= htmlspecialchars($user['business_name']) ?>" required>
</div>
<div class="form-group">
<label for="tagline">Tagline / Headline</label>
<input type="text" id="tagline" name="tagline" placeholder="e.g., The best widgets in town">
</div>
<button type="submit" class="submit-btn">Generate Website</button>
</form>
</main>
<script>
const templateCards = document.querySelectorAll('.template-card');
const templateInput = document.getElementById('template-input');
templateCards.forEach(card => {
card.addEventListener('click', () => {
templateCards.forEach(c => c.classList.remove('active'));
card.classList.add('active');
templateInput.value = card.dataset.template;
});
});
</script>
</body>
</html>