Home / Help Center / pos-app / Online Channels / Blog
✍️ Online Channels

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.

📍 Menu path: Online Channels → Blog
👤 Who uses it: All roles with Online Channels access

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

Step-by-Step Guide

1 Write and publish a new blog post

  1. Click New Post.
  2. Enter a Title (required) and a short Excerpt that will show on the blog listing page.
  3. Optionally paste a Cover Image URL and write the full article in the Content rich text editor.
  4. Set the Publish Date and leave Published checked to make it live, then click Save.

2 Edit a draft or published post

  1. Click the pencil (edit) icon on the post row.
  2. Update any field — Title, Excerpt, Cover Image, Content, Publish Date or Published — and click Save.

3 Schedule or reorder posts with the publish date

  1. Open a post and change Publish Date to a future or past date.
  2. Save — the date shown in the post list updates immediately, letting you control chronological ordering on the storefront blog listing.

4 Delete a post

  1. 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 / ButtonWhat it does
New PostOpens a blank editor modal to write a blog article.
Post list rowShows the post title, its Published/Draft badge, and its public /blog/slug address plus publish date.
Edit (pencil) / Delete (trash) iconsOpen the editor pre-filled with the post's data, or permanently delete it after confirmation.
TitleRequired; also used by the backend to generate the post's URL slug.
ExcerptShort summary text shown on the blog listing page alongside the post title.
Cover Image URLPublic image URL used as the post's hero/cover image.
ContentRich text editor (shared RichTextEditor component) for the full article body.
Publish DateDate shown against the post and used to control its ordering on the blog listing.
Published checkboxControls whether the post is visible on the public blog or kept as a draft.
Save / CancelSave persists the post (create or update); Cancel discards unsaved changes and closes the modal.

Tips & Best Practices

Troubleshooting & FAQ

I get a "Title is required" error.
Every post needs a non-empty Title — it also generates the post's URL slug, so it cannot be left blank.
The Marketing page says Blogging is Coming Soon but I'm writing a post right now.
That tile on the Marketing page is stale relative to the rest of the app — the Blog page itself, reached from the Online Channels sidebar, is fully functional.
My posts appear in the wrong order.
The listing order follows each post's Publish Date (and creation order for ties) — edit a post's Publish Date to move it earlier or later.
My Cover Image isn't showing.
The field expects a public https image URL, not a local file path — upload the image somewhere public first and paste that URL.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/BlogPage.jsx

Backend endpoints used:

  • GET /store-content/blog
  • POST /store-content/blog
  • PUT /store-content/blog/:id
  • DELETE /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.