Documentation
Branding
The Blog Customize screen controls hosted blog shell presentation for custom domains, including theme presets, logo/favicon uploads, navigation and social metadata.
Customize Tabs
- Branding:
siteTitle,primaryColor,fontFamily, logo/favicon URLs. - Appearance:
mode,radius,cardStyle. - Header/Footer: links, CTA, copyright.
- Social: x/linkedin/github/youtube URLs.
- Banner/About: optional section toggles and text.
Saved Settings Schema
Settings are stored as versioned JSON per project.
Top-level keys: branding, appearance, header, footer,social, banner, about.
API: trpc.blogCustomization.get, trpc.blogCustomization.update, trpc.blogCustomization.reset, listPresets, applyPreset.
Preset metadata persists in themePresetKey and themePresetVersion while settings remain backward-compatible JSON.
Validation Limits
- All URLs must be absolute and start with
https://. primaryColormust be hex#RRGGBB.- Header links max 6, footer links max 8.
- String limits are enforced server-side through Zod schema.
- Logo/favicon uploads enforce MIME allowlist and per-type max file size.
Asset Uploads
Branding upload widgets call blogAssets.initUpload to issue presigned upload URLs andblogAssets.completeUpload to finalize canonical asset URLs.
Uploaded asset URL is written back into branding fields and published after regular Save.
Save And Reset
Save validates schema and increments config version.
Reset to default deletes persisted project config and restores defaults.
Live Preview Behavior
Right panel preview reflects unsaved local edits immediately. Domain runtime uses the last saved version.
On custom-domain runtime, published posts render with the latest saved branding and theme settings.