What this session actually taught
The workflow built was a LinkedIn post generator. That is not the point, and the session said so repeatedly.
The point was the approach: how to take a problem you have, break it into a shape n8n can run, and get unstuck when it breaks. The instruction to the batch was to go find a problem in their own company and solve that one instead.
Nothing was prepared. No prebuilt demo, no rehearsal. Everything below happened live, including four separate failures. Those are kept here in the order they occurred, because knowing what breaks is most of what makes the second build faster than the first.
The shape: trigger, action, result
Every n8n workflow gets divided into three before a single node is placed.
Build against a chat trigger, ship with a schedule trigger. You want a button to press while iterating. The schedule goes on last, and then you publish and activate.
Before anything: your subscription is not an API key
This came up early and is worth stating on its own, because it stops a lot of people on day one.
A Claude, Copilot, Codex, Cursor or Cowork subscription gives you no API access. They are separate products with separate billing. Whatever you pay monthly for a coding assistant buys you nothing here.
What you can actually get:
| Source | What you get |
|---|---|
| Groq | The only meaningfully free API. Open source models |
| NVIDIA, AMD | Free, limited quota. Fine for learning |
| Gemini | A free tier with limited quota, and a small credit on some accounts |
| OpenRouter, DeepSeek | Paid, and the recommendation if you are going to spend. A few dollars goes a long way |
Anthropic's API is billed separately from a Claude subscription, so a paid Claude plan still needs API credit added on top before a key will work.
Agent 1: pick a topic
The first agent does one job: produce a topic, an angle, and a target reader, as structured data rather than prose.
The system message is where the guardrails go:
You are a content strategist for a software testing community.
Output only what the schema asks for. Do not go off topic.
The user message is the actual request. Both go to the model; they do different jobs. The system message sets the role and the boundaries, the user message asks the question.
Asked in class: does this agent need memory? No. Each run is independent, the topic is handed straight to the next node, and nothing later needs to recall it. Memory costs tokens and adds nothing here. Add memory when a later turn genuinely depends on an earlier one.
Break one: Pin Data, and the quota you are burning
Every test run costs tokens. Iterating on the second agent meant regenerating the topic each time for no reason.
Pin Data freezes a node's output so downstream nodes keep receiving the same value without the node running again. Pin the topic, iterate on everything after it, and the first agent stays quiet.
Unpin it before you go live. A pinned node in production keeps returning the same frozen value forever, which for this workflow means the same post every day.
Agent 2: write the post
The second agent takes the topic and produces the title, body, image prompt and hashtags.
Break two: schema, not example
The output came back wrong, then came back as US states and cities.
n8n offers two ways to describe structured output: give it an example JSON, or define a schema. The example route was selected, and when the dropdown changed it silently reverted to a default sample schema, which is where the states and cities came from.
Define using the JSON schema. Not the example. This is the single most repeated mistake in the build.
Break three: the value is under .type
Referencing the topic field directly returned an object rather than a string.
The value sits one level deeper than it looks. topic.type, angle.type, audience.type. Worth knowing generally: when an n8n expression yields [object Object], open the node's output panel and read the actual shape rather than guessing at the path.
And a fourth: the schema is not the prompt
Hashtags were added to the schema and did not appear.
Adding a field to the output schema does not tell the model to produce it. The prompt has to ask for it too. Schema constrains the shape; the prompt decides the content. Both, or you get an empty field.
The image, through an HTTP Request node
There is no first-party image node, so the Gemini image API goes through a generic HTTP Request node.
The shortcut worth knowing: Import from cURL. Paste the cURL command from the API docs and n8n fills in the method, URL, headers and body. Exactly like Postman's import, and it removes most of the transcription errors.
Then drag the image_prompt from the previous agent into the request body.
The one that cost real money on camera. The text key did not work for images. Gemini's image generation needs a separate API key on an account with billing enabled, and the free tier returns a quota error. The session ended up adding a credit card live to finish the demo.
If you are following along and only have free quota: the text half of this workflow works fine. The image step is where the free ride ends. Budget for it, or drop the image and post text only.
The API returns base64 data, not a file. A Convert to File node turns data into an actual image, with a filename and MIME type, which is what the publishing node needs.
Publishing, and the safety rail
An Upload-Post node handles LinkedIn, and it fans out to other networks from the same call. Ten uploads a month free, paid above that.
Wire in the body, the title, the hashtags and the image, and set visibility.
Said plainly in the session, and worth repeating: do not connect your real LinkedIn account until you are completely sure the workflow behaves. A dummy account was used for the whole build. Repeated test runs against a real account risk the account itself.
The human in the loop
The most useful part of the build, and the part that turns a novelty into something you would actually run.
Rather than publishing straight from the workflow, a Telegram node sends the finished post to a person and waits. Approve and it publishes. Ignore it and nothing happens.
Setting it up:
- In Telegram, open BotFather and send
/newbot. - Give it a name. BotFather returns a token.
- Put the token in the n8n Telegram credential.
- Set the chat ID to the account that should receive the message.
Break four: bot cannot send message to bot
The first attempt failed with exactly that. The chat ID had been set to the bot rather than to a person. A bot cannot message another bot. The chat ID must be the human recipient.
Going live
- Delete the chat trigger.
- Connect the schedule trigger, set to 10 AM daily.
- Remove the pinned data.
- Publish, then activate.
That last step is the one people forget: publishing saves the workflow, activating is what makes the schedule actually fire.
The tool is not the point
Said several times and worth carrying out of the session:
| Tool | Control | When |
|---|---|---|
| n8n, Langflow | Low code, fast | Prototyping, and where a visual flow is enough |
| Vibe coding | Less control | Quick one-offs |
| CrewAI, LangChain | Full control | Production, where you own the code |
The same workflow gets rebuilt in Langflow next session deliberately, to show the concept transfers. If your company will not allow n8n, that is a tooling problem, not a blocker on the idea.
Tasks and announcements
Today's task: pick one project. Choose an agent to build from the workflows list, or better, find a real problem in your own company and build for that. The session was blunt about why: watching someone else build teaches you their approach, not your solution.
- Finish the free certifications this week: Claude 101, Claude Code 101, AI Fluency, Introduction to AI Agents. Post each on LinkedIn and tag, because the reach helps you.
- Coming this month: Introduction to MCP, Sub-Agents, Advanced MCP, AI Capabilities and Limitations, and Building with the Claude API. Five certifications is the September target.
- Extra sessions on BMAD for QA, Loop Engineering, and a Cursor masterclass, usually announced a day or two ahead.
- Short tutorials are coming on wiring Groq, NVIDIA, AMD, OpenRouter and DeepSeek into n8n.
- The exported workflow JSON goes into the 4x n8n agents repo.
- The real lesson, in the session's own words: think, try, get stuck, try again.