Compare commits

..

No commits in common. "ai-dev" and "master" have entirely different histories.

8 changed files with 146 additions and 156 deletions

View File

@ -1,18 +0,0 @@
body {
font-family: 'Inter', sans-serif;
background-color: #F8F9FA;
}
.post-card {
transition: transform .2s;
}
.post-card:hover {
transform: scale(1.02);
}
.post-content img {
max-width: 100%;
height: auto;
border-radius: 0.5rem;
}

View File

@ -5,22 +5,6 @@ define('DB_NAME', 'app_30972');
define('DB_USER', 'app_30972');
define('DB_PASS', '9eb17a13-4a89-4e11-8517-0c201096e935');
function run_migrations() {
$pdo = db();
$migration_dir = __DIR__ . '/migrations';
if (!is_dir($migration_dir)) {
return;
}
$migration_files = glob($migration_dir . '/*.sql');
foreach ($migration_files as $file) {
$p = 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,
]);
$p->exec(file_get_contents($file));
}
}
function db() {
static $pdo;
if (!$pdo) {

View File

@ -1,7 +0,0 @@
CREATE TABLE IF NOT EXISTS posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
author VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

View File

@ -1,4 +0,0 @@
INSERT INTO posts (title, content, author) VALUES
('The Future of Web Development', 'Web development is constantly evolving. In this post, we explore the upcoming trends and technologies that will shape the future of the web, from AI-powered tools to the rise of WebAssembly.', 'Admin'),
('A Guide to Mindful Productivity', 'In a world of distractions, staying focused is a superpower. This article provides practical tips on how to be more productive by being more mindful, managing your energy, and setting clear intentions.', 'Admin'),
('The Art of Storytelling in Marketing', 'Stories sell. Learn how to craft compelling narratives that resonate with your audience and build a strong brand identity. We cover the key elements of storytelling and how to apply them to your marketing strategy.', 'Admin');

View File

@ -1,9 +0,0 @@
</main>
<footer class="py-3 my-4">
<div class="container">
<p class="text-center text-muted">&copy; <?php echo date("Y"); ?> Kha netw</p>
</div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

View File

@ -1,30 +0,0 @@
<?php require_once 'db/config.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Kha netw</title>
<meta name="description" content="Built with Flatlogic Generator">
<meta name="keywords" content="blog, articles, updates, post editor, SEO, web development, productivity, marketing, storytelling, flatlogic">
<meta property="og:title" content="Kha netw">
<meta property="og:description" content="Built with Flatlogic Generator">
<meta property="og:image" content="">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
<link rel="stylesheet" href="assets/css/custom.css?v=<?php echo time(); ?>">
<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;600;700&display=swap" rel="stylesheet">
</head>
<body>
<header class="py-3 mb-4 border-bottom">
<div class="container d-flex flex-wrap justify-content-center">
<a href="/" class="d-flex align-items-center mb-3 mb-lg-0 me-lg-auto text-dark text-decoration-none">
<span class="fs-4">Kha netw</span>
</a>
</div>
</header>
<main class="container">

178
index.php
View File

@ -1,36 +1,150 @@
<?php
require_once 'header.php';
run_migrations();
declare(strict_types=1);
@ini_set('display_errors', '1');
@error_reporting(E_ALL);
@date_default_timezone_set('UTC');
$stmt = db()->query("SELECT * FROM posts ORDER BY created_at DESC");
$posts = $stmt->fetchAll();
$phpVersion = PHP_VERSION;
$now = date('Y-m-d H:i:s');
?>
<div class="row g-5">
<div class="col-md-8">
<h3 class="pb-4 mb-4 fst-italic border-bottom">
From the Firehose
</h3>
<?php foreach ($posts as $post): ?>
<article class="blog-post mb-5">
<h2 class="blog-post-title"><?php echo htmlspecialchars($post['title']); ?></h2>
<p class="blog-post-meta"><?php echo date('F j, Y', strtotime($post['created_at'])); ?> by <a href="#"><?php echo htmlspecialchars($post['author']); ?></a></p>
<p><?php echo nl2br(htmlspecialchars(substr($post['content'], 0, 200))); ?>...</p>
<a href="post.php?id=<?php echo $post['id']; ?>" class="btn btn-primary">Read More</a>
</article>
<?php endforeach; ?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>New Style</title>
<?php
// Read project preview data from environment
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? '';
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? '';
?>
<?php if ($projectDescription): ?>
<!-- Meta description -->
<meta name="description" content='<?= htmlspecialchars($projectDescription) ?>' />
<!-- Open Graph meta tags -->
<meta property="og:description" content="<?= htmlspecialchars($projectDescription) ?>" />
<!-- Twitter meta tags -->
<meta property="twitter:description" content="<?= htmlspecialchars($projectDescription) ?>" />
<?php endif; ?>
<?php if ($projectImageUrl): ?>
<!-- Open Graph image -->
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
<!-- Twitter image -->
<meta property="twitter:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
<?php endif; ?>
<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-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);
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
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);
}
.loader {
margin: 1.25rem auto 1.25rem;
width: 48px;
height: 48px;
border: 3px solid rgba(255, 255, 255, 0.25);
border-top-color: #fff;
border-radius: 50%;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.hint {
opacity: 0.9;
}
.sr-only {
position: absolute;
width: 1px; height: 1px;
padding: 0; margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap; border: 0;
}
h1 {
font-size: 3rem;
font-weight: 700;
margin: 0 0 1rem;
letter-spacing: -1px;
}
p {
margin: 0.5rem 0;
font-size: 1.1rem;
}
code {
background: rgba(0,0,0,0.2);
padding: 2px 6px;
border-radius: 4px;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
footer {
position: absolute;
bottom: 1rem;
font-size: 0.8rem;
opacity: 0.7;
}
</style>
</head>
<body>
<main>
<div class="card">
<h1>Analyzing your requirements and generating your website…</h1>
<div class="loader" role="status" aria-live="polite" aria-label="Applying initial changes">
<span class="sr-only">Loading…</span>
</div>
<p class="hint"><?= ($_SERVER['HTTP_HOST'] ?? '') === 'appwizzy.com' ? 'AppWizzy' : 'Flatlogic' ?> AI is collecting your requirements and applying the first changes.</p>
<p class="hint">This page will update automatically as the plan is implemented.</p>
<p>Runtime: PHP <code><?= htmlspecialchars($phpVersion) ?></code> — UTC <code><?= htmlspecialchars($now) ?></code></p>
</div>
<div class="col-md-4">
<div class="position-sticky" style="top: 2rem;">
<div class="p-4 mb-3 bg-light rounded">
<h4 class="fst-italic">About</h4>
<p class="mb-0">This is a simple blog created with PHP and Bootstrap. You can find articles about web development, productivity, and more.</p>
</div>
</div>
</div>
</div>
<?php require_once 'footer.php'; ?>
</main>
<footer>
Page updated: <?= htmlspecialchars($now) ?> (UTC)
</footer>
</body>
</html>

View File

@ -1,40 +0,0 @@
<?php
require_once 'header.php';
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
header("Location: index.php");
exit;
}
$stmt = db()->prepare("SELECT * FROM posts WHERE id = ?");
$stmt->execute([$_GET['id']]);
$post = $stmt->fetch();
if (!$post) {
header("Location: index.php");
exit;
}
?>
<div class="row g-5">
<div class="col-md-8">
<article class="blog-post">
<h2 class="blog-post-title"><?php echo htmlspecialchars($post['title']); ?></h2>
<p class="blog-post-meta"><?php echo date('F j, Y', strtotime($post['created_at'])); ?> by <a href="#"><?php echo htmlspecialchars($post['author']); ?></a></p>
<div class="post-content">
<?php echo nl2br(htmlspecialchars($post['content'])); ?>
</div>
</article>
<a href="index.php" class="btn btn-secondary mt-4">Back to Posts</a>
</div>
<div class="col-md-4">
<div class="position-sticky" style="top: 2rem;">
<div class="p-4 mb-3 bg-light rounded">
<h4 class="fst-italic">About</h4>
<p class="mb-0">This is a simple blog created with PHP and Bootstrap. You can find articles about web development, productivity, and more.</p>
</div>
</div>
</div>
</div>
<?php require_once 'footer.php'; ?>