Blog
Blog is a lightweight content-marketing tool for your online store — write posts with a title, short excerpt, optional cover image, rich-text body and a publish date, so customers and search engines find fresh content on your storefront.
Overview
The post list shows every article with a Published/Draft badge, its public /blog/slug address, and its publish date.
Clicking New Post or the edit (pencil) icon opens a modal with Title, Excerpt (short summary shown on the blog listing), Cover Image URL, a rich-text Content editor, a Publish Date picker and a Published checkbox.
Note: the tile on the Marketing page labels "Blogging" as Coming soon and disables it — but this Blog page, reached directly from the Online Channels sidebar, is fully working already; that Marketing tile is simply out of date.
Before You Start
- Requires the Advanced plan tier or above, same as the rest of Online Channels.
- A live storefront is needed for posts to actually be visible publicly — this screen only manages the content.
Step-by-Step Guide
1 Write and publish a new blog post
- Click New Post.
- Enter a Title (required) and a short Excerpt that will show on the blog listing page.
- Optionally paste a Cover Image URL and write the full article in the Content rich text editor.
- Set the Publish Date and leave Published checked to make it live, then click Save.
2 Edit a draft or published post
- Click the pencil (edit) icon on the post row.
- Update any field — Title, Excerpt, Cover Image, Content, Publish Date or Published — and click Save.
3 Schedule or reorder posts with the publish date
- Open a post and change Publish Date to a future or past date.
- Save — the date shown in the post list updates immediately, letting you control chronological ordering on the storefront blog listing.
4 Delete a post
- Click the trash icon on the post row and confirm the prompt — the post is permanently removed and its URL will 404 on the public store.
Every Field & Button, Explained
| Field / Button | What it does |
|---|---|
New Post | Opens a blank editor modal to write a blog article. |
Post list row | Shows the post title, its Published/Draft badge, and its public /blog/slug address plus publish date. |
Edit (pencil) / Delete (trash) icons | Open the editor pre-filled with the post's data, or permanently delete it after confirmation. |
Title | Required; also used by the backend to generate the post's URL slug. |
Excerpt | Short summary text shown on the blog listing page alongside the post title. |
Cover Image URL | Public image URL used as the post's hero/cover image. |
Content | Rich text editor (shared RichTextEditor component) for the full article body. |
Publish Date | Date shown against the post and used to control its ordering on the blog listing. |
Published checkbox | Controls whether the post is visible on the public blog or kept as a draft. |
Save / Cancel | Save persists the post (create or update); Cancel discards unsaved changes and closes the modal. |
Tips & Best Practices
- Write a short, keyword-rich Excerpt — it is what customers and search engines see first on the blog listing page.
- Add a Cover Image so link previews look good when a post is shared on WhatsApp or social media.
- Use Publish Date to back-date or schedule posts and control their order on the listing, rather than relying on creation time.
- If the Marketing page tells you Blogging is "Coming soon", ignore it and use this page directly from the Online Channels sidebar — it already works.
Troubleshooting & FAQ
I get a "Title is required" error.
The Marketing page says Blogging is Coming Soon but I'm writing a post right now.
My posts appear in the wrong order.
My Cover Image isn't showing.
🧑💻 Developer Notes
Source component(s):
frontend-app/packages/pos-react-lib/src/pages/BlogPage.jsx
Backend endpoints used:
GET /store-content/blogPOST /store-content/blogPUT /store-content/blog/:idDELETE /store-content/blog/:id
Related tables (db-core repositories):
BlogPost
Feature flag key: integrations (requires advanced plan tier or above)
Shares the same RichTextEditor component as Store Pages. toDateInput() converts the stored ISO publish timestamp to a plain yyyy-mm-dd value for the native date input, defaulting to today's date for new posts. New posts are optimistically prepended to the top of the local list on save rather than re-fetching the whole list.