<?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: Matt Kallaway</title>
    <description>The latest articles on DEV Community by Matt Kallaway (@mattkallaway).</description>
    <link>https://dev.to/mattkallaway</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3780490%2F0429932d-7f29-454b-bfbe-31aaa4689a0b.png</url>
      <title>DEV Community: Matt Kallaway</title>
      <link>https://dev.to/mattkallaway</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mattkallaway"/>
    <language>en</language>
    <item>
      <title>I built a tool that writes cold email openers from any URL - here's what I learned</title>
      <dc:creator>Matt Kallaway</dc:creator>
      <pubDate>Thu, 19 Feb 2026 20:24:36 +0000</pubDate>
      <link>https://dev.to/mattkallaway/i-built-a-tool-that-writes-cold-email-openers-from-any-url-heres-what-i-learned-2ndl</link>
      <guid>https://dev.to/mattkallaway/i-built-a-tool-that-writes-cold-email-openers-from-any-url-heres-what-i-learned-2ndl</guid>
      <description>&lt;p&gt;Cold outreach is a grind. The part that always slowed me down was writing that first line in an email - the one that actually references something specific about the company so it doesn't look like a template blast.&lt;/p&gt;

&lt;p&gt;I spent way too long doing this manually: open their website, read for 2-3 minutes, write something. Multiply that by 50 prospects and you've burned half your day before sending anything.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://icebreakr-six.vercel.app" rel="noopener noreferrer"&gt;Icebreakr&lt;/a&gt;. You paste in a company's website URL and it generates 5 personalized opening lines by analyzing what's actually on their site.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;You drop in a URL (company website or LinkedIn)&lt;/li&gt;
&lt;li&gt;It fetches the page, grabs the title and meta description&lt;/li&gt;
&lt;li&gt;Passes that context to gpt-4o-mini with a prompt tuned for cold email tone&lt;/li&gt;
&lt;li&gt;Returns 5 openers you can pick from or riff on&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Simple stack: Next.js 14, Tailwind, OpenAI API, Stripe for payments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example output
&lt;/h2&gt;

&lt;p&gt;For linear.app it generated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"I noticed Linear's focus on integrating AI into product development and thought it aligns well with current industry needs."&lt;/li&gt;
&lt;li&gt;"Your approach to streamlining product planning with AI is impressive and highlighted in your recent updates."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every result is perfect, but they're usually a solid starting point that saves time even when you need to tweak them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've learned
&lt;/h2&gt;

&lt;p&gt;The outputs are better when the site has a clear meta description. Sites with no meta description fall back to just the page title, which limits the specificity.&lt;/p&gt;

&lt;p&gt;LinkedIn URLs are tricky because they block scraping - I'm handling that by falling back to the domain info when scraping fails.&lt;/p&gt;

&lt;p&gt;The hardest part wasn't the AI integration - it was making the free tier actually useful (5 per day) without giving away so much that no one upgrades.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's live at &lt;a href="https://icebreakr-six.vercel.app" rel="noopener noreferrer"&gt;https://icebreakr-six.vercel.app&lt;/a&gt; - free tier is 5 lookups per day, no signup required. Pro is $19/mo for unlimited.&lt;/p&gt;

&lt;p&gt;Would love feedback, especially from people who do outreach regularly. Are the openers specific enough? Too generic? What would actually make you pay for something like this?&lt;/p&gt;

</description>
      <category>showdev</category>
    </item>
    <item>
      <title>How I calculate my minimum hourly rate before every new client</title>
      <dc:creator>Matt Kallaway</dc:creator>
      <pubDate>Thu, 19 Feb 2026 05:38:57 +0000</pubDate>
      <link>https://dev.to/mattkallaway/how-i-calculate-my-minimum-hourly-rate-before-every-new-client-2k98</link>
      <guid>https://dev.to/mattkallaway/how-i-calculate-my-minimum-hourly-rate-before-every-new-client-2k98</guid>
      <description>&lt;p&gt;I've been freelancing for about 6 years. The single biggest mistake I made early on was setting my rate by looking at what other people charged and picking a number that felt reasonable.&lt;/p&gt;

&lt;p&gt;That is not how rates work. Your rate has nothing to do with what other people charge. It has everything to do with what you actually need to earn, divided by the hours you can realistically bill.&lt;/p&gt;

&lt;p&gt;Here's the math I use now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Start with your annual income target
&lt;/h2&gt;

&lt;p&gt;Don't start with hourly rate. Start with annual net income -- what you want to take home after taxes. Be honest. Include health insurance, retirement contributions, and the fact that you're responsible for your own sick days.&lt;/p&gt;

&lt;p&gt;Let's say you want to net $90,000.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Gross up for taxes
&lt;/h2&gt;

&lt;p&gt;As a freelancer you pay self-employment tax on top of income tax. A rough rule: divide your net target by 0.65 to get the gross you need to bill.&lt;/p&gt;

&lt;p&gt;$90,000 / 0.65 = ~$138,500 in gross revenue&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add your business expenses
&lt;/h2&gt;

&lt;p&gt;Software subscriptions, equipment, home office, professional development -- add it up. Say it's $8,000/year.&lt;/p&gt;

&lt;p&gt;Target gross: $138,500 + $8,000 = $146,500&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Add a profit margin buffer
&lt;/h2&gt;

&lt;p&gt;Things go wrong. Clients pay late. You lose a big contract. I add 15-20% as a margin buffer.&lt;/p&gt;

&lt;p&gt;$146,500 x 1.18 = ~$172,870&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Calculate your actual billable hours
&lt;/h2&gt;

&lt;p&gt;This is where most people get the math wrong. They assume 40 hours/week x 52 weeks = 2,080 billable hours. That's not reality.&lt;/p&gt;

&lt;p&gt;Reality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 weeks vacation: -80 hours&lt;/li&gt;
&lt;li&gt;10 sick/personal days: -80 hours&lt;/li&gt;
&lt;li&gt;Holidays: -56 hours&lt;/li&gt;
&lt;li&gt;Non-billable work (admin, sales, invoicing, networking): roughly 25-30% of your time&lt;/li&gt;
&lt;li&gt;Client dry spells: assume 80% utilization at best&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Start with 2,080 hours. Subtract 216 hours for time off. That's 1,864 working hours. Multiply by 0.70 for non-billable overhead. That's 1,305 potentially billable hours. Multiply by 0.80 for realistic utilization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real annual billable hours: ~1,044&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Divide
&lt;/h2&gt;

&lt;p&gt;$172,870 / 1,044 hours = &lt;strong&gt;$166/hour minimum&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's your floor. Not your rate -- your floor. Your actual rate should be higher once you factor in the value you deliver and what the market bears.&lt;/p&gt;

&lt;p&gt;But at least now you know the number below which you're actually losing money.&lt;/p&gt;




&lt;h2&gt;
  
  
  The project rate version
&lt;/h2&gt;

&lt;p&gt;Once you have your hourly rate, project pricing is straightforward: estimate hours honestly (then add 25% for scope creep), multiply by your rate.&lt;/p&gt;

&lt;p&gt;A "10-hour project" at $166/hr = $1,660 + 25% buffer = &lt;strong&gt;$2,075 minimum&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  A free tool if you want to skip the spreadsheet
&lt;/h2&gt;

&lt;p&gt;I built a small rate calculator that does all this math for you -- it runs in your browser, no signup, no internet needed. You put in your income target, expenses, tax rate, and realistic work weeks, and it outputs your minimum hourly rate, daily rate, and project price.&lt;/p&gt;

&lt;p&gt;It comes bundled with 3 proposal templates (project, retainer, audit) if you need those too. The whole pack is $14 on Gumroad: &lt;a href="https://mattkallaway.gumroad.com/l/bomum" rel="noopener noreferrer"&gt;https://mattkallaway.gumroad.com/l/bomum&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But honestly, you can just use the math above. The point is: know your number before any client conversation.&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
