Marketing & email
Built-in Blog & Content Hub
Indicative price, not an offer: EUR 150-300/year or EUR 400 one-off
Generated from docs/plan/paid/built-in-blog-content-hub/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.
A paid module that adds a blog and content hub to AstroCMS, with author pages, community comments, and SEO optimization. Merchants can publish articles without a separate blogging platform, keeping content close to storefront data and customers.
The problem
Blog is critical for SEO but a separate platform (WordPress, Medium) adds cost, complexity, and data silos. Merchants manually copy product data into blog posts, losing sync when products change. Customer comments and engagement data are isolated from order data.
What it does
- Blog post creation and publishing (WYSIWYG editor or Markdown, scheduling for future dates)
- Featured images and cover photos (upload or URL)
- Author profiles and bylines (link posts to staff member accounts; show author bio, avatar)
- Post categories and tags (organize posts, support filtering on blog homepage)
- Post comments (moderated; customers can comment on posts, earn reputation)
- Comment moderation dashboard (approve/reject/delete comments, spam filtering)
- SEO optimization (meta description, SEO preview card, suggested slug based on title, readability score)
- Post search (full-text search across post titles and bodies)
- Related posts (show ‘You might also like’ at bottom of post; based on category/tags)
- Social sharing (Open Graph tags for Twitter, Facebook, LinkedIn sharing)
What it deliberately does NOT do
Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.
- Community features beyond comments (forums, user profiles, reputation system) — separate paid ‘community-hub’ module owns this
- AI-powered post suggestions (suggest topics based on trending keywords) — paid ‘ai-content’ owns ML-based suggestions
- Post translation (translate posts to multiple languages) — paid ‘multilingual-content’ owns translation workflows
- Guest authors (allow non-staff to publish posts) — requires approval workflow; separate paid ‘guest-posting’ owns this
- Newsletter from blog (auto-create newsletter from new blog posts) — separate paid ‘newsletter-automation’ owns this
- Paywall (charge readers for access to blog posts) — paid ‘content-paywall’ owns this; conflicts with free content model
- Blog ads (show ads on blog posts, earn revenue) — paid ‘blog-ads’ owns ad network integration
Data model
New entities: blog.posts {id, title, slug, authorId (staff member), content (html), excerpt, featuredImageUrl, status (draft/published/scheduled), publishedAt, scheduledFor, createdAt, updatedAt, viewCount}; blog.categories {id, name, slug, description, postCount}; blog.tags {id, name, slug, postCount}; blog.postTags {id, postId, tagId}; blog.postCategories {id, postId, categoryId}; blog.comments {id, postId, authorId (customer), content (text), status (pending/approved/spam/deleted), approvedAt, createdAt, replyToCommentId (nullable)}; blog.postAnalytics {id, postId, date, views, timeOnPageSeconds, bounceRate, referrerSource}; blog.relatedPosts {id, postId, relatedPostId, relevanceScore (0-1)}; blog.postRevisions {id, postId, content, updatedAt, updatedBy}.
API
- POST /api/blog/posts
- GET /api/blog/posts
- GET /api/blog/posts/{id}
- PATCH /api/blog/posts/{id}
- DELETE /api/blog/posts/{id}
- POST /api/blog/posts/{id}/publish
- POST /api/blog/posts/{id}/schedule
- GET /api/blog/posts/{slug}
- POST /api/blog/comments
- GET /api/blog/comments
- PATCH /api/blog/comments/{id}
- DELETE /api/blog/comments/{id}
- GET /api/blog/categories
- POST /api/blog/categories
- GET /api/blog/tags
- POST /api/blog/tags
- GET /api/blog/posts/{id}/analytics
- GET /api/blog/posts/{id}/related
- GET /api/blog/feed
- GET /api/blog/authors/{authorId}
- GET /api/blog/search
Every route added here must also appear in src/pages/openapi.json.ts — a test
fails the build if it does not.
Admin
Blog post editor: WYSIWYG or Markdown editor, featured image upload, category/tag assignment, author selection, scheduling. Blog post list: show all posts, filter by status, author, category, date range. SEO optimization: meta description, SEO preview card, readability score, suggest slug. Comment moderation: list pending comments, approve/reject/spam buttons. Comment spam filtering: auto-flag suspicious comments. Author profiles: create author profile, assign posts to author. Blog analytics: page views per post, time on page, bounce rate, top posts. Category and tag management: create/edit/delete categories and tags. Blog homepage template: customize layout (featured posts, latest posts, categories). SEO settings: set blog meta title, description, enable RSS feed.
The seam — why this is paid
Paid module owns blog post creation and publishing (WYSIWYG editor, scheduling, revision history — requires content management infrastructure), author profiles and bylines (community features), comments and moderation (anti-spam, approval workflow), SEO optimization (readability score, OpenGraph tags, XML sitemap — requires SEO expertise), post analytics and related posts (requires analytics infrastructure), integration with email campaigns (tracking clicks from newsletter to blog posts — requires analytics/attribution sync).
Paid specialist feature. Core can have basic blog; advanced features (author pages, community, SEO integration) require expertise.
Dependencies
- Staff/users module (to create author profiles)
- Email service (to send comment notifications to author)
- Customers module (to associate comments with customers)
- Settings (to store blog homepage metadata, RSS feed config)
- Products module (optional, to link products mentioned in posts)
- Landing pages module (optional, to link blog posts to landing pages and track conversion)
Acceptance checks
Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.
- A blog post titled ‘Summer Style Guide’ is created with WYSIWYG editor, featured image, category ‘Fashion’, tags [‘summer’, ‘style’, ‘2024’]
- Post is scheduled for publish on Sept 5, 2024 at 12:00 PM; status shows ‘scheduled’; post does not appear publicly until that time
- SEO preview card shows: ‘Summer Style Guide | Summer Style Guide — Shop the latest… | example.com/blog/summer-style-guide’
- Author profile for ‘Sarah’ shows byline ‘Written by Sarah’ with avatar, bio, and link to author landing page showing Sarah’s other posts
- Comment from customer@example.com: ‘Love this guide!’ is posted; status is ‘pending approval’; moderator approves it and it appears
- Spam comment with 5 links is auto-flagged as spam and hidden from view (requires manual approval)
- Post analytics show: ‘1,250 views, 3m 45s avg time on page, 25% bounce rate, 40% from organic search’
- Related posts section shows 3 posts with tags [‘summer’] or category [‘Fashion’]; relevance score calculated
- Blog RSS feed (
/blog/feed) contains last 20 posts with title, author, excerpt, link - Author landing page
/blog/authors/sarahlists all posts by Sarah in reverse chronological order
Risks
Comment spam: without robust spam filtering, blog comments filled with spam links; implement CAPTCHA or ML spam detection. SEO duplicate content: if blog post published on both AstroCMS and external blog, duplicate content hurts SEO; educate merchant. Comment moderation workload: if blog is popular, hundreds of comments/week require moderation; auto-spam filtering insufficient. Author account deletion: if author staff member is deleted, posts lose author; implement soft delete and preserve authorship. Revision history size: if saving every keystroke, revision history grows rapidly; implement snapshot-based versioning. RSS feed staleness: if generating on-demand for large post count, performance issues; implement caching. Social sharing preview: if OpenGraph tags missing, social shares show ugly preview; test sharing on Facebook/Twitter. Image optimization: if featured images not optimized, blog load time slow; implement image CDN. Search performance: if full-text search not indexed, search is slow on large post count (1000+); implement search index or database fulltext search.
Commercial context
| Suggested price | EUR 150-300/year or EUR 400 one-off |
| Rival anchor | Mirasvit Blog MX (author pages, comments, SEO) |
The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.
Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full
catalogue and ../../AI-GUIDE.md for how to work on this repository.