Foundaro Spokes Docs
Content Editor
All five content types share the same rich editor with autosave, revision comparison, content duplication, custom fields, and import/export. This guide covers every feature of the editor.
Last updated:
Content Editor
All five content types in Foundaro Spokes — Pages, Blog Posts, Posts, News, and Events — share the same rich editing experience. This document covers the editor and all its tabs in detail.
Content Tab
The Content tab is where you write and format the main body of the item.
The editor is CKEditor 5 with support for:
- Headings (H1–H6)
- Paragraphs and line breaks
- Bold, italic, underline, strikethrough
- Ordered and unordered lists
- Blockquotes
- Code blocks and inline code
- Tables
- Images (inserted from the Media Library or by URL)
- Horizontal rules
- Links with configurable target and rel attributes
Tips:
- Use H2 and H3 for section headings within the content body. H1 is reserved for the page title.
- When inserting images, always add alt text for accessibility and SEO.
- Paste content from Word or Google Docs — the editor cleans up most formatting automatically.
Settings Tab
The Settings tab contains the metadata and configuration fields for the content item.
Key fields:
- Slug: The URL path segment for this item. Auto-generated from the title. Edit carefully — changing a live slug breaks inbound links.
- Excerpt / Summary: Short description shown in cards, feeds, and default meta description.
- Featured image: The main visual. Used in cards, OpenGraph, and Twitter Cards.
- Author: The attributed author. Defaults to the logged-in user.
- Categories: Organizational groupings. Appear in navigation and filtered feeds.
- Tags: Freeform labels for cross-linking related content.
- Publish date: Set to a past date to publish immediately with a back-date, or a future date to schedule.
- Expiry date (News and Events): Automatically archive after this date.
SEO Tab
The SEO tab controls how the item appears in search engines and social media.
Key fields:
- Meta title: The
<title>tag shown in browser tabs and search results. Defaults to the item title. - Meta description: The
<meta name="description">snippet. Shown under the title in search results. - Canonical URL: Override the canonical URL if this content is syndicated or duplicated elsewhere.
- OpenGraph title: The title shown when shared on Facebook, LinkedIn, and other OG-aware platforms.
- OpenGraph description: The description for social sharing cards.
- OpenGraph image: The image shown in social sharing cards. Defaults to the featured image.
- No-index: Prevent search engines from indexing this item. Useful for staging or internal-use pages.
Why it matters:
Meta titles and descriptions are frequently the difference between a click and a pass in search results. A well-written meta description acts like ad copy.
Tips:
- Meta title: 50–60 characters. Include the primary keyword near the start.
- Meta description: 120–160 characters. Write it like a sentence, not a keyword list.
- OpenGraph image: 1200x630px for best results across platforms.
History Tab
The History tab shows every saved revision of the content item.
Key fields per revision:
- Timestamp: When the revision was saved.
- Author: Who made the change.
- Preview: A visual diff showing what changed in this revision.
Restoring a revision:
Click Restore on any historical revision to revert the item to that state. The current version is automatically saved as a new revision before the restore, so you will not lose work.
Revision comparison: Select any two revisions to see a side-by-side diff of what changed between them.
Why it matters:
Revision history is your safety net. You can write freely, experiment with restructuring, and always roll back. It also serves as an audit trail when multiple authors collaborate.
Autosave
The editor automatically saves drafts as you work. If your browser crashes or you accidentally navigate away, your latest changes are preserved.
Autosaved drafts are stored as revisions and can be restored from the Revisions tab.
Duplicating Content
Click the Duplicate button in the editor toolbar (next to Delete) to create a copy of the current item.
The duplicate:
- Gets the title with " (Copy)" appended.
- Gets a "-copy" slug suffix.
- Starts as a Draft regardless of the original's status.
- Is not assigned to any site (you assign it after reviewing).
Use duplication to create variations of existing content, or as a starting template for similar pages.
Content Import & Export
Each content type (pages, blogs, posts, news, events) supports bulk import and export.
Export: Click the export button on any content list to download all items as JSON or CSV. The export includes all fields, tags, SEO metadata, and site assignments.
Import: Upload a JSON or CSV file to create or update content in bulk. Existing items with matching slugs are updated; new slugs create new items. Site assignments in the file are mapped by slug.
Custom Fields
Custom fields let you add your own data fields to any content type. For example, add a "Price" field to pages, a "Rating" field to posts, or a "Color" field to events.
Defining fields (Admin role required):
Go to /front-custom-fields to define fields per content type. Each field has:
- Name: Machine-readable identifier (auto-normalized to lowercase with underscores).
- Label: Display name shown in the editor.
- Type: text, number, date, boolean, select, richtext, media, url, or color.
- Options: For select fields, the list of allowed values.
- Required: Whether the field must be filled before saving.
- Default value: Pre-filled value for new content.
- Group: Optional grouping label for organizing related fields.
Fields can be reordered by drag or via the reorder API.
Using custom fields in the editor:
When custom fields are defined for a content type, they appear in the editor sidebar. The input type matches the field definition (text input, number spinner, date picker, checkbox, dropdown, color picker, etc.).
Using custom fields in templates:
Access custom field values via {{ page.customFields.fieldName }} in Twig templates:
{% if page.customFields.price %}
<span class="price">${{ page.customFields.price }}</span>
{% endif %}
{% if page.customFields.featured %}
<span class="badge">Featured</span>
{% endif %}
Validation: Values are validated against definitions on save — required checks, type coercion (strings to numbers/booleans), select option enforcement, and date parsing. Unknown fields not in the definitions are stripped.
Comments Tab
The Comments tab contains inline editorial comments and discussion threads for the content item. This is for internal use only — comments are not visible to site visitors.
Key fields per comment:
- Author: Who wrote the comment.
- Timestamp: When it was posted.
- Thread: Comments can be replied to, forming a thread.
- Resolved: Mark comments as resolved once the feedback is addressed.
Why it matters:
Comments replace back-channel conversations (Slack, email) about specific content items. Keeping feedback attached to the item means context does not get lost.
Tips:
- Use comments during review to give specific, actionable feedback.
- Resolve comments promptly so the list does not become a graveyard of old notes.
- Tag specific people in comments using @ mentions to route feedback clearly.