> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hiveku.com/llms.txt
> Use this file to discover all available pages before exploring further.

# How to Post a Blog

> Publish a new blog post on your Hiveku website

There are several ways to post a blog on your Hiveku-hosted website. Choose whichever is most comfortable — they all end up in the same place.

<CardGroup cols={4}>
  <Card title="Easiest" icon="wand-magic-sparkles">
    Ask the AI assistant
  </Card>

  <Card title="Recommended" icon="layer-group">
    Add an entry in the Hiveku CMS
  </Card>

  <Card title="Visual" icon="pencil">
    Use the content editor
  </Card>

  <Card title="For developers" icon="code">
    Edit the code directly
  </Card>
</CardGroup>

<Info>
  **For content-heavy sites, set up the [Hiveku CMS](/cms/overview) first.** Once a `blog` collection exists in `hiveku.cms.json`, posting is just adding an entry in the CMS panel — no AI prompt, no code edit. See [Initialize Your CMS](/how-tos/initialize-cms) to scaffold one in a couple of clicks, or [Migrate an Existing Site to the CMS](/how-tos/migrate-site-to-cms) if your blog is currently hardcoded.
</Info>

## Option 1: Ask the AI Assistant (Easiest)

The fastest way to post a blog is to just ask the AI.

<Steps>
  <Step title="Open your project">
    From your [dashboard](https://app.hiveku.com/dashboard), click the website you want to add a blog post to.
  </Step>

  <Step title="Open the AI chat">
    Click the **AI** tab in the left panel.
  </Step>

  <Step title="Describe your post">
    Type what you want. For example:

    ```
    Create a new blog post titled "5 Tips for Better Website Performance" 
    about optimizing load times, image compression, and caching. Make it 
    around 800 words with a friendly, professional tone.
    ```

    Or paste in content you already have:

    ```
    Create a blog post from this content: [paste your text here]
    ```
  </Step>

  <Step title="Review and refine">
    The AI generates the post and shows you what it created. You can ask for edits:

    * *"Make the intro more engaging"*
    * *"Add a section about lazy loading"*
    * *"Change the title to something catchier"*
  </Step>

  <Step title="Deploy">
    When you're happy, click **Deploy** in the top bar — or just tell the AI: *"Deploy the site"*. Your new post is live in a minute or two.
  </Step>
</Steps>

<Tip>
  Attach a reference image or screenshot if you want the AI to match a specific style for your blog post layout.
</Tip>

## Option 2: Hiveku CMS (Recommended for content-heavy sites)

If your project has the Hiveku CMS set up with a `blog` collection, posting is just adding an entry in the CMS panel. No AI prompt needed; no code edit needed. The content team can do this without a developer.

<Steps>
  <Step title="Open the CMS panel">
    Open your project in `/v3`. Switch the right pane to **CMS** mode.

    <Info>
      No CMS yet? Click **Initialize CMS** to scaffold one — see [Initialize Your CMS](/how-tos/initialize-cms). If your blog content is currently hardcoded, see [Migrate an Existing Site to the CMS](/how-tos/migrate-site-to-cms) first.
    </Info>
  </Step>

  <Step title="Pick the blog collection">
    From the collection picker at the top, click **Blog Posts** (or whatever you named the collection).
  </Step>

  <Step title="Click + New entry">
    A blank form opens, generated from the manifest's field schema.
  </Step>

  <Step title="Fill in the fields">
    Typical blog fields:

    * **Title** — the post title
    * **Published at** — date picker
    * **Status** — Draft or Published
    * **Tags** — add as many as you want
    * **Body** — Markdown editor with live preview, image drop, embeds

    Each field shows up automatically based on the [field types](/cms/field-types) defined in your manifest.
  </Step>

  <Step title="Save and deploy">
    Click **Save**. The entry is written to `content/blog/your-slug.mdx` and a new version is captured. To make it live, click **Deploy** in the top bar.
  </Step>
</Steps>

<Tip>
  The CMS panel auto-versions every save. Open the version history drawer (three-dot menu) to roll back any post to any earlier state.
</Tip>

## Option 3: Content Editor (Visual)

Use this if you want hands-on control over the post without touching code.

<Steps>
  <Step title="Go to Content">
    Inside your project, click **Content** in the sidebar.
  </Step>

  <Step title="Open Blog Posts">
    Click the **Blog Posts** tab at the top.
  </Step>

  <Step title="Pick a collection">
    If you have multiple blog collections (e.g., "News", "Tutorials"), select the one you want to post to.

    <Info>
      If you don't see a blog collection yet, ask the AI to create one: *"Set up a blog on my site"*. The AI will create the collection, the blog listing page, and the post template.
    </Info>
  </Step>

  <Step title="Create a new post">
    Click **New Post** and fill in:

    * **Title** — displayed at the top of the post
    * **Slug** — the URL path (e.g., `welcome-to-our-blog`)
    * **Content** — your post body (supports rich text formatting)
    * **Featured image** — optional cover photo
    * **Status** — Draft or Published
  </Step>

  <Step title="Save and deploy">
    Click **Save**. To make the post visible to visitors, click **Deploy** in the top bar.
  </Step>
</Steps>

## Option 4: Edit the Code (Developers)

If your blog is a set of static files or MDX pages, you can edit them directly.

<Steps>
  <Step title="Open the code editor">
    Click **Code Editor** in your project.
  </Step>

  <Step title="Navigate to your blog posts">
    Depending on how your site is built, blog posts typically live in one of these folders:

    * `content/blog/` — for most static sites
    * `app/blog/` — for Next.js App Router
    * `pages/blog/` — for Next.js Pages Router
    * `posts/` — common for Jekyll-style sites
  </Step>

  <Step title="Create a new file">
    Right-click the blog folder and choose **New File**. Name it something like `my-new-post.mdx` or `2026-04-18-welcome.md`.
  </Step>

  <Step title="Write your post">
    Add frontmatter and content:

    ```mdx theme={null}
    ---
    title: "Welcome to Our Blog"
    date: "2026-04-18"
    author: "Your Name"
    excerpt: "A quick intro to what you'll find here."
    ---

    # Welcome!

    This is our first blog post. Here's what we're excited to share...
    ```
  </Step>

  <Step title="Save and deploy">
    Press **Cmd+S** (Mac) or **Ctrl+S** (Windows) to save, then click **Deploy**.
  </Step>
</Steps>

## Verifying Your Post

Once deployed, your post should be visible at:

```
https://yoursite.hiveku.com/blog/your-post-slug
```

or at your custom domain if you've configured one.

If it's not showing up:

<AccordionGroup>
  <Accordion title="The post is saved as a draft">
    Check the post status in the content editor. Drafts aren't published to your live site — switch the status to **Published** and redeploy.
  </Accordion>

  <Accordion title="You haven't deployed yet">
    Saving a post doesn't automatically publish it. Click the **Deploy** button in the top bar after making changes.
  </Accordion>

  <Accordion title="The blog index page doesn't list the post">
    If your blog listing page isn't picking up new posts, ask the AI: *"My new blog post isn't showing up on the blog index page — can you fix it?"* It will inspect your site and wire it up.
  </Accordion>

  <Accordion title="The URL is different than expected">
    Check the post's **slug**. The slug determines the URL — a slug like `welcome-to-our-blog` produces `/blog/welcome-to-our-blog`.
  </Accordion>
</AccordionGroup>

## What's Next?

<CardGroup cols={2}>
  <Card title="Initialize Your CMS" icon="rocket" href="/how-tos/initialize-cms">
    Scaffold a `blog` collection so non-developers can post
  </Card>

  <Card title="Migrate to CMS" icon="arrow-right-arrow-left" href="/how-tos/migrate-site-to-cms">
    Move existing hardcoded posts into the CMS
  </Card>

  <Card title="Custom Domains" icon="globe" href="/publishing/custom-domains">
    Connect your own domain so your blog is at `yoursite.com/blog`
  </Card>

  <Card title="SEO" icon="magnifying-glass" href="/publishing/hosting">
    Enable SEO enhancements so Google can find your new posts
  </Card>
</CardGroup>
