Sync admin settings and media with the public landing site.

Show logo in the navbar, add image upload fields for logo/team/work/blog/gallery, and drive site chrome from settings everywhere.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-30 22:10:45 +03:30
co-authored by Cursor
parent ceac76781b
commit c33a757af4
14 changed files with 189 additions and 49 deletions
+9 -2
View File
@@ -1,6 +1,10 @@
<template>
<article v-if="post" class="min-h-screen px-6 pb-24 pt-28 md:px-10">
<SiteNavbar brand="منتک" />
<SiteNavbar
:brand="chrome.brand"
:logo-url="chrome.logoUrl"
:timezone="chrome.timezone"
/>
<div class="mx-auto max-w-[760px]">
<NuxtLink to="/blog" class="text-sm text-ash hover:text-volt">→ بازگشت به بلاگ</NuxtLink>
<h1 class="mt-8 font-display text-3xl font-extrabold leading-tight md:text-5xl">
@@ -15,9 +19,12 @@
</template>
<script setup lang="ts">
const chrome = await useSiteChrome();
const route = useRoute();
const slug = String(route.params.slug);
const { data: post } = await useAsyncData(`blog-${slug}`, () => fetchPublicPost(slug));
const { data: post } = await useAsyncData(`blog-${slug}`, () => fetchPublicPost(slug), {
getCachedData: () => undefined,
});
if (!post.value) {
throw createError({ statusCode: 404, statusMessage: "پست پیدا نشد" });
+12 -3
View File
@@ -1,6 +1,10 @@
<template>
<div class="min-h-screen px-6 pb-24 pt-28 md:px-10">
<SiteNavbar brand="منتک" />
<SiteNavbar
:brand="chrome.brand"
:logo-url="chrome.logoUrl"
:timezone="chrome.timezone"
/>
<div class="mx-auto max-w-[1100px]">
<h1 class="font-display text-4xl font-extrabold md:text-6xl">بلاگ</h1>
<p class="mt-4 max-w-xl text-ash">یادداشت‌هایی درباره محصول، مهندسی و ساخت نرم‌افزار.</p>
@@ -23,7 +27,12 @@
</template>
<script setup lang="ts">
const { data: posts } = await useAsyncData("blog-list", () => fetchPublicBlog());
const { data: page } = await useAsyncData("page-blog", () => fetchPage("blog"));
const chrome = await useSiteChrome();
const { data: posts } = await useAsyncData("blog-list", () => fetchPublicBlog(), {
getCachedData: () => undefined,
});
const { data: page } = await useAsyncData("page-blog", () => fetchPage("blog"), {
getCachedData: () => undefined,
});
applyPageSeo(page.value?.seo);
</script>
+12 -3
View File
@@ -1,6 +1,10 @@
<template>
<div class="min-h-screen px-6 pb-24 pt-28 md:px-10">
<SiteNavbar brand="منتک" />
<SiteNavbar
:brand="chrome.brand"
:logo-url="chrome.logoUrl"
:timezone="chrome.timezone"
/>
<div class="mx-auto max-w-[1500px]">
<h1 class="font-display text-4xl font-extrabold md:text-6xl">گالری</h1>
<p class="mt-4 max-w-xl text-ash">تصاویر منتخب از پروژه‌ها و فضای استودیو.</p>
@@ -22,7 +26,12 @@
</template>
<script setup lang="ts">
const { data: items } = await useAsyncData("gallery", () => fetchPublicGallery());
const { data: page } = await useAsyncData("page-gallery", () => fetchPage("gallery"));
const chrome = await useSiteChrome();
const { data: items } = await useAsyncData("gallery", () => fetchPublicGallery(), {
getCachedData: () => undefined,
});
const { data: page } = await useAsyncData("page-gallery", () => fetchPage("gallery"), {
getCachedData: () => undefined,
});
applyPageSeo(page.value?.seo);
</script>
+5 -1
View File
@@ -1,6 +1,10 @@
<template>
<div v-if="site">
<SiteNavbar :brand="site.settings.brandName" :timezone="site.settings.timezone" />
<SiteNavbar
:brand="site.settings.brandName"
:logo-url="site.settings.logoUrl"
:timezone="site.settings.timezone"
/>
<main>
<HeroSection :data="site.sections.hero" />
<section class="relative overflow-hidden py-16 md:py-24">