Add admin-configurable branding (colors, logo, favicon) and generic default fallbacks

Site Settings -> Branding now supports a Primary/Secondary/Accent brand color
system applied site-wide (buttons, nav, hover states, links) and to outgoing
email header/CTA colors, plus a favicon upload alongside the existing logo
upload, a live preview panel (website/email x desktop/mobile), and
logo-based color suggestions. The setup wizard's Branding step got the same
treatment. Fixes two related bugs found along the way: the setup wizard's
logo/favicon upload was missing its auth token, and a static favicon.ico in
Next's special app/ convention path was silently overriding the dynamic one.

Also replaces every "Hope Events"/"Hope Family Church" default (org name,
email subjects, WhatsApp messages, report metadata, API docs) with a neutral
"Cross Code" placeholder, and the optional legal settings (operator name, IO
details, website URL, effective date) with obviously-generic placeholders
instead of defaulting to real personal/organisational details -- since this
platform is deployed for multiple organisations. Adds SETTINGS.md documenting
every setting's default behaviour.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 14:49:51 +02:00
co-authored by Claude Sonnet 5
parent 2d99b7cafe
commit 86af7093ac
33 changed files with 1174 additions and 198 deletions
+4 -5
View File
@@ -2,8 +2,7 @@
* Site-wide configuration sourced from environment variables.
* Set these in your .env file (NEXT_PUBLIC_ prefix required for browser access).
*/
export const appName = process.env.NEXT_PUBLIC_APP_NAME || 'Hope Events';
export const orgName = process.env.NEXT_PUBLIC_ORG_NAME || 'Hope Family Church';
export const contactEmail = process.env.NEXT_PUBLIC_CONTACT_EMAIL || 'admin@hopehenley.co.za';
export const appUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://events.hopehenley.co.za';
export const brandColor = process.env.NEXT_PUBLIC_BRAND_COLOR || '#2563eb';
export const appName = process.env.NEXT_PUBLIC_APP_NAME || 'Cross Code';
export const orgName = process.env.NEXT_PUBLIC_ORG_NAME || 'Cross Code';
export const contactEmail = process.env.NEXT_PUBLIC_CONTACT_EMAIL || 'admin@crosscode.co.za';
export const appUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://crosscode.co.za';