showcase · tier 2 · content
SEO content brief
Maps the competitor’s sitemap, reads their best page, then writes a typed brief that goes after the gaps.
The whole file
4 tasks · 4 waves · the plan falls out of the bindings, nothing is scheduled by hand.
t2-seo-content-brief.nika.yamlsource
nika: v1workflow: id: seo-content-brief description: "Competitor sitemap → top page → gap analysis → typed brief"model: ollama/qwen3.5:4b # local · zero key · swap for openai/gpt-5.2vars: topic: type: string required: true description: "The keyword/topic you want to rank for" competitor_sitemap: "https://competitor.example.com/sitemap.xml"tasks: map: invoke: tool: "nika:fetch" args: url: "${{ vars.competitor_sitemap }}" mode: sitemap output: top: ".[:5] | map(.loc)" top_page: with: map_top: ${{ tasks.map.top[0] }} invoke: tool: "nika:fetch" args: url: "${{ with.map_top }}" mode: article brief: with: map_top: ${{ tasks.map.top }} top_page: ${{ tasks.top_page.output }} infer: prompt: | Topic to rank for · ${{ vars.topic }} Competitor's top URLs · ${{ with.map_top }} Their best page on it · ${{ with.top_page }} Write a content brief that BEATS this page · find the gaps they missed · angle for search intent. schema: type: object required: [title, angle, outline, keywords] properties: title: { type: string } angle: { type: string } outline: { type: array, items: { type: string } } keywords: { type: array, items: { type: string } } save: with: brief: ${{ tasks.brief.output }} invoke: tool: "nika:write" args: path: "./briefs/${{ vars.topic }}.json" content: "${{ with.brief }}" create_dirs: trueoutputs: brief: value: ${{ tasks.brief.output }} description: "The typed content brief"nika inspect · engine 0.105.0 · vendored graph, never re-derived
4 declared edges · 4 waves · the plan falls out of the bindings