The third step of the Content Engine. It doesn't invent topics out of thin air — it pulls raw material from 4 sources for the period, runs it through the gate, deduplicates, and writes ideas into the Idea Pool. Then content-weekly-plan selects from the pool.
Input: $ARGUMENTS — client (default — the only active one), opt. --source (default all),
opt. --since (default 7d). Structured input/output — so n8n can call the step via the SDK.
0 · Config (from Notion, not from the repo)
Read the client's research-config (sub-page "🔎 {Client} · Research Sources" on the "Content Engine" hub; if it doesn't exist — create it with defaults and mark [ASSUMPTION], ask to edit):
- Creator watchlist (source C): 15–25 profiles in the client's topic cluster (peers + thought leaders from Section 2 of the strategy). NOT generic viral — niche only.
- Fathom scope (source A): which call types to mine (default: client / discovery / sales / mentoring) + anonymization rule (generalize, no client names — like "no NDA" in the strategy).
- TikTok seeds (source E): hashtags/creators in the business-sales-founder niche (from Viktor's Make scenario).
- Reddit subreddits (source F): a list of subreddits from the ICP world (from Viktor's Make scenario).
- Source toggles: which of the 6 sources are active for this client.
Sources (by priority — for Viktor, calls > scraping)
A · Calls (Fathom) — the highest signal
Fathom MCP: list_meetings (by --since) → filter by scope → get_meeting_transcript /
get_meeting_summary. Extract:
- recurring questions from founders → P1 topics (methodology) and lead-magnet ideas;
- objections / false beliefs → P2 topics (contrarian);
- verbatim ICP language (pains, goals, fears) → raw material for hooks and JTBD validation;
- dialogues ("Me: … / Them: …") → ready-made story-wrapped input (Viktor's top pattern).
Each insight →
Source = call-insight, in Notes — generalized context (anonymously), in Source link — the Fathom URL (internal, not for the post).
B · Own workflow — build-in-public + hands-on
An analogue of “internal Slack” for a solo. Sources: daily logs, fresh Notion work, Claude sessions
(like building this engine), financial models, GTM deliverables (anonymously). Extract “here’s what I’m currently
building/doing” → P3 topics (AI/Claude) and P4 (personal). Source = own-thought.
⚠️ The P4 Personal tag is assigned only to topics that pass the Personal test (see content-weekly-plan Step 1): a work
case in the first person (price, workshop, metric, tool) is P1/P3, not Personal.
C · LinkedIn outlayers in the cluster (Apify, no-cookie — zero risk to the account)
Two modes, BOTH without cookie/login (the author’s account is not at risk; li_at is NOT needed — we keep it for the tracking tool / content-engage):
- C1 · By creators (watchlist):
apimaestro/linkedin-profile-postsfor each profile in the watchlist → 5x+ outlayers vs the creator’s median. (the same actor that pulled 50 posts by van der Blom — 100% success). If a separate skill for finding viral posts is installed, you can use it. - C2 · By topic (keyword/hashtag search):
apimaestro/linkedin-posts-search-scraper-no-cookies(keyword) orharvestapi/linkedin-post-search(cheaper ~$0.002/post, richer filters: author industry / keywords / mentions) → viral posts ON THE TOPIC across all of LinkedIn, even from people outside the watchlist. MUST be filtered to the cluster (author job title / industry / keywords), otherwise — generic viral. ⚠️ Interest Graph: outlayers in the client’s topic cluster, not generic. An outlier → an idea into the pool ONLY if the client has competence proof on the topic (otherwise — a format/angle reference in the Notes of a neighboring card, not a separate entry).Source = research-outlier, Source link — URL of the original.
D · Comments
Your own posts (Posts DB, when the tracking tool works) + comments under watchlist posts (Apify). Extract
recurring questions/pains in the comments → P1/P2 topics. Source = comment-mining.
E · TikTok trends (Apify) — format/hook patterns, “steal like an artist”
It exists as Viktor’s Make scenario (TikTok→Telegram). Here — natively: Apify TikTok scraper by seeds
from the config (hashtags/creators in the business-sales-founder niche) → viral short-form. We take the hook pattern
and format, not the topic (TikTok viral ≠ GTM for agencies). A mandatory step — reframe for the ICP:
a short hook pattern → translated into the bizdev problem of agencies. Source = tiktok-trend, Source link — URL.
Closer to C (reference) than to pain — more often goes into the card's Notes as an "angle of delivery".
F · Reddit pains (Apify) — real questions from the ICP world
Exists as Viktor's Make scenario (Reddit→Telegram). Natively: Apify Reddit scraper across subreddits
from the config (r/agency, r/sales, r/msp, r/Entrepreneur, r/startups…) → threads where founders/sales
complain about pipeline, hiring, positioning. This is the public analog of calls (A): verbatim pains
and questions in the words of the ICP world → topics P1/P2. Mandatory — reframe for your ICP (generic Reddit
pain ≠ a post without your proof/angle). Source = reddit-pain, Source link — URL of the thread.
📌 Viktor already has Make scenarios for TikTok/Reddit (Haiku→Telegram "LinkedIn Drafts"). This skill is their "brain": the same sources, but through the gate/dedup/tag/competence + Viktor's voice, into the Idea Pool (not raw drafts in Telegram). Make remains as an optional trigger (nervous system) — later n8n.
Processing pipeline (for each candidate)
- 3-criteria gate (
methodology.md§2.1): hook>idea · there is competence proof (or a fallback strategy §2.3: research-backed / "here's what I do" / your own story) · unique feed. Failed all — we discard, we don't write. - Dedup against the Idea Pool: compare semantically with existing ones (Name + Hook draft + Notes). A close duplicate — skip OR enrich the existing card with a new angle (don't spawn entries).
- Reuse pause: if the topic overlaps with a card where
Last used< 1–3 months — skip. - Tag:
Pillar(1 з 4) ·Funnel·Format(a suggestion, not fixed) · draftHook draftforhook-bank.md·Competence proof·Source·Source link. - Score 0–100 (like hook-bank §scoring): viral lever × specificity × voice fit × signal freshness. A signal from a call/real pain > matrix-expansion.
- Entry:
Status = newу Idea Pool (notion-schema.md).
Output
- New cards in 💡 Idea Pool (data_source — from
notion-schema.md/ project memory). - A short digest to the user: how many added per source, top-5 by score, what was discarded and why. (This digest is a candidate for Telegram delivery once we wrap the step in n8n.)
- Return a structured summary to the orchestrator (for the 03→04 chain).
Definition of Done
- research-config read (or default created + flag for editing).
- Active sources passed through
--since; each yielded insights or explicitly "nothing new". - Each new card passes the competence proof gate; no duplicates created; reuse pauses taken into account.
- Idea Pool replenished; digest shown; summary returned.
- ⚠️ No real client names in the cards (anonymization of calls/deliverables).