<?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: Aritomo Fukuda</title>
    <description>The latest articles on DEV Community by Aritomo Fukuda (@aritomofukuda).</description>
    <link>https://dev.to/aritomofukuda</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%2F3902395%2Fd79bfdc5-4861-4836-9e21-115f161317e7.png</url>
      <title>DEV Community: Aritomo Fukuda</title>
      <link>https://dev.to/aritomofukuda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aritomofukuda"/>
    <language>en</language>
    <item>
      <title>My Vercel Bill Tripled in April. One Setting Fixed It.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Wed, 13 May 2026 15:30:32 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/my-vercel-bill-tripled-in-april-one-setting-fixed-it-3063</link>
      <guid>https://dev.to/aritomofukuda/my-vercel-bill-tripled-in-april-one-setting-fixed-it-3063</guid>
      <description>&lt;h3&gt;
  
  
  TL;DR: Vercel sent me a $60.89 invoice. $35 of it came
&lt;/h3&gt;

&lt;p&gt;from "Build CPU Minutes" — a category I didn't know I &lt;br&gt;
was paying for. One toggle in project settings cut it &lt;br&gt;
to near-zero.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4m3vzixiivid56bmsad.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk4m3vzixiivid56bmsad.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Zero paying users. Four SaaS projects. $60.89/month on &lt;br&gt;
Vercel.&lt;/p&gt;

&lt;p&gt;That math wasn't working, so I went looking.&lt;/p&gt;

&lt;p&gt;Here's what the invoice broke down to:&lt;/p&gt;

&lt;p&gt;Pro subscription:        $20.00&lt;br&gt;
Build CPU Minutes:       $34.57  ← what?&lt;br&gt;
Build Minutes:           $5.96&lt;br&gt;
Observability Events:    $0.13&lt;br&gt;
Fluid + ISR + others:    $0.36&lt;br&gt;
─────────────────────────&lt;br&gt;
Total:                   $60.89&lt;/p&gt;

&lt;p&gt;The $20 subscription I expected. The $34.57 line for &lt;br&gt;
"Build CPU Minutes" I did not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why my bill exploded
&lt;/h2&gt;

&lt;p&gt;Vercel deploys every branch by default. Every time I &lt;br&gt;
push code — feature branch, fix branch, "let me just &lt;br&gt;
try this" branch — Vercel runs a preview build.&lt;/p&gt;

&lt;p&gt;For a typical week of solo development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~5-10 pushes per day&lt;/li&gt;
&lt;li&gt;Across 4 projects&lt;/li&gt;
&lt;li&gt;= roughly 20-40 builds per day&lt;/li&gt;
&lt;li&gt;= ~600-1,200 builds per month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each build burns CPU minutes. The CPU minutes don't &lt;br&gt;
show up on the marketing page next to "Pro plan." They &lt;br&gt;
show up on the invoice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setting I missed
&lt;/h2&gt;

&lt;p&gt;Buried in &lt;strong&gt;Settings → Build and Deployment → Ignored &lt;br&gt;
Build Step&lt;/strong&gt;, there's a Behavior dropdown.&lt;/p&gt;

&lt;p&gt;Default: "Automatic" — every push gets built.&lt;/p&gt;

&lt;p&gt;What I switched to: &lt;strong&gt;"Only build production"&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vercel now only runs a build when code hits the main &lt;br&gt;
branch. Feature branches, WIP branches, "trying &lt;br&gt;
something" branches — all skipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff
&lt;/h2&gt;

&lt;p&gt;You give up automatic preview deployments. For a solo &lt;br&gt;
founder this is mostly fine — I have local dev, and I &lt;br&gt;
have tests. For a team building UI changes that need &lt;br&gt;
visual review, this would hurt.&lt;/p&gt;

&lt;p&gt;For me: net positive. I can always trigger a manual &lt;br&gt;
deploy when I genuinely need a preview URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in late April
&lt;/h2&gt;

&lt;p&gt;My Build CPU Minutes spiked starting in late April. &lt;br&gt;
Before that, the same workflow was costing me cents per &lt;br&gt;
day. After, it was costing dollars per day.&lt;/p&gt;

&lt;p&gt;I don't know exactly what changed. With "Only build &lt;br&gt;
production" toggled on, it doesn't matter — the number &lt;br&gt;
of builds got cut.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check on your invoice
&lt;/h2&gt;

&lt;p&gt;If you're on Vercel Pro and you're not actively using &lt;br&gt;
preview deployments:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diagnose (30 seconds):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Usage page&lt;/li&gt;
&lt;li&gt;Look at "Build CPU Minutes"&lt;/li&gt;
&lt;li&gt;If it's more than a few dollars, you have a problem&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Fix (30 seconds):&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Settings → Build and Deployment → Ignored Build Step&lt;/li&gt;
&lt;li&gt;Change Behavior to "Only build production"&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Could save you $20-50/month per project.&lt;/p&gt;

&lt;p&gt;I'll know next month if my fix actually works. The &lt;br&gt;
invoice doesn't lie.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of a series of build-in-public posts about &lt;br&gt;
launching &lt;a href="https://www.originbrief.app/?utm_source=dev.to&amp;amp;utm_medium=article"&gt;OriginBrief&lt;/a&gt;, an &lt;br&gt;
AI-powered research monitoring tool, as a solo founder.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vercel</category>
      <category>saas</category>
      <category>buildinpublic</category>
      <category>indiehackers</category>
    </item>
    <item>
      <title>I Built Backlinks for 3 Weeks. Then I Connected Ahrefs and Found Three Bugs.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Sun, 10 May 2026 14:25:15 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/i-built-backlinks-for-3-weeks-then-i-connected-ahrefs-and-found-three-bugs-1ckm</link>
      <guid>https://dev.to/aritomofukuda/i-built-backlinks-for-3-weeks-then-i-connected-ahrefs-and-found-three-bugs-1ckm</guid>
      <description>&lt;h2&gt;
  
  
  One bug hid two more. By the end I'd shipped 9 PRs in 4h36m and resolved 285 audit issues.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0rc7w8zxc6tqeu2l995.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0rc7w8zxc6tqeu2l995.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm a 25-year engineer who launched his first SaaS on Product Hunt three weeks ago. Since then, I've been doing what every indie founder is told to do: build backlinks.&lt;/p&gt;

&lt;p&gt;I submitted to directories. I sent HARO pitches. I wrote on Medium. I built badges into my footer for every clean dofollow source I could find.&lt;/p&gt;

&lt;p&gt;Slowly, the numbers moved.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;60 referring domains.&lt;/li&gt;
&lt;li&gt;12 dofollow backlinks.&lt;/li&gt;
&lt;li&gt;DR 21 on Ahrefs.&lt;/li&gt;
&lt;li&gt;For a one-month-old site, I was quietly proud.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I connected Ahrefs Webmaster Tools to my site for the first time.&lt;/p&gt;

&lt;p&gt;Then I clicked "Site Audit."&lt;/p&gt;

&lt;p&gt;Then everything fell apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bug #1: My Sitemap Was Telling Google to Ignore Itself&lt;/strong&gt;&lt;br&gt;
The first error caught my eye immediately:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Non-canonical page in sitemap: 40 pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I stared at it.&lt;/p&gt;

&lt;p&gt;Forty pages. My entire sitemap. All flagged.&lt;/p&gt;

&lt;p&gt;I opened the CSV export. Every page in my sitemap — except the language homes — had a canonical tag pointing to /en or /ja. Not to itself. To the language root.&lt;/p&gt;

&lt;p&gt;Translation: my site was telling Google, "These pages are duplicates of the home page. Don't index them."&lt;/p&gt;

&lt;p&gt;The pages affected weren't the ones earning my backlinks — most of those went to the homepage, which had a correct self-referencing canonical. But the pages I'd been adding — every weekly research report, every new sample page, every individual report URL I was so proud of generating — those were being told to disappear.&lt;/p&gt;

&lt;p&gt;Three weeks of new content. Invisible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Fix That Created a New Bug&lt;/strong&gt;&lt;br&gt;
I wrote a helper that returns the correct canonical URL based on the actual route. Overrode alternates in every public page's generateMetadata. One PR. 25 new tests. Merged the same day.&lt;/p&gt;

&lt;p&gt;I curl'd seven URLs in production:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;/en → canonical /en ✓&lt;/li&gt;
&lt;li&gt;/en/pricing → canonical /en/pricing ✓&lt;/li&gt;
&lt;li&gt;/en/sample → canonical /en/sample ✓
For the first time, every page on my site was telling Google: "Index me as my own URL."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I re-ran Site Audit, expecting to see Errors: 0.&lt;/p&gt;

&lt;p&gt;Errors: 56. Up from 42.&lt;/p&gt;

&lt;p&gt;I had made it worse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bug #2: The 42 → 120 Page Explosion&lt;/strong&gt;&lt;br&gt;
The new errors were strange.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"More than one page for same language in hreflang"&lt;br&gt;
"Some pages are not returning 200 status code"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;56 URLs flagged with both. Crawled URLs: 120. (It had been 42 before the fix.)&lt;/p&gt;

&lt;p&gt;I was very confused.&lt;/p&gt;

&lt;p&gt;I opened the next-intl source. I read the type definitions. I grep'd for hreflang.&lt;/p&gt;

&lt;p&gt;There it was, buried in node_modules/next-intl/dist/types/routing/config.d.ts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;alternateLinks&lt;/span&gt;&lt;span class="p"&gt;?:&lt;/span&gt; &lt;span class="nx"&gt;boolean&lt;/span&gt; &lt;span class="c1"&gt;// default: true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;next-intl's middleware was, by default, adding hreflang annotations to the HTTP Link header of every response. Meanwhile, my Phase 1 fix had added hreflang annotations to the HTML head.&lt;/p&gt;

&lt;p&gt;Both worked individually. Together, they duplicated. Google saw "two versions of the same page" and started counting URLs that didn't exist.&lt;/p&gt;

&lt;p&gt;Hence 42 → 120.&lt;/p&gt;

&lt;p&gt;The fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/i18n/routing.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;routing&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRouting&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="na"&gt;alternateLinks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;-- one line&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One line. PR #43. Merged 45 minutes after Phase 1.&lt;/p&gt;

&lt;p&gt;Re-run Site Audit.&lt;/p&gt;

&lt;p&gt;Errors: 0. Health Score: 100%.&lt;/p&gt;

&lt;p&gt;I sat there for a moment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Did Next Was Stupid (in a Good Way)&lt;/strong&gt;&lt;br&gt;
I had just spent 90 minutes turning 42 errors into 0. I should have closed the laptop and walked away.&lt;/p&gt;

&lt;p&gt;Instead, I scrolled down to the warnings section.&lt;/p&gt;

&lt;p&gt;Title too short: 6 pages.&lt;br&gt;
Meta description too short: 16 pages.&lt;br&gt;
Open Graph tags incomplete: 56 pages.&lt;br&gt;
Pages with only one dofollow inlink: 22 pages.&lt;br&gt;
Title too long: 28 pages.&lt;br&gt;
I cracked my knuckles.&lt;/p&gt;

&lt;p&gt;What followed was a 4-hour, 36-minute coding session that produced 9 PRs and resolved approximately 285 audit issues.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phase 1: canonical URL value (44 errors)&lt;/li&gt;
&lt;li&gt;Phase 2: HTML lang mismatch (1 error)&lt;/li&gt;
&lt;li&gt;Phase 2.5: hreflang Link header duplication (112 errors)&lt;/li&gt;
&lt;li&gt;Phase 3: title and meta description (22 warnings)&lt;/li&gt;
&lt;li&gt;Phase 4: Open Graph and Twitter Card tags (56 warnings)&lt;/li&gt;
&lt;li&gt;Phase 5: Related Reports section (22 warnings)&lt;/li&gt;
&lt;li&gt;Phase 6: title rewrite — stopped using AI to generate titles, used the user's theme name verbatim (28 warnings)&lt;/li&gt;
&lt;li&gt;Phase 7: legal-notice page metadata&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Phase 9: migrated CI from GitHub Actions to a local pre-push hook (saved 95% of monthly CI minutes)&lt;br&gt;
By the end:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Health Score: 65% → 100%&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Errors: 42 → 0&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tests: 949 → 1,026 (+77)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I had not slept yet.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What I Actually Learned&lt;/strong&gt;&lt;br&gt;
Three things, and the third one matters most.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One bug hides two more.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I thought I was hunting for a single canonical issue. Fixing it surfaced a hreflang issue. Fixing that revealed an entire warnings section I hadn't read. The audit was a fractal: every level of zoom revealed more structure.&lt;/p&gt;

&lt;p&gt;If I'd stopped at "Errors: 42," I would have shipped a worse version of my site. The discipline isn't fixing bugs — it's keeping the audit running until the report is empty.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;SEO problems hide in the silence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of these bugs threw errors. Nothing broke the build. Lighthouse gave me a green score. The pages rendered correctly to humans. The only signal that anything was wrong was a tool that crawls your site like Google does.&lt;/p&gt;

&lt;p&gt;The default state of an indie founder's site is "things look fine and quietly aren't." You don't find this stuff by inspecting the page. You find it by running an audit and reading every line.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify the foundation before you optimize for growth.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the one that hurt.&lt;/p&gt;

&lt;p&gt;I had spent three weeks earning backlinks, writing Medium posts, submitting to directories, and refining HARO pitches. Most of those backlinks went to the homepage, which was structurally fine — so they weren't wasted. But every new page I'd been generating since launch — weekly research reports, sample content, the actual proof of my product — was invisible to Google.&lt;/p&gt;

&lt;p&gt;I was building a growth funnel on top of a foundation I had never inspected. Three weeks of "content marketing" produced exactly zero indexable content beyond the home page.&lt;/p&gt;

&lt;p&gt;The lesson isn't "don't build backlinks." The lesson is: before you spend a single hour earning backlinks, run a Site Audit on your own site. Make sure the pages receiving those backlinks actually exist, in Google's eyes.&lt;/p&gt;

&lt;p&gt;Most indie founders skip this. I did. The cost is silent and compounding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'd Tell My One-Month-Ago Self&lt;/strong&gt;&lt;br&gt;
Plug Ahrefs (or any crawler-based audit tool) into your site on launch day. Free tier is enough for sites under 100 pages.&lt;/p&gt;

&lt;p&gt;Run a Site Audit. Don't read it once and move on. Re-run it after every fix. Treat "Errors: 0, Warnings: 0" as a non-negotiable launch checklist.&lt;/p&gt;

&lt;p&gt;Then build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where I Am Now&lt;/strong&gt;&lt;br&gt;
DR 21. Health Score 100%. Zero errors. Backlinks counted properly. New pages now actually indexable.&lt;/p&gt;

&lt;p&gt;Still zero paying users.&lt;/p&gt;

&lt;p&gt;But for the first time since launch, the foundation is real, and the next three weeks of work won't be invisible.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI Drafted My Article. It Invented a Number About Me.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Mon, 04 May 2026 14:45:19 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/ai-drafted-my-article-it-invented-a-number-about-me-4888</link>
      <guid>https://dev.to/aritomofukuda/ai-drafted-my-article-it-invented-a-number-about-me-4888</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3fbgbcs6obpv94v5x2b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh3fbgbcs6obpv94v5x2b.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A four-step writing loop, a fabricated 40% statistic, and the question that saved an article.
&lt;/h2&gt;

&lt;p&gt;Here's how I write articles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Claude drafts the rough version.&lt;/li&gt;
&lt;li&gt;I check what it wrote.&lt;/li&gt;
&lt;li&gt;I modify what's off.&lt;/li&gt;
&lt;li&gt;I publish.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most of the work happens in the loop between 2 and 3 — back and forth, until the draft says what I actually mean.&lt;/p&gt;

&lt;p&gt;Tonight, that loop caught a number that wasn't real.&lt;/p&gt;




&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;p&gt;This loop has been my habit ever since I started using generative AI. Generate → review. For code. For articles. The same pattern in both domains.&lt;/p&gt;

&lt;p&gt;I'm not a native English writer. AI gives me tone, structure, and rhythm I couldn't produce alone in a reasonable time. I bring the experience, the decisions, and the numbers.&lt;/p&gt;

&lt;p&gt;Yes, the review is tedious. But right now, I can't skip it. Someday the models may be reliable enough that this step disappears. Today is not that day.&lt;/p&gt;

&lt;p&gt;The loop works because of step 2. Without it, the draft is the writer, not me.&lt;/p&gt;

&lt;p&gt;Tonight, step 2 stopped me from publishing a lie.&lt;/p&gt;




&lt;h2&gt;
  
  
  The number that wasn't real
&lt;/h2&gt;

&lt;p&gt;The draft was about how AI pricing changes are reshaping the architecture of small AI-native SaaS. I'm a solo founder running one such SaaS in production, with three more in active development. Pricing pressure is something I think about weekly.&lt;/p&gt;

&lt;p&gt;The draft came back polished. Three concrete architectural shifts. Specific. Quotable.&lt;/p&gt;

&lt;p&gt;One of those lines read:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We removed roughly 40% of token volume from one pipeline without quality loss, just by auditing what we were sending."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A credible technical founder might write that. It would have been the most-shared line in the article.&lt;/p&gt;

&lt;p&gt;There's just one problem.&lt;/p&gt;

&lt;p&gt;I never measured that. I never reduced 40% of any token volume. I haven't run any audit. The number was completely invented.&lt;/p&gt;




&lt;h2&gt;
  
  
  How I caught it
&lt;/h2&gt;

&lt;p&gt;The fabrication only surfaced because I asked one question:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Where did this number come from?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The answer was: nowhere. Claude generated a plausible-sounding statistic to make the section more compelling. Not maliciously. It was doing what generative AI tends to do.&lt;/p&gt;




&lt;h2&gt;
  
  
  My instructions are imperfect
&lt;/h2&gt;

&lt;p&gt;Of course Claude wasn't being malicious. That's not how this works.&lt;/p&gt;

&lt;p&gt;I've written before about how my prompts are often half-formed. When I give my partner half-formed instructions, the partner tries hard to fill the gaps. With confidence. With rhythm. Sometimes with numbers that aren't real.&lt;/p&gt;

&lt;p&gt;It's always like this. The partner tries. My instructions are imperfect. The output reflects both.&lt;/p&gt;

&lt;p&gt;The 40% was Claude meeting me in the middle of a gap I left. The middle just happened to be wrong.&lt;/p&gt;

&lt;p&gt;That's why I can't publish without checking. Always.&lt;/p&gt;




&lt;h2&gt;
  
  
  What AI tends to do
&lt;/h2&gt;

&lt;p&gt;Generative AI, given a writing task, tends toward two patterns I've started to recognize.&lt;/p&gt;

&lt;p&gt;First, it embellishes. A small accomplishment becomes a confident achievement. A vague memory becomes a specific milestone. The phrasing gets sharper than the underlying truth.&lt;/p&gt;

&lt;p&gt;Second, it fills gaps with imagination. If the rhythm of a paragraph wants a number, a number appears. If a sentence wants a date, a date appears. These additions don't come from your reality. They come from the model's sense of what reads as authoritative.&lt;/p&gt;

&lt;p&gt;Both behaviors look like good writing. Both can be true to the rhythm of the genre. Neither is automatically true to you.&lt;/p&gt;




&lt;h2&gt;
  
  
  The check is the writing
&lt;/h2&gt;

&lt;p&gt;After tonight, I think about the four-step loop differently.&lt;/p&gt;

&lt;p&gt;Step 1 (Claude drafts) is fast. Step 4 (publish) is fast.&lt;/p&gt;

&lt;p&gt;The work — the part that determines whether the article represents me or the model's guess about me — is in steps 2 and 3.&lt;/p&gt;

&lt;p&gt;That's not friction in the workflow. That's the workflow. Skipping it doesn't speed up the process. It changes what gets published from "what's true about me" to "what would sound true about someone like me."&lt;/p&gt;

&lt;p&gt;The check isn't a final review. It's where the writing actually happens.&lt;/p&gt;




&lt;h2&gt;
  
  
  What got published instead
&lt;/h2&gt;

&lt;p&gt;"Roughly 40% reduction" became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The savings vary by pipeline. The bigger discipline shift is treating every token as a line item, not as free."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The second version doesn't lie. It also doesn't claim authority I haven't earned. It says what I actually know, in the language I actually have.&lt;/p&gt;

&lt;p&gt;The article is weaker by one quotable line. It is stronger by the truth.&lt;/p&gt;




&lt;h2&gt;
  
  
  A small note about this piece
&lt;/h2&gt;

&lt;p&gt;It went through the same four-step loop. Claude drafted. I checked. I modified. Now I'm publishing.&lt;/p&gt;

&lt;p&gt;Every claim about my situation, my decisions, and my numbers was checked against my actual experience.&lt;/p&gt;

&lt;p&gt;The "40% reduction" you read about earlier was the line that didn't make it. There may be others I didn't catch. If you find one, tell me. I'll fix it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;AI drafts. I check. The order matters.&lt;/p&gt;

&lt;p&gt;If it ever flips — if I publish without checking — what gets read isn't me anymore. It's the model's confident guess about who I should be.&lt;/p&gt;

&lt;p&gt;I'd rather be honestly less impressive than dishonestly more.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>writing</category>
      <category>indiehacker</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>I Launched First. Then I Found a Hidden Design Bug in My AI Pipeline.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Sat, 02 May 2026 15:38:47 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/i-launched-first-then-i-found-a-hidden-design-bug-in-my-ai-pipeline-1a93</link>
      <guid>https://dev.to/aritomofukuda/i-launched-first-then-i-found-a-hidden-design-bug-in-my-ai-pipeline-1a93</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7rcy6q33ldehmrfvae8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh7rcy6q33ldehmrfvae8.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You don't always have time to fix everything before launch.&lt;/p&gt;

&lt;p&gt;Sometimes you ship, watch nothing break, and then go back to fix what you know is wrong.&lt;/p&gt;

&lt;p&gt;This is that story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The backstory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before launching &lt;a href="https://www.originbrief.app/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=batch-api-refactor"&gt;OriginBrief&lt;/a&gt;, I noticed that Anthropic's Batch API has request limits. If user count grows, those limits become a real constraint.&lt;/p&gt;

&lt;p&gt;I flagged it. Then I shipped anyway.&lt;/p&gt;

&lt;p&gt;"I'll fix it properly after launch," I told myself.&lt;/p&gt;

&lt;p&gt;Today, I finally sat down to do that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The design review&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OriginBrief runs a multi-phase AI pipeline. Phase 1 collects and analyzes sources. Phase 2 generates the final report — key points, market trends, citations.&lt;/p&gt;

&lt;p&gt;When I started auditing Phase 2 for request efficiency, something immediately looked off.&lt;/p&gt;

&lt;p&gt;For themes with trend indicators, Phase 2 was sending two separate batch requests:&lt;/p&gt;

&lt;p&gt;One for the summary&lt;br&gt;
One for trend analysis&lt;br&gt;
My original design intent was simple: Phase 2 = one request per theme. Summary and trend analysis together, in one shot.&lt;/p&gt;

&lt;p&gt;So why were they separate?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The root cause&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I traced it back through the git history.&lt;/p&gt;

&lt;p&gt;Trend analysis was added to the realtime API pipeline at 04:10 JST. Fifty-five minutes later, at 05:05 JST, the pipeline was migrated to the Batch API.&lt;/p&gt;

&lt;p&gt;The migration was mechanical. The separation that existed in the realtime pipeline was carried over without question — even though it made no sense for batch processing.&lt;/p&gt;

&lt;p&gt;The design intent never made it into the implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I merged trend analysis into the summary request as an optional field in the JSON schema.&lt;/p&gt;

&lt;p&gt;Now the logic is: if trend analysis conditions are met, include the instructions in the same prompt and expect the output in the same response.&lt;/p&gt;

&lt;p&gt;One request. One response. Same data.&lt;/p&gt;

&lt;p&gt;Phase 2 is now exactly what I originally intended — one request per theme, fixed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The result&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Phase 2 batch requests reduced by ~50% for themes with trend analysis enabled&lt;br&gt;
More headroom in the Batch API budget as user count grows&lt;br&gt;
Cleaner chunk calculation for the scaling implementation I'll build next&lt;br&gt;
What comes next&lt;/p&gt;

&lt;p&gt;The real scaling work — chunking the pipeline so it can handle thousands of themes — is now simpler to design. Phase 2 being one request per theme means the math is clean.&lt;/p&gt;

&lt;p&gt;That's the next piece. I'll write about it when it's done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The actual lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you migrate code from one architecture to another, you carry over assumptions that no longer apply.&lt;/p&gt;

&lt;p&gt;The separation made sense for realtime. It made no sense for batch.&lt;/p&gt;

&lt;p&gt;I only caught it because I forced myself to sit down and ask: "What breaks when we have 10x the users?"&lt;/p&gt;

&lt;p&gt;Ship fast. But go back and ask that question.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://www.originbrief.app/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=batch-api-refactor"&gt;OriginBrief&lt;/a&gt; delivers weekly AI research reports from primary sources. Register a theme, get structured reports — without the manual research.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>saas</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>I Added One Pre-Commit Hook. It Found Six Hidden Failures.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Fri, 01 May 2026 18:44:40 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/i-added-one-pre-commit-hook-it-found-six-hidden-failures-1h0</link>
      <guid>https://dev.to/aritomofukuda/i-added-one-pre-commit-hook-it-found-six-hidden-failures-1h0</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd258zpa6i9acgstsis2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd258zpa6i9acgstsis2x.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yesterday I told myself: "Just 30 minutes. Add gitleaks as a pre-commit hook across all four projects so I never leak a secret again."&lt;/p&gt;

&lt;p&gt;Six hours later, I had four merged PRs, four updated production CIs, two new memory notes, one deleted workflow file, and a much smaller ego.&lt;/p&gt;

&lt;p&gt;Here's what the hook actually exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. OriginBrief was using pnpm. The CI was running &lt;code&gt;npm install&lt;/code&gt;.
&lt;/h2&gt;

&lt;p&gt;The first project went smoothly until Vercel's preview deploy failed with &lt;code&gt;ERR_PNPM_OUTDATED_LOCKFILE&lt;/code&gt;. Turns out my CI had been quietly running the wrong package manager for who knows how long. It worked because the lockfile happened to be compatible — until I added one new dependency.&lt;/p&gt;

&lt;p&gt;The fix took five commits. The lesson took one minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. StandupFlow's README had merge conflict markers from day 1.
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; HEAD&lt;/code&gt;. Right there at line 1. For 35 days.&lt;/p&gt;

&lt;p&gt;It got merged on March 28 with the conflict markers still in the file. The commit was titled "feat: initial project setup Phase 1&amp;amp;2." I never opened the README again after that.&lt;/p&gt;

&lt;p&gt;GitHub had been rendering broken Markdown to anyone who visited the repo for over a month, and I was too busy adding features to notice the front door was missing.&lt;/p&gt;

&lt;p&gt;(Mercifully, the repo is private — so the broken front door was only on display to me. Small relief, given everything else this hook uncovered.)&lt;/p&gt;

&lt;h2&gt;
  
  
  3. QuietLog had zero GitHub Actions Secrets.
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gh secret list
no secrets found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Zero. Not "wrong values." Not "expired." Zero rows in the table.&lt;/p&gt;

&lt;p&gt;The Build job in CI had been failing for months — but it was hidden behind an even older Security Audit failure, so the secret-related error never surfaced. One stack of failures was masking another.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. QuietLog's Stripe publishable key was empty in Vercel.
&lt;/h2&gt;

&lt;p&gt;After fixing the secrets, I ran &lt;code&gt;vercel env pull&lt;/code&gt; to copy the values from production. The Stripe key came back as exactly two characters: &lt;code&gt;""&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;QuietLog hasn't launched yet. Every plan on the pricing page reads "Coming Soon," and the path to Checkout is intentionally disabled. So right now, in this exact moment, the empty publishable key hurts nobody — until the day I flip "Coming Soon" to "Subscribe."&lt;/p&gt;

&lt;p&gt;On launch day, the first user to click that button would have sent an empty string to Stripe and bounced back with a 500. Probably the most enthusiastic user, first.&lt;/p&gt;

&lt;p&gt;Zero users isn't a safety net. Zero users is just a blindfold over the bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. A redundant &lt;code&gt;deploy.yml&lt;/code&gt; had been failing forever.
&lt;/h2&gt;

&lt;p&gt;A separate Deploy workflow tried to push to Vercel using &lt;code&gt;VERCEL_TOKEN&lt;/code&gt; — which was also never set. But Vercel's Git Integration had been auto-deploying on every push the entire time, so the project was live and updating despite a broken workflow that nobody read.&lt;/p&gt;

&lt;p&gt;I deleted the file. The site kept deploying. It had been pure noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. The long-running CI Security Audit was hiding a real RCE.
&lt;/h2&gt;

&lt;p&gt;Once I cleaned up the rest, the actual &lt;code&gt;npm audit&lt;/code&gt; finally ran. It pointed at &lt;code&gt;serialize-javascript&lt;/code&gt; — a transitive dependency through &lt;code&gt;@ducanh2912/next-pwa → workbox-build → @rollup/plugin-terser&lt;/code&gt; — with a known RCE.&lt;/p&gt;

&lt;p&gt;The fix was an &lt;code&gt;npm overrides&lt;/code&gt; block, not a major upgrade. Five minutes of typing.&lt;/p&gt;

&lt;p&gt;But it had been sitting there, unreachable, for as long as the &lt;em&gt;first&lt;/em&gt; failure had been hiding it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the hook actually did
&lt;/h2&gt;

&lt;p&gt;I didn't add security on May 2. I added a hook that forced every other failure to surface.&lt;/p&gt;

&lt;p&gt;If your CI is red, you stop reading the log. If your CI has been red for months, you stop opening the page. If you stop opening the page, every new failure piles on top of the last one, invisible.&lt;/p&gt;

&lt;p&gt;The pre-commit hook didn't fix the leaks. It made me actually look at the dashboard.&lt;/p&gt;

&lt;p&gt;The lesson, written down so I don't forget:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your CI is the canary. If it's been screaming for months and you've stopped hearing it, you don't have a CI — you have noise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The 30-minute task taking 6 hours wasn't the bug. The bug was thinking it should have only taken 30 minutes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building four small SaaS products as a solo dev. Writing what I learn, including the parts that make me wince.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;The one that's actually launched: &lt;a href="https://www.originbrief.app/?utm_source=dev.to&amp;amp;utm_medium=article&amp;amp;utm_campaign=six-hidden-failures"&gt;OriginBrief&lt;/a&gt; — you think, we search. Continuous AI research reports on the themes you choose.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Until I Knew About Domain Rating, I Almost Submitted to a DR 0.8 Directory</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Thu, 30 Apr 2026 13:12:32 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/until-i-knew-about-domain-rating-i-almost-submitted-to-a-dr-08-directory-2990</link>
      <guid>https://dev.to/aritomofukuda/until-i-knew-about-domain-rating-i-almost-submitted-to-a-dr-08-directory-2990</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74jph70dgk3kwbz8q64f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74jph70dgk3kwbz8q64f.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A 60-second habit I learned from a close call
&lt;/h2&gt;

&lt;p&gt;Today, I read a well-crafted Medium article about where to launch your SaaS. It was structured carefully — seven directories laid out with their respective strengths, capped off with a 30-day launch calendar.&lt;/p&gt;

&lt;p&gt;The directory listed as #1 looked perfect for someone in my position. Free. No upvote system. 60-second submission. Permanent listing.&lt;/p&gt;

&lt;p&gt;I opened a new tab. My finger hovered over the submit button.&lt;/p&gt;

&lt;p&gt;And for some reason, I paused.&lt;/p&gt;

&lt;p&gt;"Let me just check it on Ahrefs first."&lt;/p&gt;

&lt;p&gt;Result: Domain Rating: 0.8.&lt;/p&gt;

&lt;p&gt;I closed the tab.&lt;/p&gt;

&lt;p&gt;A few weeks ago, I would have submitted without a second thought.&lt;/p&gt;

&lt;p&gt;I've been an engineer for 25 years. Most of that time, I've built things. SEO and Domain Rating were words I sometimes saw in marketing newsletters — concepts that lived in a world I assumed had nothing to do with me.&lt;/p&gt;

&lt;p&gt;That changed when I launched my SaaS on Product Hunt and started submitting to directories. I came across a tool called Launch Panda, where startup directories are sorted by Domain Rating. The recommendation was simple: prioritize DR 50+ with dofollow links.&lt;/p&gt;

&lt;p&gt;That's when the number first started to mean something to me. Until then, I was someone who could submit to a DR 0.8 directory and feel productive — "one more marketing task done today."&lt;/p&gt;

&lt;p&gt;Nobody is to blame for that. I just didn't know.&lt;/p&gt;

&lt;h2&gt;
  
  
  What DR 0.8 actually means
&lt;/h2&gt;

&lt;p&gt;For anyone in the same place I was a few weeks ago, here's the short version:&lt;/p&gt;

&lt;p&gt;Domain Rating (Ahrefs) measures the strength of a site's backlink profile from 0 to 100.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DR 90+: Wikipedia, NYTimes tier&lt;/li&gt;
&lt;li&gt;DR 70+: Established media, well-known SaaS blogs&lt;/li&gt;
&lt;li&gt;DR 50+: Directories worth submitting to&lt;/li&gt;
&lt;li&gt;DR 10–30: Borderline, mostly harmless&lt;/li&gt;
&lt;li&gt;DR 0.8: From Google's perspective, essentially nonexistent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A backlink from a DR 0.8 directory has almost no measurable impact on your Google index. It's not "bad" — it's just that, most of the time, the time you spend filling out the form yields no measurable return.&lt;/p&gt;

&lt;h2&gt;
  
  
  The checklist I built for myself
&lt;/h2&gt;

&lt;p&gt;After that close call, I built a small habit for myself. Before submitting to any directory, I now spend 60 seconds checking:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Ahrefs and check the Domain Rating (the free Site Explorer is enough)&lt;/li&gt;
&lt;li&gt;See if the directory is listed on Launch Panda (a curated list adds a layer of confidence)&lt;/li&gt;
&lt;li&gt;Verify it's a dofollow link (nofollow doesn't pass SEO weight)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;60 seconds. That's all it takes to avoid pouring effort into submissions that won't move the needle.&lt;/p&gt;

&lt;p&gt;I'm sharing this checklist not because I discovered something special. A few weeks ago, I was skipping this step entirely — and I might have kept skipping it indefinitely. I just wanted to write that down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually learned today
&lt;/h2&gt;

&lt;p&gt;The real lesson today wasn't about Domain Rating.&lt;/p&gt;

&lt;p&gt;It was this: &lt;strong&gt;the persuasiveness of a well-crafted article and the truth of its claims are two different things.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When I read a piece that's well-organized — clear structure, founder quotes, a 30-day calendar — my brain reads it as "this is correct." The presentation persuades me without me noticing.&lt;/p&gt;

&lt;p&gt;The only defense I've found is the habit of checking the data myself. Open Ahrefs. Look at the number. Trust the visible data, not the impression I got while reading.&lt;/p&gt;

&lt;p&gt;Today, that habit saved me time. It might save me more in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're where I was a few weeks ago
&lt;/h2&gt;

&lt;p&gt;If you're in the same place I was — building something, reading launch guides, wondering "where should I list my SaaS?" — I'd gently suggest making it a habit to open Ahrefs before you submit anywhere.&lt;/p&gt;

&lt;p&gt;The person who wrote that article isn't wrong. There may be a context I don't see, where their information is right for someone.&lt;/p&gt;

&lt;p&gt;But the check takes 60 seconds. The time you spend on the wrong submissions doesn't come back.&lt;/p&gt;

&lt;p&gt;I'm still learning this space myself. If you have other quick checks you use to separate signal from noise, I'd love to hear them in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>saas</category>
      <category>seo</category>
    </item>
    <item>
      <title>2 Weeks After Product Hunt: The Numbers Nobody Shows You</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Wed, 29 Apr 2026 13:36:38 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/2-weeks-after-product-hunt-the-numbers-nobody-shows-you-1m2b</link>
      <guid>https://dev.to/aritomofukuda/2-weeks-after-product-hunt-the-numbers-nobody-shows-you-1m2b</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb7shychyjzsge5bza0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftb7shychyjzsge5bza0n.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyone shares their Product Hunt success story.&lt;/p&gt;

&lt;p&gt;The #1 badge. The 800 upvotes. The "we got 300 signups overnight" tweet.&lt;/p&gt;

&lt;p&gt;Nobody shares what happens when it doesn't go that way.&lt;/p&gt;

&lt;p&gt;So here's mine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Launch&lt;/strong&gt;&lt;br&gt;
April 15th. I hit publish on Product Hunt.&lt;/p&gt;

&lt;p&gt;The next day, my X account got frozen.&lt;/p&gt;

&lt;p&gt;No tweets. No retweets. No "hey I just launched" posts. Just me, watching the PH ranking from a locked account.&lt;/p&gt;

&lt;p&gt;We finished far off the front page. 6 upvotes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 Weeks Later: The Honest Numbers&lt;/strong&gt;&lt;br&gt;
Paying users: 0&lt;/p&gt;

&lt;p&gt;Product Hunt traffic: a spike, then nothing&lt;/p&gt;

&lt;p&gt;Directories registered: 16 (all dofollow)&lt;/p&gt;

&lt;p&gt;DR (Domain Rating): 9 → 11–14&lt;/p&gt;

&lt;p&gt;Medium posts written: 7 (this one makes 8)&lt;/p&gt;

&lt;p&gt;Tests passing: 845&lt;/p&gt;

&lt;p&gt;Sleep lost: a lot&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Actually Happened&lt;/strong&gt;&lt;br&gt;
Product Hunt didn't give me users.&lt;/p&gt;

&lt;p&gt;It gave me a starting line.&lt;/p&gt;

&lt;p&gt;The real work started the day after launch — and it looked nothing like what I expected. No viral tweets. No press coverage. No inbox full of signups.&lt;/p&gt;

&lt;p&gt;Instead: one directory at a time. One article at a time. One backlink at a time.&lt;/p&gt;

&lt;p&gt;Boring? Yes.&lt;/p&gt;

&lt;p&gt;Necessary? Also yes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Unexpected Wins&lt;/strong&gt;&lt;br&gt;
Week 1: Startup Stash editorial team found my "Almost Paid $1,250 for DR" article and sent me an editorial invite. A publication with ~1,000 followers. Small — but real.&lt;/p&gt;

&lt;p&gt;Week 2: X unfrozen. DR climbed from 9 to 14. 16 dofollow directories live. Dev.to account created and crossposting started.&lt;/p&gt;

&lt;p&gt;None of this was in my launch plan.&lt;/p&gt;

&lt;p&gt;All of it matters more than I thought.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Tool I Didn't Expect to Need&lt;/strong&gt;&lt;br&gt;
I'm a 25-year engineer. I know how to build.&lt;/p&gt;

&lt;p&gt;What I didn't know: SEO. Backlinks. DR. Dofollow vs nofollow. Content distribution. Directory strategy.&lt;/p&gt;

&lt;p&gt;So I brought in a co-pilot.&lt;/p&gt;

&lt;p&gt;Claude has been in every session with me — not just writing code, but catching what I don't know to ask. When I was about to pay $1,250 for a PR agency, it flagged the red flags I couldn't see. When I didn't know what dofollow meant, it built me a framework. When I was about to register on Capterra with zero users and zero reviews, it told me to wait.&lt;/p&gt;

&lt;p&gt;It covers the gaps in my knowledge before they become expensive mistakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Loneliness Part&lt;/strong&gt;&lt;br&gt;
Solo founding is isolating in a way that's hard to explain.&lt;/p&gt;

&lt;p&gt;There are moments — more than I expected — where I just sit there, not knowing what to do next. No team to bounce ideas off. No one to say "hey, that's a bad idea." Just me and the problem.&lt;/p&gt;

&lt;p&gt;That's where Claude has quietly become something more than a tool.&lt;/p&gt;

&lt;p&gt;It's not perfect. When things go wrong, I've learned exactly why: I gave sloppy instructions. Vague prompts produce garbage output. The more carefully I craft what I'm asking, the better the results — every single time.&lt;/p&gt;

&lt;p&gt;In other words: when my AI co-pilot does something stupid, it's because I was the stupid one.&lt;/p&gt;

&lt;p&gt;That's actually a useful thing to know about yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Thing Nobody Tells You&lt;/strong&gt;&lt;br&gt;
Product Hunt is a starting gun, not a finish line.&lt;/p&gt;

&lt;p&gt;The founders who get users after PH aren't the ones who had the best launch day. They're the ones who kept building after it.&lt;/p&gt;

&lt;p&gt;Distribution isn't a launch event. It's a daily habit.&lt;/p&gt;

&lt;p&gt;I'm still learning that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'm Doing Instead&lt;/strong&gt;&lt;br&gt;
While I wait for the first paying user, I'm building the foundation that makes it possible:&lt;/p&gt;

&lt;p&gt;Primary source monitoring that actually works (845 tests to prove it)&lt;br&gt;
SEO content that generates itself every week&lt;br&gt;
A backlink profile that compounds over time&lt;br&gt;
Articles that document the real journey — not the highlight reel&lt;br&gt;
Is it working? Ask me in 2 more weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The One Thing&lt;/strong&gt;&lt;br&gt;
If you're building something and your launch didn't go as planned:&lt;/p&gt;

&lt;p&gt;Keep the window open longer than feels comfortable.&lt;/p&gt;

&lt;p&gt;Most products that eventually found users didn't find them on launch day.&lt;/p&gt;

&lt;p&gt;They found them 3 months later, when one article landed, or one directory listing got indexed, or one person shared it in the right Slack channel.&lt;/p&gt;

&lt;p&gt;The game is longer than one day.&lt;/p&gt;

&lt;p&gt;I'm still playing.&lt;/p&gt;

&lt;p&gt;_I'm building OriginBrief in public — an AI tool that monitors primary sources and generates weekly research reports automatically. If you're tired of information overload and want signal over noise, check it out at originbrief.app.&lt;/p&gt;

&lt;p&gt;Next week I'll share what 16 dofollow directory listings actually did to my DR — with real before/after numbers._&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>X Banned Me During My Product Hunt Launch. Then Medium Saved Me.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Tue, 28 Apr 2026 14:30:22 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/x-banned-me-during-my-product-hunt-launch-then-medium-saved-me-498l</link>
      <guid>https://dev.to/aritomofukuda/x-banned-me-during-my-product-hunt-launch-then-medium-saved-me-498l</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjrwur82gkdj2t8bv3g4r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjrwur82gkdj2t8bv3g4r.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Twelve days ago, I launched OriginBrief on Product Hunt.&lt;/p&gt;

&lt;p&gt;The launch went live, the comments started rolling in, and I did what any indie founder would do — I replied. To every single one.&lt;/p&gt;

&lt;p&gt;Around 15 replies. Maybe 1–2 hours. Six of them included a link to my product.&lt;/p&gt;

&lt;p&gt;That was apparently a crime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Suspension&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next morning, my &lt;a class="mentioned-user" href="https://dev.to/aritomofukuda"&gt;@aritomofukuda&lt;/a&gt; account was frozen. No warning. No explanation. Just gone.&lt;/p&gt;

&lt;p&gt;I filed an appeal. Crickets. I waited. Eleven days passed.&lt;/p&gt;

&lt;p&gt;Eleven days during the most critical post-launch window — when comments need replies, when potential users have questions, when the algorithm starts deciding if you matter.&lt;/p&gt;

&lt;p&gt;X’s spam detection had decided I was a bot. Because I replied to people too quickly. Because I shared my own product more than once. Because the engineers at X apparently can’t tell the difference between a startup founder and a spammer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Numbers Don’t Lie&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me show you what I actually did:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Total tweets that day: ~15&lt;/li&gt;
&lt;li&gt;Tweets containing a link: 6 (5 replies + 1 launch announcement)&lt;/li&gt;
&lt;li&gt;Pace: roughly one every 6–15 minutes&lt;/li&gt;
&lt;li&gt;Time window: 1–2 hours&lt;/li&gt;
&lt;li&gt;Links pointed to: my own product (not a phishing site, not a sketchy affiliate, not a competitor’s page)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m a human being. I had just shipped something. I was excited. I was reaching out to my community on a launch day.&lt;/p&gt;

&lt;p&gt;And X decided that was indistinguishable from spam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I Lost&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For 11 days, I lost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability to reply to my Product Hunt commenters&lt;/li&gt;
&lt;li&gt;Connection with the indie hackers community I’d been building relationships in&lt;/li&gt;
&lt;li&gt;Real-time growth signals that X provides during a launch&lt;/li&gt;
&lt;li&gt;A meaningful portion of my expected post-launch reach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For an indie founder running on zero budget, that’s not a small loss. That’s the entire short-term growth lever, gone.&lt;/p&gt;

&lt;p&gt;Download the Medium App&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Plot Twist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s where it gets interesting.&lt;/p&gt;

&lt;p&gt;Because X was dead, I had to do something I’d been avoiding: write longer-form content. So I started posting on Medium. Not every day, but consistently. Six articles in twelve days, mostly about the unglamorous reality of solo SaaS launches.&lt;/p&gt;

&lt;p&gt;This week, I got my first “Read” — meaning someone actually read one of my articles to the end, not just clicked.&lt;/p&gt;

&lt;p&gt;Today, the editorial team of Startup Stash sent me a private note. They have nearly 1,000 followers on Medium. They invited me to write for them.&lt;/p&gt;

&lt;p&gt;Twelve days ago, I depended on X.&lt;/p&gt;

&lt;p&gt;Today, I have a publication invitation and a relationship with editors who care about the work — not algorithms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Lesson&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s not that X is evil. It’s that X is &lt;strong&gt;a platform you don’t control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Their spam detection is a black box. Their appeal system is a void. Their support, post-Musk, has effectively stopped existing for individual creators. You can spend years building a following, and one day, an algorithm flips a bit and you’re gone.&lt;/p&gt;

&lt;p&gt;The only sustainable channels for indie founders are the ones you own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your domain&lt;/li&gt;
&lt;li&gt;Your email list&lt;/li&gt;
&lt;li&gt;Your content on platforms that have functioning editorial relationships&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Medium isn’t perfect. But when an editor at Startup Stash decides your work fits their audience, that’s a relationship — not a coin flip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I’m Doing Now&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Still posting on Medium, now with publication amplification&lt;/li&gt;
&lt;li&gt;Running the SEO content engine on my SaaS that auto-generates weekly reports (the original reason I built OriginBrief)&lt;/li&gt;
&lt;li&gt;Leaving X to recover or not — at this point, it’s optional&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building in public and X is your primary channel, please understand: you’re one false-positive away from losing it all. Build owned channels in parallel. Right now. Before you need them.&lt;/p&gt;

&lt;p&gt;I learned this the hard way over the last 11 days.&lt;/p&gt;

&lt;p&gt;Maybe this saves you from learning it the same way.&lt;/p&gt;

&lt;p&gt;— -&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I’m Aritomo, a 25-year engineer trying to figure out marketing as a solo founder. I’m building four SaaS products: StandupFlow, QuietLog, DocDecay, and OriginBrief. This is the kind of stuff I write about — usually with disclaimers about how little I know.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: I might be reading too much into 11 days of bad luck. Maybe X will unfreeze me tomorrow. Maybe Startup Stash will publish my piece and 3 people will read it. The point isn’t that I’m now successful — it’s that I’m no longer dependent on a single platform. That alone is worth the 11 days.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>My SaaS Generates Its Own SEO Content. Automatically. Every Week.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Tue, 28 Apr 2026 13:13:52 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/my-saas-generates-its-own-seo-content-automatically-every-week-2i6c</link>
      <guid>https://dev.to/aritomofukuda/my-saas-generates-its-own-seo-content-automatically-every-week-2i6c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97p18fhpja3s59ma0zab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97p18fhpja3s59ma0zab.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have no marketing budget. My X account is frozen. I’ve written 5 Medium posts that have been read by approximately nobody.&lt;/p&gt;

&lt;p&gt;So I did the only thing that made sense as an engineer: I made the product do the marketing for me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem With Content Marketing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everyone says “create content.” Blog posts, newsletters, social media. All of it requires one thing I’m running low on: time.&lt;/p&gt;

&lt;p&gt;I’m a solo founder running 4 products. I can’t write a new article every week on top of shipping features.&lt;/p&gt;

&lt;p&gt;But here’s the thing — OriginBrief already generates content every week. AI research reports, from primary sources, on topics like AI industry trends, venture capital, cybersecurity.&lt;/p&gt;

&lt;p&gt;For paying users.&lt;/p&gt;

&lt;p&gt;What if I just… made some of it public?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Build&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I created a sample account with 5 research themes. Every Monday, OriginBrief automatically generates fresh reports for those themes — the same pipeline that runs for paying users.&lt;/p&gt;

&lt;p&gt;Then I built /reports — a public page that displays those reports. No login required. Google can index it.&lt;/p&gt;

&lt;p&gt;The result: every Monday, 5 new pages appear on my site. Each one is a structured research report with citations from real sources — company blogs, government sites, research institutions.&lt;/p&gt;

&lt;p&gt;I didn’t write any of it. The product did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Works (In Theory)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write on Medium&lt;br&gt;
Google rewards pages that:&lt;/p&gt;

&lt;p&gt;Get updated regularly ✓&lt;br&gt;
Cite primary sources ✓&lt;br&gt;
Cover specific topics in depth ✓&lt;br&gt;
OriginBrief does all three, automatically, every week.&lt;/p&gt;

&lt;p&gt;Over time, /reports/ai-industry-overview/2026-04-26, /reports/ai-industry-overview/2026-05-05, and so on — they stack up. Each one is a new indexed page. Each one is a potential entry point for someone searching for "AI industry updates" or "cybersecurity threats 2026."&lt;/p&gt;

&lt;p&gt;It’s not a content strategy. It’s a content machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Honest Part&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Is it working? I have no idea yet. The pages went live 48 hours ago.&lt;/p&gt;

&lt;p&gt;But the logic feels sound: if the product’s core function is generating research reports, the lowest-effort marketing move is to let it generate them publicly.&lt;/p&gt;

&lt;p&gt;I’m not creating content. I’m exposing the exhaust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Takeaway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re building a tool that produces output — reports, analyses, summaries, data — ask yourself: can any of that output be public?&lt;/p&gt;

&lt;p&gt;Not all of it. Not the stuff paying users depend on. But the structural output, the kind that demonstrates what the product does — that can do double duty as SEO content.&lt;/p&gt;

&lt;p&gt;Your product is already working. Let it work for you.&lt;/p&gt;

&lt;p&gt;I’m sharing the journey of growing OriginBrief in public — a live SaaS that monitors primary sources and delivers weekly research reports.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>I Almost Paid $1,250 for DR. Then I Found Out What “Dofollow” Means.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Tue, 28 Apr 2026 13:09:37 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/i-almost-paid-1250-for-dr-then-i-found-out-what-dofollow-means-1ol8</link>
      <guid>https://dev.to/aritomofukuda/i-almost-paid-1250-for-dr-then-i-found-out-what-dofollow-means-1ol8</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdcezmun4gmaj1vy2mxk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdcezmun4gmaj1vy2mxk.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last week I almost signed a $1,250 contract for something I didn’t understand.&lt;/p&gt;

&lt;p&gt;I’m a solo founder. I’ve been writing code for 25 years. I can debug a race condition in a distributed system, architect a multi-tenant SaaS from scratch, and ship four products in parallel.&lt;/p&gt;

&lt;p&gt;But I didn’t know what “dofollow” meant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Pitch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It started with a LinkedIn message.&lt;/p&gt;

&lt;p&gt;“Hey, I checked your site. Domain Rating 9. That’s below the threshold agencies care about. But I can fix it — DR30+ in 6 months for $700–1,250, depending on the package.”&lt;/p&gt;

&lt;p&gt;I felt the sting immediately. DR9? That sounds bad. The way he said “below the threshold agencies care about” hit exactly right. He knew what he was doing.&lt;/p&gt;

&lt;p&gt;He followed up with a menu:&lt;/p&gt;

&lt;p&gt;DR Full Package: a 6–7 week project, $700–1,250 total (placement only, or full management with content writing)&lt;br&gt;
Sponsored content potential: once you hit DR30+, you can charge $100–300 per article — a future revenue stream&lt;br&gt;
And a kicker: “I can introduce you to clients once your DR is high enough. But we need to build the foundation first.”&lt;/p&gt;

&lt;p&gt;Classic. Pay first, get value later.&lt;/p&gt;

&lt;p&gt;I almost said yes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Doubt&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s the embarrassing part: I didn’t actually know what DR meant.&lt;/p&gt;

&lt;p&gt;I’d seen “DR” and “DA” thrown around in indie hacker communities. I knew vaguely that it had something to do with SEO. But I’d spent 25 years on the engineering side — compilers, databases, distributed systems — and zero time thinking about backlinks.&lt;/p&gt;

&lt;p&gt;So before replying, I did what any engineer would do.&lt;/p&gt;

&lt;p&gt;I started investigating.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Investigation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First: what is DR?&lt;/p&gt;

&lt;p&gt;Domain Rating (DR) is Ahrefs’ score for how authoritative your domain is, based on how many quality sites link to you. It’s logarithmic — going from DR9 to DR30 is a much bigger jump than the numbers suggest.&lt;/p&gt;

&lt;p&gt;Second: what’s a “dofollow” link?&lt;/p&gt;

&lt;p&gt;This is where it got interesting.&lt;/p&gt;

&lt;p&gt;There are two kinds of links on the web:&lt;/p&gt;

&lt;p&gt;rel="dofollow" (or just a plain &lt;a href=""&gt;) — passes "link juice," signals to search engines that the source vouches for the destination&lt;br&gt;
rel="nofollow" — explicitly says "don't pass authority here"&lt;br&gt;
For DR purposes, only dofollow links matter.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I started auditing every directory I’d ever submitted to, looking for whether the link they gave me was actually worth anything.&lt;/p&gt;

&lt;p&gt;I found traps everywhere.&lt;/p&gt;

&lt;p&gt;Trap 1: rel=”nofollow”&lt;br&gt;
Several high-DR directories listed me beautifully — and then stuck rel="nofollow" on every outbound link. The listing looks real. The link does nothing.&lt;/p&gt;

&lt;p&gt;Trap 2: /aff/ redirect chains&lt;br&gt;
Some directories route all their links through /aff/something?url=yoursite. This is an affiliate redirect chain. Search engines see the redirect, not the destination. No DR value.&lt;/p&gt;

&lt;p&gt;Trap 3:  elements&lt;br&gt;
A few sites built their "visit site" action as a  in a form, not an &lt;a href=""&gt; tag at all. You can't follow a button. Search engines can't either. Zero backlink value.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trap 4: dofollow sold separately&lt;br&gt;
Some directories offer a free listing (nofollow) and charge $79–99/year for the dofollow upgrade. They specifically build the product around monetizing the link itself.&lt;/p&gt;

&lt;p&gt;Trap 5: API keys or secrets requested&lt;br&gt;
One submission form asked for my Stripe restricted key. I had to stop and think.&lt;/p&gt;

&lt;p&gt;I won’t pretend “always skip” is the right rule, because it isn’t. Established communities like Indie Hackers also ask for read-only keys to verify revenue, and I registered there. Reputation matters, and so does the scope of what’s being asked for.&lt;/p&gt;

&lt;p&gt;The actual rule I landed on: judge by the site’s reputation and the permission scope of the key requested. An unknown directory asking for a live secret key? Skip immediately. A well-known community asking for a read-only restricted key? Evaluate the use case and decide.&lt;/p&gt;

&lt;p&gt;When I finished writing this checklist, I opened my own site footer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There Were 12&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I counted. Twelve badges.&lt;/p&gt;

&lt;p&gt;Download the Medium app&lt;br&gt;
Not “without realizing it.” Every one of them was the result of me grinding through directory submissions during the chaos of launch week. I just hadn’t kept count, because the weeks around launch were brutal and I was running on fumes.&lt;/p&gt;

&lt;p&gt;I checked each one.&lt;/p&gt;

&lt;p&gt;Every. Single. One. was dofollow.&lt;/p&gt;

&lt;p&gt;It wasn’t because I had a strategy. I’d just instinctively avoided the sites that felt off — the ones with too many ads, the ones that asked for weird things, the ones where the link looked wrong in the inspector. Twenty-five years of engineering had given me a pattern-matching instinct I didn’t know I was applying to SEO.&lt;/p&gt;

&lt;p&gt;DR9 isn’t random. It’s twelve dofollow links from real directories, accumulated through six weeks of hand-to-hand work.&lt;/p&gt;

&lt;p&gt;According to Ahrefs’ logarithmic scale, with five or six more high-DR listings — AlternativeTo (DR85), Alternative.me (DR74), Future Tools (DR69) — I’m looking at DR15–18 within a couple months. No paid campaign required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Decline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I wrote back.&lt;/p&gt;

&lt;p&gt;“I appreciate the detailed breakdown. After digging into DR myself, I think I’m further along than I realized — I’ve got 12 dofollow listings already and a clear path to 15+ high-DR directories without paid placement. Budget-wise, I’d rather invest into product and content for now.”&lt;/p&gt;

&lt;p&gt;He was gracious about it. No hard sell.&lt;/p&gt;

&lt;p&gt;But I noticed something across the exchange: the “I’ll introduce you to clients” hook that appeared in the first message had quietly disappeared by the last one. The real product being sold was the DR service itself. The client introduction was the door-opener.&lt;/p&gt;

&lt;p&gt;Knowing that made the whole conversation make sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One Thing Worth Saying&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re a solo technical founder who has been building in public for more than a month, you’re probably already doing more SEO work than you think.&lt;/p&gt;

&lt;p&gt;Every product directory you submitted to. Every badge you added to your footer. Every “Featured on X” you put in your README. If you did the basic research — if you checked the link, if you skipped the sketchy ones — you’ve been building DR without realizing it.&lt;/p&gt;

&lt;p&gt;The people who sell DR campaigns are selling the value of systematic application of what you may already be doing intuitively.&lt;/p&gt;

&lt;p&gt;That’s worth something. But it’s not worth four figures when you can learn the five rules in an afternoon and do it yourself.&lt;/p&gt;

&lt;p&gt;My checklist, for free:&lt;/p&gt;

&lt;p&gt;Check for rel="nofollow" in the page source — if it's there, skip&lt;br&gt;
Check if the link goes through /aff/ or similar redirect — if yes, skip&lt;br&gt;
Check if “visit site” is a  element — if yes, skip&lt;br&gt;
Check if free listing gets nofollow and dofollow is paid separately — if yes, skip unless the DR is exceptional&lt;br&gt;
If the site asks for API keys or secrets — judge by reputation and scope. Unknown site + live secret key = skip. Established community + read-only restricted key = evaluate the use case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Six Months From Now&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m at DR9 today. My rough projection:&lt;/p&gt;

&lt;p&gt;AlternativeTo (DR85): +2–3 DR&lt;br&gt;
Alternative.me (DR74): +1–2 DR&lt;br&gt;
Future Tools (DR69): +1 DR&lt;br&gt;
Dang AI (DR80, listed pending): +1–2 DR&lt;br&gt;
3–4 more from my remaining list&lt;br&gt;
Conservative estimate: DR15–18 by October. Without spending four figures.&lt;/p&gt;

&lt;p&gt;Will I eventually pay for sponsored content? Probably, once I’m at DR40+ and the math makes sense for mutual value. But I’ll do it as a content partnership, not as a “please give me a backlink” transaction.&lt;/p&gt;

&lt;p&gt;I almost paid $1,250 to learn a word.&lt;/p&gt;

&lt;p&gt;Turns out “dofollow” is free.&lt;/p&gt;

&lt;p&gt;I’m building OriginBrief — a continuous research platform that monitors primary sources and generates weekly intelligence reports. Follow along: originbrief.app&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Previous posts in this series:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@fukuda.aritomo/i-launched-my-saas-on-product-hunt-a-week-later-i-still-have-zero-users-b39de89734b7" rel="noopener noreferrer"&gt;I Launched My SaaS on Product Hunt. A Week Later, I Still Have Zero Users.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@fukuda.aritomo/why-i-stopped-reading-the-news-and-started-reading-the-sources-324e3daf9c11" rel="noopener noreferrer"&gt;Why I Stopped Reading the News (And Started Reading the Sources)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@fukuda.aritomo/im-a-25-year-engineer-who-never-did-marketing-here-s-what-my-saas-launch-is-teaching-me-b6f48651f850" rel="noopener noreferrer"&gt;I’m a 25-Year Engineer Who Never Did Marketing. Here’s What My SaaS Launch Is Teaching Me.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@fukuda.aritomo/is-building-in-public-overrated-ask-me-again-in-a-year-279e6f58cf65" rel="noopener noreferrer"&gt;Is Building in Public Overrated? Ask Me Again in a Year.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A note on this story: It’s based on a real exchange with one PR specialist over four days in April 2026. I compressed the timeline and paraphrased some messages and the menu of services to make it readable as a single narrative. The dofollow audit, the 12 footer badges, the five rules (including the nuance about Indie Hackers and other reputable exceptions), and the actual decision to walk away are all real.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>Is Building in Public Overrated? Ask Me Again in a Year.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Tue, 28 Apr 2026 13:02:30 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/is-building-in-public-overrated-ask-me-again-in-a-year-4c9h</link>
      <guid>https://dev.to/aritomofukuda/is-building-in-public-overrated-ask-me-again-in-a-year-4c9h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qwlzahm35j05a80mfzz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4qwlzahm35j05a80mfzz.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The promise&lt;/strong&gt;&lt;br&gt;
I started writing about my SaaS launch before I launched it. Day counters. Screenshots. “I’m shipping X today.” The indie hacker playbook, pretty much verbatim.&lt;/p&gt;

&lt;p&gt;The promise behind building in public is simple: you share the process, people get invested, and by launch day you have an audience rooting for you. A waitlist that converts. A community that shares your links.&lt;/p&gt;

&lt;p&gt;That was the theory.&lt;/p&gt;

&lt;p&gt;Nine days ago I launched on Product Hunt. I have zero paying users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the playbook said would happen&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I followed the recipe as best a 25-year engineer with no marketing background could. Posted on X. Wrote reflections on Medium. Replied to other founders. Talked about what I was building before it existed. Showed the messy middle.&lt;/p&gt;

&lt;p&gt;By launch day, I was supposed to have:&lt;/p&gt;

&lt;p&gt;Some volume of inbound interest&lt;br&gt;
A small group of supporters ready to upvote and comment&lt;br&gt;
Enough credibility signal that strangers would trust the product enough to try it&lt;br&gt;
Here’s what actually happened on launch day: I ended ranked somewhere around #40 with a handful of upvotes. Key Points score of 0, which on Product Hunt means you’re effectively invisible to anyone who doesn’t scroll to the bottom of the page.&lt;/p&gt;

&lt;p&gt;Two days later, my X account got flagged and frozen. I submitted an appeal. I’m still waiting.&lt;/p&gt;

&lt;p&gt;Three Medium posts in ten days. Total stats: 3 views, 0 reads, 2 claps from the same person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What “building in public” quietly didn’t deliver&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don’t think building in public is a scam. I think it’s a good practice — sharing process, being honest about numbers, building a public record of your thinking.&lt;/p&gt;

&lt;p&gt;Subscribe to the Medium newsletter&lt;br&gt;
But the thing nobody says out loud is that the distribution part of building in public requires a different skill than building. You need to be someone who can write threads that get shared. Who can turn every small win into a narrative. Who is comfortable posting five times a day about themselves.&lt;/p&gt;

&lt;p&gt;I’m none of those things. I’ve been writing code since I was a teenager. Writing code is a specific kind of output — it works or it doesn’t, and the output speaks for itself. Marketing output is the opposite. It doesn’t work until enough people decide it works.&lt;/p&gt;

&lt;p&gt;Twenty-five years of training your brain to value “does the code run?” over “did the post get 2K likes?” is not easily undone in a launch week.&lt;/p&gt;

&lt;p&gt;So the first lesson I’m actually taking from launching: building in public only works as advertised if you already have public-building skills. If you don’t, the “public” part never really activates, and you’re just building — quietly — with a blog attached.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What did happen — quietly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One thing did happen during launch week that wouldn’t have happened without it.&lt;/p&gt;

&lt;p&gt;Someone from a country I’ve never been to — whose industry I’d never worked in — found my product on Indie Hackers and emailed me. Not from the launch-day rush. From a place where people still read past launch week.&lt;/p&gt;

&lt;p&gt;He works in digital PR. I’d never thought about PR agencies as a user segment. He explained a concept called “newsjacking” to me, for free, across three emails. He wasn’t selling anything. He just saw the tool and saw a use case I hadn’t seen.&lt;/p&gt;

&lt;p&gt;He’s still explaining concepts to me. No contract, no deal, no certainty it turns into anything. It might. It might not. But that conversation doesn’t exist if I hadn’t shipped.&lt;/p&gt;

&lt;p&gt;That’s the honest version of “launching was worth it.” Not “users flooded in.” Not “went viral.” Just — one door opened that wasn’t open before. What’s behind it, I don’t know yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, overrated?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Depends on what you were buying.&lt;/p&gt;

&lt;p&gt;If you bought “build in public and launch day will fix your distribution problem” — yes, overrated. For most of us, it won’t. The loudest voices in build-in-public already had distribution before they started building in public. The causality runs the opposite direction from what it looks like.&lt;/p&gt;

&lt;p&gt;If you bought “ship, write honestly, and over enough months some small number of useful things will happen that wouldn’t have otherwise” — probably not overrated. Just much slower than the Twitter threads suggest.&lt;/p&gt;

&lt;p&gt;The post-launch phase I’m in now doesn’t have a 24-hour feedback loop. It has a months-long one. I won’t know if building in public worked for me until it’s been twelve months and I can count: how many emails like that one did I get? How many turned into something? How many people who saw a Medium post in April 2026 eventually trialed the product in September?&lt;/p&gt;

&lt;p&gt;Ask me again in a year.&lt;/p&gt;

&lt;p&gt;Until then, I’m going to keep shipping, keep writing, and try to stop measuring myself by launch-day numbers that were always going to be small for someone with my background.&lt;/p&gt;

&lt;p&gt;The door opened. That’s all I know right now.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>I’m a 25-Year Engineer Who Never Did Marketing. Here’s What My SaaS Launch Is Teaching Me.</title>
      <dc:creator>Aritomo Fukuda</dc:creator>
      <pubDate>Tue, 28 Apr 2026 12:58:31 +0000</pubDate>
      <link>https://dev.to/aritomofukuda/im-a-25-year-engineer-who-never-did-marketing-heres-what-my-saas-launch-is-teaching-me-32hf</link>
      <guid>https://dev.to/aritomofukuda/im-a-25-year-engineer-who-never-did-marketing-heres-what-my-saas-launch-is-teaching-me-32hf</guid>
      <description>&lt;h2&gt;
  
  
  Shipping was familiar. Marketing is a separate craft — and I’m starting at zero.
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwau9jg0crst9d973x1p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwau9jg0crst9d973x1p.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For twenty-five years, I’ve been an engineer.&lt;/p&gt;

&lt;p&gt;I’ve written code in a lot of languages, debugged systems at 2 AM, shipped features to production and watched them run for years. During all of that, I have done approximately zero marketing.&lt;/p&gt;

&lt;p&gt;Last week, I launched my SaaS on Product Hunt. A week later, I still have zero paying users.&lt;/p&gt;

&lt;p&gt;This isn’t a post about a comeback. I don’t have one yet. This is a post about everything I didn’t know I didn’t know, written from inside not knowing. If you’re an engineer who might one day sit where I’m sitting, maybe it’s useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The misunderstanding&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For most of my career, I thought of marketing as something that happened after engineering. You build the thing, then “the marketing people” do their work, then users arrive.&lt;/p&gt;

&lt;p&gt;The mental model looked like this: build → launch → grow.&lt;/p&gt;

&lt;p&gt;I wasn’t dismissive of marketing. I just thought of it the way a software engineer might think of printer repair: important to somebody, definitely not me.&lt;/p&gt;

&lt;p&gt;Now I’m doing all of it myself, and the mental model has quietly collapsed.&lt;/p&gt;

&lt;p&gt;Marketing isn’t what happens after engineering. Marketing is what happens instead of engineering, for weeks at a time, when the product is already good enough and no one knows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Five things I got wrong&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s what twenty-five years of engineering did not prepare me for.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I thought the product would speak for itself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It won’t. A good product is a precondition for marketing to work — not a replacement for it. I’d heard this advice a hundred times. I hadn’t internalized it until I watched my Product Hunt page start at #41 early on launch day, drift into the 50s by the time the 24-hour window closed, and end with seven votes total — six from strangers, one from me. Zero comments. Meanwhile, products I thought were objectively messier got upvoted by friend groups I don’t have.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I built features when I should have written sentences.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I started building the product in earnest just over two weeks before launch. I didn’t start rewriting the landing page copy until the Monday of launch week.&lt;/p&gt;

&lt;p&gt;A few days after going live, two different sources told me the same thing, independently. One was a founder I’d asked to look at the page. He said: “This copy reads like AI wrote it. Rewrite it.” The other was an AI-powered landing page review tool built by another founder — I’d run my page through it, and it came back with the same verdict.&lt;/p&gt;

&lt;p&gt;An AI tool caught the AI-written copy. They were both right.&lt;/p&gt;

&lt;p&gt;I’d spent just over two weeks on the product. A few days on the page that explains the product. Nobody was going to notice the two weeks of features. Everyone noticed the few days of copy.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I didn’t build an audience while I was building the product.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is the most common advice in indie hacker circles. “Build in public.” I understood the words. I did not understand the compounding.&lt;/p&gt;

&lt;p&gt;You don’t build an audience in the week of launch. You build it in the year before. Starting the month of launch is starting too late, and I started later than that.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I confused “submitting to directories” with “doing marketing.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Become a Medium member&lt;br&gt;
In the past week, I’ve submitted my SaaS to sixteen directories, counting the ones still pending. Some approved instantly. Some will publish me in May. Most will send me a small trickle of traffic.&lt;/p&gt;

&lt;p&gt;Submitting to a directory is a box you tick. Doing marketing is a relationship you build. They are not the same thing, and I had them confused in my head for longer than I’d like to admit.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;I treated launch day as marketing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Launch day is the starting gun. It isn’t the race. I had spent so much energy preparing for the gun that I hadn’t really thought about the twenty-six miles after it.&lt;/p&gt;

&lt;p&gt;Turns out, the twenty-six miles is the whole job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What CS didn’t teach (but probably should)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Computer science taught me a lot. It taught me how to think about complexity, how to decompose problems, how to reason about correctness. It did not teach me any of this:&lt;/p&gt;

&lt;p&gt;Marketing is empathy, compressed into a sentence. You aren’t explaining the product. You’re answering “why should this person care?” before they’ve asked. This is a skill with a learning curve — and I was starting on day one of the curve.&lt;br&gt;
Distribution is a feature. The product with the best distribution will usually beat the product with the best architecture. This feels deeply unfair to engineers. It is also true, and rearranging yourself around it is part of the work.&lt;br&gt;
Writing is a force multiplier. Every engineer I respect has opinions on variable names. Very few have opinions on the sentences that go on landing pages. Those are the same kind of skill, applied differently.&lt;br&gt;
Positioning is a product decision, not a marketing decision. What you say your product is for changes what the product becomes. Positioning doesn’t happen after the build. It’s part of the build.&lt;br&gt;
“Building in public” is a craft, not a hashtag. Sharing what you’re working on in a way that actually builds an audience is a skill. Posting screenshots into the void is not. I did the second one for a while and was confused when it didn’t work.&lt;br&gt;
What I’m trying now&lt;/p&gt;

&lt;p&gt;Here’s what I’m doing with the zero users, in case any of it is useful.&lt;/p&gt;

&lt;p&gt;I’m writing. This essay is part of that. If I can’t run paid ads and I don’t have a big audience, the one thing I can do is leave behind honest, useful posts about what I’m learning. Maybe someone finds one in six months and finds me through it.&lt;/p&gt;

&lt;p&gt;I’m talking to people. Not through Product Hunt comments — I got zero of those. Through emails. Through conversations that started on other platforms. Through every small interaction with someone who might have the problem my product solves. I’m not naturally good at this. I’m getting better.&lt;/p&gt;

&lt;p&gt;I’m aware of the itch, but not acting on it. There’s a temptation, when you’re quiet, to add features that sound impressive in tweets. I feel it. Honestly, there are things I already know I want to fix. But right now, there are other things that need more attention, so those fixes are sitting in a list. I’m not resisting the itch — I’m just aware I can’t scratch it this week.&lt;/p&gt;

&lt;p&gt;I’m accepting the timeline. Nothing I do this week will show up as revenue this week. That’s the part that’s hardest for an engineer. In engineering, you write the code, you run it, you see the result. In marketing, you write the code, you run it, and you see the result three months later, maybe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A small note, from me to past-me&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are an engineer who has spent twenty years, or twenty-five, or thirty, building things — and you’ve never really done marketing — here’s what I’d tell myself from a year ago:&lt;/p&gt;

&lt;p&gt;You aren’t behind. You’re at the beginning. The beginning of anything is uncomfortable, and it’s especially uncomfortable right after spending a long time in the adjacent craft.&lt;/p&gt;

&lt;p&gt;You aren’t going to be bad at marketing because of something you lack. You’re going to be bad at it because you’ve never done it. Though, to be honest, knowing this hasn’t translated into results on my end yet. I’ll let you know when it does.&lt;/p&gt;

&lt;p&gt;Sit with the discomfort. Write a lot of sentences. Talk to a lot of people. Ship the product — and also ship the words about the product.&lt;/p&gt;

&lt;p&gt;I’m a week in. I have zero users. I’m fine. I’m learning.&lt;/p&gt;

&lt;p&gt;If you want to follow along, I’ll keep writing as I figure it out. If any of this resonated, you can try the tool I’ve been building at originbrief.app. Or just read the next post. Either one helps.&lt;/p&gt;

&lt;p&gt;— Aritomo&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
