1mn.ai docs
The loopsGrowth loops

Content

One GEO-optimized long-form article per run, scouted, drafted, and committed straight to your website repo's blog directory as a pull request you review and merge.

The content loop writes one long-form article per run, commits it directly to your connected website repo as a new blog post, and opens a pull request. You review the actual diff on GitHub and merge — there's no separate "publish" step. Articles are written for GEO (Generative Engine Optimization): structured to be quoted verbatim by LLMs like ChatGPT, Claude, Perplexity, and Gemini when someone asks about the topic.

Each finished article also registers as a content hub on the Content tab (under Growth), where you can spin it out into native social posts — see Content distribution. The article is the hub; the channel posts are the spokes.

Prerequisites

  • GitHub connected for the product. If it isn't, the loop skips and tells you to connect it in Integrations.

  • A blog directory in the connected repo. The loop looks for one in this order (first match wins):

    DirectoryCommon frameworks
    content/blog/Next.js + Contentlayer / Velite, Astro, Hugo
    content/posts/Astro Starlight, Eleventy
    src/content/blog/Astro
    src/content/posts/Astro
    app/blog/Next.js app-router blog
    posts/Hexo, raw Markdown sites
    articles/Custom convention

    If none exists, the loop skips with a comment explaining what it looked for, so you can set one up.

Run it

You have two ways to trigger a run:

  • From the Content tab — click Generate article, optionally typing a brief (topic, angle, or format) in the composer. Leave it blank and the Content Writer picks the best topic for your product.

  • From chat — ask the dispatcher, optionally with a topic or angle:

    write a blog post about migrating from spreadsheets to our app

With no topic, it scouts trending, relevant topics and picks the highest-value angle itself. It also runs on its own roughly every 7 days.

What happens

  1. Resolves your repo — using the repository you selected in Integrations if you've picked one.
  2. Finds the blog directory and reads existing posts (and your Brand.md voice guide) so the new piece matches your conventions and tone.
  3. Drafts the article to GEO structure and commits it as a new post on a branch.
  4. Generates a cover image for the post and commits it in the same branch, so the published article ships with its artwork — no separate upload step. The image follows your Brand.md visual identity by default, or your Media generation instructions (Settings) when you've set them.
  5. Opens a pull request — that PR is the deliverable.

What you get

A pull request adding one new article to your blog directory, matching the repo's existing frontmatter and file conventions. Draft-only: merging the PR is what publishes it. Review the prose and structure on GitHub like any other change.

The same article also appears as a card on the Content tab — with its cover image, a link to the PR, and (once merged) a link to the live article. From that card you hit Distribute to reshape it into channel-native social drafts; see Content distribution.

Settings

The Content tab carries the strategy fields shared with the social content loop (goal, positioning, themes, channels), plus one field that shapes articles specifically:

  • Media generation instructions (optional) — free-text guidance for how each article's media (cover image, diagrams) is generated. When you set it, it's authoritative: the Content Writer folds it into the cover-image prompt and lets it override your Brand.md visual defaults on any conflict — for example:

    flat vector illustrations, muted palette, no photos of people, no text baked into the image

    Leave it blank and the cover image falls back to your Brand.md visual identity.

The cover image is always generated at 16:9 with no text baked in (your site overlays the title), so these instructions steer style — medium, palette, subject matter — not copy. Cadence — how often the loop runs on its own (roughly every 7 days by default) — is set from Cadence.

Notes & limits

  • One article per run — depth over volume.
  • If the repo has no blog wired up, the loop won't scaffold one — it skips and tells you what's missing.
  • Uses your selected repo verbatim when set; otherwise it prefers the website/marketing repo (one whose name contains site, web, marketing, or docs) over the app backend.

On this page