Settings
Key/value settings for site-wide configuration — branding, SEO defaults, social links, email/SMTP, integrations.
Routes
| Route | Method | Purpose |
|---|---|---|
/admin/settings | GET | Settings dashboard (tabbed UI per group) |
/admin/settings | PUT | Save settings |
/admin/settings/test-email | POST | Send a test email using current SMTP settings |
Setting groups
| Group | Examples |
|---|---|
| Site | Site name, tagline, logo, favicon, default locale |
| SEO | Default meta title pattern, default meta description, default OG image, robots directives |
| Social | Twitter, Instagram, LinkedIn, YouTube, GitHub URLs |
| SMTP host/port/user/password, from address, from name | |
| Media | Max upload size, allowed mime types, image quality / max width |
| Integrations | Analytics IDs, reCAPTCHA keys, Sentry DSN, custom code injection |
Storage model
Each setting is one row in settings: key, group, type (string, boolean, json, media, …), value, and is_translatable. Translatable settings store one value per locale in the value JSON column.
// Single value
{ key: "site.name", group: "site", type: "string", value: "DM Editors" }
// Translatable
{
key: "site.tagline",
group: "site",
type: "string",
is_translatable: true,
value: { "en": "Headless CMS", "es": "CMS sin cabeza", "hi": "हेडलेस सीएमएस" }
}
// JSON value (e.g. social links)
{
key: "social.links",
group: "social",
type: "json",
value: { twitter: "https://x.com/…", github: "https://github.com/…" }
}
Helpers
// Anywhere in the app
setting('site.name'); // string
setting('site.name', 'My Site'); // with fallback
setting('site.tagline', null, 'es'); // explicit locale
// Eloquent
Setting::get('seo.default_title');
Setting::set('seo.default_title', 'Acme — {entry_title}');
Test email
The "Send test" button in the Email tab posts to /admin/settings/test-email. The controller crafts a basic message using current SMTP credentials and reports the success/failure inline.
Public exposureA safe subset of settings (site name, logo, social links, default SEO) is exposed publicly via the API at
/api/v1/settings. See API: Settings & Locales.