<?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>Forem: Alexander Clapp</title>
    <description>The latest articles on Forem by Alexander Clapp (@alexander_clapp_695234c85).</description>
    <link>https://forem.com/alexander_clapp_695234c85</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%2F3859768%2F96ea937d-68fa-4db9-afdc-d9585d68881c.png</url>
      <title>Forem: Alexander Clapp</title>
      <link>https://forem.com/alexander_clapp_695234c85</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/alexander_clapp_695234c85"/>
    <language>en</language>
    <item>
      <title>I Built a 387-API Directory in Days Using Claude Code</title>
      <dc:creator>Alexander Clapp</dc:creator>
      <pubDate>Sun, 05 Apr 2026 13:07:47 +0000</pubDate>
      <link>https://forem.com/alexander_clapp_695234c85/i-built-a-387-api-directory-in-days-using-claude-code-2lao</link>
      <guid>https://forem.com/alexander_clapp_695234c85/i-built-a-387-api-directory-in-days-using-claude-code-2lao</guid>
      <description>&lt;p&gt;I ran a VC-backed startup. Raised money. Had a team of hundreds at peak. The whole playbook.&lt;/p&gt;

&lt;p&gt;Now I build side projects solo. Just me and Claude Code. And I'm shipping faster than I ever did with a full company.&lt;/p&gt;

&lt;p&gt;This is the story of the first few days.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem I kept seeing
&lt;/h2&gt;

&lt;p&gt;Every time an AI coding agent - Claude Code, Cursor, Devin - needs to pick an API for a task, one of two things happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent guesses from training data (often outdated)&lt;/li&gt;
&lt;li&gt;The developer hardcodes a choice before the agent even starts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Neither is great. There's no structured, queryable data layer that tells an agent: "here are the email APIs, here's what they cost, here's how they compare on setup time, here's what other developers think of them."&lt;/p&gt;

&lt;p&gt;So I built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I shipped
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://clirank.dev" rel="noopener noreferrer"&gt;CLIRank&lt;/a&gt; is a directory of 387 APIs across 47 categories. Every entry has pricing data, setup time estimates, compatibility info, reviews, and side-by-side comparisons.&lt;/p&gt;

&lt;p&gt;The key decision: make it API-first. Any agent can query it with a simple HTTP call. No auth. No SDK. No installation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl clirank.dev/api/compare?category&lt;span class="o"&gt;=&lt;/span&gt;email
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns structured JSON comparing every email API in the directory. Pricing tiers, free limits, setup complexity, community ratings. An agent can parse that and make an informed choice without opening a browser.&lt;/p&gt;

&lt;p&gt;There's also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;GET /api/package?name=resend&lt;/code&gt; - package details, versions, compatibility&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/categories&lt;/code&gt; - browse all 47 categories&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GET /api/search?q=auth&lt;/code&gt; - search across the directory&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;POST /api/reviews&lt;/code&gt; - agents and humans can submit reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last one is the part I'm most excited about. Agents using APIs in production can report back what actually works. Over time, this builds a feedback loop that no static directory has.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tech stack
&lt;/h2&gt;

&lt;p&gt;Nothing fancy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Next.js&lt;/strong&gt; on Fly.io ($5/month)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; on a Fly volume for package caching and reviews&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static JSON&lt;/strong&gt; (&lt;code&gt;apis.json&lt;/code&gt;) as the source of truth for the directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server&lt;/strong&gt; so Claude Code can query CLIRank natively&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total infrastructure cost: $5/month for hosting, $12/year for the domain. That's it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Claude Code changed the workflow
&lt;/h2&gt;

&lt;p&gt;I'm not going to pretend I wrote every line myself. Claude Code was the only "team member" on this project. Here's what that actually looked like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Claude Code was great at:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scaffolding API routes and data schemas fast&lt;/li&gt;
&lt;li&gt;Writing comparison logic across API categories&lt;/li&gt;
&lt;li&gt;Building the MCP server integration&lt;/li&gt;
&lt;li&gt;Fixing bugs I'd have spent hours debugging manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What I still had to do:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curate the actual API data (what to include, how to score it)&lt;/li&gt;
&lt;li&gt;Make product decisions (API-first vs web-first, what endpoints to expose)&lt;/li&gt;
&lt;li&gt;Write the docs&lt;/li&gt;
&lt;li&gt;Figure out distribution (which is always the hard part)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest takeaway: Claude Code doesn't replace product thinking. It replaces the team you'd need to execute on that thinking. The bottleneck shifted from "can we build this?" to "should we build this?"&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;p&gt;What shipped in days, solo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;387 API entries curated across 47 categories&lt;/li&gt;
&lt;li&gt;5 API endpoints live and documented&lt;/li&gt;
&lt;li&gt;MCP server for native Claude Code integration&lt;/li&gt;
&lt;li&gt;Comparison pages for email, payments, auth, and more&lt;/li&gt;
&lt;li&gt;Full docs site at &lt;a href="https://clirank.dev/docs" rel="noopener noreferrer"&gt;clirank.dev/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What it costs to run:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fly.io hosting&lt;/td&gt;
&lt;td&gt;$5/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain&lt;/td&gt;
&lt;td&gt;$12/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude Code&lt;/td&gt;
&lt;td&gt;Existing Pro subscription&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Employees&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;The API is live. The directory is growing. Next priorities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;More agent-submitted reviews&lt;/strong&gt; - this is the flywheel that makes CLIRank different from a static list&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package intelligence&lt;/strong&gt; - real-time npm/PyPI version data so agents don't guess at compatibility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better coverage&lt;/strong&gt; - there are obvious gaps in the directory&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;If you're building with coding agents and want to see what CLIRank looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Compare email APIs&lt;/span&gt;
curl clirank.dev/api/compare?category&lt;span class="o"&gt;=&lt;/span&gt;email

&lt;span class="c"&gt;# Get package details&lt;/span&gt;
curl clirank.dev/api/package?name&lt;span class="o"&gt;=&lt;/span&gt;resend

&lt;span class="c"&gt;# Search the directory&lt;/span&gt;
curl clirank.dev/api/search?q&lt;span class="o"&gt;=&lt;/span&gt;payments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Docs: &lt;a href="https://clirank.dev/docs" rel="noopener noreferrer"&gt;clirank.dev/docs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're building with AI coding tools, I'm curious: what's the most annoying part of the API integration workflow for you? What would you actually want from a tool like this?&lt;/p&gt;

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