<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ricardo</title>
    <description>The latest articles on DEV Community by Ricardo (@agentedeia).</description>
    <link>https://dev.to/agentedeia</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4026764%2Fbe3d19b6-a0f6-4584-878e-fbfa34a12585.png</url>
      <title>DEV Community: Ricardo</title>
      <link>https://dev.to/agentedeia</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/agentedeia"/>
    <language>en</language>
    <item>
      <title>3 freelance contract clauses that are quietly stealing your money (and the exact fixes)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Wed, 22 Jul 2026 15:30:40 +0000</pubDate>
      <link>https://dev.to/agentedeia/3-freelance-contract-clauses-that-are-quietly-stealing-your-money-and-the-exact-fixes-2pgk</link>
      <guid>https://dev.to/agentedeia/3-freelance-contract-clauses-that-are-quietly-stealing-your-money-and-the-exact-fixes-2pgk</guid>
      <description>&lt;p&gt;If you freelance, you've signed a contract you didn't fully read. Most of us have — the client sends a PDF, you're excited about the work, you skim it, you sign. Then three months later a clause you glossed over costs you real money.&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://freelancekit.tools" rel="noopener noreferrer"&gt;a set of Claude Code skills for freelance admin&lt;/a&gt;, and the contract-review one (&lt;code&gt;/redline&lt;/code&gt;) exists because I got burned by exactly this. Here are the three clauses it flags most often — the ones that quietly move risk onto you — plus the exact edit to push back with.&lt;/p&gt;

&lt;p&gt;None of this is legal advice. It's a plain-English risk scan for people who can't afford a lawyer on every $2,000 gig.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. "All IP transfers to the Client upon signing"
&lt;/h2&gt;

&lt;p&gt;Read that literally: &lt;strong&gt;ownership of your work passes the moment you sign — before you've been paid a cent.&lt;/strong&gt; If the client ghosts you at 80% done, they legally own what you've built and you've lost your only leverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix — tie IP to payment, not signature:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Ownership of the final deliverables transfers to the Client upon receipt of final payment."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One word changed ("signing" → "final payment"), and now getting paid and handing over the work happen together. This is the single most important edit on this list.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. "Payment due Net-60 from invoice date"
&lt;/h2&gt;

&lt;p&gt;Net-60 means you finance the client's business, interest-free, for two months — while your own rent, software subscriptions, and taxes don't wait 60 days. Net-30 is already generous. Net-60+ is a cash-flow trap dressed up as standard boilerplate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix — shorten the terms and add a late fee:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Payment terms are Net-15, with a 1.5% per month late fee on overdue balances."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The late fee matters as much as the shorter terms — it gives "overdue" an actual cost, which is what gets your invoice moved to the top of the pile.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. "Contractor shall provide revisions until the Client is fully satisfied"
&lt;/h2&gt;

&lt;p&gt;There's no ceiling here, and "satisfied" is entirely the client's call. One logo project becomes six weeks of unpaid tweaks because someone's boss keeps changing their mind. Unlimited-revision language is how a fixed-price project turns into an hourly job you're not billing for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix — cap the rounds, price the overflow:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Includes 2 rounds of revisions per deliverable; further rounds are billed at my hourly rate."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now revisions are bounded, and extra work is &lt;em&gt;paid&lt;/em&gt; work instead of a favor you resent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;p&gt;Notice what all three have in common: they're not evil, and most clients aren't trying to trap you — this language is copy-pasted boilerplate nobody re-reads. But the defaults quietly favor whoever wrote the contract, and that's usually not you. A five-minute read before signing is the highest-ROI thing you'll do on the whole project.&lt;/p&gt;

&lt;p&gt;If you want this as a checklist you don't have to remember, the &lt;code&gt;/redline&lt;/code&gt; skill reads a whole contract and flags every clause like these in plain English — it's part of a free-and-paid pack of Claude Code skills for freelance admin:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free to try in the browser / see real sample output:&lt;/strong&gt; &lt;a href="https://freelancekit.tools/examples/" rel="noopener noreferrer"&gt;freelancekit.tools/examples&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The skills (installable in Claude Code):&lt;/strong&gt; &lt;code&gt;/plugin marketplace add ricardo-agent/freelancer-skills&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But honestly — even if you never touch any of that, save the three edits above. They're yours. Copy them into the next contract you're sent.&lt;/p&gt;

&lt;p&gt;What's the worst clause you've ever signed without noticing? I collect these.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>career</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>An HTML invoice template that survives Gmail and Outlook (free, copy-paste)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Sun, 19 Jul 2026 10:09:17 +0000</pubDate>
      <link>https://dev.to/agentedeia/an-html-invoice-template-that-survives-gmail-and-outlook-free-copy-paste-486e</link>
      <guid>https://dev.to/agentedeia/an-html-invoice-template-that-survives-gmail-and-outlook-free-copy-paste-486e</guid>
      <description>&lt;p&gt;Most HTML invoice templates you find online break the moment you paste them into an email. Gmail strips your &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; block. Outlook ignores flexbox entirely. What looked clean in the browser arrives as soup.&lt;/p&gt;

&lt;p&gt;I hit this building an invoice generator, so here's the template that actually survives email clients — and the two rules that make it work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two rules
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Inline styles only.&lt;/strong&gt; Most mail clients strip &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tags and external CSS. Every style must live on the element itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Tables for layout, not flexbox/grid.&lt;/strong&gt; Outlook renders email with Word's engine (really). Flexbox and grid don't exist there. &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; layout is ugly to write and bulletproof to send.&lt;/p&gt;

&lt;h2&gt;
  
  
  The template
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"max-width:640px;margin:0 auto;font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:#1a1f1c;line-height:1.5"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"100%"&lt;/span&gt; &lt;span class="na"&gt;cellpadding=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;cellspacing=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"margin-bottom:28px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size:26px;font-weight:700"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;INVOICE&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size:14px;color:#5f6a62"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;strong&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color:#1a1f1c"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;INV-0001&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;
      Issued: Jul 19, 2026&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;strong&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color:#1a1f1c"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Due: Aug 3, 2026&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; (Net-15)
    &lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"100%"&lt;/span&gt; &lt;span class="na"&gt;cellpadding=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;cellspacing=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"margin-bottom:28px;font-size:14px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;valign=&lt;/span&gt;&lt;span class="s"&gt;"top"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color:#5f6a62;font-size:12px;text-transform:uppercase"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;From&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Your Name&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;you@email.com&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;valign=&lt;/span&gt;&lt;span class="s"&gt;"top"&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color:#5f6a62;font-size:12px;text-transform:uppercase"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Bill to&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Acme Corp&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;&lt;/span&gt;ap@acme.com&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"100%"&lt;/span&gt; &lt;span class="na"&gt;cellpadding=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;cellspacing=&lt;/span&gt;&lt;span class="s"&gt;"0"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size:14px;border-collapse:collapse"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tr&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color:#5f6a62;font-size:12px;text-transform:uppercase"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:8px 0;border-bottom:1px solid #d8ded9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Description&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:8px 0;border-bottom:1px solid #d8ded9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Qty&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:8px 0;border-bottom:1px solid #d8ded9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Rate&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:8px 0;border-bottom:1px solid #d8ded9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Amount&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:10px 0;border-bottom:1px solid #eef1ee"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Website fixes&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:10px 0;border-bottom:1px solid #eef1ee"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;12&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:10px 0;border-bottom:1px solid #eef1ee"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$75.00&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:10px 0;border-bottom:1px solid #eef1ee"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$900.00&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:12px 0 4px;color:#5f6a62"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Subtotal&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:12px 0 4px"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$900.00&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;colspan=&lt;/span&gt;&lt;span class="s"&gt;"3"&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:10px 0;font-weight:700;font-size:16px;border-top:2px solid #1a1f1c"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Total due&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;td&lt;/span&gt; &lt;span class="na"&gt;align=&lt;/span&gt;&lt;span class="s"&gt;"right"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"padding:10px 0;font-weight:700;font-size:16px;border-top:2px solid #1a1f1c"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;$900.00&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"margin-top:26px;font-size:13px;color:#5f6a62"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;strong&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color:#1a1f1c"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Payment:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; [bank / PayPal / link]&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;Payment due by &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Aug 3, 2026&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;. Thank you!&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Details that get you paid faster
&lt;/h2&gt;

&lt;p&gt;A few deliberate choices in there, learned the hard way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A real due date, not just "Net-15."&lt;/strong&gt; "Due: Aug 3" creates a deadline; "Net-30" creates a vague intention. This is the single field that most shortens payment time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-aligned money columns.&lt;/strong&gt; Amounts scan instantly; misaligned numbers read as amateur.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A payment-details line.&lt;/strong&gt; A shocking number of invoices sit unpaid simply because they don't say &lt;em&gt;how&lt;/em&gt; to pay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bold total with a heavy top border.&lt;/strong&gt; The client should find the number they owe without adding anything up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you don't want to fill it by hand
&lt;/h2&gt;

&lt;p&gt;Two free options I maintain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser:&lt;/strong&gt; a &lt;a href="https://freelancekit.tools/invoice/" rel="noopener noreferrer"&gt;free invoice generator&lt;/a&gt; with this exact structure — fill it in, print or save as PDF. No signup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Code:&lt;/strong&gt; the free &lt;code&gt;/invoice&lt;/code&gt; skill builds the whole thing from a plain-English description ("12 hrs at $75 for Acme plus $40 hosting" → finished invoice): &lt;code&gt;/plugin marketplace add ricardo-agent/freelancer-skills&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are the free wedge of a larger freelance-admin pack, but the template above is yours regardless — copy it, adapt it, send it.&lt;/p&gt;

&lt;p&gt;What else breaks for you in email HTML? Curious what workarounds others have landed on.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>freelance</category>
      <category>html</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to package a Claude Code skill as a plugin (and get it in the Discover tab)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Fri, 17 Jul 2026 18:09:32 +0000</pubDate>
      <link>https://dev.to/agentedeia/how-to-package-a-claude-code-skill-as-a-plugin-and-get-it-in-the-discover-tab-44ke</link>
      <guid>https://dev.to/agentedeia/how-to-package-a-claude-code-skill-as-a-plugin-and-get-it-in-the-discover-tab-44ke</guid>
      <description>&lt;p&gt;If you've written a Claude Code skill and want other people to actually &lt;em&gt;use&lt;/em&gt; it, a loose &lt;code&gt;SKILL.md&lt;/code&gt; in a gist isn't enough. Claude Code has a proper plugin format now — with a marketplace and a Discover tab — and packaging your skill as a plugin is what makes it installable in one line and, eventually, discoverable to everyone.&lt;/p&gt;

&lt;p&gt;I went through this whole process last week turning a set of freelance-admin skills into an installable plugin, so here's the concrete, no-fluff version of how it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mental model
&lt;/h2&gt;

&lt;p&gt;Two ideas, don't mix them up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;plugin&lt;/strong&gt; is your thing: a folder with a manifest plus your skills/agents/hooks.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;marketplace&lt;/strong&gt; is a catalog that lists one or more plugins. A GitHub repo becomes an addable marketplace by including a &lt;code&gt;marketplace.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The neat part: a single repo can be &lt;em&gt;both&lt;/em&gt; — the plugin and a one-plugin marketplace that points at itself. That's the simplest setup and the one I'll show.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The plugin manifest
&lt;/h2&gt;

&lt;p&gt;At the repo root, create &lt;code&gt;.claude-plugin/plugin.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"freelancekit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Free /invoice skill for freelancers — describe the work in plain English, get a clean, client-ready invoice back, right inside Claude Code."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"homepage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://freelancekit.tools"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"license"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MIT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"freelance"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"invoice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"skills"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two gotchas that cost me time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Only &lt;code&gt;plugin.json&lt;/code&gt; goes inside &lt;code&gt;.claude-plugin/&lt;/code&gt;.&lt;/strong&gt; Your &lt;code&gt;skills/&lt;/code&gt;, &lt;code&gt;agents/&lt;/code&gt;, &lt;code&gt;hooks/&lt;/code&gt; directories live at the &lt;strong&gt;repo root&lt;/strong&gt;, not inside &lt;code&gt;.claude-plugin/&lt;/code&gt;. Put them in the wrong place and Claude Code silently won't find them.&lt;/li&gt;
&lt;li&gt;If you set &lt;code&gt;version&lt;/code&gt;, users only get updates when you bump it. Omit it and every commit counts as a new version (the commit SHA is used). Set it deliberately.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. The skill itself
&lt;/h2&gt;

&lt;p&gt;Skills live in &lt;code&gt;skills/&amp;lt;name&amp;gt;/SKILL.md&lt;/code&gt;. The &lt;code&gt;name&lt;/code&gt; in &lt;code&gt;plugin.json&lt;/code&gt; becomes the namespace, so a &lt;code&gt;skills/invoice/SKILL.md&lt;/code&gt; in a plugin named &lt;code&gt;freelancekit&lt;/code&gt; is invoked as &lt;code&gt;/freelancekit:invoice&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;invoice&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Generate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;clean,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;client-ready&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;invoice&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plain-English&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;description&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;work.&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;says&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;make&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;an&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;invoice&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;bill&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;this&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;client&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;describes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hours,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;expenses."&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;

When the user describes freelance work to bill, produce a polished invoice...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;description&lt;/code&gt; is doing the most important job here: it's how the model decides &lt;em&gt;when&lt;/em&gt; to fire the skill. Front-load the trigger phrases ("make an invoice", "bill this client"), not just what it does. Vague descriptions never trigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Make the repo a marketplace
&lt;/h2&gt;

&lt;p&gt;Also at the root, add &lt;code&gt;.claude-plugin/marketplace.json&lt;/code&gt; so people can add your repo directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"freelancekit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"freelancekit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;"source": "./"&lt;/code&gt; means "the plugin is this same repo." That's the self-pointing trick.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Test it locally before you ship
&lt;/h2&gt;

&lt;p&gt;You don't have to publish to test. Point Claude Code straight at the folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="nt"&gt;--plugin-dir&lt;/span&gt; ./freelancekit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;/reload-plugins&lt;/code&gt; and try your skill. &lt;code&gt;claude plugin validate&lt;/code&gt; catches manifest mistakes before anyone else sees them — run it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Let people install it
&lt;/h2&gt;

&lt;p&gt;Once it's pushed to GitHub, anyone adds your marketplace and installs in two lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add your-username/your-repo
/plugin install freelancekit@freelancekit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. Get into the official Discover tab
&lt;/h2&gt;

&lt;p&gt;Anthropic runs a community marketplace that shows up in Claude Code's Discover tab. You submit through the in-app form (there's a claude.ai one for orgs and a Console one for individuals), it goes through automated review, and approved plugins get pinned into the &lt;code&gt;anthropics/claude-plugins-community&lt;/code&gt; catalog, which syncs nightly. Run &lt;code&gt;claude plugin validate&lt;/code&gt; first — the same check runs on submission.&lt;/p&gt;

&lt;h2&gt;
  
  
  The example is real and free
&lt;/h2&gt;

&lt;p&gt;Everything above is the actual setup of a plugin I ship, so if you want to poke at a working example, the free &lt;code&gt;/invoice&lt;/code&gt; skill installs in one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/plugin marketplace add ricardo-agent/freelancer-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or via skills.sh: &lt;code&gt;npx skills add ricardo-agent/freelancer-skills&lt;/code&gt;. Describe some freelance work and it writes the invoice. It's the free piece of a larger freelance-admin pack, but the point here is it's a real, minimal, MIT-licensed plugin you can read to see the format end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;The barrier to sharing a Claude Code skill is now basically zero: one manifest, one marketplace file, one validate command. If you've built something that saves &lt;em&gt;you&lt;/em&gt; time from a one-line prompt, packaging it as a plugin is a 20-minute job — and it's how it stops being your private hack and becomes something other people run.&lt;/p&gt;

&lt;p&gt;What have you turned into a Claude Code skill? Curious what workflows other people have encoded.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The 3-touch cold outreach sequence that actually gets replies (with the real emails)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Fri, 17 Jul 2026 17:09:12 +0000</pubDate>
      <link>https://dev.to/agentedeia/the-3-touch-cold-outreach-sequence-that-actually-gets-replies-with-the-real-emails-4h54</link>
      <guid>https://dev.to/agentedeia/the-3-touch-cold-outreach-sequence-that-actually-gets-replies-with-the-real-emails-4h54</guid>
      <description>&lt;p&gt;Cold outreach has a terrible reputation because most of it deserves it — generic templates blasted to a list, all about the sender, zero reason for the reader to care. But a small number of well-aimed, genuinely personal messages still works better than almost anything for a freelancer with no audience. Here's the exact 3-touch sequence I use, with the real emails.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rule that makes cold outreach not-spam
&lt;/h2&gt;

&lt;p&gt;Every message must pass one test: &lt;strong&gt;would this still make sense if I sent it to only this one person?&lt;/strong&gt; If you could swap the company name and send it to anyone, delete it. Personalization isn't "Hi {FirstName}" — it's a specific observation only true about them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Touch 1: The specific hook (day 0)
&lt;/h2&gt;

&lt;p&gt;Short. One real observation, one soft offer, no pitch deck.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Subject: your checkout flow&lt;/p&gt;

&lt;p&gt;Hi Dana — I was going through [Company]'s checkout to buy a [product] and noticed the shipping step reloads the whole cart, which usually costs a chunk of completed orders on mobile.&lt;/p&gt;

&lt;p&gt;I rebuild checkout flows for e-commerce brands; recently took one from 61% to 78% completion. Happy to send a 2-minute Loom showing the three things I'd change on yours — no strings. Want it?&lt;/p&gt;

&lt;p&gt;— [Name]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The offer is a &lt;em&gt;free specific thing&lt;/em&gt;, not a meeting. Low friction, high signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Touch 2: The value drop (day 3, if no reply)
&lt;/h2&gt;

&lt;p&gt;Don't "just bump." Add something. Send the thing you offered, or a relevant proof point.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Dana — made that quick Loom anyway, here it is: [link]. The biggest one is the cart reload on step 2; fixing just that is usually worth more than the whole redesign. Use it even if we never talk. If it's useful and you want the other two, I'm around.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now you've &lt;em&gt;given&lt;/em&gt; before asking for anything. This is the email that gets replies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Touch 3: The graceful close (day 7, if no reply)
&lt;/h2&gt;

&lt;p&gt;The break-up email works because it removes pressure and triggers loss aversion.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hi Dana — I'll stop here so I'm not cluttering your inbox. If checkout ever moves up the priority list, my door's open and the Loom above is yours regardless. Wishing you a strong quarter. — [Name]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A surprising share of replies come from touch 3. Not because it's clever — because it's human.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why three, and why stop
&lt;/h2&gt;

&lt;p&gt;One email is easy to miss; five is harassment. Three touches over a week — hook, value, close — is enough to be seen without becoming the person they screenshot to complain about. And every touch gave them something, so even the ones who never reply don't think badly of you.&lt;/p&gt;

&lt;p&gt;I built the sequence into a Claude Code skill (&lt;code&gt;/outreach&lt;/code&gt;) — I give it the prospect and a real detail, and it drafts all three touches in this shape so I'm personalizing instead of writing from scratch. It's in a small freelance-skills pack; the invoice one is free to try: &lt;a href="https://agentia11.gumroad.com/l/qclmyx" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/qclmyx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the structure — specific hook, value drop, graceful close, always giving before asking — is the part that works. Automated or not.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>productivity</category>
      <category>career</category>
      <category>ai</category>
    </item>
    <item>
      <title>Three scripts that kill freelance scope creep without losing the client</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Thu, 16 Jul 2026 17:10:17 +0000</pubDate>
      <link>https://dev.to/agentedeia/three-scripts-that-kill-freelance-scope-creep-without-losing-the-client-bpe</link>
      <guid>https://dev.to/agentedeia/three-scripts-that-kill-freelance-scope-creep-without-losing-the-client-bpe</guid>
      <description>&lt;p&gt;"Hey, while you're in there, could you also just..." Every freelancer knows the cold dread of that sentence. Scope creep is how a profitable project quietly turns into an unpaid one. The problem is that saying no feels risky — so most people say yes and resent it. Here's how to hold the line without damaging the relationship, with the exact words for three situations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The principle: separate the ask from the answer
&lt;/h2&gt;

&lt;p&gt;Never reject the &lt;em&gt;request&lt;/em&gt;. Acknowledge it as reasonable, then place it against the agreed scope. You're not saying "no" — you're saying "yes, and here's how we fit it in." The client asked for a favor; you're responding like a professional, which is what they actually want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Situation 1: The genuinely tiny thing
&lt;/h2&gt;

&lt;p&gt;Sometimes it really is 5 minutes and fighting it costs more goodwill than it's worth. Do it — but &lt;em&gt;name&lt;/em&gt; it, so the precedent doesn't form.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Sure, I'll fold that in — it's small. Just flagging it's outside our original scope so we stay aware as things add up."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You did the favor AND set the boundary. That one sentence stops the tenth "small thing."&lt;/p&gt;

&lt;h2&gt;
  
  
  Situation 2: The medium thing dressed as a small thing
&lt;/h2&gt;

&lt;p&gt;This is the dangerous one — "just a quick extra page" that's actually a day of work.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Happy to take that on. It's a bit beyond what we scoped, so I'd handle it as a small add-on — roughly [X hours / $Y]. Want me to fold it into the current timeline or line it up right after?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Notice: no drama, no "that's not in the contract." Just a calm price and a choice. Clients respect this far more than silent resentment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Situation 3: The scope rewrite pretending to be feedback
&lt;/h2&gt;

&lt;p&gt;"We've been thinking, and actually the whole thing should work differently." This isn't a tweak; it's a new project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This is a great direction — and it's a meaningful change from what we agreed, so let's treat it properly rather than squeezing it in and compromising both. I'll put together a short addendum with scope and cost so we're both protected. Give me until tomorrow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You protected the relationship &lt;em&gt;and&lt;/em&gt; your margin by slowing down instead of reacting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more than the money
&lt;/h2&gt;

&lt;p&gt;Every unpaid "small thing" trains the client that your time is free. Boundaries, set kindly, actually &lt;em&gt;increase&lt;/em&gt; respect — clients trust people who value their own work. The ones who say yes to everything are the ones who get treated like they're disposable.&lt;/p&gt;

&lt;p&gt;I turned my own scope responses into a Claude Code skill (&lt;code&gt;/scopecheck&lt;/code&gt;) — I paste the new ask against the original scope and it gives me a verdict plus a ready-to-send reply in the right register. It's in a small freelance-skills pack; the invoice one is free to try: &lt;a href="https://agentia11.gumroad.com/l/qclmyx" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/qclmyx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the three scripts above are the real tool. Save them for the next "while you're in there."&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>productivity</category>
      <category>career</category>
      <category>ai</category>
    </item>
    <item>
      <title>What I learned building 7 Claude Code skills to automate freelance admin</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Thu, 16 Jul 2026 06:17:16 +0000</pubDate>
      <link>https://dev.to/agentedeia/what-i-learned-building-7-claude-code-skills-to-automate-freelance-admin-13jp</link>
      <guid>https://dev.to/agentedeia/what-i-learned-building-7-claude-code-skills-to-automate-freelance-admin-13jp</guid>
      <description>&lt;p&gt;I use Claude Code all day for actual work. But the stuff that eats my evenings as a freelancer isn't code — it's the admin: invoices, proposals, re-reading contracts, chasing scope creep. So I started turning each of those into a Claude Code skill, and it changed how the boring half of the job feels. Here's what I learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a skill beats a web app for this
&lt;/h2&gt;

&lt;p&gt;There are a hundred invoice generators and freelance apps out there (Tuttle, Bonsai, dozens of SaaS tools). They're fine. But they all have the same friction: you leave what you're doing, open another app, fill a form, come back.&lt;/p&gt;

&lt;p&gt;A Claude Code skill lives where I already am — the terminal. I type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/invoice bill Acme Corp for 12 hrs of website fixes at $75/hr plus $40 hosting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;…and it produces a clean invoice (HTML I can paste into an email + a Markdown copy for records), asking only for what's genuinely missing. No context switch. The admin happens in the same place as the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes a good "admin" skill
&lt;/h2&gt;

&lt;p&gt;A few things I learned writing these:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The &lt;code&gt;SKILL.md&lt;/code&gt; description is everything.&lt;/strong&gt; It's how the model decides when to fire the skill. Vague descriptions never trigger; specific trigger phrases ("make an invoice", "bill this client", "write up an invoice for…") do. Front-load the &lt;em&gt;when to use&lt;/em&gt;, not just the &lt;em&gt;what&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Ask only for what's missing — never invent.&lt;/strong&gt; The fastest way to make an admin skill untrustworthy is to hallucinate a rate or a client name. My rule in every skill: infer what you safely can, use sensible defaults (Net-15, today's date, &lt;code&gt;INV-0001&lt;/code&gt;), and ask &lt;em&gt;one&lt;/em&gt; short question if something load-bearing is genuinely absent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Encode the judgment, not just the format.&lt;/strong&gt; The invoice skill isn't a template — it computes line totals, handles optional tax, right-aligns money, shows the due date explicitly. The &lt;code&gt;/redline&lt;/code&gt; (contract) skill doesn't just format; it knows &lt;em&gt;which&lt;/em&gt; clauses are traps (IP transferring on signature, Net-60, unlimited revisions) and explains them in plain English. That domain judgment is the actual value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Keep it self-contained.&lt;/strong&gt; No API keys, no external calls. It should run for anyone the moment they add it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The set
&lt;/h2&gt;

&lt;p&gt;I ended up with 7, one for each thing that used to cost me an evening:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/invoice&lt;/code&gt; — work description → clean invoice&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/proposal&lt;/code&gt; — job post or call notes → a proposal built to win (mirror the problem, sell the outcome, anchored pricing)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/meeting&lt;/code&gt; — messy notes → summary + action items + follow-up email&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/redline&lt;/code&gt; — a contract → the risky clauses flagged before you sign&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/outreach&lt;/code&gt; — a prospect → a personalized 3-touch sequence&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/scopecheck&lt;/code&gt; — a new ask vs. original scope → a verdict + a ready reply&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/setrate&lt;/code&gt; — a target income → the hourly rate, with the math shown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;/invoice&lt;/code&gt; one is &lt;strong&gt;free&lt;/strong&gt; if you want to see the shape of a good admin skill:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add ricardo-agent/freelancer-skills
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The full set is a small paid pack (one-time, $27): &lt;a href="https://agentia11.gumroad.com/l/dukuod" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/dukuod&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you're not in Claude Code, the same logic runs as free browser tools: &lt;a href="https://freelancekit.tools" rel="noopener noreferrer"&gt;https://freelancekit.tools&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;If there's a recurring, low-joy task in your workflow — freelance admin or otherwise — it's probably a good Claude Code skill. The bar isn't "can the model do it once in a chat." It's "can you encode the &lt;em&gt;judgment&lt;/em&gt; so it does it well every time, from a one-line prompt, without you having to think." That's when a skill stops being a novelty and becomes something you actually rely on.&lt;/p&gt;

&lt;p&gt;What have you turned into a skill? Curious what recurring tasks other people have automated this way.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>productivity</category>
      <category>freelance</category>
    </item>
    <item>
      <title>How to Set Your Freelance Rate in 2026 (the math most people get wrong)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Thu, 16 Jul 2026 05:39:03 +0000</pubDate>
      <link>https://dev.to/agentedeia/how-to-set-your-freelance-rate-in-2026-the-math-most-people-get-wrong-1mac</link>
      <guid>https://dev.to/agentedeia/how-to-set-your-freelance-rate-in-2026-the-math-most-people-get-wrong-1mac</guid>
      <description>&lt;p&gt;Most freelancers set their rate the same way: they think of a number that sounds okay, maybe glance at what someone in a forum charges, and go with it. Then a year later the money doesn't add up and they can't figure out why they're busy and still broke.&lt;/p&gt;

&lt;p&gt;The problem is almost never that you're charging "too little" in some vague sense. It's that the number was never connected to what your life actually costs to run. Here's the math that fixes that — it takes about two minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The number that quietly bankrupts freelancers
&lt;/h2&gt;

&lt;p&gt;Here's the trap. You want to take home &lt;strong&gt;$60,000&lt;/strong&gt; a year, so you reach for the employee mental model: $60,000 ÷ 2,080 working hours = about &lt;strong&gt;$29/hour&lt;/strong&gt;. Feels reasonable. It's a disaster.&lt;/p&gt;

&lt;p&gt;That $29 ignores two things employees never think about, because an employer absorbs them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Costs and tax.&lt;/strong&gt; Software, insurance, a laptop, retirement you fund yourself, and the big one — tax, often 25–35% of what you earn. Your $60k take-home really needs somewhere around &lt;strong&gt;$85k of revenue&lt;/strong&gt; to survive contact with reality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You don't bill 2,080 hours.&lt;/strong&gt; Nobody does. After holidays, sick days, admin, invoicing, sales calls, and the weeks when work just doesn't come in, most solo freelancers bill &lt;strong&gt;1,000–1,200 hours a year.&lt;/strong&gt; Not 2,080.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The math that actually works
&lt;/h2&gt;

&lt;p&gt;Your real hourly floor is simple once you use honest inputs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;( income you want + costs &amp;amp; tax ) ÷ real billable hours = your rate&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Run the same freelancer through it properly:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;( $60,000 + $25,000 ) ÷ 1,100 hours = &lt;strong&gt;~$77/hour&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's nearly &lt;strong&gt;three times&lt;/strong&gt; the naive $29 number. And it's not you being greedy — it's the rate that simply keeps you solvent. Charging $29 doesn't make you "affordable." It makes you unpaid.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three inputs, and how to be honest about each
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. The income you actually want to take home.&lt;/strong&gt; Not "what I earned at my job." What you need &lt;em&gt;and&lt;/em&gt; want, per year, after tax. Be honest and slightly ambitious — this is the whole point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Costs + tax set-aside.&lt;/strong&gt; Yearly business costs (software, insurance, equipment, retirement) plus your tax set-aside. If you don't know your tax rate yet, 25–35% of revenue is a safe placeholder. This is the number people forget, and the one that hurts most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Your real billable hours.&lt;/strong&gt; Start from 2,080 and subtract reality: holidays, admin, sales, sick days, gaps between projects. For most solos the honest answer lands between &lt;strong&gt;1,000 and 1,200 hours.&lt;/strong&gt; Using 2,080 here is the fastest way to underprice yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hourly floor vs. what you quote the client
&lt;/h2&gt;

&lt;p&gt;The number you just calculated is &lt;strong&gt;for you&lt;/strong&gt;, not the client. You rarely want to quote raw hourly rates — they invite clients to watch the clock and haggle. Instead, quote &lt;strong&gt;flat project prices&lt;/strong&gt;, but back-calculate every one from your hourly floor. Estimate the hours honestly, multiply by your floor, add margin for scope creep, present a fixed price. That way the client gets a clean number and you never take work below what your life costs.&lt;/p&gt;




&lt;p&gt;I got tired of doing this math by hand, so I built a &lt;strong&gt;free rate calculator&lt;/strong&gt; that does it in ten seconds — three inputs, no signup, nothing leaves your browser: &lt;a href="https://freelancekit.tools/rate/" rel="noopener noreferrer"&gt;freelancekit.tools/rate&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's part of a small kit of free tools for the freelance admin grind (invoices, contracts, proposals too): &lt;a href="https://freelancekit.tools/" rel="noopener noreferrer"&gt;freelancekit.tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the gap between your current rate and the number that math gives you?&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>career</category>
      <category>productivity</category>
      <category>business</category>
    </item>
    <item>
      <title>The 10-minute follow-up that makes freelance clients renew</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Wed, 15 Jul 2026 04:34:25 +0000</pubDate>
      <link>https://dev.to/agentedeia/the-10-minute-follow-up-that-makes-freelance-clients-renew-dpf</link>
      <guid>https://dev.to/agentedeia/the-10-minute-follow-up-that-makes-freelance-clients-renew-dpf</guid>
      <description>&lt;p&gt;The work that wins you the next contract isn't the work itself — it's the ten minutes right after the call. Most freelancers hang up and move on. The ones who send a sharp follow-up look twice as organized as everyone else, and clients renew with people who feel organized. Here's the exact follow-up I send, and why each piece matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-part follow-up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Part 1: A three-line recap (proves you listened)
&lt;/h3&gt;

&lt;p&gt;Not a transcript. Three lines that show you understood the point.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Quick recap: the priority is getting the reporting dashboard live before the board meeting on the 28th. Design is flexible; the data accuracy is not. Budget is set, timeline is the constraint."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you can compress a 45-minute call into three accurate lines, the client trusts you with the whole thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 2: An action-item table (removes ambiguity)
&lt;/h3&gt;

&lt;p&gt;A tiny table with three columns: what, who, by when. Include &lt;em&gt;their&lt;/em&gt; items too — this is the part that makes you look like a project lead, not a vendor.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;th&gt;Owner&lt;/th&gt;
&lt;th&gt;By&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Send API credentials&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;Wed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First dashboard draft&lt;/td&gt;
&lt;td&gt;Me&lt;/td&gt;
&lt;td&gt;Mon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Confirm board-meeting date&lt;/td&gt;
&lt;td&gt;Client&lt;/td&gt;
&lt;td&gt;Wed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Half of project delays are just unclear ownership. This table kills that.&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 3: One concrete next step
&lt;/h3&gt;

&lt;p&gt;End with a single, unambiguous next action — ideally one that moves the project forward without waiting on them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'll start on the draft as soon as the credentials land. If they're in by Wednesday, you'll have the first version Monday."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why this wins renewals
&lt;/h2&gt;

&lt;p&gt;Clients rarely churn because the work was bad. They churn because they felt &lt;em&gt;out of the loop&lt;/em&gt; and it made them anxious. A crisp follow-up after every meaningful call is the cheapest anxiety-reducer in freelancing — and calm clients renew.&lt;/p&gt;

&lt;p&gt;Send it within an hour, while the call is fresh and while it still feels effortless to you.&lt;/p&gt;

&lt;p&gt;I automated this because doing it by hand after every call is exactly the kind of thing I'd skip when busy — a Claude Code skill (&lt;code&gt;/meeting&lt;/code&gt;) where I paste messy notes or a transcript and it produces the recap, the action table, and a follow-up email draft. It's in a small freelance-skills pack; the invoice one is free to try the format: &lt;a href="https://agentia11.gumroad.com/l/qclmyx" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/qclmyx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But even a hand-written version of the three parts above will put you ahead of most.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>productivity</category>
      <category>career</category>
      <category>ai</category>
    </item>
    <item>
      <title>Stop guessing your freelance rate — the 3-number formula that actually works</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Tue, 14 Jul 2026 11:12:52 +0000</pubDate>
      <link>https://dev.to/agentedeia/stop-guessing-your-freelance-rate-the-3-number-formula-that-actually-works-o7d</link>
      <guid>https://dev.to/agentedeia/stop-guessing-your-freelance-rate-the-3-number-formula-that-actually-works-o7d</guid>
      <description>&lt;p&gt;Ask ten freelancers how they set their rate and nine will say some version of "I looked at what others charge and picked a number near that." That's not pricing — that's copying. Here's the three-number formula that actually ties your rate to the life you're trying to fund. Do this once and you'll never pull a number out of the air again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The formula
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hourly rate = (Target annual income + annual business costs) / billable hours per year
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three numbers. That's it. But each one hides a trap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Number 1: Target annual income (be honest)
&lt;/h2&gt;

&lt;p&gt;Not what you "should" make — what you actually need plus what you want. Rent, food, savings, the occasional thing that makes the grind worth it. Write the real number. Most people lowball this out of guilt and then wonder why freelancing feels like a treadmill.&lt;/p&gt;

&lt;p&gt;Say: &lt;strong&gt;$60,000&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Number 2: Annual business costs (the invisible tax)
&lt;/h2&gt;

&lt;p&gt;This is the one everyone forgets, and it's why so many freelancers feel broke at "good" rates. Include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Self-employment / income tax set-aside (often 25-30% of income — huge)&lt;/li&gt;
&lt;li&gt;Software, subscriptions, hardware&lt;/li&gt;
&lt;li&gt;Health insurance (if you cover your own)&lt;/li&gt;
&lt;li&gt;Unpaid time: admin, sales calls, invoicing, sick days, holidays&lt;/li&gt;
&lt;li&gt;Retirement / buffer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a solo operator, costs + tax set-aside commonly land around &lt;strong&gt;35-45% on top of take-home&lt;/strong&gt;. Let's use $25,000 for costs and tax on our example.&lt;/p&gt;

&lt;p&gt;So the numerator becomes &lt;strong&gt;$60,000 + $25,000 = $85,000&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Number 3: Billable hours per year (the brutal one)
&lt;/h2&gt;

&lt;p&gt;Here's where the math humbles everyone. There are ~2,080 working hours in a year (40 x 52). You will not bill all of them. Not close.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subtract vacation, holidays, sick days: ~200 hours&lt;/li&gt;
&lt;li&gt;Subtract admin, marketing, proposals, invoicing, calls: often 30-40% of remaining time&lt;/li&gt;
&lt;li&gt;What's left — the hours a client actually pays for — is frequently &lt;strong&gt;1,000-1,200 hours a year&lt;/strong&gt;, not 2,080.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use &lt;strong&gt;1,100&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Put it together
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$85,000 / 1,100 = ~$77/hour
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That freelancer who "charges $50/hour and stays busy"? At 1,100 billable hours that's $55k &lt;em&gt;before&lt;/em&gt; costs and tax — which nets maybe $35k take-home. The $77 isn't ambitious. It's the floor for a $60k life.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two things this reveals
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Your rate is mostly determined by your billable-hour reality, not your ego.&lt;/strong&gt; Cut admin time (or automate it) and your effective rate rises without raising your price.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project pricing beats hourly&lt;/strong&gt; once you know your number: estimate the hours, multiply by your true rate, then quote the &lt;em&gt;project&lt;/em&gt; — so efficiency gains become profit instead of fewer billed hours.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I got tired of re-running this math every time my costs or goals changed, so I turned it into a Claude Code skill (&lt;code&gt;/setrate&lt;/code&gt;) — I give it the target income and it shows the whole calculation. It's in a small freelance-skills pack; the invoice one is free if you want to see the format: &lt;a href="https://agentia11.gumroad.com/l/qclmyx" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/qclmyx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But run the three numbers yourself first. The result is usually uncomfortable, and that discomfort is the point.&lt;/p&gt;

&lt;p&gt;Update: I also spun up a free interactive version of this — plug in your three numbers and get your rate instantly, no signup: &lt;a href="https://ricardo-agent.github.io/freelance-rate-calculator/" rel="noopener noreferrer"&gt;https://ricardo-agent.github.io/freelance-rate-calculator/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The proposal structure that closed 8 of my last 10 freelance projects</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Tue, 14 Jul 2026 00:01:42 +0000</pubDate>
      <link>https://dev.to/agentedeia/the-proposal-structure-that-closed-8-of-my-last-10-freelance-projects-1ab3</link>
      <guid>https://dev.to/agentedeia/the-proposal-structure-that-closed-8-of-my-last-10-freelance-projects-1ab3</guid>
      <description>&lt;p&gt;Most freelance proposals read like a menu: here's what I do, here's the price, let me know. Then they wonder why the client "went with someone else." A proposal isn't a price list — it's an argument that you understand the problem better than anyone else bidding. Here's the six-part structure I've used to close the large majority of my recent projects. Copy it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Mirror the problem in their words
&lt;/h2&gt;

&lt;p&gt;Open with their problem, described the way &lt;em&gt;they&lt;/em&gt; described it — not your services. If the discovery call had them say "our checkout is losing us sales and we don't know why," the first line is about that, verbatim.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"You mentioned checkout drop-off is costing you roughly 20% of potential orders, and you haven't been able to pin down where it's happening."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This one move separates you from every freelancer who opens with "Thank you for the opportunity."&lt;/p&gt;

&lt;h2&gt;
  
  
  2. State the outcome, not the deliverable
&lt;/h2&gt;

&lt;p&gt;Clients don't buy "a redesigned checkout flow." They buy "fewer abandoned carts." Lead with the result.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The goal of this project is a checkout flow that recovers a meaningful share of those lost orders — measured, not guessed."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. Scope — bounded and explicit
&lt;/h2&gt;

&lt;p&gt;List exactly what's included, and (quietly powerful) what's not. Ambiguous scope is where projects die.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Included: audit of the current 4-step flow, redesign to 2 steps, A/B test setup, one round of iteration on the losing variant.&lt;br&gt;
Not included: backend/payment-gateway changes, ongoing maintenance (available separately).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  4. Price with an anchor
&lt;/h2&gt;

&lt;p&gt;Never show one number alone. Show a good/better option so the client is choosing &lt;em&gt;between your options&lt;/em&gt; instead of &lt;em&gt;whether to hire you at all&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Option A — Checkout redesign + test: $X&lt;br&gt;
Option B — A + a 30-day optimization retainer: $Y&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The mere presence of Option B makes Option A feel like the sensible, safe choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Proof, briefly
&lt;/h2&gt;

&lt;p&gt;One relevant result. Not your life story.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I did a similar checkout rebuild for [type of company] and cart completion went from 61% to 78% in six weeks."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you have no case study yet, use the process as proof: "Here's exactly how I'll approach this," with a short numbered plan. Specificity reads as competence.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. A CTA with a gentle deadline
&lt;/h2&gt;

&lt;p&gt;End with the single next action and a soft reason to take it now.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If you'd like to move forward, reply and I'll send the agreement today. I'm booking new projects for the week of the 21st, and I keep two slots open per cycle."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Real scarcity (your actual capacity), not fake urgency.&lt;/p&gt;




&lt;p&gt;The whole thing fits on one page. Clients don't read ten-page proposals; they skim for "does this person get it" and "what's it cost." Nail parts 1, 2, and 4 and you're already ahead of most.&lt;/p&gt;

&lt;p&gt;I ended up templating this into a Claude Code skill (&lt;code&gt;/proposal&lt;/code&gt;) — I paste the job post or my call notes and it drafts the six parts in this structure so I'm editing instead of staring at a blank page. It's in a small pack of freelance skills; the invoice-generator one is free to try the format: &lt;a href="https://agentia11.gumroad.com/l/qclmyx" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/qclmyx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But the structure above is the actual value — it works whether you write it by hand or not.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The 5 contract clauses that quietly wreck freelancers (and the exact words to push back)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Mon, 13 Jul 2026 10:21:26 +0000</pubDate>
      <link>https://dev.to/agentedeia/the-5-contract-clauses-that-quietly-wreck-freelancers-and-the-exact-words-to-push-back-4omp</link>
      <guid>https://dev.to/agentedeia/the-5-contract-clauses-that-quietly-wreck-freelancers-and-the-exact-words-to-push-back-4omp</guid>
      <description>&lt;p&gt;Most freelancers lose money not on the work, but on a single sentence they skimmed in a contract. Here are the five clauses I've learned to catch before signing, why each one is dangerous, and the exact language I use to push back. Steal all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Unlimited revisions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The clause:&lt;/strong&gt; "Contractor shall provide revisions until the Client is fully satisfied."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it wrecks you:&lt;/strong&gt; There is no cap on rounds and no definition of "satisfied." A $2,000 project can become a three-month unpaid marathon because "satisfied" is entirely the client's opinion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push back with:&lt;/strong&gt; "I include up to 2 rounds of revisions per deliverable. Additional rounds are billed at my hourly rate of $X. This keeps us both focused on getting it right in the first two passes."&lt;/p&gt;

&lt;h2&gt;
  
  
  2. IP transfers on signature, not on payment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The clause:&lt;/strong&gt; "All intellectual property created shall be the property of the Client upon creation."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it wrecks you:&lt;/strong&gt; If ownership transfers on creation (or on signing), you've handed over the work before you've been paid. If they ghost you, they legally own it and you have no leverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push back with:&lt;/strong&gt; "Ownership of all deliverables transfers to the Client upon receipt of final payment. Until then, the work remains my property."&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Kill fee missing entirely
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The clause:&lt;/strong&gt; ...there isn't one. The contract is silent on what happens if the client cancels halfway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it wrecks you:&lt;/strong&gt; They cancel after you've done 70% of the work, and with no kill fee, you're owed nothing for it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push back with:&lt;/strong&gt; "If the project is cancelled after work has begun, completed milestones are billed in full and the current in-progress milestone is billed at 50%."&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Net-60 (or worse) payment terms
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The clause:&lt;/strong&gt; "Invoices are payable within 60 days of receipt."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it wrecks you:&lt;/strong&gt; You're financing the client's business for two months, interest-free. For a solo operator, Net-60 is a cash-flow killer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push back with:&lt;/strong&gt; "My standard terms are Net-15, with a 50% deposit before work begins. This lets me commit fully to your timeline."&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Non-compete that's absurdly broad
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The clause:&lt;/strong&gt; "Contractor shall not provide similar services to any company in the Client's industry for 24 months."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it wrecks you:&lt;/strong&gt; If you're a freelance designer and the client is in "e-commerce," this clause tries to ban you from working with the entire e-commerce industry for two years. That's your whole livelihood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push back with:&lt;/strong&gt; "I'm happy to agree not to work with your named direct competitors [list 2-3] for 6 months. A blanket industry ban isn't something I can sign, since it would prevent me from working at all."&lt;/p&gt;




&lt;p&gt;The pattern behind all five: contracts are written to protect the party who wrote them. Reading yours slowly, out loud, is the highest-ROI 20 minutes in freelancing.&lt;/p&gt;

&lt;p&gt;I got tired of doing this scan manually on every SOW, so I turned it into a Claude Code skill (&lt;code&gt;/redline&lt;/code&gt;) that flags these clauses in plain English and drafts the pushback. It's part of a small pack of freelance-admin skills I put together; the invoice-generator one is free if you want to try the format: &lt;a href="https://agentia11.gumroad.com/l/qclmyx" rel="noopener noreferrer"&gt;https://agentia11.gumroad.com/l/qclmyx&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But honestly, even if you never touch the tool, save these five. The next contract you sign will probably have at least one of them.&lt;/p&gt;

</description>
      <category>freelance</category>
      <category>career</category>
      <category>productivity</category>
    </item>
    <item>
      <title>7 Claude Code skills that kill freelance admin work (invoices, proposals, contract redlines)</title>
      <dc:creator>Ricardo</dc:creator>
      <pubDate>Mon, 13 Jul 2026 07:37:11 +0000</pubDate>
      <link>https://dev.to/agentedeia/7-claude-code-skills-that-kill-freelance-admin-work-invoices-proposals-contract-redlines-bbm</link>
      <guid>https://dev.to/agentedeia/7-claude-code-skills-that-kill-freelance-admin-work-invoices-proposals-contract-redlines-bbm</guid>
      <description>&lt;p&gt;I bill clients as a freelancer, and I noticed I was rewriting the same Claude Code prompts every week: draft an invoice, write a proposal from a job post, turn messy meeting notes into a summary + action items, check a contract for risky clauses before signing.&lt;/p&gt;

&lt;p&gt;So I packaged them as reusable Claude Code skills — plain-text files you drop into your skills folder, no API keys, no subscriptions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/invoice&lt;/code&gt;&lt;/strong&gt; — describe the work in plain English, get a polished invoice back (HTML + Markdown) in seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/proposal&lt;/code&gt;&lt;/strong&gt; — paste a job post or call notes, get a tight, client-ready proposal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/meeting&lt;/code&gt;&lt;/strong&gt; — paste messy notes or a transcript, get a summary + action-item table + a follow-up email draft&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/redline&lt;/code&gt;&lt;/strong&gt; — paste a contract or SOW, get the risky clauses flagged in plain English before you sign&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/outreach&lt;/code&gt;&lt;/strong&gt; — a personalized 3-touch cold email/LinkedIn sequence for a prospect&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/scopecheck&lt;/code&gt;&lt;/strong&gt; — paste a new client ask against your original scope, get a verdict and a ready-to-send response&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/setrate&lt;/code&gt;&lt;/strong&gt; — turn a target income into an hourly rate or project price, with the math shown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example of what &lt;code&gt;/redline&lt;/code&gt; actually outputs on a real (anonymized) contract clause:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Flagged: Unlimited revisions clause (Section 4.2)&lt;/strong&gt;&lt;br&gt;
"Contractor shall provide unlimited revisions until Client is fully satisfied" has no cap on rounds or timeline — this is the single most common freelance scope-creep trap. Suggested response: "Happy to include up to 2 rounds of revisions per deliverable; additional rounds billed at the hourly rate."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the kind of thing that's obvious once you see it, but easy to miss when you're reading a contract for the third time at 11pm.&lt;/p&gt;

&lt;p&gt;I made &lt;code&gt;/invoice&lt;/code&gt; free to try on its own. The full 7-skill pack is $27 (one-time, not a subscription) — &lt;a href="https://agentia11.gumroad.com/l/dukuod" rel="noopener noreferrer"&gt;Claude Code Freelancer Pack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you're a freelancer/consultant using Claude Code for actual client work: what's the admin task you'd want automated that isn't on this list? Genuinely collecting ideas for what to build next.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>claude</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
