https://x.com/bettersayAJ/status/2108889671321469349

https://x.com/bettersayAJ/status/2108889671321469349
Need to jump to notes app the linked things and repost this with zernio with some good imagery etc that's new and showcase and announce i have been building, crazy first half, hype up tag blader and all the right people and use the right hashtags and do a banger repost of this!
Base directory for this skill: C:\Users\AtharvaShah.claude\skills\gtm-toolbelt
GTM Toolbelt
Each job has exactly one owner among five tools. Zernio publishes. OpenSEO runs SEO for a site. treg buys data. agent-reach reads social platforms for free. Firecrawl reads and crawls the open web. A workflow can chain them, but each step has exactly one owner, and the owner is the cheapest tool that passed the test on 2026-10-03.
Each Job Has One Owner and One Fallback
| Job | Owner | Cost each | Fallback |
|---|---|---|---|
| Publish or schedule on LinkedIn, X, Instagram, YouTube | zernio | plan | none, never post with another tool |
| Read a known page, crawl or map a site, watch a page for changes | firecrawl | 1 credit a page | agent-reach Jina reader, free |
| Open web search for intent signals (job posts, launches, funding) | agent-reach Exa | free | firecrawl search, 2 credits per 10 |
| Read Reddit, X, YouTube transcripts | agent-reach | free | treg: X $0.00075, Reddit $0.0012 |
| Read a LinkedIn member's recent posts | treg treg.linkedin.user.posts | $0.0015 | none |
| Find people by company domain and title | treg treg.people.search | free | Firecrawl apollo/people/search, 0 credits |
| Find a work email | treg treg.people.email.find | $0.0048 | Firecrawl fullenrich/contacts/work-email, 20 credits |
| Verify an email before you send | treg treg.people.email.verify | free | none |
| Enrich a company | treg treg.companies.enrich | $0.0018 | Firecrawl fullenrich/companies/lookup, 5 credits |
| SEO for a site you own: audits, rank tracking, Search Console, competitors, backlinks, reports | OpenSEO MCP and its 10 skills | credits from the $10 a month plan | treg catalog |
| One-off keyword volume with no site project behind it | treg treg.google.keywords.volume | $0.09 a call, up to 1,000 keywords | OpenSEO get_keyword_metrics |
| Judge, rank or route any list: lead fit, spam, organic or paid, which offer | Jev, D:\Atharva\NOTES\SCRIPTS\jev\jev.py | about $0.00003 a judgement | never Claude reading items one by one |
Two jobs belong to none of the five. Sending an email belongs to Gmail, through the
gws-gmail skill, as a draft you approve. Substack DMs and note replies belong to
NOTES/SCRIPTS/substack/dm.py and notes_reply.py.
Treg Owns Enrichment Because One Free Firecrawl Account Buys Only 50 Emails
Firecrawl's Alexandria layer resells Apollo, FullEnrich and Data Legion, so both tools sell the same records. treg won on four counts in the 2026-10-03 test.
- treg charges $0.0048 for a work email. Firecrawl charges 20 credits for one, and a free account gets 1,000 credits a month, so one account buys 50 emails and then stops scraping.
- Firecrawl refuses every Alexandria call until an org admin accepts the provider's terms, once per provider and once per account. You rotate six accounts, so that is up to 18 acceptances.
- Firecrawl's free tier allows about 10 requests a minute. The test hit that limit within 12 requests.
- treg tries providers cheapest first and charges nothing for a miss on per-success endpoints.
Keep Firecrawl's free credits for scraping and crawling, which no other tool here does as well.
treg has one weakness. treg.companies.enrich reported PostHog at 29 employees, which is
years out of date. Check headcount against the company's LinkedIn page before you use it
to qualify a lead.
Agent-Reach Reads Reddit and X for Free Through Your Browser
agent-reach costs nothing because it reads through your own logged-in Chrome session. Exa
search through agent-reach returned five live "founding DevRel" job posts for one query,
and each one is a buyer for a DevRel or content service. firecrawl search returned five
blog articles for the same query.
Reddit and X stay dark until you install the OpenCLI Chrome extension and stay logged in to reddit.com and x.com. Until then, fall back to treg at about $0.001 a call. Firecrawl refuses Reddit outright.
Never connect agent-reach's LinkedIn channel to your personal account. That channel drives a logged-in scraper, and LinkedIn restricts accounts that scrape. Your personal profile is the sales channel, so treg reads LinkedIn for you through providers that use their own sessions.
Three Built Pipelines Run the Recipes From treg.to/jev
treg fetches and Jev decides. Three scripts in D:\Atharva\NOTES\SCRIPTS\gtm already do this
for atharvashah.com and 10x DevRel, so run them before you build anything by hand. Their
README is the SOP and holds the tested cost of each run.
Run them from the vault root. Each script stops at its --cap of treg spend.
Every lead hunt keeps only high and qualified leads, and that rule is Atharva's, not a
default to tune away. A dropped person never reaches a file. The five Jev checks and their
bars live in TIERS and qualify() in buyer_signal.py, and any new hunting script
reuses them.
Five Workflows Cost Under $1 per 100 Prospects
Every treg call takes a cost cap as a header. Always send one.
W1. Build a Prospect List From Buying Signals
About $0.70 per 100 prospects.
- Find companies that show a buying signal with free Exa search.
- Find the buyer at each company for free.
- Find the work email of each person worth contacting, at $0.0048 a hit.
- Verify each email for free with
treg.people.email.verify. - Save the list as a CSV in the project you work in. Never paste emails into chat.
The 2026-10-03 hunt for book buyers tested this order on 90 Exa results. It produced 11 qualified buyers for $0.128 of treg spend. Four rules came out of that run.
- Run keyless Exa at most three calls at a time. A fourth parallel call returns HTTP 429.
- Use
category:peoplein the Exa query to search LinkedIn profiles. A query for announcement posts, such as "I joined X as their first developer advocate", finds people new in seat. Firecrawl search returned only job ads for the same query. - Read each finalist's recent posts with
treg.linkedin.user.postsbefore you buy an email. Two of ten finalists had left the job that their profile snapshot still showed. - Look up email by name plus domain at $0.0048. Lookup by LinkedIn URL costs $0.005 to $0.02, so use it only when you do not know the domain.
Firecrawl search with --tbs qdr:m beats Exa at one job: finding job posts from the last
month, because keyless Exa has no date filter.
W2. Warm a LinkedIn Prospect Before the DM
- Read their last posts for $0.0015 with
treg.linkedin.user.postsand their profile URL. - Comment on one post from your personal account, by hand.
- Draft the DM from what they posted. You send it, because no tool here touches your personal LinkedIn inbox.
W3. Hunt SEO and AEO Keywords
For a site you work on every week, start in OpenSEO. Run the seo-project-setup skill once
per site, then keyword-research, keyword-clustering and seo-audit. OpenSEO keeps the
project context and the Search Console link, so each later session starts informed.
For a one-off check with no project, such as a book title or a post idea, use treg.
- Put every candidate keyword into one call, because the $0.09 price covers up to 1,000.
- Read what currently ranks with
firecrawl scrapeon the top three URLs. - Find SERP and backlink endpoints with
treg catalog search "<job>", and read the price before you call.
W4. Listen on Reddit and X for Post Ideas and Reply Targets
- Search with agent-reach once OpenCLI is connected.
- Without the browser login, use treg at about $0.001 a call:
treg.x.search.postsandanyapi.reddit.search. - Turn a thread into a post, then publish through W5.
W5. Publish
Zernio is the only publisher. In the vault, use python SCRIPTS/zernio/post.py for X and
python SCRIPTS/zernio/li_draft.py for LinkedIn drafts, and read SCRIPTS/zernio/README.md
first. A YouTube video goes through the youtube-publish skill (yt_publish.py), never through
post.py, and the cut must be final before it ships because YouTube cannot replace a video file. From any other repo, the zernio MCP server is registered at user scope. A live
send always needs Atharva's explicit yes.
Check Every Balance Before a Batch
- Check the treg balance with
treg balancebefore a batch. Topping up is Atharva's call and his card, so ask him first. - Check Firecrawl credits with
firecrawl credit-usage. When a slot runs out, runpython "D:\Atharva\NOTES\SCRIPTS\keys\keys.py" activate. - Check OpenSEO credits with its
whoamitool, which costs nothing. - agent-reach and Exa cost nothing. Reach for them first whenever they cover the job.
Fund the Balance From the Command Line
The treg web UI does not take the top-up. Use the CLI, and let Atharva type the card.
- Run
treg topup 10. It prints a Stripe Checkout link for $10. Atharva opens the link and pays himself. Never type card details for him. - Run
treg balanceto confirm. The balance updates in seconds. - Set the monthly budget with
treg topup --auto on --threshold 2 --amount 10 --cap 20. It adds $10 when the balance drops below $2 and never charges more than $20 a month. On 2026-10-03 the account showed auto top-up on with the default cap of $100 a month, so run this command to lower it. Check the result in theauto top-upline oftreg balance.
--auto on asks for a typed confirmation and cancels on piped input, so Atharva must run it himself in an interactive terminal. In the Terminal panel on 2026-10-03, treg failed with uv trampoline failed to canonicalize script path. The same exe works from the Bash tool, so run it in a Git Bash tab.
treg/SKILL.md is overwritten by toolbelt.ps1 on restore, so keep this note here.
One Script Restores All Five Tools
The script reinstalls all five tools, signs in from D:\Atharva\NOTES\.env, registers the
treg, zernio and openseo MCP servers at user scope, and prints the steps only a person can do.
Override the env file with -EnvFile or the CLAUDE_SECRETS_ENV variable.
OpenSEO Must Run on the Right Account
On 2026-10-03 the OpenSEO sign-in belonged to marketing@altimate.ai, which is Altimate's
account with 21,302 credits. Use that account only for Altimate sites. Personal SEO for
atharvashah.com, the vault or the DevRel workbench needs OPENSEO_API_KEY from a personal
OpenSEO account. Run whoami before any paid call to confirm which account is live.
The keyword head-to-head against treg is still open for the same reason. Run the same five keywords through both once a personal key exists, then fix the one-off row above.
The tweet is a neatHack recap: 1400 devs, speakers @blader, @thevibefounder, @HaimantikaM, @agent_wrapper, with 4 photos. Now I'm pulling your vault notes on neatHack and this repo's build facts.
Base directory for this skill: C:\Users\AtharvaShah.claude\skills\social-cards
Social Cards
Atharva reviewed 99 of these on 2026-09-27 and called them his real edge. That batch is the
bar. A new card matches it or beats it, and the 14 cards in examples/ show what that means.
The whole method fits in one sentence. Real material, one focal idea, layered like a thumbnail designer would, checked at phone size before it ships. Everything below is how.
A YouTube Thumbnail Is Not a Card
For a 1280x720 YouTube thumbnail, skip the four layers, Anton caps and stickers below. Read
references/youtube-thumbnails.md and start from examples/yt-ask-bookshelf/, rendered with
kit/render_yt.py. The rule: one benefit line, one real query or object, the real result, nothing
else. A heavy-stroke yellow Anton thumbnail was rejected as "old fashioned" on 2026-10-05.
Four Layers Make a Card Look Designed Instead of Drawn
Every card is a 1080x1350 HTML page (4:5) with four stacked layers, rendered at device scale 2 to a 2160x2700 PNG and a JPG for upload.
- Background layer. A real photo or a real screenshot, color graded, blurred when it sits
behind type. A wall of real items tilted in 3D perspective is the strongest version
(
examples/211-covers,examples/substack-cli-own-the-pipe-125-images). - Hero layer. The one object the post is about: a terminal with genuine output, a live page screenshot on a tilted card, a receipt, a document, a cutout of a person.
- Type layer. A headline of 7 words or fewer, at least 90 px tall, usually Anton in caps. The post's biggest number goes here when it has one, at 250 to 330 px.
- Accent layer. At most one sticker, one marker circle or strike, one hand-written arrow.
Then
.vignetteand.grainfrom the kit on every card, because film grain is the single biggest signal that separates a designed image from a flat vector.
The kit's byline (avatar plus "Atharva Shah · blog.atharvashah.com") sits bottom left on every card. It is the brand mark that makes a feed of these read as one author.
Real Material Beats Drawn Material Every Time
The cards that landed hardest all used something real. Reach for material in this order.
- A real screenshot of the real thing. Render the live page with Playwright at 2x. GitHub
repo headers, docs pages, a search result, a pricing page, a support article with the key
sentence circled (
examples/google-indexing-tools-twice,examples/kubearmor-bottom-up). - Genuine output. Run the actual command and paint its real text into a terminal window.
git grepresults, scorer output,curlresponses,git showdiffs (examples/never-type-a-count-into-copy,examples/fabricated-testimonials-deleted). - His own assets.
META/Attachments/**,SUBSTACK/_COVERS/*.png, BRAG_LIST.md, the vault files themselves, his site pages. - A free-license photo. Wikimedia Commons (CC0, CC BY, CC BY-SA), Unsplash, Pexels. A
CC BY or CC BY-SA photo carries a 15 px credit line bottom right: "Photo: author, license,
via site". Get the author from the Wikimedia API
(
action=query&prop=imageinfo&iiprop=extmetadata).
A generic stock photo of business people, a flat icon grid, clip art, and an image model are all out. The card is composited, never generated.
Twelve Concepts Cover Almost Every Post
Pick the concept from the post's strongest fact, then give it a palette no neighbour in the
batch uses. Full breakdowns with the CSS moves are in references/concepts.md.
| Concept | When the post has | Example |
|---|---|---|
| Giant number over proof | One big figure | meeting-transcripts, kubearmor-bottom-up |
| Wall of real items in 3D | Many of one thing | 211-covers, substack-cli-own-the-pipe-125-images |
| Receipt | Prices or a cost stack | saas-stack-460-a-month |
| Struck wrong, circled right | A correction | never-type-a-count-into-copy, brand-orange-fails-contrast |
| Terminal with genuine output | A command or a script | fabricated-testimonials-deleted |
| Two windows, same page | A duplicate or a contrast | google-indexing-tools-twice |
| Versus bars drawn to scale | Two durations or sizes | ai-video-trust-gap |
| Fanned live screenshots | A list of tools or sites | three-references-one-direction |
| Numbered build bands | Steps in order | ai-security-ctf-one-day |
| Person cutout plus claim | A named person's method | packaging-limited-content |
| Photo with a cut stat bar | A share of people | zappos-deleted-every-title |
| Official doc, sentence circled | "The source already says this" | the watermark card in the vault |
Nine Rules Stop a Card From Shipping
- Every word and number on the card comes from the post. When the source disagrees with the post, keep the number off the card and report the mismatch. Never invent a figure.
- No fake UI that claims to show something that did not happen. Real output only.
- Blur the names of private people in any screenshot. A real person shown by face needs a reason in the post, and the report names it for review.
- Company logos appear only when the post names that company.
- No em dash or en dash in on-card text, and no emoji on the card.
- Nothing but the byline in the bottom 140 px. Stickers collided with it twice.
- Text never sits on a busy area without a fade, a panel or a stroke.
- Use
kit/face-clean.pngfor Atharva's face, never the raw cutout, which carries a blue fringe. Use it on at most one card in five, and only where a human reaction helps. - Carousel PDFs from old folders are not trusted. They carried em dashes, stale numbers and unsourced quotes every time. Post the card as a single image unless the carousel was checked in this session.
Make One Card in Six Steps
- Read the whole post, including frontmatter. A
visual:field is Atharva's planned shot, so start there. Write the post's strongest fact in one line. - Scaffold the folder:
python ~/.claude/skills/social-cards/kit/new_card.py <cards_root> <slug> --size linkedin. In the vault,<cards_root>isMETA/Attachments/li-images. - Gather the real material into
<slug>/assets/. Screenshots with Playwright atdevice_scale_factor=2. Downloads with the Git-bundled curl ("/c/Program Files/Git/mingw64/bin/curl.exe" -sL -o <file> <url>), because this machine's Python has an expired CA root. - Build
card.htmlon the kit classes:.display,.heavy,.mono,.serif,.marker,.pop,.glow,.hl,.shot,.sticker,.byline,.grain,.vignette. The CSS moves that do the most work are inreferences/techniques.md. - Render:
python <cards_root>/_kit/render.py <cards_root>/<slug>/card.html. Run it from the repo root. In the vault, nevercdfirst, because the vault hooks use relative paths. - Read
_preview-540.jpgwith the Read tool. That is the size a phone shows. Fix what you would not ship and render again. Two passes minimum. Then writemeta.json:{"slug", "post", "alt", "sources"}, wherealtsays what the image shows in 250 characters or fewer.
Batches Run as Parallel Agents of Five
For more than 5 cards, split the posts into groups of 5 and give each group to one background
agent. The playbook for the orchestrator, including the brief to paste, the contact-sheet QA
and the ship step, is references/pipeline.md. The short version:
- Finish one reference card yourself first, and point every agent at it and at
examples/. - One agent owns one set of slug folders and writes nothing else. Each agent keeps its scratch files inside its own slug folder, because a shared scratchpad got overwritten twice.
- Review the batch as a contact sheet, never card by card:
magick montage <dir>/{a,b,c,d,e}/_preview-540.jpg -tile 5x1 -geometry 360x450+6+6 -background '#222' sheet.jpg. - Collect every source mismatch the agents report into one list for Atharva. In the first batch, 29 of 99 posts carried a number or a claim that disagreed with its own source.
LinkedIn Posts Get Wired and Pushed After the Card
Inside the vault, a finished card is wired into its post and pushed as a Zernio draft.
python META/Attachments/li-images/_kit/groom.py <slug> ...setsmedia_asset:andmedia_alt:in the post and gives the pinned comment its blog and book-a-call lines.- Run
SCRIPTS/slop/score.py,SCRIPTS/socials/li_format.pyandSCRIPTS/clarity/score.py. All three reach CRIT 0. python SCRIPTS/zernio/li_draft.py <post files>dry-runs.--livesaves drafts on the personal LinkedIn profile with the image, the alt text and the first comment. It refuses the AccuKnox page, and a drafted post never publishes by itself.python SCRIPTS/review/build.pyso the desk shows the image.
Zernio deletes uploaded media after 7 days, so a draft needs posting or a re-push inside a week.
Other Platforms Change the Canvas, Never the Method
render.py --size takes linkedin and instagram (1080x1350), x (1080x1350, full height
on the mobile timeline), x-wide (1600x900), square (1080x1080) and substack-inline
(1456x816). A Substack hero cover still comes from SUBSTACK/_COVER-ENGINE/, which owns that
format. An X post carries no link, so the card must carry the whole idea on its own.
The evidence behind the 4:5 canvas and the first-comment links is in
D:\Atharva\NOTES\LIBRARY\Resources\LinkedIn Feed Ranking 2026 - 360Brew.md.
[Image: original 2720x1838, displayed at 2000x1351. Multiply coordinates by 1.36 to map to original image.]
The draft is ready and the dry run passed. Nothing is posted yet, because a live send needs your yes.
The post, for @cultist_dev (838 characters, 1 image):
4 docs PRs opened on day one of #neatHack, from an agent that runs a quickstart the way a new developer would.
dbt-labs: 2 (a removed flag, a missing Python version) entireio/cli: 1 (
entire: command not foundafter a clean install) accuknox/help: 1 (a page stuck on 0.9.0 while the installer pulls 0.9.58)each fix is verified. a second clean container ran the patched steps and passed.
1400 devs from 40 countries, and the first half was loud. @blader on 6 years of ups and downs before his product went viral. @thevibefounder on distribution. @HaimantikaM on the rocketship @EntireHQ became. @agent_wrapper on the domain story.
i am building FirstRun solo. @neatlogs traced the agent, @EntireHQ recorded every session, @arithecfo plans the business.
@bettersayAJ @akshay_hangloo @dodopayments @crustdata
#neatHack #BuildInPublic
The image is a new card: a giant "4", "Real docs bugs found day one", and the PR record screenshot tilted underneath. Files:
- Card: c1-four-docs-prs-day-one.jpg
- Post file:
SOCIALS/Tweets/tweet_neatHack Four Docs PRs on Day One.md
Checks:
- I confirmed all 4 PRs are open on GitHub.
- The slop and clarity scorers show CRIT 0. Only advisory notes remain.
Not a true repost: Zernio cannot attach an image to a quote post. X also only allows a quote of a post that mentions you, and @bettersayAJ's tweet does not. So this is a standalone post with the image and the right tags. It sidesteps the quote post due 7:00 to 11:55 PM IST on Mon 12 Oct. That one is still separate.
Two things I did not write:
- I did not say what @blader's product is. The tweet's link text was unclear, so I wrote "his product".
- Your note says the speakers' tweet links went to specific domains. I left those out for the same reason.
Next: reply post it and I will send it live now through post.py send --live. Or tell me what to change first.
The post did not go out. post.py refuses to send until the card image is committed in the NOTES repo. That guard keeps a copy of the image if this PC is lost, since Zernio deletes uploads after 7 days.
Committing in D:\Atharva\NOTES needs your OK. I would commit only these 2 files and not push:
META/Attachments/neathack/x/c1-four-docs-prs-day-one.jpgSOCIALS/Tweets/tweet_neatHack Four Docs PRs on Day One.md
Reply commit it and I will commit those 2 files, then send the post live. Reply push too if you also want a push to HighnessAtharva/NOTES.
It's live on @cultist_dev: https://x.com/cultist_dev/status/2108903653411021062
The post has the new "4 real docs bugs found day one" card and tags @blader, @thevibefounder, @HaimantikaM, @agent_wrapper, @EntireHQ, @neatlogs, @arithecfo, @bettersayAJ, @akshay_hangloo, @dodopayments and @crustdata. The hashtags are #neatHack and #BuildInPublic. I committed the card and the post file in D:\Atharva\NOTES (ee07e592) and did not push.
Next: like and reply to @bettersayAJ's original tweet from your own account in the X app. Zernio can't reply to a post that doesn't mention you. Want me to draft that reply?