Content Management System (CMS)
Manage marketing website content across all Olympus Cloud sites with the headless CMS.
Overview
The CMS provides centralized content management for all marketing sites:
| Site | Domain | Purpose |
|---|---|---|
| Restaurant Revolution | restaurantrevolution.ai | Customer-facing marketing |
| Olympus Cloud | olympuscloud.ai | Platform marketing |
| Creator Revolution | creatorsrevolution.ai | Creator platform marketing |
| NebusAI | nebusai.com | Corporate site |
Page Management
Viewing Pages
- Navigate to Admin > CMS > Pages
- Filter by site, status, or search
- View page list with status indicators
Page Statuses
| Status | Description | Icon |
|---|---|---|
| Draft | Work in progress | 📝 |
| Scheduled | Pending publish date | ⏰ |
| Published | Live on site | ✅ |
| Archived | No longer active | 📦 |
Creating a Page
- Click + New Page
- Select the target site
- Configure page details:
- Title: Page heading
- Slug: URL path (auto-generated from title)
- Description: Brief page summary
- Add sections (see below)
- Configure SEO metadata
- Save as draft or publish
Page Sections
Pages are built from modular sections:
| Section Type | Use Case |
|---|---|
| Hero | Main banner with CTA |
| Features | Feature grid with icons |
| Benefits | Value proposition list |
| Testimonials | Customer quotes |
| FAQ | Accordion Q&A |
| CTA | Call-to-action block |
| Pricing | Pricing tiers |
| Team | Team member profiles |
| Content | Rich text content |
| Gallery | Image gallery |
| Video | Embedded video |
| Form | Contact/signup form |
| Custom | Custom HTML/components |
Adding Sections
- In page editor, click + Add Section
- Select section type
- Configure section settings:
- Title and subtitle
- Content or items
- Visibility toggle
- Display order
- Drag to reorder sections
SEO Configuration
Each page includes SEO metadata:
┌─────────────────────────────────────────────────────────────────┐
│ SEO SETTINGS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Meta Title: [Primary keyword focused title ] │
│ Meta Description: [Compelling 150-160 char description ] │
│ Keywords: [keyword1, keyword2, keyword3 ] │
│ │
│ Open Graph: │
│ ───────────────────────────────────────────────────────────── │
│ OG Title: [Social sharing title ] │
│ OG Description: [Social sharing description ] │
│ OG Image: [Upload or select from media ] │
│ │
│ Advanced: │
│ ───────────────────────────────────────────────────────────── │
│ Canonical URL: [https://... ] │
│ Robots: [index, follow ▼ ] │
│ │
└─────────────────────────────────────────────────────────────────┘
Publishing Workflow
Publish Immediately
- From page editor, click Publish
- Confirm publication
- Page goes live immediately
- Webhook notifications sent
Scheduled Publishing
Schedule pages for future publication:
- Click Schedule instead of Publish
- Select date and time
- Page status changes to "Scheduled"
- Auto-publishes at specified time
Content Approval Workflow
For teams requiring review before publishing:
-
Request Approval
- Author clicks Request Approval
- Adds notes for reviewer
- Status changes to "Pending Approval"
-
Review Content
- Reviewer sees pending items in queue
- Reviews content and changes
- Approves or rejects with notes
-
Publish or Revise
- Approved: Author can publish
- Rejected: Author revises and resubmits
Approval Queue
┌─────────────────────────────────────────────────────────────────┐
│ PENDING APPROVALS 3 pending │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 📄 Homepage Redesign │
│ Site: Restaurant Revolution │
│ Requested by: marketing@nebusai.com │
│ Requested: 2 hours ago │
│ [Review] [Approve] [Reject] │
│ │
│ 📄 Pricing Page Update │
│ Site: Olympus Cloud │
│ Requested by: product@nebusai.com │
│ Requested: 1 day ago │
│ [Review] [Approve] [Reject] │
│ │
└─────────────────────────────────────────────────────────────────┘
Content Versioning
Version History
Every page change is versioned:
- Go to page > Version History
- See all previous versions with:
- Version number
- Timestamp
- Author
- Change reason
Comparing Versions
- Select two versions to compare
- View side-by-side diff
- See added, removed, changed content
Rollback
To restore a previous version:
- Find the version to restore
- Click Rollback to this version
- Confirm action
- Page content reverts to selected version
- New version created for audit trail
Media Management
Media Library
Centralized media asset management:
- Navigate to CMS > Media
- View all uploaded assets
- Filter by site, type, or tags
Supported Formats
| Type | Formats | Max Size |
|---|---|---|
| Images | JPG, PNG, WebP, GIF, SVG | 10 MB |
| Videos | MP4, WebM | 100 MB |
| Documents | 25 MB | |
| Audio | MP3, WAV | 50 MB |
Uploading Media
- Click + Upload
- Drag files or click to browse
- Add metadata:
- Alt text (for accessibility)
- Caption
- Tags
- Upload to R2 storage
Media Details
Each asset includes:
- File name and type
- Dimensions (images/video)
- Size
- Public URL
- Alt text and caption
- Tags for organization
- Usage information (where used)
Using Media in Pages
- In page editor, click image/media placeholder
- Select from library or Upload new
- Choose asset
- Configure display settings
Navigation Menus
Managing Menus
- Navigate to CMS > Menus
- Select site and menu location
Menu Locations
| Location | Description |
|---|---|
| header | Main navigation |
| footer | Footer links |
| sidebar | Sidebar navigation |
| mobile | Mobile-specific menu |
Creating Menu Items
- Click + Add Item
- Configure:
- Label (display text)
- Link type:
- Internal page (select from pages)
- External URL
- Target: Same tab or new tab
- Drag to reorder
- Nest items for dropdowns
Menu Structure
Header Menu
├── Products
│ ├── Restaurant POS
│ ├── Voice AI
│ └── Online Ordering
├── Pricing
├── About
└── Contact
URL Redirects
Managing Redirects
Handle URL changes and migrations:
- Navigate to CMS > Redirects
- View existing redirects
- Click + Add Redirect
Redirect Configuration
| Field | Description |
|---|---|
| Source Path | Original URL path |
| Target URL | Destination URL |
| Type | 301 (permanent) or 302 (temporary) |
| Regex | Enable pattern matching |
| Preserve Query | Keep query parameters |
| Priority | Higher matches first |
Common Redirect Patterns
# Simple page redirect
/old-page → /new-page (301)
# Regex pattern (blog restructure)
/blog/(\d+)/(.+) → /articles/$2 (301, regex)
# External redirect
/partner-link → https://partner.com (302)
Webhooks
Webhook Events
Get notified when content changes:
| Event | Trigger |
|---|---|
page.created | New page created |
page.updated | Page content changed |
page.published | Page published |
page.unpublished | Page unpublished |
page.deleted | Page deleted |
media.uploaded | New media uploaded |
media.deleted | Media deleted |
menu.updated | Menu changed |
Configuring Webhooks
- Navigate to CMS > Webhooks
- Click + Add Webhook
- Configure:
- Endpoint URL
- Secret (for HMAC signing)
- Events to subscribe to
- Enable webhook
Webhook Payload
{
"event": "page.published",
"site": "restaurant-revolution",
"timestamp": "2026-01-19T15:30:00Z",
"data": {
"page_id": "uuid-here",
"slug": "/features",
"title": "Features",
"published_by": "admin@nebusai.com"
}
}
Webhook Security
Verify webhook signatures:
const crypto = require('crypto');
function verifyWebhook(payload: string, signature: string, secret: string): boolean {
const expected = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
Site Settings
Configuring Site Settings
Each site has customizable settings:
- Navigate to CMS > Settings
- Select site
- Configure:
| Setting | Description |
|---|---|
| Display Name | Site title |
| Tagline | Site subtitle |
| Logo | Header logo |
| Favicon | Browser tab icon |
| Colors | Primary/secondary colors |
| Analytics ID | Google Analytics ID |
| Social Links | Social media URLs |
| Contact Email | Contact form destination |
| Footer Text | Copyright/legal text |
Custom Scripts & Styles
Add external resources:
- Go to Advanced Settings
- Add custom script URLs
- Add custom stylesheet URLs
- Scripts load on all pages
Reusable Components
Component Library
Create reusable content blocks:
- Navigate to CMS > Components
- View component library
- Create or edit components
Creating Components
- Click + New Component
- Define component schema:
- Name and label
- Field definitions
- Default values
- Set scope:
- Site-specific
- Shared across all sites
- Save component
Using Components in Pages
- In page editor, add Component section
- Select component from library
- Fill in component fields
- Component renders with values
Permissions
CMS Roles
| Role | Capabilities |
|---|---|
| Content Editor | Create/edit pages, upload media |
| Content Publisher | Editor + publish pages |
| Content Admin | Publisher + menus, redirects, settings |
| CMS Admin | Full CMS access including webhooks |
Permission Matrix
| Action | Editor | Publisher | Admin |
|---|---|---|---|
| View pages | ✅ | ✅ | ✅ |
| Create/edit pages | ✅ | ✅ | ✅ |
| Publish pages | ❌ | ✅ | ✅ |
| Upload media | ✅ | ✅ | ✅ |
| Manage menus | ❌ | ❌ | ✅ |
| Manage redirects | ❌ | ❌ | ✅ |
| Configure webhooks | ❌ | ❌ | ✅ |
| Site settings | ❌ | ❌ | ✅ |
Best Practices
Content Organization
- Use consistent naming conventions for pages
- Organize media with descriptive tags
- Keep menu structures shallow (max 2 levels)
- Archive old content rather than deleting
SEO Guidelines
- Write unique meta titles (50-60 chars)
- Write compelling meta descriptions (150-160 chars)
- Use descriptive alt text for all images
- Set up redirects when changing URLs
Publishing Workflow
- Always preview before publishing
- Use scheduled publishing for coordinated launches
- Enable approval workflow for team content
- Test webhooks with a staging endpoint