Theme and branding
Navigate to Admin → Theme (/admin/theme) to manage all visual settings stored in the frontend_settings database table via FrontendSetting::set().
Settings are grouped into sections:
General settings
General settings
Basic application settings such as site name and global options.
Hero section
Hero section
The main banner on the landing page: headline text, subheadline, call-to-action button text and URL.
Features section
Features section
Highlights displayed in the features block: feature titles, descriptions, and icons.
About section
About section
Company information and description text shown in an about block.
Footer settings
Footer settings
SEO settings
SEO settings
Meta title, meta description, and Open Graph settings for search engine optimisation.
Updating a setting
Each section renders editable fields. Click Save for a section to submit all fields in that section at once. Individual settings can also be saved via the Update setting endpoint (used by toggle controls).Logo upload
Upload a logo from the Theme page. The file is stored aspublic/logos/logo.{ext} in Laravel storage and served via the storage symlink. Supported formats: JPEG, PNG, JPG, SVG. Maximum size: 2 MB.
For separate light and dark logos and a favicon, use Admin → System Config → Logo settings (which uses base64 upload and stores paths via BrandingService).
Reset to default
Click Reset to default to truncate allfrontend_settings records and re-run the FrontendSettingsSeeder. This restores factory default values.
Export and import
- Export — Downloads all settings as a JSON file named
frontend_settings_YYYY-MM-DD_HH-mm-ss.json. - Import — Upload a previously exported JSON file to bulk-restore settings.
Landing page
The landing page is enabled or disabled with theFRONTEND_LANDING_ENABLED environment variable in Admin → System Config → Application settings. When disabled, visitors to / are redirected to the login page.
Landing page content (hero, features, about sections) is managed through the Theme section described above.
Footer settings
Navigate to Admin → Frontend Settings → Footer (/admin/frontend-settings/footer) to edit footer-specific content stored in the footer section of frontend_settings.
| Setting key | Description |
|---|---|
company_description | Short paragraph about your company shown in the footer (max 500 characters) |
social_twitter | Twitter/X profile URL |
social_facebook | Facebook page URL |
social_linkedin | LinkedIn page URL |
social_instagram | Instagram profile URL |
social_youtube | YouTube channel URL |
social_github | GitHub organisation/repository URL |
Social media links
Navigate to Admin → Social Media (/admin/social-media) to manage social media links as separate database records (distinct from the footer settings above). These records support ordering via Admin → Social Media → Update order.
Each social media record has:
- Platform name
- URL
- Display order
Footer links
Navigate to Admin → Footer Links (/admin/footer-links) to manage navigational links in the footer (e.g. “About”, “Careers”, “Contact”). These are separate from social media icons.
Each footer link record has a label and a URL.
Legal pages
Navigate to Admin → Legal Pages (/admin/legal-pages) to manage privacy policy, terms of service, and any other legal documents.
Legal pages use a slug-based routing system. The slug determines the URL at which the page is publicly accessible (e.g. a slug of privacy-policy makes the page available at /legal/privacy-policy).
Creating a legal page
Fill in the details
- Title — Page title shown in the browser tab and page header.
- Slug — URL-safe identifier (e.g.
privacy-policy,terms-of-service). - Content — Rich text body of the legal page.
- Published — Whether the page is publicly accessible.
Publishing and unpublishing
Use the Toggle publish action on any legal page row to flip its published status without opening the edit form.Blog
The blog is managed across three sections:Posts
Admin → Blogs (
/admin/blogs)Categories
Admin → Blog Categories (
/admin/blog-categories)Tags
Admin → Blog Tags (
/admin/blog-tags)manage-blog permission.
Creating a blog post
Fill in post details
Title, content (rich text editor with image upload via
/admin/blogs/upload-image), category, tags, and publication status.Categories and tags
Create categories and tags before or during post creation. Both support full CRUD (create, edit, delete, view). Tags and categories are shown/filterable on the public blog index.Embed codes
Navigate to Admin → Embed Codes (/admin/embed-codes) to manage JavaScript snippet codes that customers can use to embed Sniko AI agents on external websites.
Each embed code record has:
- A code snippet
- An active/inactive toggle
Translations and i18n
Languages
Navigate to Admin → Languages (/admin/languages) to manage the languages available in the application.
| Action | Description |
|---|---|
| Add language | Create a new language with a locale code (e.g. fr, de) and display name. |
| Toggle active | Enable or disable a language without deleting its translations. |
| Delete | Remove a language and all associated translations. |
| Generate with AI | Use the OpenRouter AI integration to auto-generate translations for a new language based on the English source strings. |
Translations
Navigate to Admin → Translations (/admin/translations) to edit translation strings for any active language.
| Action | Endpoint | Description |
|---|---|---|
| View all | GET /admin/translations | See all translation keys across all languages. |
| Update single | PUT /admin/translations | Update one translation key-value pair. |
| Bulk update | POST /admin/translations/bulk | Update multiple translations in one request. |
| Export | GET /admin/translations/export | Download all translations as a JSON file. |
| Import | POST /admin/translations/import | Upload a JSON file to bulk-update translations. |
FrontendSetting values and PricingPlan names/descriptions support multi-locale JSON storage. When a user’s locale is set, the application returns the matching locale key from the stored JSON, falling back to en.