From 18dabd1eb26391dff0a93ac1ff5b625edbbb59ea Mon Sep 17 00:00:00 2001 From: ayrisdev Date: Thu, 11 Jun 2026 13:38:37 +0300 Subject: [PATCH] kite-menu --- app/MenuClient.tsx | 17 +++++++--- app/layout.tsx | 2 +- create_admin.mjs | 39 +++++++++++++++++++++ mock_images.mjs | 32 ++++++++++++++++++ public/logo.avif | Bin 0 -> 7533 bytes seed_from_sql.mjs | 82 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 167 insertions(+), 5 deletions(-) create mode 100644 create_admin.mjs create mode 100644 mock_images.mjs create mode 100644 public/logo.avif create mode 100644 seed_from_sql.mjs diff --git a/app/MenuClient.tsx b/app/MenuClient.tsx index 1bdcfbe..284151b 100644 --- a/app/MenuClient.tsx +++ b/app/MenuClient.tsx @@ -80,7 +80,7 @@ export default function MenuClient({ initialCategories, siteSettings }: { initia backgroundPosition: "center" }} /> - + {/* Dark overlay to make text readable */}
@@ -101,7 +101,7 @@ export default function MenuClient({ initialCategories, siteSettings }: { initia {/* Logo */} Moy Beach {/* Footer Logo */} Moy Beach - © 2026 Moy Beach. Tüm hakları saklıdır. + © 2026 KiteBeach Akyaka. Tüm hakları saklıdır.

+ + Created by ayris.tech +
diff --git a/app/layout.tsx b/app/layout.tsx index 23ec8f0..e9bb9c4 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -29,7 +29,7 @@ export default function RootLayout({ }>) { return ( - {children} + {children} ); } diff --git a/create_admin.mjs b/create_admin.mjs new file mode 100644 index 0000000..b5c3e93 --- /dev/null +++ b/create_admin.mjs @@ -0,0 +1,39 @@ +import pkg from 'pg'; +import dotenv from 'dotenv'; +import bcrypt from 'bcryptjs'; + +dotenv.config(); + +const { Client } = pkg; + +async function main() { + const client = new Client({ + connectionString: process.env.DATABASE_URL, + }); + await client.connect(); + + const username = 'admin'; + const plainPassword = 'password123'; + const passwordHash = await bcrypt.hash(plainPassword, 10); + + try { + // Delete existing admin if any + await client.query('DELETE FROM "users" WHERE "username" = $1', [username]); + + await client.query(` + INSERT INTO "users" ("username", "password_hash", "role") + VALUES ($1, $2, $3) + `, [username, passwordHash, 'admin']); + + console.log(`Successfully created admin user: ${username} / ${plainPassword}`); + } catch (e) { + console.error('Error creating admin:', e.message); + } finally { + await client.end(); + } +} + +main().catch(e => { + console.error(e); + process.exit(1); +}); diff --git a/mock_images.mjs b/mock_images.mjs new file mode 100644 index 0000000..6ed1d79 --- /dev/null +++ b/mock_images.mjs @@ -0,0 +1,32 @@ +import pkg from 'pg'; +import dotenv from 'dotenv'; +dotenv.config(); + +const { Client } = pkg; + +async function main() { + const client = new Client({ + connectionString: process.env.DATABASE_URL, + }); + await client.connect(); + + const mockImageUrl = '/default-product.png'; + + try { + const result = await client.query(` + UPDATE "products" + SET "image_url" = $1 + `, [mockImageUrl]); + + console.log(`Successfully updated ${result.rowCount} products with a mock image.`); + } catch (e) { + console.error('Error updating products:', e.message); + } finally { + await client.end(); + } +} + +main().catch(e => { + console.error(e); + process.exit(1); +}); diff --git a/public/logo.avif b/public/logo.avif new file mode 100644 index 0000000000000000000000000000000000000000..a19a88566a305eb3a32eb8a5ba00bd29997da78e GIT binary patch literal 7533 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 { + console.error(e); + process.exit(1); +});