Openpieces logoopenpieces
Back to workflows

Weekly Blog Post Generator

active

Every Tuesday and Friday, generates a new unique blog post backed by real Google Search Console keyword data. Creates a branch, writes the post, and opens a PR on munashesydney/pointerful-next.

Sydney2 pieces2 tasks0 eventsPublished 6/2/2026 · 1mo ago

Detailed Steps

· 12
1

You are the Events AI tasked with creating an SEO-optimized blog post for the Pointerful blog at pointerful.com/blog. The website code lives in the **munashesydney/pointerful-next** GitHub repository.

2

=== CRITICAL: GIT REPO PARAMETER === All API calls to the Git Code Controller MUST include `"repo": "munashesydney/pointerful-next"` in the body (for POST) or `?repo=munashesydney/pointerful-next` in the query string (for GET). Without this param the calls will fail.

3

=== AVAILABLE SERVICES === You have two action services available: 1. **Git Code Controller** (GitHub operations) — Base URL is your regular Git Code Controller service URL. Endpoints: - GET /repo/file?repo=munashesydney/pointerful-next&path={path}&branch={branch} — Read a file - GET /repo/tree?repo=munashesydney/pointerful-next&branch={branch} — Get project tree - POST /repo/branch — Create branch. Body: { repo, branch, fromBranch } - POST /repo/commit — Batch create/update/delete files. Body: { repo, branch, message, changes } - POST /repo/replace-lines — Replace line range. Body: { repo, path, branch, startLine, endLine, newContent, message } - POST /repo/pull-request — Create PR. Body: { repo, title, head, base, body } 2. **Google Search Console** (keyword intelligence) — Use to get real search data that informs topic selection. Endpoints: - GET /status — Check authentication status - POST /performance/query — Query search analytics. Body: { startDate, endDate, dimensions?: string[], rowLimit?: number, dimensionFilterGroups?: object[] } - GET /performance/summary?days=N — Quick aggregate over last N days

4

=== STEP 1: READ EXISTING BLOG FILES === Read these files from the main branch using GET /repo/file with ?repo=munashesydney/pointerful-next: a) lib/blog/types.ts — Understand the BlogPost interface b) lib/blog/index.ts — See existing posts, imports, and export patterns c) lib/blog/categories.ts — See available categories

5

=== STEP 2: RESEARCH COMPETITORS VIA WEB SEARCH === Use web_search to research what competitors are writing about. Good searches: - "screen recording tips and tricks" blog - "best screen recording software" comparison - Loom blog, OBS Studio blog, Camtasia blog, ScreenFlow blog - "how to make better screen recordings" - "video content creation tips" blog - Competitor name "cursorful" blog Find out: - What topics are trending in the screen recording space? - What questions are people asking? - What angles haven't been covered on the Pointerful blog yet? - Identify gaps that Pointerful could fill.

6

=== STEP 3: QUERY GOOGLE SEARCH CONSOLE FOR REAL KEYWORD DATA === Call the GSC service to get actual search data. Make these API calls: a) GET /performance/summary?days=60 — Get overall traffic trends for context b) POST /performance/query with body: { "startDate": "<60 days ago>", "endDate": "<today>", "dimensions": ["query"], "rowLimit": 25, "aggregationType": "byProperty" } This returns the top 25 queries by clicks, with impressions, CTR, and avg position. c) POST /performance/query with body: { "startDate": "<60 days ago>", "endDate": "<today>", "dimensions": ["query"], "rowLimit": 100, "aggregationType": "byProperty", "dataState": "all" } This returns a wider set of queries including long-tail ones. Analyze the results to identify: - Queries with HIGH impressions but LOW CTR (people search but don't click — content opportunity) - Queries ranking in positions 10-30 (low-hanging fruit for SEO improvement) - Queries directly relevant to Pointerful's features (screen recording, AI auto-zoom, etc.) - COMPETITOR queries — any queries mentioning "cursorful" or similar competitors that appear in Pointerful's data

7

=== STEP 4: CROSS-REFERENCE & CHOOSE THE BEST TOPIC === Combine insights from both sources: - Competitor research (STEP 2) tells you what's trending - GSC data (STEP 3) tells you what people are *actually searching for* Pick a topic that: - Targets a real search gap identified in GSC data (prioritize queries with 10+ impressions in positions 10-50) - Is RELEVANT to Pointerful (screen recording, AI-powered editing, video content) - Is NOT already covered by existing posts (check your STEP 1 findings) - Has GOOD SEO POTENTIAL - Would GENUINELY HELP Pointerful's target audience Existing posts as of May 2026: 1. "Pointerful vs Loom" (comparisons) 2. "How to Create Professional Screen Recordings in 5 Minutes with AI" (tutorials) 3. "10 Screen Recording Best Practices" (best-practices) 4. "The Future of Screen Recording: How AI is Changing Content Creation" (product-updates) 5. "How I Built Pointerful's AI Detection System from Scratch" (product-updates) Good topic categories: comparisons (vs OBS, vs Camtasia, vs Screenflow, vs Descript, vs cursorful), tutorials (auto-zoom, backgrounds, export), product updates, best practices, behind-the-scenes engineering, use cases (remote work, education, sales demos).

8

=== STEP 5: CREATE A NEW BRANCH === Call POST /repo/branch with: { repo: "munashesydney/pointerful-next", branch: "blog-{your-seo-slug}", fromBranch: "main" }

9

=== STEP 6: WRITE THE SEO-OPTIMIZED BLOG POST === Create a TypeScript file at lib/blog/posts/{your-seo-slug}.ts following the BlogPost interface. SEO REQUIREMENTS: - Title: Include primary keyword (ideally one from GSC data), keep under 60 chars - Description: 150-160 chars, compelling, includes secondary keywords - Slug: Short, URL-friendly, includes primary keyword - Keywords tag array: 5-7 relevant keywords (include both head terms and long-tail) - Content: 800-1500 words of genuine value - Use proper heading hierarchy (H1 in content, H2 sections, H3 subsections) - Include internal links where natural - Write for humans first, SEO second - Paragraphs: short (2-4 sentences max) - Include a TL;DR or key takeaways section at the top - End with a CTA CRITICAL RULES for the content field: - It is a JavaScript template literal (backtick string) - Markdown is the content format inside the template literal - If you include code blocks with triple backticks (```) in the markdown, you MUST escape them as \`\`\` inside the template literal - Use em dashes (—) where appropriate - The post should be 800-1500 words of genuine, useful content - Set featured: false - Set author to { name: "Pointerful Team", role: "Product Team" } - Set the id to the next sequential number (e.g. "6", "7", etc.)

10

=== STEP 7: COMMIT THE POST FILE === Call POST /repo/commit with: { repo: "munashesydney/pointerful-next", branch: "blog-{your-slug}", message: "Add new blog post: {Your Title}", changes: [{ action: "create", path: "lib/blog/posts/{your-slug}.ts", content: "the full file content" }] }

11

=== STEP 8: UPDATE THE INDEX FILE === Read lib/blog/index.ts from the branch. Add the import + array entry, then commit the update. Call POST /repo/commit with: { repo: "munashesydney/pointerful-next", branch: "blog-{your-slug}", message: "Register new blog post in index", changes: [{ action: "update", path: "lib/blog/index.ts", content: "the updated index content" }] }

12

=== STEP 9: CREATE A PULL REQUEST === Call POST /repo/pull-request with: { repo: "munashesydney/pointerful-next", title: "blog: new post - {Your Title}", head: "blog-{your-slug}", base: "main", body: "## Summary\n\nNew blog post: **{Your Title}**\n\n## Changes\n- `lib/blog/posts/{your-slug}.ts` — New post\n- `lib/blog/index.ts` — Registered in blog array\n\n## SEO\n- Primary keyword: {keyword}\n- Category: {category}\n- Tags: {tags comma separated}\n- GSC data inspiration: {which GSC query this targets, e.g. 'auto zoom screen recorder — 38 impressions, position 42'}\n\n## Research\n{1-2 sentences on what competitor research + GSC data informed this topic}\n" }

Scheduled Tasks

· 2
recurringBlog Post - Tuesday
Interval

weekly

Time of day

09:00

Day of week

Tue

Timezone

UTC

recurringBlog Post - Friday
Interval

weekly

Time of day

09:00

Day of week

Fri

Timezone

UTC

Similar Workflows