1<!DOCTYPE html><html lang="en" class="leading-snug"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><meta name="description" content="One lesson every week from 15 years of building startups - the wins, mistakes, and decisions behind $1m+ in revenue. From Kyle Gawley."><meta name="keywords" content="founder newsletter, startup newsletter, founder lessons, startup advice, product advice, growth advice, Kyle Gawley newsletter"><meta property="og:type" content="website"><meta property="og:site_name" content="Kyle Gawley"><meta property="og:url" content="https://kylegawley.com/newsletter/"><meta property="og:title" content="Kyle Gawley's Newsletter | Weekly founder lessons"><meta property="og:description" content="One lesson every week from 15 years of building startups - the wins, mistakes, and decisions behind $1m+ in revenue. From Kyle Gawley."><meta property="og:image" content="https://kylegawley.com/images/newsletter-card.png"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Kyle Gawley's Newsletter | Weekly founder lessons"><meta name="twitter:description" content="One lesson every week from 15 years of building startups - the wins, mistakes, and decisions behind $1m+ in revenue. From Kyle Gawley."><meta name="twitter:image" content="https://kylegawley.com/images/newsletter-card.png"><meta name="twitter:creator" content="@kylegawley"><link rel="canonical" href="https://kylegawley.com/newsletter/"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;700;800&family=Montserrat:wght@800&display=swap" rel="stylesheet"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><!-- Privacy-friendly analytics by Plausible -->
1<script async src="https://plausible.io/js/pa-jod1XcsijqawPQFuHSWKx.js"></script>
1<script> 2 window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}}; 3 plausible.init() 4 </script>
4<title>Kyle Gawley's Newsletter | Weekly founder lessons</title><link rel="stylesheet" href="/_astro/100.DXzwbdst.css"> 5<link rel="stylesheet" href="/_astro/_slug_.UH9JxOoG.css">
5<script type="module" src="/_astro/hoisted.5rHClE4H.js"></script>
5</head> <body> <div class="mx-auto w-full max-w-6xl p-5 sm:p-8"> <header class="relative border-b border-orange-500/20 pb-8"> <div class="flex items-end justify-between gap-4"> <a href="/" class="text-inherit no-underline"> <p class="mb-2 text-[0.8125rem] text-orange-400"> <span class="text-zinc-500">$ </span> whoami </p> <p class="text-xl font-bold text-zinc-50 sm:text-2xl">Kyle Gawley</p> </a> <button id="btn-open-menu" type="button" aria-label="Open navigation" aria-controls="mobile-menu" aria-expanded="false" class="flex size-10 items-center justify-center text-orange-400 transition-colors hover:text-orange-300 md:hidden"> <span id="icon-menu" class="flex"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="26" height="26" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24"> <line x1="4" x2="20" y1="12" y2="12"></line> <line x1="4" x2="20" y1="6" y2="6"></line> <line x1="4" x2="20" y1="18" y2="18"></line> </svg> </span> <span id="icon-close" class="hidden"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="26" height="26" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24"> <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path> </svg> </span> </button> <nav aria-label="Main navigation" class="hidden items-center gap-x-5 md:flex"> <a href="/blog" class="text-sm no-underline transition-colors hover:text-orange-300 text-zinc-300"> Blog </a><a href="/newsletter" class="text-sm no-underline transition-colors hover:text-orange-300 text-orange-400"> Newsletter </a> <a href="/advisory" class="inline-flex justify-center items-center gap-x-4 whitespace-nowrap box-border rounded-none font-mono font-bold tracking-normal transition-all before:content-[">_"] border border-orange-500 bg-orange-500 text-black shadow-[4px_4px_0_0_rgba(249,115,22,0.35)] before:text-black/70 hover:-translate-y-0.5 hover:border-orange-300 hover:bg-orange-300 hover:shadow-[6px_6px_0_0_rgba(249,115,22,0.5)] text-sm pl-5 pr-7 py-2.5">Work With Me</a> </nav> </div> <nav id="mobile-menu" aria-label="Mobile navigation" class="mt-6 hidden flex-col gap-4 border border-orange-500/40 bg-black p-5 md:hidden"> <a href="/blog" class="text-base no-underline transition-colors hover:text-orange-300 text-zinc-300"> Blog </a><a href="/newsletter" class="text-base no-underline transition-colors hover:text-orange-300 text-orange-400"> Newsletter </a> <a href="/advisory" class="inline-flex justify-center items-center gap-x-4 whitespace-nowrap box-border rounded-none font-mono font-bold tracking-normal transition-all before:content-[">_"] border border-orange-500 bg-orange-500 text-black shadow-[4px_4px_0_0_rgba(249,115,22,0.35)] before:text-black/70 hover:-translate-y-0.5 hover:border-orange-300 hover:bg-orange-300 hover:shadow-[6px_6px_0_0_rgba(249,115,22,0.5)] text-sm pl-5 pr-7 py-2.5 w-full">Work With Me</a> </nav> </header> <main class="mt-10 flex w-full flex-col gap-10 lg:grid lg:grid-cols-[minmax(0,1.618fr)_minmax(0,1fr)] lg:items-start"> <div class="min-w-0"> <div class="mb-12 last:mb-0"> <p class="mb-4 text-[0.8125rem] text-orange-400"> <span class="text-zinc-500">$ </span> cat ./newsletter.txt </p> <h2 class="mb-6 text-4xl sm:text-5xl font-extrabold leading-[1.12] tracking-normal text-zinc-50"> Skip the mistakes. Steal the lessons. </h2> <p class="max-w-3xl leading-[1.7] text-zinc-300"> 6Every week I share one hard-won lesson from 15 years of building startups â the wins, the failures, and the decisions behind $1m+ in revenue from my own products. 7</p> <form action="https://app.kit.com/forms/9734990/subscriptions" method="post" class="mt-8 max-w-xl border border-zinc-800 bg-black/40 p-4 sm:p-5"> <input type="hidden" name="tags[]" value="21554461"> <label class="mb-2 block text-sm text-zinc-300" for="newsletter-email"> 8Email address 9</label> <div class="flex flex-col gap-3 sm:flex-row"> <input id="newsletter-email" type="email" name="email_address" placeholder="[email protected]" required class="min-h-[3rem] w-full border border-zinc-800 bg-black/40 px-4 py-3 text-zinc-100 outline-none transition-colors placeholder:text-zinc-600 focus:border-orange-400/70"> <button class="inline-flex justify-center items-center gap-x-4 whitespace-nowrap box-border rounded-none font-mono font-bold tracking-normal transition-all before:content-[">_"] border border-orange-500 bg-orange-500 text-black shadow-[4px_4px_0_0_rgba(249,115,22,0.35)] before:text-black/70 hover:-translate-y-0.5 hover:border-orange-300 hover:bg-orange-300 hover:shadow-[6px_6px_0_0_rgba(249,115,22,0.5)] text-base pl-6 pr-9 py-3 sm:shrink-0" type="submit"><div class="button-loader animate-spin -ml-6 hidden"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="20" height="20" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24"> <path d="M21 12a9 9 0 1 1-6.219-8.56"></path> </svg></div><span class="button-text">Subscribe free</span></button> </div> </form> <p class="mt-3 text-xs text-zinc-500">Free. Unsubscribe anytime.</p> </div> <div class="mb-12 last:mb-0"> <p class="mb-4 text-[0.8125rem] text-orange-400"> <span class="text-zinc-500">$ </span> cat ./what-you-get.md </p> <h2 class="mb-6 text-4xl sm:text-5xl font-extrabold leading-[1.12] tracking-normal text-zinc-50"> What you'
9ll get. </h2> <div class="grid max-w-4xl gap-3"> <p class="leading-7 text-zinc-300"><span class="mr-3 inline-block text-orange-400">></span>A real lesson from my own experience and the reasoning behind it.</p><p class="leading-7 text-zinc-300"><span class="mr-3 inline-block text-orange-400">></span>Practical tactics you can apply to improve your business.</p> </div> </div> <div class="mb-12 last:mb-0"> <p class="mb-4 text-[0.8125rem] text-orange-400"> <span class="text-zinc-500">$ </span> cat ./kyle.md </p> <h2 class="mb-6 text-4xl sm:text-5xl font-extrabold leading-[1.12] tracking-normal text-zinc-50"> Who's writing it? </h2> <div class="flex max-w-3xl flex-col gap-5 border border-zinc-800 bg-black/40 p-4 sm:flex-row sm:items-start sm:p-5"> <img src="/_astro/kyle-avatar.DReeQRts_bmWOK.webp" alt="Kyle Gawley" class="size-16 border border-orange-500/40 object-cover" width="500" height="500" loading="lazy" decoding="async"> <p class="leading-[1.7] text-zinc-300"> 10I'm Kyle Gawley. I have spent 15 years building VC-funded and bootstrapped software companies. 11 My own products that have generated $1m+ in revenue. I share everything I learn along the way. 12</p> </div> </div> </div> <aside class="flex min-w-0 flex-col gap-8 lg:border-l lg:border-orange-500/20 lg:pl-10"> <section> <p class="mb-4 text-[0.8125rem] text-orange-400"> <span class="text-zinc-500">$ </span> whoami --verbose </p> <img src="/_astro/kyle-avatar.DReeQRts_bmWOK.webp" alt="Kyle Gawley" class="mb-5 size-14 border-2 border-orange-500/50 object-cover" width="500" height="500" loading="lazy" decoding="async"> <dl class="grid gap-4 text-sm"> <div> <dt class="text-zinc-500">Name</dt> <dd class="mt-1 text-zinc-200">Kyle Gawley</dd> </div> <div> <dt class="text-zinc-500">Experience</dt> <dd class="mt-1 text-zinc-200">15 years building VC-funded and bootstrapped software products. 13 Founder <a href="https://usealertly.com">Alertly</a>, <a href="https://usegravity.app">Gravity</a> and Get Invited. 14</dd></div> </dl> </section> <section> <p class="mb-4 text-[0.8125rem] text-orange-400"> <span class="text-zinc-500">$ </span> ssh connect </p> <div class="flex flex-col gap-2 text-sm"> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="/advisory">advisory: /advisory</a> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="/blog">read: /blog</a> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="/newsletter">subscribe: /newsletter</a> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="/cdn-cgi/l/email-protection#e189848d8d8ea18a988d848680968d8498cf828e8c">email: <span class="__cf_email__" data-cfemail="a7cfc2cbcbc8e7ccdecbc2c0c6d0cbc2de89c4c8ca">[email protected]</span></a> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="https://x.com/kylegawley">x: @kylegawley</a> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="https://uk.linkedin.com/in/kylegawley">linkedin: /in/kylegawley</a> <a class="text-zinc-300 no-underline transition-colors before:mr-2 before:text-orange-400 before:content-[">"] hover:text-orange-300" href="https://www.youtube.com/@kylegawley">youtube: @kylegawley</a> </div> </section> </aside> </main> </div> <div id="toast" class="fixed right-4 -bottom-full text-left flex gap-4 bg-dark bg-opacity-95 border border-purple-400 border-opacity-20 p-6 rounded-md transition-all duration-300 max-w-md"> <div id="icon" class="hidden"> <svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="22" height="22" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24" class="mt-[1px]"> <circle cx="12" cy="12" r="10"></circle> <path d="M12 16v-4"></path> <path d="M12 8h.01"></path> </svg> </div> <div class="flex flex-col gap-2"> <h2 id="toast-title" class="font-bold hidden"></h2> <p id="toast-message" class="text-sm hidden"></p> <img src="" class="max-w-64 hidden" alt=""> <div class="flex gap-x-2 actions hidden mt-2 w-full"> <button class="inline-flex justify-center items-center gap-x-4 whitespace-nowrap box-border rounded-none font-mono font-bold tracking-normal transition-all before:content-[">_"] border border-orange-500 bg-orange-500 text-black shadow-[4px_4px_0_0_rgba(249,115,22,0.35)] before:text-black/70 hover:-translate-y-0.5 hover:border-orange-300 hover:bg-orange-300 hover:shadow-[6px_6px_0_0_rgba(249,115,22,0.5)] text-sm pl-5 pr-7 py-2.5 w-full hidden" type="button"><div class="button-loader animate-spin -ml-6 hidden"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="20" height="20" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24"> <path d="M21 12a9 9 0 1 1-6.219-8.56"></path> </svg></div><span class="button-text"></span></button> <button class="inline-flex justify-center items-center gap-x-4 whitespace-nowrap box-border rounded-none font-mono font-bold tracking-normal transition-all before:content-[">_"] border border-orange-500/70 bg-black text-orange-300 shadow-[4px_4px_0_0_rgba(249,115,22,0.25)] before:text-orange-500 hover:-translate-y-0.5 hover:border-orange-300 hover:text-orange-100 hover:shadow-[6px_6px_0_0_rgba(249,115,22,0.45)] text-sm pl-5 pr-7 py-2.5 w-full hidden" type="button"><div class="button-loader animate-spin -ml-6 hidden"><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="20" height="20" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24"> <path d="M21 12a9 9 0 1 1-6.219-8.56"></path> </svg></div><span class="button-text"></span></button> </div> <button aria-label="Close notification" id="btn-close-toast" class="absolute -top-[4px] -right-[4px] flex items-center justify-center cursor-pointer size-5 bg-dark border-purple-400 border border-opacity-40 shadow rounded p-1"> <i><svg xmlns="http://www.w3.org/2000/svg" stroke-width="2" width="16" height="16" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" fill="none" viewBox="0 0 24 24"> <path d="M18 6 6 18"></path> <path d="m6 6 12 12"></path> </svg></i> </button> </div> </div>
vendor: 110 bytes, line 14
14 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
14<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"b3f989d27f6142c7a3827c83619f298d","r":1,"spa":2}' crossorigin="anonymous"></script>
14 15</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.