diff --git a/assets/css/custom.css b/assets/css/custom.css new file mode 100644 index 0000000..3096285 --- /dev/null +++ b/assets/css/custom.css @@ -0,0 +1,120 @@ + +/* General Body Styles */ +body { + background-color: #F4F7F6; + font-family: 'Poppins', sans-serif; + color: #333; +} + +/* Navbar */ +.navbar { + box-shadow: 0 2px 4px rgba(0,0,0,0.05); +} + +.navbar-brand { + font-weight: 600; + color: #4A90E2 !important; +} + +/* Main Container */ +.container { + padding-top: 2rem; + padding-bottom: 2rem; +} + +/* Page Titles */ +h1, h2, h3, h4, h5, h6 { + font-weight: 600; + color: #333; +} + +h1.page-title { + margin-bottom: 2rem; + color: #4A90E2; +} + + +/* Venue Card Styles */ +.venue-card { + background-color: #FFFFFF; + border: none; + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08); + transition: transform 0.3s ease, box-shadow 0.3s ease; + overflow: hidden; + margin-bottom: 1.5rem; +} + +.venue-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.12); +} + +.venue-card .card-img-top { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + aspect-ratio: 4 / 3; + object-fit: cover; +} + +.venue-card .card-body { + padding: 1.5rem; +} + +.venue-card .card-title { + font-size: 1.25rem; + font-weight: 600; + color: #4A90E2; + margin-bottom: 0.5rem; +} + +.venue-card .card-text { + color: #555; + margin-bottom: 1rem; +} + +.venue-card .features-list { + padding-left: 0; + list-style: none; + font-size: 0.9rem; + color: #666; +} + +.venue-card .features-list li { + margin-bottom: 0.25rem; + display: flex; + align-items: center; +} + +.venue-card .features-list i { + color: #50E3C2; + margin-right: 0.5rem; + font-size: 1rem; +} + +.venue-card .badge { + font-size: 0.8rem; + font-weight: 500; + padding: 0.4em 0.8em; +} + +.badge-available { + background-color: #50E3C2; + color: #fff; +} + +.badge-booked { + background-color: #E9573F; + color: #fff; +} + +/* Footer */ +.footer { + background-color: #fff; + padding: 2rem 0; + margin-top: 3rem; + border-top: 1px solid #e9ecef; + text-align: center; + font-size: 0.9rem; + color: #6c757d; +} diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..2fe99af --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,4 @@ +// No custom JS needed for this step, but the file is here for future use. +document.addEventListener('DOMContentLoaded', function () { + // Future interactive scripts will go here +}); diff --git a/db/config.php b/db/config.php index 961cbf1..4f1359c 100644 --- a/db/config.php +++ b/db/config.php @@ -6,12 +6,92 @@ define('DB_USER', 'app_34010'); define('DB_PASS', 'e689e56d-6f73-4dc6-b30b-aac78bb04979'); function db() { - static $pdo; - if (!$pdo) { - $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8mb4', DB_USER, DB_PASS, [ - PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, - PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, - ]); - } - return $pdo; + static $pdo; + if (!$pdo) { + $dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_NAME . ';charset=utf8mb4'; + $options = [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + PDO::ATTR_EMULATE_PREPARES => false, + ]; + try { + $pdo = new PDO($dsn, DB_USER, DB_PASS, $options); + } catch (PDOException $e) { + // In a real app, you'd log this error and show a generic message + // For this demo, we'll just die with the error. + die('Database connection failed: ' . $e->getMessage()); + } + } + return $pdo; } + +function seed_initial_data() { + $pdo = db(); + + // 1. Create venues table + $pdo->exec(" + CREATE TABLE IF NOT EXISTS venues ( + id INT AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(255) NOT NULL, + capacity INT NOT NULL, + features TEXT, + image_url VARCHAR(255), + is_booked BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + "); + + // 2. Check if venues table is empty + $stmt = $pdo->query("SELECT COUNT(*) FROM venues"); + if ($stmt->fetchColumn() == 0) { + // 3. Insert sample data + $venues = [ + [ + 'name' => 'The Grand Ballroom', + 'capacity' => 500, + 'features' => '["Full A/V setup", "On-site catering", "Valet parking"]', + 'image_url' => 'https://picsum.photos/seed/venue-1/800/600', + 'is_booked' => false + ], + [ + 'name' => 'The Rustic Barn', + 'capacity' => 150, + 'features' => '["Scenic views", "Outdoor space", "Bridal suite"]', + 'image_url' => 'https://picsum.photos/seed/venue-2/800/600', + 'is_booked' => true + ], + [ + 'name' => 'Cityscape Rooftop', + 'capacity' => 100, + 'features' => '["360° city views", "Modern decor", "Cocktail bar"]', + 'image_url' => 'https://picsum.photos/seed/venue-3/800/600', + 'is_booked' => false + ], + [ + 'name' => 'The Garden Pavilion', + 'capacity' => 250, + 'features' => '["Lush gardens", "Glass walls", "Natural light"]', + 'image_url' => 'https://picsum.photos/seed/venue-4/800/600', + 'is_booked' => false + ] + ]; + + $stmt = $pdo->prepare( + "INSERT INTO venues (name, capacity, features, image_url, is_booked) VALUES (?, ?, ?, ?, ?)" + ); + + foreach ($venues as $venue) { + $stmt->execute([ + $venue['name'], + $venue['capacity'], + $venue['features'], + $venue['image_url'], + $venue['is_booked'] + ]); + } + } +} + +// Run the seeder +seed_initial_data(); + diff --git a/index.php b/index.php index e13ae95..d36d864 100644 --- a/index.php +++ b/index.php @@ -1,131 +1,124 @@ - + - - - New Style - - - - + + + EventManager - Your All-in-One Event Solution + + + + + + -
-
-

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

-
-
- + + + + +
+
+

Effortless Event Management

+

Your all-in-one solution for planning, organizing, and executing flawless events.

+ Explore Venues +
+
+ +
+
+

Core Features

+

Everything you need, all in one place.

+
+
+ +

Venues

+

Manage all your event spaces.

+
+
+ +

Vendors

+

Organize caterers, decorators, etc.

+
+
+ +

Schedules

+

Plan your event minute-by-minute.

+
+
+ +

Budgets

+

Keep track of all your finances.

+
+
+
+
+ + + + + + + + - + \ No newline at end of file diff --git a/venues.php b/venues.php new file mode 100644 index 0000000..0d215f2 --- /dev/null +++ b/venues.php @@ -0,0 +1,77 @@ +query("SELECT * FROM venues ORDER BY name ASC"); +$venues = $stmt->fetchAll(); + +function render_venue_card($venue) { + $features = json_decode($venue['features'], true); + $status_badge = $venue['is_booked'] + ? 'Booked' + : 'Available'; + + $features_html = ''; + if (!empty($features)) { + $features_html .= ''; + } + + return << +
+ Image of {$venue['name']} +
+
+
{$venue['name']}
+ {$status_badge} +
+

Capacity: {$venue['capacity']} guests

+ {$features_html} +
+
+ +HTML; +} + +?> + + + + + + Our Venues - EventManager + + + + + + + + + + +
+

Our Venues

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