diff --git a/app/Services/StoicSettings.php b/app/Services/StoicSettings.php
index 71f2b48..6f4804e 100644
--- a/app/Services/StoicSettings.php
+++ b/app/Services/StoicSettings.php
@@ -38,6 +38,18 @@ public function get(string $key, mixed $default = null): mixed
return filled($this->data[$key] ?? null) ? $this->data[$key] : $default;
}
+ /**
+ * Absolute og:image URL for a Stoic image field value (the page's own, else
+ * this file's default), or null. Image fields store a comma-separated list;
+ * only the first is used.
+ */
+ public function ogImageUrl(?string $pageImage = null): ?string
+ {
+ $filename = trim(explode(',', $pageImage ?: (string) $this->get('og_image', ''))[0]);
+
+ return $filename === '' ? null : url(Stoic::image($filename, 'large'));
+ }
+
/**
* Only the networks that have a URL set, in display order.
*
diff --git a/resources/stoic/content/settings.md b/resources/stoic/content/settings.md
index 3cad19e..1e0339d 100644
--- a/resources/stoic/content/settings.md
+++ b/resources/stoic/content/settings.md
@@ -1,6 +1,7 @@
---
-meta_description: ""
-facebook_url: ""
-instagram_url: ""
-tiktok_url: ""
+meta_description: "Your local 3Dealer of 3D printed, high-quality products. Geek culture, decoration, fun and skulls, and custom orders."
+og_image: ""
+facebook_url: "https://www.facebook.com/3Dealer.gr/"
+instagram_url: "https://www.instagram.com/3dealer.gr/"
+tiktok_url: "https://www.tiktok.com/@3dealer.gr"
---
diff --git a/resources/stoic/stoic_schemas.yml b/resources/stoic/stoic_schemas.yml
index ce27f45..314ec40 100644
--- a/resources/stoic/stoic_schemas.yml
+++ b/resources/stoic/stoic_schemas.yml
@@ -139,6 +139,9 @@ schemas:
- name: meta_description
label: "Default Meta Description (used when a page has none)"
ui: text
+ - name: og_image
+ label: "Default Og Image (used when a page has none, ideally 1200×630)"
+ ui: image
- name: facebook_url
label: Facebook URL
ui: string
diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php
index 8e5d1ff..59ab459 100644
--- a/resources/views/home.blade.php
+++ b/resources/views/home.blade.php
@@ -2,6 +2,7 @@
@section('title', $page->meta_title)
@section('description', $page->meta_description)
+@section('og_image', $page->og_image)
{{-- Organization structured data, home page only. Name from core's StoreDetails,
social profiles (sameAs) from Stoic settings.md. --}}
diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php
index 4288fda..856451a 100644
--- a/resources/views/layouts/app.blade.php
+++ b/resources/views/layouts/app.blade.php
@@ -17,6 +17,10 @@
{{-- Falls back to Stoic's default when a page sets none, or sets it to an
empty meta_description (@yield's own default only covers "not set"). --}}
+ {{-- A page's own Stoic og_image (via @section('og_image')), else the default from settings.md. --}}
+ @if ($ogImage = $stoicSettings->ogImageUrl(trim($__env->yieldContent('og_image'))))
+
+ @endif
{{-- Reciprocal hreflang: self-reference + every alternate locale + x-default --}}
@isset($currentLocale)
diff --git a/resources/views/legal.blade.php b/resources/views/legal.blade.php
index 65f1cfb..a8e186c 100644
--- a/resources/views/legal.blade.php
+++ b/resources/views/legal.blade.php
@@ -2,6 +2,7 @@
@section('title', $page->meta_title ?: $page->name)
@section('description', $page->meta_description)
+@section('og_image', $page->og_image)
@if($page->noindex ?? false)
@push('seo')