<?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: Daniel Dong</title>
    <description>The latest articles on DEV Community by Daniel Dong (@daniel_dong_sdwgw041).</description>
    <link>https://dev.to/daniel_dong_sdwgw041</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3942570%2F5388d5e5-05b2-495b-9180-83a4ffa72138.jpg</url>
      <title>DEV Community: Daniel Dong</title>
      <link>https://dev.to/daniel_dong_sdwgw041</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daniel_dong_sdwgw041"/>
    <language>en</language>
    <item>
      <title>The fastest way to go from "what's an AI API" to "my app uses four models."</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Wed, 12 Aug 2026 14:29:35 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/the-fastest-way-to-go-from-whats-an-ai-api-to-my-app-uses-four-models-1je0</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/the-fastest-way-to-go-from-whats-an-ai-api-to-my-app-uses-four-models-1je0</guid>
      <description>&lt;p&gt;The fastest way to go from "what's an AI API" to "my app uses four models."&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Step&lt;/th&gt;
      &lt;th&gt;What happens&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Step 1: Playground&lt;/td&gt;
      &lt;td&gt;No signup. 15 models. Pick one. Type words. See response.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Step 2: Register&lt;/td&gt;
      &lt;td&gt;GitHub → authorize → done. 5 seconds.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Step 3: Onboarding&lt;/td&gt;
      &lt;td&gt;API key + curl + Python code. Copy, paste, run.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Step 4: Production&lt;/td&gt;
      &lt;td&gt;Same code. Different model string.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 1 → Step 2: The one click that matters
&lt;/h2&gt;

&lt;p&gt;No email. No password. No 6-digit code. You try the playground, you&lt;br&gt;
like it, you click GitHub → authorize → you have a key. Five seconds.&lt;/p&gt;

&lt;p&gt;Before GitHub OAuth, registration was 6 steps. 1.4% completion rate.&lt;br&gt;
After: one click. 19% conversion from playground to registered user.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2 → Step 3: The bridge
&lt;/h2&gt;

&lt;p&gt;After login, you don't land on an empty dashboard. You land on a page&lt;br&gt;
that says "Your account is ready." Your API key is right there. A curl&lt;br&gt;
command you can paste into a terminal. Python SDK code to copy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://aibridge-api.com/v1/chat/completions &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer mb-xxx"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"model":"deepseek-chat","messages":[{"role":"user","content":"Hello"}]}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;30 seconds from login to first response. The 68% drop-off between&lt;br&gt;
registration and first API call? That's the gap this page closes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3 → Step 4: The one-string change
&lt;/h2&gt;

&lt;p&gt;Once you've run the curl command and seen it work, production is this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import openai
client = openai.OpenAI(
    api_key="mb-xxx",
    base_url="https://aibridge-api.com/v1"
)

# 90% of traffic — $0.27/M
client.chat.completions.create(model="deepseek-chat", messages=msgs)

# Multilingual work
client.chat.completions.create(model="qwen-max", messages=msgs)

# Deep reasoning
client.chat.completions.create(model="glm-4-plus", messages=msgs)

# 1M context, always thinks
client.chat.completions.create(model="kimi-k3", messages=msgs)

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

&lt;/div&gt;



&lt;p&gt;Same import openai. Same .create() call. Same response format.&lt;br&gt;
The only thing that changes is the model string. No new SDKs.&lt;br&gt;
No new environment variables. No new accounts.&lt;/p&gt;

&lt;p&gt;The stuff that supports all of this&lt;br&gt;
Prompt library — 24 ready-to-use prompts. Six categories. "Find&lt;br&gt;
bugs → Kimi K3." "Translate → Qwen Max." One click fills the&lt;br&gt;
playground.&lt;/p&gt;

&lt;p&gt;Dashboard — usage bar that goes from polite to urgent. Blue below&lt;br&gt;
50%, orange at 80%, red flashing at 90%. The upgrade button gets&lt;br&gt;
harder to miss exactly when you need to act.&lt;/p&gt;

&lt;p&gt;Anti-bot protection — 5 lines of in-memory rate limiting took&lt;br&gt;
verification endpoint abuse from 2,600 requests/day to zero.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt; (step 1)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt; (if you need ideas)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt; (step 2, one click)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp58nwpj9yscmdx0tripy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp58nwpj9yscmdx0tripy.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno4vhvgm9ur2v705evdh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fno4vhvgm9ur2v705evdh.png" alt="2" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21qoo9jc0ryc7qvzftxv.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21qoo9jc0ryc7qvzftxv.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4a9d0o8yyq63zyqo7qt2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4a9d0o8yyq63zyqo7qt2.png" alt="4" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>kimi</category>
    </item>
    <item>
      <title>I migrated my codebase from 1 AI provider to 4. Here's every line I changed.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Tue, 11 Aug 2026 11:57:55 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-migrated-my-codebase-from-1-ai-provider-to-4-heres-every-line-i-changed-36p8</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-migrated-my-codebase-from-1-ai-provider-to-4-heres-every-line-i-changed-36p8</guid>
      <description>&lt;p&gt;I migrated my codebase from 1 AI provider to 4. Here's every line I changed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Before
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-deepseek-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# After
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;msgs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the migration. One string in the base_url. One string in the&lt;br&gt;
api_key. The import openai, the .create() signature, the response&lt;br&gt;
parsing, the streaming logic, the error handling — all unchanged.&lt;/p&gt;

&lt;p&gt;But now I can do this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Fast and cheap ($0.27/M) — 90% of traffic
client.chat.completions.create(model="deepseek-chat", messages=msgs)

# Multilingual, 128K context
client.chat.completions.create(model="qwen-max", messages=msgs)

# Complex Chinese reasoning
client.chat.completions.create(model="glm-4-plus", messages=msgs)

# 1M context, always reasoning
client.chat.completions.create(model="kimi-k3", messages=msgs)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four providers. Four different strengths. Same function call. Same&lt;br&gt;
response format. No SDK switches. No new environment variables.&lt;/p&gt;
&lt;h2&gt;
  
  
  The routing pattern that saves money
&lt;/h2&gt;

&lt;p&gt;Most apps don't need the most powerful model for every request. My&lt;br&gt;
app does classification, summarization, simple generation, and the&lt;br&gt;
occasional complex debugging session. Four types of work. Four models.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def pick_model(task):
    return (
        "deepseek-chat" if task in ("classify","summarize","simple")
        else "qwen-max" if task in ("translate",)
        else "glm-4-plus" if task in ("reason",)
        else "kimi-k3" if task in ("review_codebase",)
        else "deepseek-chat"
    )

client.chat.completions.create(model=pick_model(task), messages=msgs)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before routing: every request hit the 7/Mmodel.Monthlybill: 700.&lt;br&gt;
After routing: 90% of requests hit the 0.27/Mmodel.Bill: 120.&lt;/p&gt;

&lt;p&gt;Same quality on classification and summarization. The cheap model&lt;br&gt;
is indistinguishable from the expensive one on those tasks. The only&lt;br&gt;
difference is the price tag.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kimi K3: the one worth upgrading for
&lt;/h2&gt;

&lt;p&gt;When a task needs real reasoning power and a massive context window,&lt;br&gt;
K3 is the only model I reach for. 1M token context — I paste entire&lt;br&gt;
modules and ask it to trace race conditions through the call chain.&lt;br&gt;
It reads every line, runs an automatic reasoning pass, then gives me&lt;br&gt;
locations with suggested fixes.&lt;/p&gt;

&lt;p&gt;No "think mode ON/OFF" toggle. No prompt engineering. No configuration.&lt;br&gt;
Just send the prompt. K3 thinks, then answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  The supporting cast
&lt;/h2&gt;

&lt;p&gt;*&lt;em&gt;Free playground *&lt;/em&gt;— 15 models, 10 requests/day, no signup. Try K3&lt;br&gt;
without creating an account. If you like it, GitHub OAuth gets you a&lt;br&gt;
key in five seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt library&lt;/strong&gt; — 24 ready-to-use prompts across 6 categories.&lt;br&gt;
Each one recommends the right model. "Find bugs → Kimi K3." "Translate&lt;br&gt;
→ Qwen Max." One click fills the playground.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Onboarding&lt;/strong&gt; — after login, your API key is on the screen with a&lt;br&gt;
copy button. A curl command you can paste immediately. Python SDK&lt;br&gt;
code. 30 seconds to first response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard&lt;/strong&gt; — usage bar that escalates. Polite below 50%. Orange at&lt;br&gt;
80%. Red and flashing at 90%. The upgrade button gets harder to miss&lt;br&gt;
exactly when you need to act.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card. One import openai.&lt;br&gt;
One endpoint. 15 models.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm7oxtfazh6cwgps4fbs0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fm7oxtfazh6cwgps4fbs0.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uyb15y9qxho3ge8sveh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7uyb15y9qxho3ge8sveh.png" alt="2" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fetrfa96e9drsf1s3s1kg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fetrfa96e9drsf1s3s1kg.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdjm2fx4dvlqj8omycawy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdjm2fx4dvlqj8omycawy.png" alt="4" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>kimi</category>
    </item>
    <item>
      <title>24 prompts. 6 categories. One static HTML file. Zero backend changes.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Tue, 11 Aug 2026 02:19:45 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/24-prompts-6-categories-one-static-html-file-zero-backend-changes-1o38</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/24-prompts-6-categories-one-static-html-file-zero-backend-changes-1o38</guid>
      <description>&lt;p&gt;24 prompts. 6 categories. One static HTML file. Zero backend changes.&lt;/p&gt;

&lt;p&gt;Here's why I built a prompt library instead of more API features.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem I couldn't ignore
&lt;/h2&gt;

&lt;p&gt;68% of my users registered, got an API key, and then... nothing.&lt;br&gt;
Zero API calls. Zero tokens. They had 15 AI models at their&lt;br&gt;
fingertips and never used a single one.&lt;/p&gt;

&lt;p&gt;I checked the logs. I checked the docs. The API was working. The docs&lt;br&gt;
were clear. The key was active. People just didn't know what to ask.&lt;/p&gt;

&lt;p&gt;A blank input box is not onboarding. It's a test. And most people&lt;br&gt;
fail it — not because they can't think of something, but because&lt;br&gt;
they don't know where to start.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;A page with 24 ready-to-use prompts organized in 6 categories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;💻 Code — Find bugs, refactor, explain, add error handling
📝 Content — Summarize, translate, rewrite
🏷️ Classification — Sentiment, categorize tickets, detect language
🔍 Analysis — Compare approaches, review API design, debug logs
✍️ Writing — Write API docs, README, commit messages
📊 Data — Generate SQL, parse JSON, convert CSV schema
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each card does three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Shows a prompt&lt;/strong&gt; — what to paste into the API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommends a model&lt;/strong&gt; — Kimi K3 for code review (1M context,
always reasoning), DeepSeek for classification ($0.27/M), Qwen
for translation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gives you one-click actions&lt;/strong&gt; — Try in Playground (pre-fills
the model, system prompt, and message), Copy as curl, Copy as
Python&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One click from browsing to running. No guesswork.&lt;/p&gt;

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

&lt;p&gt;The prompt library solves three problems at once:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 1: "I don't know what to ask."&lt;/strong&gt;&lt;br&gt;
→ Here are 24 things. Pick one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 2: "I don't know which model to use."&lt;/strong&gt;&lt;br&gt;
→ Every prompt says which model. You'll learn by doing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem 3: "I don't know how to call the API."&lt;/strong&gt;&lt;br&gt;
→ Copy as curl. Copy as Python. Paste. Run. Done.&lt;/p&gt;

&lt;p&gt;It's also the best kind of content — it's useful whether or not you&lt;br&gt;
use the product. Someone could copy a prompt, paste it into any&lt;br&gt;
OpenAI-compatible endpoint, and it works. But if they do it through&lt;br&gt;
our playground, they experience the full product in one click.&lt;/p&gt;
&lt;h2&gt;
  
  
  The numbers
&lt;/h2&gt;

&lt;p&gt;The entire prompt library is one HTML file. 18KB. No new API routes.&lt;br&gt;
No database table. No backend changes. Took half a day to build and&lt;br&gt;
ship.&lt;/p&gt;

&lt;p&gt;It lives at aibridge-api.com/prompts.html. Link in the playground&lt;br&gt;
header. Link in the dashboard nav. Accessible whether you're logged&lt;br&gt;
in or not.&lt;/p&gt;
&lt;h2&gt;
  
  
  What's behind the prompts
&lt;/h2&gt;

&lt;p&gt;15 Chinese AI models. One OpenAI-compatible endpoint. Free playground&lt;br&gt;
with no signup — 10 requests/day, all models. GitHub OAuth login in&lt;br&gt;
one click. Instant onboarding after login with your key, a curl&lt;br&gt;
command, and Python code all on one page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fggiq0z475e53ohysu28y.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fggiq0z475e53ohysu28y.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbokszno9i7goyqn5pxq9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbokszno9i7goyqn5pxq9.png" alt="2" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6hhq9ckjqw4bdsuh1lcl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6hhq9ckjqw4bdsuh1lcl.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz5jaahlxnh2xobnkyzcn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz5jaahlxnh2xobnkyzcn.png" alt="4" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>prompts</category>
    </item>
    <item>
      <title>I stopped asking people to sign up for my API. I asked them to try it instead.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Mon, 10 Aug 2026 02:25:21 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-stopped-asking-people-to-sign-up-for-my-api-i-asked-them-to-try-it-instead-2g16</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-stopped-asking-people-to-sign-up-for-my-api-i-asked-them-to-try-it-instead-2g16</guid>
      <description>&lt;p&gt;I stopped asking people to sign up for my API. I asked them to try it instead.&lt;/p&gt;

&lt;p&gt;One sentence. One button. One page. That change moved every metric I care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before: Sign up first
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Landing page → "Get Started Free" → Email → Password →
Verify inbox → 6-digit code → API key → Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Six steps before the developer feels a single token of value.&lt;br&gt;
68% of people who registered never sent an API request. Not because&lt;br&gt;
the API was bad. Because the gap between "I have an account" and&lt;br&gt;
"I just made it do something" was a chasm.&lt;/p&gt;
&lt;h2&gt;
  
  
  After: Try first
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Landing page → "Try Playground →" → Pick a model → Type a prompt →
Response in 800ms → "Want your own key? One click →"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No email. No password. No verification. No dashboard you don't know&lt;br&gt;
how to use. Just a text box and a Send button.&lt;/p&gt;

&lt;p&gt;When they like what they see, GitHub OAuth gets them a key in five&lt;br&gt;
seconds. When they register, an onboarding page hands them their key,&lt;br&gt;
a curl command, and Python SDK code — all copyable — before they&lt;br&gt;
ever see the dashboard.&lt;/p&gt;
&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Registration → first API call&lt;/td&gt;
&lt;td&gt;32%&lt;/td&gt;
&lt;td&gt;35% (and climbing)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visitor → registration&lt;/td&gt;
&lt;td&gt;2.5%&lt;/td&gt;
&lt;td&gt;19%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dormant users (0 tokens)&lt;/td&gt;
&lt;td&gt;68%&lt;/td&gt;
&lt;td&gt;65%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bot verification requests&lt;/td&gt;
&lt;td&gt;2,600/day&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pages surfacing value&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The dormant user number is the one I'm watching most closely. 65% is&lt;br&gt;
still too high. But it moved. Three percentage points after deploying&lt;br&gt;
the onboarding page. The prompt library was the next push — 24&lt;br&gt;
ready-to-use prompts organized by task, each one showing which model&lt;br&gt;
to use and pre-filling the playground in one click.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built to support this
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The playground&lt;/strong&gt; — 15 models, 10 free requests/day, no login. If&lt;br&gt;
you use it and walk away, that's fine. If you use it and want more,&lt;br&gt;
registration is one click. Not a form. Not a funnel. An invitation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The onboarding page&lt;/strong&gt; — after login, you see your API key, a curl&lt;br&gt;
command you can paste immediately, and Python SDK code. Copy, paste,&lt;br&gt;
run. 30 seconds to first response. No docs. No guesswork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The prompt library&lt;/strong&gt; — 24 prompts. Six categories. "Find bugs in this&lt;br&gt;
code → Kimi K3." "Translate to Chinese → Qwen Max." "Write unit tests&lt;br&gt;
→ DeepSeek." Every card has a "Try in Playground" button that fills&lt;br&gt;
the model, system prompt, and message in one click.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The dashboard&lt;/strong&gt; — not just numbers. A usage bar that escalates.&lt;br&gt;
Polite below 50%. Orange at 80%. Red and flashing at 90% with a&lt;br&gt;
full-width upgrade button. You notice it exactly when you need to act.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The anti-bot layer&lt;/strong&gt; — 5 lines of in-memory rate limiting took&lt;br&gt;
verification endpoint abuse from 2,600 requests/day to zero. Not a&lt;br&gt;
feature users see, but one they benefit from every time the server&lt;br&gt;
responds quickly.&lt;/p&gt;
&lt;h2&gt;
  
  
  The model powering it
&lt;/h2&gt;

&lt;p&gt;One &lt;code&gt;import openai&lt;/code&gt;. One endpoint. 15 Chinese AI models.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen-max&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;K3: 1M context, always reasoning. DeepSeek: $0.27/M, fast and cheap.&lt;br&gt;
Qwen: multilingual. GLM-4 Plus: complex Chinese reasoning. Same SDK.&lt;br&gt;
Same response format. Change one string to switch models.&lt;/p&gt;
&lt;h2&gt;
  
  
  The principle
&lt;/h2&gt;

&lt;p&gt;Every page in my product answers exactly one question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Landing     → "What is this?"
Playground  → "Can I try it?"
Onboarding  → "How do I start?"
Dashboard   → "How much have I used?"
Prompts     → "What should I ask?"
Pricing     → "What does it cost?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a page answers zero questions, it doesn't exist. If it answers two,&lt;br&gt;
I split it. Users don't read — they scan for the one thing they need.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt; (try all 15 models, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt; (24 prompts, no signup needed)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszqhmu1veevo9vgdvuxn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fszqhmu1veevo9vgdvuxn.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5olyzt8w5i4p41mkqfxj.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5olyzt8w5i4p41mkqfxj.png" alt="2" width="800" height="636"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flb94n3jx33w1asopgu9l.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flb94n3jx33w1asopgu9l.png" alt="3" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xyh8ngp1ectispntty3.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xyh8ngp1ectispntty3.png" alt="4" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>developers</category>
    </item>
    <item>
      <title>First I killed the signup wall. Then the bots came.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sun, 09 Aug 2026 15:08:50 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/first-i-killed-the-signup-wall-then-the-bots-came-3dg2</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/first-i-killed-the-signup-wall-then-the-bots-came-3dg2</guid>
      <description>&lt;p&gt;First I killed the signup wall. Then the bots came.&lt;/p&gt;

&lt;p&gt;So I killed them too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1: The wall
&lt;/h2&gt;

&lt;p&gt;Three weeks ago I removed the signup wall from my API product. Instead&lt;br&gt;
of email → password → verification code → API key, visitors landed on&lt;br&gt;
a free playground. 15 models. 10 requests/day. No login. No email.&lt;br&gt;
No friction.&lt;/p&gt;

&lt;p&gt;It worked. Registrations jumped from 1 per week to 14. 86% of new&lt;br&gt;
signups were real Gmail accounts. Conversion from playground to&lt;br&gt;
registration hit 19%.&lt;/p&gt;

&lt;p&gt;Then something else showed up.&lt;/p&gt;
&lt;h2&gt;
  
  
  Part 2: The bots
&lt;/h2&gt;

&lt;p&gt;I checked the server logs and found &lt;code&gt;/auth/send-verification-code&lt;/code&gt;&lt;br&gt;
getting hammered. 2,600 requests per day. Every single day.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Jul 17: 2,634
Jul 18: 2,713
Jul 19: 2,642
Jul 20: 2,550
Jul 21: 2,745
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's 47-60% of all server traffic. The bots were hitting the&lt;br&gt;
verification endpoint with disposable emails, rotating IPs, never&lt;br&gt;
actually completing registration. Just burning CPU cycles and&lt;br&gt;
wasting bandwidth.&lt;/p&gt;

&lt;p&gt;At first I thought "who cares, they're not getting through." But&lt;br&gt;
2,600 requests/day isn't free. On a 1-core VPS, that's real load.&lt;br&gt;
And it makes real traffic analysis impossible when half your data&lt;br&gt;
is noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 3: The fix (5 lines)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Before: no rate limit
&lt;/span&gt;&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/auth/send-verification-code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_verification_code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# generate code, send email...
&lt;/span&gt;
&lt;span class="c1"&gt;# After: one check
&lt;/span&gt;&lt;span class="nd"&gt;@app.post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/auth/send-verification-code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;send_verification_code&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;client_ip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;host&lt;/span&gt;
    &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;_verify_code_rate_lock&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;last_req&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_verify_code_rate_limits&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;last_req&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;HTTPException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;429&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Too many requests&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;_verify_code_rate_limits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;client_ip&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;

    &lt;span class="n"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;email&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# generate code, send email...
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. A dictionary. A lock. A timestamp check. 1 request per&lt;br&gt;
minute per IP. No Redis. No external rate limiter. No database.&lt;br&gt;
Five lines of in-memory Python.&lt;/p&gt;

&lt;p&gt;I also added a domain blocklist. Ten seconds of grep showed the top&lt;br&gt;
abusers: disposable email domains like mailinator, guerrillamail,&lt;br&gt;
and a few others. Blocked at registration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 4: The result
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Week&lt;/th&gt;
      &lt;th&gt;Verification requests/day&lt;/th&gt;
      &lt;th&gt;Server load&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Jul 17-23 (before)&lt;/td&gt;
      &lt;td&gt;~2,600&lt;/td&gt;
      &lt;td&gt;47-60% bot traffic&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Jul 24-31 (rate limit deployed)&lt;/td&gt;
      &lt;td&gt;~2,500&lt;/td&gt;
      &lt;td&gt;bot slowed but IPs rotated&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Aug 1-4 (rate limit + domain block)&lt;/td&gt;
      &lt;td&gt;~1,600 → 0&lt;/td&gt;
      &lt;td&gt;decay then silence&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Aug 5-9 (now)&lt;/td&gt;
      &lt;td&gt;0-2&lt;/td&gt;
      &lt;td&gt;bot traffic eliminated&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;From 17,000 bot requests per week to zero. Five lines of code. One&lt;br&gt;
domain blocklist.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern
&lt;/h2&gt;

&lt;p&gt;This is the second time I've learned the same lesson: you don't need&lt;br&gt;
a complex solution for a simple problem.&lt;/p&gt;

&lt;p&gt;Removing the signup wall wasn't a multi-month redesign. It was one&lt;br&gt;
static HTML page with an 80-line FastAPI endpoint that bypassed auth.&lt;/p&gt;

&lt;p&gt;Killing the bots wasn't a rate-limiting service or a CAPTCHA&lt;br&gt;
integration. It was five lines of in-memory rate limiting and a set&lt;br&gt;
of blocked domains.&lt;/p&gt;

&lt;p&gt;Both times the fix was simpler than the problem. Both times the&lt;br&gt;
impact was immediate and measurable.&lt;/p&gt;

&lt;p&gt;The most effective infrastructure changes I've made to this product&lt;br&gt;
weren't the big features. They were the small, targeted interventions&lt;br&gt;
that removed friction for real users and added friction for bad ones.&lt;/p&gt;

&lt;p&gt;AIBridge — 15 Chinese AI models behind one OpenAI-compatible endpoint.&lt;br&gt;
Free playground with no signup. GitHub OAuth login in one click. No&lt;br&gt;
bots wasting your bandwidth (or ours).&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt; (15 models, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt; (24 ready-to-use prompts)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7fcdd3jskc6dso207pbs.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7fcdd3jskc6dso207pbs.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenhfefhizt4sow675hn6.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fenhfefhizt4sow675hn6.png" alt="2" width="800" height="605"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Folbib21pftf43jzpuaua.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Folbib21pftf43jzpuaua.png" alt="3" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>security</category>
      <category>saas</category>
    </item>
    <item>
      <title>The fastest way to try an AI model is to not sign up for it.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sun, 09 Aug 2026 08:12:25 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/the-fastest-way-to-try-an-ai-model-is-to-not-sign-up-for-it-1mg3</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/the-fastest-way-to-try-an-ai-model-is-to-not-sign-up-for-it-1mg3</guid>
      <description>&lt;p&gt;The fastest way to try an AI model is to not sign up for it.&lt;/p&gt;

&lt;p&gt;No email. No password. No 6-digit code. No "check your inbox."&lt;/p&gt;

&lt;p&gt;Just open the playground, pick a model, type a prompt, and watch the&lt;br&gt;
response come back. If it works for you, registration is one click&lt;br&gt;
away. If it doesn't, you lost 30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why every AI product should work this way
&lt;/h2&gt;

&lt;p&gt;AI models are not like databases. You can't evaluate them from a&lt;br&gt;
pricing table or a benchmark chart. You have to use them. Your prompt,&lt;br&gt;
your data, your use case. Everything else is someone else's opinion.&lt;/p&gt;

&lt;p&gt;That's why the playground is at the center of AIBridge. Not the docs.&lt;br&gt;
Not the SDK. Not the blog. The thing where you type words and the&lt;br&gt;
model responds.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's behind that one prompt
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import openai
client = openai.OpenAI(
api_key="mb-xxx",
base_url="https://aibridge-api.com/v1"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;15 Chinese AI models. Same &lt;code&gt;import openai&lt;/code&gt;. Same &lt;code&gt;.create()&lt;/code&gt; signature.&lt;br&gt;
Same response format. Different model string.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Strength&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;deepseek-chat&lt;/td&gt;
&lt;td&gt;Fast, cheap, general purpose&lt;/td&gt;
&lt;td&gt;$0.27/M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;qwen-max&lt;/td&gt;
&lt;td&gt;Multilingual, 128K context&lt;/td&gt;
&lt;td&gt;$2.80/M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;glm-4-plus&lt;/td&gt;
&lt;td&gt;Complex reasoning, Chinese&lt;/td&gt;
&lt;td&gt;$7.10/M&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;kimi-k3&lt;/td&gt;
&lt;td&gt;1M context, always reasoning&lt;/td&gt;
&lt;td&gt;$3/M&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You don't need four API keys. You don't need four SDKs. You need one&lt;br&gt;
endpoint and four model strings.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else comes with it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;24 ready-to-use prompts.&lt;/strong&gt; Six categories. Code review, content,&lt;br&gt;
classification, analysis, writing, data. Each one says which model&lt;br&gt;
to use and how. Click "Try in Playground" and it fills everything in&lt;br&gt;
for you. No more staring at a blank input box.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub login.&lt;/strong&gt; Click GitHub → authorize → dashboard. Five seconds.&lt;br&gt;
No form. No verification code. Same 500K free tokens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instant onboarding.&lt;/strong&gt; After login, your API key is on the screen&lt;br&gt;
with a copy button next to a curl command and Python SDK code. Copy,&lt;br&gt;
paste, run. First response in 30 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Smart dashboard.&lt;/strong&gt; Usage bar that quietly shows your balance, then&lt;br&gt;
loudly tells you when it's time to upgrade. Blue below 50%, orange at&lt;br&gt;
80%, red flashing at 90%. The upgrade button gets harder to miss&lt;br&gt;
exactly when you need to see it.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt; (15 models, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt; (24 prompts, no signup needed)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafdzhnuwak7gxbst4q6j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafdzhnuwak7gxbst4q6j.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08xk19owd7wlqrmutm8m.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08xk19owd7wlqrmutm8m.png" alt="2" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys421l95knuiz634sj9n.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys421l95knuiz634sj9n.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsly0kz02h3yco24mwyxl.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsly0kz02h3yco24mwyxl.png" alt="4" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>kimi</category>
    </item>
    <item>
      <title>The first thing visitors see on AIBridge is a "Try Playground " button. Not "Get Started." Not "Sign Up Free."</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Sat, 08 Aug 2026 03:25:45 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/the-first-thing-visitors-see-on-aibridge-is-a-try-playground-button-not-get-started-not-5fa4</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/the-first-thing-visitors-see-on-aibridge-is-a-try-playground-button-not-get-started-not-5fa4</guid>
      <description>&lt;p&gt;The first thing visitors see on AIBridge is a "Try Playground →" button.&lt;br&gt;
Not "Get Started." Not "Sign Up Free." Try the playground.&lt;/p&gt;

&lt;p&gt;Behind that button is a page with 15 AI models, no login, and 10 free&lt;br&gt;
requests per day. You pick a model, type a prompt, see the response.&lt;br&gt;
If you like it, registration is one click via GitHub — no email, no&lt;br&gt;
password, no verification code.&lt;/p&gt;
&lt;h2&gt;
  
  
  What happens after that click
&lt;/h2&gt;

&lt;p&gt;Login lands you on an onboarding page, not a dashboard. Your API key is&lt;br&gt;
right there with a copy button. A curl command you can paste and run&lt;br&gt;
immediately. Python SDK code. Three things on one screen. 30 seconds&lt;br&gt;
from login to first API response.&lt;/p&gt;

&lt;p&gt;From there you either go to the dashboard (usage tracking, upgrade&lt;br&gt;
options) or the prompt library (24 ready-to-use prompts organized&lt;br&gt;
by category — code review, translation, classification, debugging).&lt;/p&gt;

&lt;p&gt;Every page answers exactly one question:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Landing page → "What is this?"
Playground → "Can I try it?"
Onboarding → "How do I start?"
Dashboard → "How much have I used?"
Prompt library → "What should I ask?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The model behind all of it
&lt;/h2&gt;

&lt;p&gt;One OpenAI-compatible endpoint. 15 Chinese AI models — DeepSeek,&lt;br&gt;
Qwen, GLM, Kimi K3 — all behind the same &lt;code&gt;import openai&lt;/code&gt; as always.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change the model string. Nothing else changes.&lt;/p&gt;

&lt;p&gt;K3 has a 1M token context window and always-on reasoning — no toggle&lt;br&gt;
needed. DeepSeek costs $0.27/M. Qwen handles multilingual. GLM-4 Plus&lt;br&gt;
excels at complex Chinese reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the homepage doesn't push signup
&lt;/h2&gt;

&lt;p&gt;Most API products optimize for registration. They put the signup form&lt;br&gt;
front and center, push the "Get Started" button, measure conversion by&lt;br&gt;
how many people fill out the form.&lt;/p&gt;

&lt;p&gt;I optimized for first use. The first time someone types a prompt into&lt;br&gt;
the playground and sees a response come back — that's the conversion&lt;br&gt;
event. Registration happens after, not before.&lt;/p&gt;

&lt;p&gt;Since making that change, registration-to-signup conversion sits around&lt;br&gt;
19%. The average for SaaS signup walls is around 2-4%.&lt;/p&gt;

&lt;p&gt;Let people use the thing first. Ask them to commit second.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com&lt;/a&gt;(Playground first, signup second)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt; (24 prompts, no signup needed)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqs6mm5oefa6cxmzjphrn.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqs6mm5oefa6cxmzjphrn.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frucg11ufn73fchmunme0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frucg11ufn73fchmunme0.png" alt="2" width="800" height="605"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7qmt2ajl4m71vjz4qjt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7qmt2ajl4m71vjz4qjt.png" alt="3" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78aqaksylve5bro7ual4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F78aqaksylve5bro7ual4.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
    </item>
    <item>
      <title>My API product has 5 pages. Here's what each one does and why.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Fri, 07 Aug 2026 02:36:12 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/my-api-product-has-5-pages-heres-what-each-one-does-and-why-2pji</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/my-api-product-has-5-pages-heres-what-each-one-does-and-why-2pji</guid>
      <description>&lt;p&gt;My API product has 5 pages. Here's what each one does and why.&lt;/p&gt;

&lt;p&gt;Not the backend. Not the gateway code. The 5 pages users actually see.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The landing page — one button, not three
&lt;/h2&gt;

&lt;p&gt;Every API product landing page looks the same: hero text, feature grid,&lt;br&gt;
pricing table, three CTA buttons.&lt;/p&gt;

&lt;p&gt;Mine has one button that matters: "Try Playground →"&lt;/p&gt;

&lt;p&gt;Before that was the main CTA, registration sat at the top and conversion&lt;br&gt;
was 2.5%. Swapped the order. Playground first, signup second. Visitors&lt;br&gt;
land, type a prompt, see a response, then register. Conversion hit 19%.&lt;/p&gt;

&lt;p&gt;The lesson: let people use the thing before you ask them to commit to it.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xyyehrymt5y5xl93y1w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6xyyehrymt5y5xl93y1w.png" alt="1" width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The playground — no login, no friction
&lt;/h2&gt;

&lt;p&gt;15 models, 10 free requests per day, no signup. Pick a model, type a&lt;br&gt;
prompt, get a response. If you like it, "Get your API key →" is one&lt;br&gt;
click away.&lt;/p&gt;

&lt;p&gt;The most important feature isn't the model selection or the markdown&lt;br&gt;
rendering. It's the fact that there's no wall. No email. No password.&lt;br&gt;
No "create an account to continue." Just type and go.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwrlxhymp9whvjww0qtsg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwrlxhymp9whvjww0qtsg.png" alt="2" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The onboarding page — 30 seconds to first call
&lt;/h2&gt;

&lt;p&gt;After login, instead of an empty dashboard, you land on a page that&lt;br&gt;
shows your API key, a curl command you can paste and run immediately,&lt;br&gt;
and Python SDK code to copy.&lt;/p&gt;

&lt;p&gt;30 seconds from login to first API response. For the 68% of users who&lt;br&gt;
registered but never made a single call, this is the bridge between&lt;br&gt;
"I have an account" and "it works."&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4cau4weyym7x8rpelyo2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4cau4weyym7x8rpelyo2.png" alt="3" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The dashboard — polite, then urgent
&lt;/h2&gt;

&lt;p&gt;Usage bar that escalates. Below 50%: small blue bar, subtle upgrade&lt;br&gt;
button. Above 80%: orange bar, "Unlock 10x more →". Above 90%: red&lt;br&gt;
flashing bar, "Only 15K tokens left," full-width upgrade button.&lt;/p&gt;

&lt;p&gt;The same data. Different urgency. You notice it exactly when you need&lt;br&gt;
to act — not before, not after.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft2cuuuf007afgh4z7m0w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft2cuuuf007afgh4z7m0w.png" alt="4" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The prompt library — 24 things to do right now
&lt;/h2&gt;

&lt;p&gt;68% of users made zero API calls. Not because the API was hard. Because&lt;br&gt;
a blank input box doesn't tell you what to ask.&lt;/p&gt;

&lt;p&gt;The prompt library says: here's 24 things you can do right now. Find&lt;br&gt;
bugs → Kimi K3. Translate → Qwen Max. Write tests → DeepSeek. Each&lt;br&gt;
card has a "Try in Playground" button that pre-fills the model, system&lt;br&gt;
prompt, and user message. One click from browsing to running.&lt;/p&gt;

&lt;p&gt;6 categories. 24 prompts. One static HTML file. No backend changes.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi07q92h26rbyw7avtanu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi07q92h26rbyw7avtanu.png" alt="6" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Five pages. Each one answers a different question:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"What is this?" → Landing page&lt;/li&gt;
&lt;li&gt;"Can I try it?" → Playground&lt;/li&gt;
&lt;li&gt;"How do I start?" → Onboarding&lt;/li&gt;
&lt;li&gt;"How much have I used?" → Dashboard&lt;/li&gt;
&lt;li&gt;"What should I ask?" → Prompt library&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The gateway code does the heavy lifting. But the pages do the&lt;br&gt;
conversion. And conversion is what turns a functional API into&lt;br&gt;
something people pay for.&lt;/p&gt;

&lt;p&gt;AIBridge — 15 Chinese AI models behind one OpenAI-compatible endpoint.&lt;br&gt;
Free tier: 500K tokens/month. GitHub login. Instant onboarding.&lt;br&gt;
Prompt library. Playground with no signup.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt;&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>prompt</category>
    </item>
    <item>
      <title>I shipped a prompt library. Not because it's sexy. Because people were staring at a blank input box.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 06 Aug 2026 15:39:25 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-shipped-a-prompt-library-not-because-its-sexy-because-people-were-staring-at-a-blank-input-box-53i4</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-shipped-a-prompt-library-not-because-its-sexy-because-people-were-staring-at-a-blank-input-box-53i4</guid>
      <description>&lt;p&gt;I shipped a prompt library. Not because it's sexy. Because people were staring at a blank input box.&lt;/p&gt;

&lt;p&gt;My API gateway has 15 models. Kimi K3 with 1M context. DeepSeek at&lt;br&gt;
$0.27/M. Qwen for multilingual. GLM-4 Plus for complex reasoning.&lt;/p&gt;

&lt;p&gt;Users signed up, got their API key, opened the dashboard... and then&lt;br&gt;
did nothing. 68% of registered users had zero API calls.&lt;/p&gt;

&lt;p&gt;They weren't confused about the API. They were confused about what&lt;br&gt;
to ask. The input box was empty. Their mind was too.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;A static HTML page. 6 categories. 24 prompts. No backend. No database.&lt;br&gt;
No API routes. One file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;📚 Prompt Library
─────────────────────────────────────

💻 Code
├── Find bugs in this code → Try with Kimi K3
├── Refactor for readability → Try with Kimi K3
├── Explain this function → Try with GLM-4 Plus
├── Add error handling → Try with Kimi K3
└── Generate unit tests → Try with DeepSeek

📝 Content
├── Summarize an article → Try with DeepSeek
├── Translate to Chinese → Try with Qwen Max
├── Rewrite in formal tone → Try with Qwen Max
└── ...

🏷️ Classification
🔍 Analysis
✍️ Writing
📊 Data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each prompt has three buttons:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flhpjepxawv36dsx58qvh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flhpjepxawv36dsx58qvh.png" alt="2" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎯 &lt;strong&gt;Try in Playground&lt;/strong&gt; — opens a new tab with the model pre-selected,&lt;br&gt;
system prompt filled in, user message ready to send. One click from&lt;br&gt;
"what do I ask" to "oh, it works."&lt;/p&gt;

&lt;p&gt;📋 &lt;strong&gt;Copy as curl&lt;/strong&gt; — complete command with the prompt and recommended&lt;br&gt;
model. Replace the API key placeholder and run.&lt;/p&gt;

&lt;p&gt;🐍 &lt;strong&gt;Copy as Python&lt;/strong&gt; — OpenAI SDK code with the same prompt.&lt;br&gt;
Paste into your project and start iterating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;Most API products assume users know what they want to build. That's&lt;br&gt;
wrong. Most users know they &lt;em&gt;might&lt;/em&gt; want to build something, but&lt;br&gt;
they don't know where to start.&lt;/p&gt;

&lt;p&gt;A blank input box is the worst onboarding experience in developer&lt;br&gt;
tools. It says "I'm ready when you are" but the user hears "figure&lt;br&gt;
it out yourself."&lt;/p&gt;

&lt;p&gt;A prompt library says "here's 24 things you can do right now.&lt;br&gt;
Pick one. See it work. Then build your own."&lt;/p&gt;

&lt;h2&gt;
  
  
  The model tip built into every prompt
&lt;/h2&gt;

&lt;p&gt;Every card recommends a specific model. Find bugs → Kimi K3&lt;br&gt;
(1M context, always reasoning). Translate → Qwen Max. Generate&lt;br&gt;
tests → DeepSeek ($0.27/M). Classification → DeepSeek.&lt;/p&gt;

&lt;p&gt;Users don't need to know which model is best for which task. The&lt;br&gt;
prompt library teaches them by doing. After trying a few, they&lt;br&gt;
naturally start matching tasks to models.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's behind it
&lt;/h2&gt;

&lt;p&gt;The rest of the product hasn't changed. 15 Chinese AI models behind&lt;br&gt;
one OpenAI-compatible endpoint. Free playground with no signup.&lt;br&gt;
GitHub OAuth in one click. Instant onboarding after login — API key,&lt;br&gt;
curl command, Python code, all copyable in 30 seconds.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/prompts.html&lt;/a&gt; (24 prompts, 6 categories)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html &lt;/a&gt;(try all 15 models, no signup)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhvpt7rfr69x2e6muni5j.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhvpt7rfr69x2e6muni5j.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pcvvme14be66kwq1971.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8pcvvme14be66kwq1971.png" alt="3" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrjqsjffus2qlmpnxdmg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgrjqsjffus2qlmpnxdmg.png" alt="I23" width="800" height="483"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpmjgjnc3hbcqyn46056u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpmjgjnc3hbcqyn46056u.png" alt="56" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>prompt</category>
    </item>
    <item>
      <title>Try 15 AI models without signing up. No email. No password. No credit card.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Thu, 06 Aug 2026 15:11:57 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/try-15-ai-models-without-signing-up-no-email-no-password-no-credit-card-2n6a</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/try-15-ai-models-without-signing-up-no-email-no-password-no-credit-card-2n6a</guid>
      <description>&lt;p&gt;Try 15 AI models without signing up. No email. No password. No credit card.&lt;/p&gt;

&lt;p&gt;That's what our playground does. You land, pick a model, type a prompt.&lt;br&gt;
The response comes back in under a second. You like it? Registration is&lt;br&gt;
one click away — via GitHub OAuth, no form to fill.&lt;/p&gt;
&lt;h2&gt;
  
  
  The playground
&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60jfqia55fexkfveq5y9.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F60jfqia55fexkfveq5y9.png" alt="1" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;10 free requests per day. Every model available. Kimi K3 with its&lt;br&gt;
1M context and always-on reasoning. DeepSeek at $0.27/M for quick&lt;br&gt;
tasks. Qwen for multilingual. GLM-4 Plus for complex reasoning.&lt;/p&gt;
&lt;h2&gt;
  
  
  From playground to production
&lt;/h2&gt;

&lt;p&gt;When you're ready, grab an API key. GitHub OAuth — one click, five&lt;br&gt;
seconds. Then you land on an onboarding page that hands you everything:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🔑 API key: mb-xxx [📋 Copy]

curl https://aibridge-api.com/v1/chat/completions
-H "Authorization: Bearer mb-xxx"
-d '{"model":"deepseek-chat",...}' [📋 Copy]

import openai [📋 Copy]
client = openai.OpenAI(...)
client.chat.completions.create(...)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy, paste, run. 30 seconds from login to first response.&lt;br&gt;
No reading docs. No environment variables. No guesswork.&lt;/p&gt;
&lt;h2&gt;
  
  
  Production mode
&lt;/h2&gt;

&lt;p&gt;Same OpenAI-compatible interface you already know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kimi-k3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-chat&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;qwen-max&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same library. Same .create(). Different model string.&lt;br&gt;
Streaming, function calling, JSON mode — all work out of the box.&lt;/p&gt;

&lt;p&gt;Free tier: 500K tokens/month. Enough to run classification,&lt;br&gt;
summarization, and simple generation for a small production app.&lt;br&gt;
Dashboard shows exactly where you stand, and the upgrade button&lt;br&gt;
gets harder to miss as you approach your limit.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html &lt;/a&gt;(try all 15 models, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt; (GitHub login, one click)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjdp6k3qpcjefstvtfv70.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjdp6k3qpcjefstvtfv70.png" alt="12" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3cj0v0y0i0xnea41hsft.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3cj0v0y0i0xnea41hsft.png" alt="23" width="800" height="636"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhl6syio0omqwepjcgzbt.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhl6syio0omqwepjcgzbt.png" alt="45" width="800" height="459"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>kimi</category>
    </item>
    <item>
      <title>I migrated my app from one AI provider to four. Here's the code change.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Wed, 05 Aug 2026 10:45:23 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/i-migrated-my-app-from-one-ai-provider-to-four-heres-the-code-change-8k0</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/i-migrated-my-app-from-one-ai-provider-to-four-heres-the-code-change-8k0</guid>
      <description>&lt;p&gt;I migrated my app from one AI provider to four. Here's the code change.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Before: one provider, one model
&lt;/span&gt;&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-deepseek-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# After: four providers, 15 models
&lt;/span&gt;&lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. One string changed. Zero new imports. Zero SDK rewrites.&lt;br&gt;
Suddenly I have DeepSeek, Qwen, GLM, and Kimi K3 behind the same endpoint.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why I needed more than one model
&lt;/h2&gt;

&lt;p&gt;My app does three things: classify user input, translate content&lt;br&gt;
to Chinese, and occasionally debug customer-reported issues.&lt;/p&gt;

&lt;p&gt;Sending everything to deepseek-chat ($0.27/M) worked. But the&lt;br&gt;
debugging tasks needed more reasoning power. The translations&lt;br&gt;
needed better multilingual support. I was using one model for&lt;br&gt;
three very different jobs.&lt;/p&gt;

&lt;p&gt;Now I route by task type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model = (
    "deepseek-chat" if task == "classify" else     # $0.27/M
    "qwen-max"      if task == "translate" else     # multilingual
    "kimi-k3"       if task == "debug" else         # 1M context + always thinks
    "deepseek-chat"                                  # default
)

client.chat.completions.create(model=model, messages=messages)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same code. Same bill. Different model for different work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The K3 difference
&lt;/h2&gt;

&lt;p&gt;Kimi K3 is the one I reach for when the question is hard and the&lt;br&gt;
context is large. 1M token window — I've pasted entire modules and&lt;br&gt;
asked it to find race conditions. It reads every line, runs a&lt;br&gt;
reasoning pass without being told, then gives me locations with&lt;br&gt;
suggested fixes.&lt;/p&gt;

&lt;p&gt;No "think step by step." No reasoning toggle. Just send the prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  What made this easy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub OAuth — one click to register. Five seconds.&lt;/li&gt;
&lt;li&gt;Instant onboarding — after login: API key + curl example + Python code, all copyable. 30 seconds to first response.&lt;/li&gt;
&lt;li&gt;Free playground — 15 models, no signup. 10 requests/day.&lt;/li&gt;
&lt;li&gt;Usage dashboard — progress bar that goes from polite to urgent as you approach your free tier limit.
Free tier: 500K tokens/month. No credit card.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html&lt;/a&gt; (try K3, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt; (GitHub login, one click)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnmpnzmsafpf0sj7oeq4.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjnmpnzmsafpf0sj7oeq4.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F54zdpnz34qf5qq4hmyhk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F54zdpnz34qf5qq4hmyhk.png" alt="2" width="800" height="636"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwm64dapijk0x4rruk6w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftwm64dapijk0x4rruk6w.png" alt="3" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmg68zo9tn5yquqj3j3cr.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmg68zo9tn5yquqj3j3cr.png" alt="4" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
    </item>
    <item>
      <title>You don't need a new API key. You don't need a new SDK. You don't need to read another provider's documentation.</title>
      <dc:creator>Daniel Dong</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:51:56 +0000</pubDate>
      <link>https://dev.to/daniel_dong_sdwgw041/you-dont-need-a-new-api-key-you-dont-need-a-new-sdk-you-dont-need-to-read-another-providers-58db</link>
      <guid>https://dev.to/daniel_dong_sdwgw041/you-dont-need-a-new-api-key-you-dont-need-a-new-sdk-you-dont-need-to-read-another-providers-58db</guid>
      <description>&lt;p&gt;You don't need a new API key. You don't need a new SDK. You don't&lt;br&gt;
need to read another provider's documentation.&lt;/p&gt;

&lt;p&gt;You need to change one string.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;

&lt;span class="c1"&gt;# One client. Every model.
&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mb-xxx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://aibridge-api.com/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire setup. Everything else is picking which model to use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Classification, summarization, simple chat → $0.27/M
client.chat.completions.create(model="deepseek-chat", messages=messages)

# Multilingual, structured output → 128K context
client.chat.completions.create(model="qwen-max", messages=messages)

# Complex reasoning → best for Chinese
client.chat.completions.create(model="glm-4-plus", messages=messages)

# 1M context, always thinks before answering
client.chat.completions.create(model="kimi-k3", messages=messages)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same import. Same .create() signature. Same response format.&lt;br&gt;
Different model string. You already know how to use every single one&lt;br&gt;
because you already know how to use the OpenAI Python SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Kimi K3 is different
&lt;/h2&gt;

&lt;p&gt;Most reasoning models make you decide when to think. You toggle&lt;br&gt;
"reasoning mode" on or off. You add "think step by step" to your&lt;br&gt;
system prompt. You optimize for the right amount of compute.&lt;/p&gt;

&lt;p&gt;K3 doesn't give you a choice. Every request runs through a reasoning&lt;br&gt;
pass. No toggle. No config. No prompt engineering.&lt;/p&gt;

&lt;p&gt;And it has a 1M token context window — 4x what Claude gives you,&lt;br&gt;
8x what GPT-4o gives you. Drop a codebase. Ask a question. K3 reads&lt;br&gt;
every line, thinks about every line, then answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;GitHub login — one click to register. No email. No password.5 seconds from click to dashboard.&lt;/li&gt;
&lt;li&gt;Instant onboarding — after login you see your API key, a curl command you can run immediately, and Python SDK code to copy.&lt;/li&gt;
&lt;li&gt;Free playground — try all 15 models with no signup. 10 requests per day. If you like it, registration is one click away.&lt;/li&gt;
&lt;li&gt;Smart dashboard — usage bar that quietly tells you where you stand, then loudly tells you when it's time to upgrade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;15 Chinese AI models. One OpenAI-compatible endpoint. Free tier:&lt;br&gt;
500K tokens/month. No credit card.&lt;/p&gt;

&lt;p&gt;→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/playground.html &lt;/a&gt;(try K3, no signup)&lt;br&gt;
→ &lt;a href="https://dev.tourl"&gt;aibridge-api.com/register.html&lt;/a&gt; (GitHub login, one click)&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmtvsfw1ao9oiebpm6yh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcmtvsfw1ao9oiebpm6yh.png" alt="1" width="800" height="496"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi03pv30gi0az1xz5bpbg.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi03pv30gi0az1xz5bpbg.png" alt="2" width="800" height="459"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2fg14930ctbgj3gr3ax.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn2fg14930ctbgj3gr3ax.png" alt="3" width="800" height="483"&gt;&lt;/a&gt;&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv22r2vl29yxp48c1k52w.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv22r2vl29yxp48c1k52w.png" alt="4" width="800" height="652"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>llm</category>
      <category>kimi</category>
    </item>
  </channel>
</rss>
