diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx
index d46a9fa..2dacac7 100644
--- a/src/app/admin/page.tsx
+++ b/src/app/admin/page.tsx
@@ -1294,6 +1294,28 @@ function BrandSection({ images, onToast }: { images: Image[]; onToast: (m: strin
facebook_url: '', instagram_url: '', whatsapp_url: '',
address: '', phone: '', email: '',
});
+ const [loading, setLoading] = useState(true);
+ const [saving, setSaving] = useState(false);
+
+ useEffect(() => {
+ loadConfig();
+ }, []);
+
+ const loadConfig = async () => {
+ try {
+ const res = await fetch('/api/site-assets');
+ if (res.ok) {
+ const data = await res.json();
+ if (data.data) {
+ setConfig(prev => ({ ...prev, ...data.data }));
+ }
+ }
+ } catch (err) {
+ console.error('Failed to load config:', err);
+ } finally {
+ setLoading(false);
+ }
+ };
const handleUpload = async (key: keyof FooterConfig) => {
const input = document.createElement('input');
@@ -1318,6 +1340,28 @@ function BrandSection({ images, onToast }: { images: Image[]; onToast: (m: strin
input.click();
};
+ const saveConfig = async () => {
+ setSaving(true);
+ try {
+ const res = await fetch('/api/site-assets', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ values: config }),
+ });
+ if (res.ok) {
+ onToast('Configuration saved!', 'success');
+ } else {
+ onToast('Failed to save', 'error');
+ }
+ } catch {
+ onToast('Failed to save', 'error');
+ } finally {
+ setSaving(false);
+ }
+ };
+
+ if (loading) return
Loading...
;
+
return (
@@ -1340,6 +1384,38 @@ function BrandSection({ images, onToast }: { images: Image[]; onToast: (m: strin
setConfig(prev => ({ ...prev, tagline: v }))} placeholder="Your hotel tagline" />
+
+
+
+
+
📍 Address
+
setConfig(prev => ({ ...prev, address: v }))} placeholder="Full address" />
+
+
+
📞 Phone
+
setConfig(prev => ({ ...prev, phone: v }))} placeholder="+593 99 999 9999" />
+
+
+
✉️ Email
+
setConfig(prev => ({ ...prev, email: v }))} placeholder="contact@lahuasca.com" />
+
+
+
📘 Facebook URL
+
setConfig(prev => ({ ...prev, facebook_url: v }))} placeholder="https://facebook.com/..." />
+
+
+
📷 Instagram URL
+
setConfig(prev => ({ ...prev, instagram_url: v }))} placeholder="https://instagram.com/..." />
+
+
+
💬 WhatsApp URL
+
setConfig(prev => ({ ...prev, whatsapp_url: v }))} placeholder="https://wa.me/..." />
+
+
+
+
+ {saving ? 'Saving...' : '💾 Save Configuration'}
+
);
}
diff --git a/src/app/api/site-assets/route.ts b/src/app/api/site-assets/route.ts
index e2d5ccb..3373820 100644
--- a/src/app/api/site-assets/route.ts
+++ b/src/app/api/site-assets/route.ts
@@ -2,7 +2,7 @@ import { NextRequest, NextResponse } from 'next/server';
import { requireRole } from '@/lib/auth';
import { db } from '@/lib/db';
-const PUBLIC_KEYS = ['logo','favicon','facebook_url','instagram_url','whatsapp_url','address','phone','email','wifi_password'];
+const PUBLIC_KEYS = ['logo','favicon','tagline','facebook_url','instagram_url','whatsapp_url','address','phone','email','wifi_password'];
export async function GET(request: NextRequest) {
try {
diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx
index 105a5cf..78172dc 100644
--- a/src/components/Footer.tsx
+++ b/src/components/Footer.tsx
@@ -4,6 +4,7 @@ import { useEffect, useState } from 'react';
import { FacebookIcon, InstagramIcon, WhatsAppIcon } from './icons';
interface Config {
+ tagline?: string;
facebook_url?: string;
instagram_url?: string;
whatsapp_url?: string;
@@ -47,7 +48,7 @@ export default function Footer() {
La Huasca
- A quiet corner of the Ecuadorian Andes.
+ {config.tagline || 'A quiet corner of the Ecuadorian Andes.'}