<?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: 3Three</title>
    <description>The latest articles on Forem by 3Three (@3three).</description>
    <link>https://forem.com/3three</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%2F3934830%2Ffdf65179-0a26-41b8-a739-d8acd4914fc9.png</url>
      <title>Forem: 3Three</title>
      <link>https://forem.com/3three</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/3three"/>
    <language>en</language>
    <item>
      <title>I Built 5 APIs in a Week as a Side Project — Here's Everything I Learned</title>
      <dc:creator>3Three</dc:creator>
      <pubDate>Wed, 20 May 2026 17:45:12 +0000</pubDate>
      <link>https://forem.com/3three/i-built-5-apis-in-a-week-as-a-side-project-heres-everything-i-learned-432p</link>
      <guid>https://forem.com/3three/i-built-5-apis-in-a-week-as-a-side-project-heres-everything-i-learned-432p</guid>
      <description>&lt;h3&gt;
  
  
  How it started
&lt;/h3&gt;

&lt;p&gt;I've been wanting to build something with FastAPI for a while and kept putting it off. Then one day I just started, and somehow ended up building 5 APIs over the course of a week. Wasn't really the plan but each one gave me an idea for the next.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I built
&lt;/h3&gt;

&lt;p&gt;Five APIs, each solving a different problem:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TextPulse&lt;/strong&gt; — Text analytics. Sentiment analysis, keyword extraction, readability scoring, entity extraction, language detection, summarization. 7 endpoints that replace a bunch of separate tools.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ShieldCheck&lt;/strong&gt; — Security toolkit. Password strength with pattern detection, crack time estimation, email validation, breach checking, TOTP 2FA, token generation. 11 endpoints covering basically everything you need for auth security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RankRadar&lt;/strong&gt; — SEO analyzer. Keywords, readability, headings, meta tags, links, density, titles, slugs, schema markup, competitor comparison. 12 endpoints. Built this because SEO tools are way overpriced for what they do.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ProseGuard&lt;/strong&gt; — AI content detection. Per-sentence detection, writing pattern analysis, vocabulary scoring, style fingerprinting, authorship comparison, humanize scoring. 11 endpoints. Probably the most technically interesting one.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SocialScrape&lt;/strong&gt; — Social media analytics. Engagement prediction, viral scoring, hashtags, hooks, posting times, audience matching, cross-platform adaptation. 13 endpoints for 6 platforms.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;54 endpoints total. All with free tiers.&lt;/p&gt;

&lt;h3&gt;
  
  
  The stack
&lt;/h3&gt;

&lt;p&gt;Same architecture for all five:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server.py          — Everything in one file
requirements.txt   — fastapi, uvicorn, pydantic (that's it)
Procfile           — For deployment
.python-version    — Pin Python 3.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No databases. No external API calls. No ML models. Each API is pure Python logic. I know that sounds limiting but it actually covers more ground than you'd think — regex, statistical analysis, Counter, and math.log2 go a surprisingly long way.&lt;/p&gt;

&lt;p&gt;Deployed on Railway (one API) and Render (the other four). Both free tiers. Total hosting cost: $0.&lt;/p&gt;

&lt;h3&gt;
  
  
  The interesting bits
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ProseGuard's detection approach:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of training a model, I analyze writing patterns statistically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI overuses certain phrases ("it's important to note", "furthermore", "leverage") — I check for 100+ of these&lt;/li&gt;
&lt;li&gt;AI writes sentences of very similar length — I measure the coefficient of variation&lt;/li&gt;
&lt;li&gt;AI has lower hapax legomena ratio (fewer words used only once)&lt;/li&gt;
&lt;li&gt;Humans use contractions, slang, and expressive punctuation more&lt;/li&gt;
&lt;li&gt;AI sentence starters are less diverse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not perfect, but it catches a lot and it's transparent — you can see exactly why it flagged something.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SocialScrape's viral scoring:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I categorized viral triggers into 7 psychological categories (emotional, curiosity, relatability, value, controversy, social proof, urgency) and score content against each one. The research is pretty clear that viral content typically hits 3+ categories simultaneously.&lt;/p&gt;

&lt;h3&gt;
  
  
  Things that tripped me up
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Python 3.14:&lt;/strong&gt; Don't use it for FastAPI projects yet. pydantic-core uses Rust bindings through PyO3, and PyO3 maxes out at Python 3.13. Wasted an hour on this before realizing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RapidAPI media types:&lt;/strong&gt; If your endpoint expects JSON but RapidAPI is set to &lt;code&gt;text/plain&lt;/code&gt;, you'll get 422 errors. Check the media type on every endpoint definition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing locally vs through the marketplace:&lt;/strong&gt; Your API can work perfectly on localhost and still fail through RapidAPI because of how they proxy requests. Always test through the actual marketplace.&lt;/p&gt;

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

&lt;p&gt;Mostly just seeing if people find these useful. I'm planning to add more endpoints based on feedback and maybe build a couple more APIs. The cool thing about this architecture is that adding a new endpoint is just writing a function and adding a route — deploy and it's live in minutes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;All have free tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TextPulse&lt;/strong&gt; (text analytics): &lt;a href="https://rapidapi.com/gagebilliot20/api/textpulse" rel="noopener noreferrer"&gt;https://rapidapi.com/gagebilliot20/api/textpulse&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ShieldCheck&lt;/strong&gt; (security): &lt;a href="https://rapidapi.com/gagebilliot20/api/shieldcheck" rel="noopener noreferrer"&gt;https://rapidapi.com/gagebilliot20/api/shieldcheck&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RankRadar&lt;/strong&gt; (SEO): &lt;a href="https://rapidapi.com/gagebilliot20/api/rankradar" rel="noopener noreferrer"&gt;https://rapidapi.com/gagebilliot20/api/rankradar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ProseGuard&lt;/strong&gt; (AI detection): &lt;a href="https://rapidapi.com/gagebilliot20/api/proseguard" rel="noopener noreferrer"&gt;https://rapidapi.com/gagebilliot20/api/proseguard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SocialScrape&lt;/strong&gt; (social media): &lt;a href="https://rapidapi.com/gagebilliot20/api/socialscrape" rel="noopener noreferrer"&gt;https://rapidapi.com/gagebilliot20/api/socialscrape&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy to answer questions about any of it.&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>fastapi</category>
      <category>sideprojects</category>
    </item>
  </channel>
</rss>
