logicspike/docs

Blog Engine

Vlozi Blog Engine — Product Vision

⚠️ VISION DOC — This describes where the product is going, not where it is today. For the current implemented API surface, see blog-service.md and sdk-reference.md.

The goal: Build a headless blog engine so good that any Vlozi user can have a world-class blog running on their platform in under 10 minutes — with an editor that rivals Notion, management that rivals WordPress, and integration as simple as 3 lines of code.


What We're Building

Vlozi Blog Engine is a fully managed, multi-tenant, headless blog system that ships as a core feature of the Vlozi platform. It consists of three pillars:

┌─────────────────────────────────────────────────────────────────┐
│                       Vlozi Blog Engine                          │
├──────────────────┬──────────────────┬───────────────────────────┤
│   ✏️ Editor       │   📊 Management   │   🔌 Integration           │
│                  │                  │                           │
│  Write like      │  Manage like     │  Integrate like           │
│  Notion          │  WordPress       │  Stripe                   │
├──────────────────┼──────────────────┼───────────────────────────┤
│ Block editor     │ Dashboard        │ REST API                  │
│ Slash commands   │ Analytics        │ JavaScript SDK            │
│ AI writing       │ Team workflows   │ React components          │
│ Media library    │ SEO toolkit      │ Webhooks                  │
│ Live preview     │ Scheduling       │ Pre-built themes          │
└──────────────────┴──────────────────┴───────────────────────────┘

Pillar 1 — The Editor ✏️

An editor so good that sellers actually enjoy writing content.

Block-Based Rich Editor

Feature Description
Slash commands Type / to insert any block — headings, images, code, embeds, tables, callouts, toggles
Drag & drop blocks Reorder any block by dragging its handle
Inline formatting Bold, italic, strike, code, highlight, underline — via toolbar, keyboard shortcut, or markdown syntax
Headings (H1–H6) Style dropdown + keyboard shortcuts (Ctrl+Alt+1 through 6)
Nested lists Bullet, numbered, and checklist — with infinite nesting
Code blocks Syntax highlighting for 20+ languages, language selector, copy button
Tables Resizable columns, add/delete rows/columns, header row toggle, merge cells
Blockquotes Styled pull-quotes with optional attribution
Callout blocks Info / Warning / Tip / Danger blocks with icons
Dividers Horizontal rules with style variants (line, dots, stars)
Toggle blocks Collapsible sections (FAQ-style)

Media & Embeds

Feature Description
Image upload Drag & drop, paste from clipboard, or browse media library
Image editing Resize (S/M/L/Full), alignment (left/center/right), alt text, caption, link
Media library Centralized image management — upload, search, organize, reuse across posts
YouTube embed Paste URL → responsive iframe with lazy loading
Twitter/X embed Paste tweet URL → rendered tweet card
CodePen embed Paste URL → interactive code preview
Generic oEmbed Auto-detect and embed from 200+ providers
File attachments Upload PDFs, docs — renders as download cards

Writing Experience

Feature Description
Markdown shortcuts **bold**, *italic*, # heading, - list, > quote, code — auto-convert as you type
Keyboard shortcuts Full shortcut set (Ctrl+B, Ctrl+I, Ctrl+K for link, etc.)
Focus mode Dims everything except the current paragraph
Word/char count Live count in the status bar
Reading time estimate Auto-calculated based on word count
Autosave Every 30 seconds + on blur — with visual save indicator
Unsaved changes guard Browser beforeunload + in-app navigation prompt
Undo/Redo Unlimited history within the session, toolbar buttons + keyboard shortcuts
Live preview Side-by-side or overlay preview showing exactly how the post will look on the user's site
Mobile responsive editor Full editing on tablet, read-only preview on phone

AI Assistant (Future)

Feature Description
AI autocomplete Tab to accept inline suggestions as you type
AI rewrite Select text → Improve / Shorten / Expand / Change tone
AI generate Generate outline, introduction, or full post from a topic
AI SEO suggestions Auto-suggest meta title, description, and keywords based on content
AI image generation Generate blog header images from text prompts

Pillar 2 — Blog Management 📊

Everything sellers need to run a professional content operation.

Post Management

Feature Description
Post list Filterable table/grid view with search, status filter, category filter, date range
Status workflow Draft → In Review → Published → Archived
Bulk actions Select multiple → publish, unpublish, delete, change category
Duplicate post One-click duplicate with title suffix
Post versioning Every save creates a version — diff view, restore any version
Trash & soft delete Deleted posts go to trash, auto-purge after 30 days

Scheduling & Publishing

Feature Description
Immediate publish One-click publish
Scheduled publish Set future date/time — auto-publishes at that time
Expiry date Auto-unpublish after a date (for time-sensitive content)
Publishing calendar Visual calendar showing scheduled, published, and draft posts

Organization

Feature Description
Categories Hierarchical categories (parent/child) with slug, description, and cover image
Tags Flat tag system — autocomplete from existing tags
Post→Category Each post belongs to one primary category
Post→Tags Each post can have multiple tags
Custom slug Auto-generated from title, manually editable, validated for uniqueness
Featured image Cover/thumbnail image for cards, social sharing, and SEO
Author profiles Author name, avatar, bio — linked to team members

SEO Toolkit

Feature Description
SEO title Custom title tag with character counter (50–60 chars ideal)
Meta description Custom description with character counter (150–160 chars ideal)
OG image Custom Open Graph image for social sharing (falls back to featured image)
Canonical URL Set canonical for syndicated content
URL slug Clean, editable URL slugs
SEO score Real-time checklist: title length, description, keyword density, heading structure, image alt texts, internal links
Structured data Auto-generated Article JSON-LD schema
Sitemap Auto-generated XML sitemap for published posts
RSS feed Auto-generated RSS/Atom feed

Analytics (Future)

Feature Description
Page views Per-post and aggregate view counts
Read time Average time readers spend on each post
Referral sources Where readers come from
Popular posts Ranked by views over configurable time periods
Engagement Scroll depth, click-through rates on CTAs

Pillar 3 — Integration 🔌

Integration so simple, a developer can go from zero to blog in 10 minutes.

REST API

A complete, well-documented, versioned REST API:

# Public (API Key auth)
GET    /blog/public/posts              → List published posts (paginated)
GET    /blog/public/posts/:slug        → Get post by slug (HTML content)
GET    /blog/public/posts/:slug/json   → Get post by slug (TipTap JSON)
GET    /blog/public/categories         → List categories
GET    /blog/public/categories/:slug   → Posts by category
GET    /blog/public/tags               → List tags
GET    /blog/public/tags/:slug         → Posts by tag
GET    /blog/public/search?q=          → Full-text search
GET    /blog/public/feed/rss           → RSS feed
GET    /blog/public/feed/atom          → Atom feed
GET    /blog/public/sitemap.xml        → XML sitemap
 
# Admin (JWT auth)
POST   /blog/admin/posts              → Create post
GET    /blog/admin/posts              → List all posts (any status)
GET    /blog/admin/posts/:id          → Get post by ID
PUT    /blog/admin/posts/:id          → Update post
DELETE /blog/admin/posts/:id          → Delete post (soft)
POST   /blog/admin/posts/:id/publish   → Publish
POST   /blog/admin/posts/:id/unpublish → Unpublish
POST   /blog/admin/posts/:id/schedule  → Schedule
POST   /blog/admin/posts/:id/duplicate → Duplicate
 
CRUD   /blog/admin/categories          → Full CRUD
CRUD   /blog/admin/tags                → Full CRUD
 
GET    /blog/admin/posts/:id/versions  → List versions
POST   /blog/admin/posts/:id/restore/:versionId → Restore version
 
POST   /blog/admin/media/upload        → Upload image
GET    /blog/admin/media               → List media
DELETE /blog/admin/media/:id           → Delete media

JavaScript SDK

Current SDK: @vlozi/blog — see sdk-reference.md for the real API. The examples below are the vision-state interface.

// Install
npm install @vlozi/blog
 
// Initialize
import { VloziClient } from '@vlozi/blog'
 
const client = new VloziClient({
  apiKey: 'your-api-key',
  baseUrl: 'https://your-gateway-url.com',
})
 
// Fetch posts
const { data, meta } = await client.blog.list({ page: 1, limit: 10 })
 
// Fetch single post
const post = await client.blog.get('my-first-post')
 
// Categories & Tags
const categories = await client.blog.categories.list()
const tags = await client.blog.tags.list()

React Components (Drop-in UI)

// Install
npm install @vlozi/blog
 
// Components are in @vlozi/blog/react
import { BlogList, BlogPost, VloziProvider } from '@vlozi/blog/react'
 
// Blog listing page
<BlogLayout>
  <BlogList apiKey="your-key" postsPerPage={12} />
</BlogLayout>
 
// Individual post page
<BlogLayout>
  <BlogPost apiKey="your-key" slug={params.slug} />
</BlogLayout>
 
// With customization
<BlogList
  apiKey="your-key"
  theme="dark"
  layout="grid"           // grid | list | magazine
  showExcerpt={true}
  showAuthor={true}
  showDate={true}
  showCategory={true}
  showReadingTime={true}
  showFeaturedImage={true}
  categoryFilter="technology"
  className="my-custom-class"
/>

Pre-Built Themes

Ship 3–5 ready-to-use blog themes:

Theme Style
Minimal Clean, typography-focused — like Medium
Magazine Card-based grid layout — like Vercel Blog
Documentation Left sidebar navigation — like Stripe Docs
Newsletter Single-column, email-friendly — like Substack
Dev Blog Code-focused with dark syntax blocks — like Dev.to

Each theme is:

  • Fully responsive
  • Dark mode compatible
  • Customizable via CSS variables
  • Accessible (WCAG 2.1 AA)

Webhooks (Future)

// Events
{
  "events": [
    "post.created",
    "post.updated",
    "post.published",
    "post.unpublished",
    "post.deleted"
  ],
  "url": "https://your-site.com/api/blog-webhook",
  "secret": "whsec_..."
}

Use cases: trigger static site rebuilds, sync with email lists, push to social media.

Markdown Interoperability (Future)

To cater to power users and developers, the blog engine will aim to support deep Markdown integration over time:

Feature Description Use Case
Export to MD API endpoint and UI button to download any post as raw .md with Frontmatter. Cross-posting to Dev.to or Hashnode.
Bulk MD Import Drag-and-drop a .zip of markdown files to instantly generate drafted posts. Migrating from Hugo, Jekyll, or Astro.
Raw MD Mode A toggle switch in the editor to swap the WYSIWYG block view for a split-pane raw markdown text editor. For technical writers who prefer raw syntax.
GitHub Sync Link a repo (e.g., user/my-blog). Pushing a .md file to main triggers an auto-publish via webhook. Git-backed developer workflows (docs-as-code).

Model Context Protocol (MCP) Server (Future)

To empower the next generation of automation, LogicSpike will provide a native MCP Server. This allows AI agents (like Claude, Antigravity, or ChatGPT) to securely connect to a workspace and act as autonomous content creators.

Capabilities for AI Agents:

  • Context-Aware Drafting: Agents can read existing published posts to learn the workspace's tone and style before writing.
  • Autonomous Publishing: Agents can draft, format (with TipTap JSON/Markdown), and publish posts directly to the live site.
  • Content Maintenance: Agents can search for outdated articles and autonomously push updates to keep technical or time-sensitive content fresh.

Content Delivery

Dual Response Format

Every public post endpoint returns content in the format requested:

Format Use Case How
HTML Server-rendered sites, email, static pages Default: GET /posts/:slug
JSON Client-side rendering, custom rendering, mobile apps GET /posts/:slug/json or ?format=json

HTML Rendering

Server-side TipTap JSON → HTML with:

  • Full node support (all block types including tables, task lists, embeds)
  • XSS sanitization on all text, URLs, and attributes
  • Clean semantic HTML5 (<article>, <figure>, <figcaption>, etc.)
  • BEM-style CSS classes on every element for easy styling
  • Responsive images with srcset and loading="lazy"
  • Code blocks with <pre><code class="language-{lang}"> for client-side highlighting

Security Model

┌──────────────────────────────────────────────┐
│                  Gateway                      │
│  ┌──────────┐  ┌──────────┐  ┌────────────┐ │
│  │ JWT Auth  │  │ API Key  │  │ Rate Limit │ │
│  │ (Admin)   │  │ (Public) │  │ per tenant │ │
│  └──────────┘  └──────────┘  └────────────┘ │
└──────────────────────────────────────────────┘

              x-gateway-key (shared secret)

┌──────────────────────────────────────────────┐
│             Blog Service                      │
│  ┌──────────────┐  ┌─────────────────┐       │
│  │ Gateway Guard │  │ Tenant Isolation│       │
│  │ (secret check)│  │ (every query)   │       │
│  └──────────────┘  └─────────────────┘       │
│  ┌──────────────┐  ┌─────────────────┐       │
│  │ Permission   │  │ Input Validation│       │
│  │ (blog:posts.*)│ │ (Zod schemas)   │       │
│  └──────────────┘  └─────────────────┘       │
└──────────────────────────────────────────────┘
  • Multi-tenant isolation: Every DB query is scoped by tenant_id — zero data leakage
  • Admin endpoints: JWT auth → blog:posts.* permissions required
  • Public endpoints: API Key auth → scoped to tenant
  • Content sanitization: XSS prevention on render (HTML escape + URL protocol whitelisting)
  • Rate limiting: Per-tenant, per-endpoint limits at the gateway level
  • Direct access blocked: Blog service only accepts requests with valid x-gateway-key

Data Model (Vision — Aspirational)

⚠️ This ERD is the target schema, not the current one. Columns like og_image_url, canonical_url, expires_at, deleted_at and tables like blog_post_versions / blog_media do not exist yet. The live schema is in apps/blog-service/src/db/schema.ts and documented in blog-service.md.


What "Done" Looks Like

For the Seller (Dashboard User)

"I open my dashboard, click Blog, and I have a Notion-like editor where I can write beautifully formatted posts with images, code blocks, and embeds. I can organize with categories and tags, schedule posts for the future, see a live preview, and manage everything from a clean dashboard. SEO suggestions help me rank. Analytics show me what's working."

For the Developer (SDK Consumer)

"I install one npm package, pass my API key, and I have a fully functional blog on my site. I can use the pre-built React components for instant setup, or use the SDK to build a completely custom experience. The API is clean, well-documented, and returns exactly what I need."

For Vlozi (Platform)

"Blog is a core value-add that makes Vlozi sticky. Free-tier users get basic blogging (5 posts, 100MB media). Paid plans unlock unlimited posts, scheduling, analytics, AI writing, custom domains, and priority rendering. It requires zero infrastructure from users — we own the full stack."


Implementation Priority

Phase 1 — Foundation (Current + Quick Wins)

  • TipTap editor with rich formatting
  • CRUD + publish/unpublish
  • Slug generation
  • SEO title/description
  • Media library integration
  • TipTap → HTML renderer
  • Fix autosave (wire onSave prop)
  • Fix dark mode in menus
  • Add undo/redo toolbar buttons
  • Show word count + reading time
  • Add featured image field
  • Custom slug editing in UI

Phase 2 — Organization & Management

  • Categories CRUD (API + Dashboard UI)
  • Tags CRUD (API + Dashboard UI)
  • Post→Category assignment
  • Post→Tags assignment
  • Soft-delete + trash
  • Post list filtering (status, category, search)
  • Bulk actions
  • Post versioning

Phase 3 — Publishing & SEO

  • Scheduled publishing
  • OG image support
  • Canonical URL
  • SEO score/checklist
  • Structured data (JSON-LD)
  • RSS/Atom feed
  • XML sitemap
  • Live preview mode
  • Publishing calendar

Phase 4 — Integration & SDK

  • @vlozi/blog SDK package (shipped, v2.1.6)
  • React components (@vlozi/blog/react)
  • Complete public API (search endpoint, feeds, sitemap)
  • Pre-built themes (Minimal, Magazine, Dev Blog)
  • Full API documentation with examples
  • Interactive API playground

Phase 5 — Advanced (Future)

  • TipTap renderer: full node support (tables, tasks, YouTube, callouts, toggle)
  • Webhook events
  • Analytics dashboard
  • AI writing assistant
  • AI SEO suggestions
  • Content expiry
  • Multi-author workflows (In Review status)
  • Custom domain for blog
  • Full-text search

Competitive Positioning

Feature WordPress Ghost Hashnode Vlozi Blog
Self-hosted ❌ (fully managed)
Headless API Plugin ✅ (native)
Block editor Gutenberg Koenig Basic TipTap (Notion-grade)
Multi-tenant ✅ (built-in)
SDK / Components ✅ (@vlozi/blog)
Pre-built themes ✅ (headless, planned)
Part of platform ✅ (billing, auth, team)
Edge-deployed ✅ (Cloudflare)
AI writing Plugin ✅ (planned)
Zero config

Our edge: Blog isn't a standalone product — it's a deeply integrated feature of the Vlozi platform. Users get blog + auth + billing + team + media + analytics in one package, with an integration path that no standalone CMS can match.


This is the north star. Not everything ships at once, but every decision should move us toward this vision. When in doubt, ask: "Would a Notion user feel at home in the editor? Would a Stripe developer love the API? Would a WordPress user find the management complete?"

MCP note: The MCP server section above references "LogicSpike" — that's Vlozi. The capability description is accurate; the name was the old brand.

Blog Engine