<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[kzk]]></title><description><![CDATA[kzk]]></description><link>https://kzkdev.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 02 Nov 2026 23:52:00 GMT</lastBuildDate><atom:link href="https://kzkdev.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Adding affiliate links to a static site? A short disclosure and tracking checklist]]></title><description><![CDATA[If you run a small static site and start adding affiliate links, a few habits save trouble later. A footer note is easy to miss. Place one plain sentence…]]></description><link>https://kzkdev.hashnode.dev/adding-affiliate-links-to-a-static-site-a-short-disclosure-and-tracking-checklist</link><guid isPermaLink="true">https://kzkdev.hashnode.dev/adding-affiliate-links-to-a-static-site-a-short-disclosure-and-tracking-checklist</guid><category><![CDATA[webdev]]></category><category><![CDATA[Blogging]]></category><dc:creator><![CDATA[kzk]]></dc:creator><pubDate>Tue, 27 Oct 2026 07:36:59 GMT</pubDate><content:encoded><![CDATA[<p>If you run a small static site and start adding affiliate links, a few habits save trouble later.</p>
<h2>1. Put the disclosure next to the link</h2>
<p>A footer note is easy to miss. Place one plain sentence right above or beside the first affiliate link, so a reader sees it before they click.</p>
<h2>2. Mark the links as sponsored</h2>
<p>Add rel="sponsored nofollow" to every affiliate anchor. It is one attribute, and it tells search engines what the link is.</p>
<h2>3. Keep one redirect layer you control</h2>
<p>Point links at a short path on your own site (for example /go/item-name) that redirects to the partner URL. When a product page dies or the program changes its link format, you edit one place instead of every post.</p>
<h2>4. Count clicks without collecting personal data</h2>
<p>A simple counter on the redirect path (path plus date) is enough to see what works. You do not need IP addresses or cookies for that.</p>
<h2>5. Read the program's own disclosure rules</h2>
<p>Each program words this differently. Coupang Partners, for example, asks for a fixed Korean notice sentence on pages that carry its links. Copy the exact wording from the program's terms rather than writing your own version.</p>
<p>That's the whole list. Five small things, set up once, and the affiliate side of a static site stays easy to maintain.</p>
]]></content:encoded></item><item><title><![CDATA[Writing GitHub Sponsors tiers people actually pick]]></title><description><![CDATA[If you're setting up GitHub Sponsors for an open source project, the tier list is the part most people overthink. A few things that keep it simple: Keep it…]]></description><link>https://kzkdev.hashnode.dev/writing-github-sponsors-tiers-people-actually-pick</link><guid isPermaLink="true">https://kzkdev.hashnode.dev/writing-github-sponsors-tiers-people-actually-pick</guid><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[kzk]]></dc:creator><pubDate>Tue, 27 Oct 2026 04:38:41 GMT</pubDate><content:encoded><![CDATA[<p>If you're setting up GitHub Sponsors for an open source project, the tier list is the part most people overthink. A few things that keep it simple:</p>
<ol>
<li><p>Keep it to 3 or 4 tiers. More choices make people pause and leave without picking any.</p>
</li>
<li><p>Name the concrete thing each tier funds. "Covers a month of CI minutes" or "pays for an hour of issue triage" is easier to say yes to than a vague "supporter" label.</p>
</li>
<li><p>Skip perks you can't keep up. A monthly call or a personal shout-out sounds nice on day one, but it turns into a chore by month three. Only offer what you'll still be doing next year.</p>
</li>
<li><p>Write a short, warm welcome message. One line of genuine thanks is enough, and it's the first thing a new sponsor sees.</p>
</li>
<li><p>Review the tiers every quarter. Look at which ones people actually choose, drop the ones nobody picks, and adjust the descriptions to match what the money really goes to.</p>
</li>
</ol>
<p>That's it. A small, honest tier list usually does better than a long one.</p>
]]></content:encoded></item><item><title><![CDATA[4 things that delay a first Steam Workshop payout]]></title><description><![CDATA[If your first Steam Workshop payout hasn't shown up, it's usually one of these four things. Check these four before you open a support ticket. It saves a…]]></description><link>https://kzkdev.hashnode.dev/4-things-that-delay-a-first-steam-workshop-payout</link><guid isPermaLink="true">https://kzkdev.hashnode.dev/4-things-that-delay-a-first-steam-workshop-payout</guid><category><![CDATA[Steam]]></category><dc:creator><![CDATA[kzk]]></dc:creator><pubDate>Tue, 27 Oct 2026 01:36:33 GMT</pubDate><content:encoded><![CDATA[<p>If your first Steam Workshop payout hasn't shown up, it's usually one of these four things.</p>
<ol>
<li>The tax interview isn't finished. Non-US creators complete W-8BEN, US creators complete W-9. Until it's accepted, payouts stay on hold.</li>
<li>Your balance is still under the minimum payout amount, so it rolls over to the next cycle.</li>
<li>Your bank or payment details don't match the name on your tax form. A small mismatch can pause the transfer.</li>
<li>You expected the money right after the sales came in, but payouts run on a fixed schedule, so there's a delay.</li>
</ol>
<p>Check these four before you open a support ticket. It saves a lot of waiting.</p>
]]></content:encoded></item><item><title><![CDATA[Setting up GitHub Sponsors: the checklist we wished we had (#ad)]]></title><description><![CDATA[If you maintain a small open-source project and keep putting off GitHub Sponsors, this is the short checklist we wish we'd had before we started. GitHub's…]]></description><link>https://kzkdev.hashnode.dev/setting-up-github-sponsors-the-checklist-we-wished-we-had-ad</link><guid isPermaLink="true">https://kzkdev.hashnode.dev/setting-up-github-sponsors-the-checklist-we-wished-we-had-ad</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[kzk]]></dc:creator><pubDate>Mon, 26 Oct 2026 04:48:13 GMT</pubDate><content:encoded><![CDATA[<p>If you maintain a small open-source project and keep putting off GitHub Sponsors, this is the short checklist we wish we'd had before we started.</p>
<h2>1. Check you're a good fit first</h2>
<ul>
<li>You have a public repository that other people actually use (a library, plugin, dataset, config setup).</li>
<li>You answer issues or ship updates on a regular basis.</li>
<li>No public project yet? Build and maintain one first. Sponsors follow usefulness.</li>
</ul>
<h2>2. Have these ready before you open the setup page</h2>
<ul>
<li>A free GitHub account with two-factor authentication turned on (GitHub asks for it during setup).</li>
<li>A payout method and tax details that work in your country. GitHub's docs list the supported regions.</li>
<li>One sentence on what sponsorship makes possible, e.g. "Sponsorship pays for the time I spend fixing bugs users report."</li>
</ul>
<h2>3. Know the fee rule</h2>
<p>GitHub's docs say sponsorships from personal accounts carry no GitHub fee, so the full amount goes to the developer. Sponsorships from organization accounts can carry fees of up to 6%.</p>
<h2>4. Point your profile at one project</h2>
<p>Pick the single repository people depend on most and make it the focus of your sponsor profile. Keep tiers few and clear.</p>
<p>We wrote a free overview of these steps here: <a href="https://bamsuni.com/money/en/github-sponsors-setup-guide/">https://bamsuni.com/money/en/github-sponsors-setup-guide/</a></p>
<p>Disclosure (#ad): on the same site we also sell a $2.99 step-by-step PDF (6 languages, based on GitHub's official docs) that covers eligibility, payouts, tax forms and tiers in more detail. Sponsorship income isn't guaranteed and results vary by person.</p>
]]></content:encoded></item><item><title><![CDATA[A Practical Prompt Workflow for Automating Social-Media Drafts (Without Sounding Like a Bot)]]></title><description><![CDATA[Most developers who try to "automate social media" with an LLM end up with one of two results: a script that posts generic filler nobody reads, or a pile…]]></description><link>https://kzkdev.hashnode.dev/a-practical-prompt-workflow-for-automating-social-media-drafts-without-sounding-like-a-bot</link><guid isPermaLink="true">https://kzkdev.hashnode.dev/a-practical-prompt-workflow-for-automating-social-media-drafts-without-sounding-like-a-bot</guid><dc:creator><![CDATA[kzk]]></dc:creator><pubDate>Mon, 26 Oct 2026 01:41:09 GMT</pubDate><content:encoded><![CDATA[<p>Most developers who try to "automate social media" with an LLM end up with one of two results: a script that posts generic filler nobody reads, or a pile of half-finished drafts that still need an hour of manual editing. The problem is rarely the model. It is usually the prompt design and the pipeline around it. This article walks through a small, repeatable workflow that turns raw material you already have (commit logs, changelogs, meeting notes, blog drafts) into reviewable social drafts. Everything here runs in any chat AI or through an API call, and the final publish step stays with a human.</p>
<h2>The pipeline at a glance</h2>
<p>Think of drafting as four stages, each with its own prompt:</p>
<ol>
<li><strong>Extract</strong> – pull the facts out of messy source material.</li>
<li><strong>Angle</strong> – decide who the post is for and why they should care.</li>
<li><strong>Draft</strong> – write platform-specific variants.</li>
<li><strong>Review</strong> – have the model critique its own output against rules you define.</li>
</ol>
<p>Splitting the work this way matters. A single "write me a tweet about this release" prompt asks the model to do four jobs at once, and it will quietly invent details to fill gaps. Separate stages let you inspect the intermediate output and catch hallucinations before they reach a draft.</p>
<h2>Stage 1: Extract facts, forbid invention</h2>
<p>Feed the model your raw input and ask only for structured facts. The key rule: missing information must be marked, never guessed.</p>
<pre><code class="language-text">You are a meticulous release-notes editor.
Read the source below and output only:
1) Facts: one bullet per concrete change (what changed, for whom)
2) Numbers: any figures exactly as written, with the quoted source line
3) Unknowns: anything a reader would ask that the source does not answer
Rules: if something is not in the source, write "TBD". Never invent.
[Source]
"""
(paste git log, changelog, or notes here)
"""
</code></pre>
<p>The "quote the source line" requirement is cheap insurance. When you later see a number in a draft, you can trace it back. If you're scripting this, save the output as JSON (<code>{"facts": [], "numbers": [], "unknowns": []}</code>) so downstream stages consume only verified data.</p>
<h2>Stage 2: Choose an angle</h2>
<p>Facts are not a post. Before drafting, force a decision about audience and value:</p>
<pre><code class="language-text">Here are verified facts about an update: (paste Stage 1 output)
Propose 3 angles. For each give:
- Target reader (be specific: "solo devs maintaining a CLI tool", not "developers")
- The one problem this solves for them
- A hook sentence under 100 characters
- Which facts from the list support it (by bullet number)
Do not use facts outside the list.
</code></pre>
<p>You pick one angle. This is the most valuable human checkpoint in the pipeline, because it takes five seconds and steers everything downstream.</p>
<h2>Stage 3: Draft per platform</h2>
<p>Different platforms reward different shapes. Rather than asking for "a post," specify constraints explicitly:</p>
<pre><code class="language-text">Angle: (paste chosen angle)
Facts: (paste supporting facts only)
Write:
A) A short post under 280 characters. One concrete detail, no hashtag spam (max 1).
B) A 4-6 line LinkedIn-style post: problem, change, how to try it.
C) A 3-post thread: hook, details, call to read the docs.
Tone: plain, specific, no superlatives ("revolutionary", "game-changing").
Mark any claim you are unsure about with [verify].
</code></pre>
<p>The <code>[verify]</code> marker is useful in automation: a simple <code>grep '\[verify\]'</code> in your script can route a draft to manual review instead of the ready queue.</p>
<h2>Stage 4: Self-review against a rubric</h2>
<p>LLMs are better at critiquing against explicit rules than at following vague style advice during generation. So add a final pass:</p>
<pre><code class="language-text">Review the drafts below against this checklist and return a table
| Draft | Rule | Pass/Fail | Fix |
Rules:
1. Every number appears in the provided facts.
2. No promises of results or outcomes.
3. No more than one link per post.
4. Reads like a person explaining, not an ad.
5. First line makes sense without context.
Then output corrected drafts only for the ones that failed.
[Facts] ... [Drafts] ...
</code></pre>
<h2>Wiring it together</h2>
<p>A minimal script needs nothing fancy:</p>
<pre><code class="language-python">facts = llm(EXTRACT_PROMPT.format(source=read("CHANGELOG.md")))
angles = llm(ANGLE_PROMPT.format(facts=facts))
chosen = input_choice(angles)          # human picks
drafts = llm(DRAFT_PROMPT.format(angle=chosen, facts=facts))
review = llm(REVIEW_PROMPT.format(facts=facts, drafts=drafts))
save_to_outbox(review)                 # human publishes
</code></pre>
<p>Keep the publish step manual, or at least gated. Automated posting with no review is how accounts end up repeating themselves or stating things that aren't true. Write drafts to a dated folder (<code>outbox/YYYY-MM-DD/</code>) so you have an audit trail and can diff what the model produced against what actually went out.</p>
<h2>Tips that make a real difference</h2>
<ul>
<li><strong>Pin the model's role per stage.</strong> "Meticulous editor" for extraction, "skeptical reviewer" for review. Role changes shift behaviour noticeably.</li>
<li><strong>Pass only what each stage needs.</strong> Don't feed the full source into the draft stage; feed the verified facts. Less context means fewer invented details.</li>
<li><strong>Keep a banned-words list</strong> in the review rubric and update it whenever you catch a cliché.</li>
<li><strong>Log failures.</strong> When a draft fails review, save the reason. After a few weeks you'll see which rules your prompts violate most and can fix them upstream.</li>
</ul>
<h2>If you'd rather start from tested templates</h2>
<p>If you don't want to write every prompt from scratch, A1SNS publishes an AI Practical Prompt Pack: 30 prompts for work, writing, study and marketing, including 5 for marketing and social (product copy, personas, review analysis, short-video scripts) and 8 for work automation such as meeting notes and report summaries. Each prompt comes with when to use it, a sample input and tips, and it's written for ChatGPT, Claude, Gemini and similar tools. It's a one-time $3.90 purchase, and the page shows three free sample prompts you can try before deciding: <a href="https://a1sns.com/en/premium">https://a1sns.com/en/premium</a></p>
<p>Whether you use templates or your own, the principle is the same: separate the stages, forbid invention, and keep a human on the publish button.</p>
<p><em>Results vary by person.</em></p>
]]></content:encoded></item></channel></rss>