<?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: SolvoHQ</title>
    <description>The latest articles on DEV Community by SolvoHQ (@solvohq).</description>
    <link>https://dev.to/solvohq</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3932717%2F98d0a863-26ad-49a0-99ed-b91378fb9e03.png</url>
      <title>DEV Community: SolvoHQ</title>
      <link>https://dev.to/solvohq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/solvohq"/>
    <language>en</language>
    <item>
      <title>Your LLM cost estimate is fine. Your rate-limit math is what pages you at 2am.</title>
      <dc:creator>SolvoHQ</dc:creator>
      <pubDate>Fri, 15 May 2026 12:18:53 +0000</pubDate>
      <link>https://dev.to/solvohq/your-llm-cost-estimate-is-fine-your-rate-limit-math-is-what-pages-you-at-2am-53ne</link>
      <guid>https://dev.to/solvohq/your-llm-cost-estimate-is-fine-your-rate-limit-math-is-what-pages-you-at-2am-53ne</guid>
      <description>&lt;p&gt;Every "LLM cost calculator" answers the question nobody gets paged for.&lt;/p&gt;

&lt;p&gt;Cost is the easy half. You multiply tokens by a price and you get a number that is wrong by a rounding error. Nobody's on-call rotation has ever blown up because the monthly bill was 8% higher than the spreadsheet said.&lt;/p&gt;

&lt;p&gt;What blows up the rotation is a &lt;strong&gt;429 cascade&lt;/strong&gt;: traffic ramps, one rate-limit dimension saturates, retries pile on, the queue backs up, and the thing that was "fine in the load test" is now a red dashboard. Datadog's 2026 State of AI Engineering puts rate-limit errors at roughly 60% of all errored LLM call spans — millions of them a month, industry-wide. It is &lt;em&gt;the&lt;/em&gt; dominant failure mode of LLM apps in production, and almost no planning tool models it.&lt;/p&gt;

&lt;p&gt;So I built one that does, and this post is the reasoning behind it: &lt;strong&gt;&lt;a href="https://llmcapplanner.vercel.app/" rel="noopener noreferrer"&gt;llmcapplanner.vercel.app&lt;/a&gt;&lt;/strong&gt; — a single client-side page, no signup, nothing leaves your browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Tokens per minute" is not one number
&lt;/h2&gt;

&lt;p&gt;Here's the trap. You look at a provider's pricing page, you see a tier with some big TPM number, and you mentally file rate limits as "a thing I have headroom on." Then you scale and discover the limit you actually hit isn't the one you were watching.&lt;/p&gt;

&lt;p&gt;Concretely, as of the dated snapshot in the tool (2026-05-15):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic enforces three independent dimensions&lt;/strong&gt; — RPM, input tokens/min (ITPM), and output tokens/min (OTPM) — and the token limits are &lt;strong&gt;per model, not per tier&lt;/strong&gt;. On Tier 4, Claude Opus 4.7 gets ~10M ITPM while Sonnet 4.6 gets ~2M at the &lt;em&gt;same tier&lt;/em&gt;. If you sized your capacity off "Anthropic Tier 4" as a single row in a generic table, you sized it off the wrong model's numbers. Output tokens have their own ceiling that's an order of magnitude tighter than input — a summarization workload and a generation workload at identical RPS bind on completely different dimensions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI enforces RPM and TPM (combined in+out), plus per-day RPD/TPD caps&lt;/strong&gt; that most calculators ignore entirely. A burst pattern that's fine on the per-minute budget can still trip the daily ceiling.&lt;/p&gt;

&lt;p&gt;The right question isn't "what does this cost" or even "what's my limit." It's: &lt;strong&gt;at my projected requests/min and average in/out token shape, which dimension saturates first, and how much headroom is on the others?&lt;/strong&gt; That's the number that tells you when you'll get paged. The calculator computes exactly that and flags the binding dimension.&lt;/p&gt;

&lt;h2&gt;
  
  
  The per-second gotcha that load tests miss
&lt;/h2&gt;

&lt;p&gt;"Per-minute" limits are not enforced per minute. They're enforced in much smaller windows — effectively per-second. A 4,000 RPM limit is not "4,000 requests in any 60s window." It's closer to ceil(4000/60) ≈ 67 req/s, and a one-second burst above that 429s &lt;strong&gt;even though your per-minute average is well under the cap&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is why a load test at steady-state RPS passes and the same system 429s in production the moment traffic gets bursty. The tool surfaces the per-second figure whenever RPM is the binding (or near-binding) dimension, because that's the one that turns a "we're at 70% of our limit" dashboard into an incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this needs a &lt;em&gt;dated&lt;/em&gt; snapshot, not a static table
&lt;/h2&gt;

&lt;p&gt;The reason most rate-limit tables you find via search are wrong isn't laziness — it's that the ground truth moves. Model lineups churn (Opus went 4.6 → 4.7 in ~a month; GPT-5.4 → 5.5 around the same window), prices get cut, tier limits get revised. A calculator that hard-codes 2024 models and quietly rots is worse than no calculator, because it's confidently wrong.&lt;/p&gt;

&lt;p&gt;So the snapshot is explicitly dated, every preset links to the provider's own current rate-limit / pricing doc, and there's a loud "verify in your dashboard — presets change" disclaimer. The maintenance &lt;em&gt;is&lt;/em&gt; the product. If you spot a number that's drifted, that's a bug worth reporting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does / doesn't do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Does:&lt;/strong&gt; pick provider + model + tier + your req/min + avg in/out tokens → projected cost &lt;em&gt;and&lt;/em&gt; the first binding 429 dimension with headroom on each, plus the per-second warning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doesn't:&lt;/strong&gt; no live API calls, no auth, no account, no token-paste counting. It's deterministic arithmetic over a maintained, dated snapshot. That's the whole point — it's auditable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's free and there's nothing to sign up for: &lt;strong&gt;&lt;a href="https://llmcapplanner.vercel.app/" rel="noopener noreferrer"&gt;llmcapplanner.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you've hit a 429 cascade in prod, I'd genuinely like to hear which dimension bound first for you — that's the input that decides what this tool should model next.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>webdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Three no-signup dev tools we shipped this week</title>
      <dc:creator>SolvoHQ</dc:creator>
      <pubDate>Fri, 15 May 2026 08:34:03 +0000</pubDate>
      <link>https://dev.to/solvohq/three-no-signup-dev-tools-we-shipped-this-week-5fm3</link>
      <guid>https://dev.to/solvohq/three-no-signup-dev-tools-we-shipped-this-week-5fm3</guid>
      <description>&lt;p&gt;SolvoHQ builds small, single-purpose developer utilities that run in the browser with no signup. Here are three we put online this week. Each one takes a paste and gives you typed TypeScript back.&lt;/p&gt;

&lt;h3&gt;
  
  
  jsontosdk — JSON → typed TypeScript
&lt;/h3&gt;

&lt;p&gt;Stop hand-writing interfaces for an API response you just got. Paste a JSON payload and get typed TS interfaces plus a Zod schema, with LLM-suggested names. Live: &lt;a href="https://jsontosdk.vercel.app" rel="noopener noreferrer"&gt;https://jsontosdk.vercel.app&lt;/a&gt; — Code: &lt;a href="https://github.com/SolvoHQ/jsontosdk" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/jsontosdk&lt;/a&gt; — Paste your JSON, copy the generated types.&lt;/p&gt;

&lt;h3&gt;
  
  
  dotenv2types — .env → typed env config
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;process.env.FOO&lt;/code&gt; is &lt;code&gt;string | undefined&lt;/code&gt; everywhere and nobody validates it. Paste your &lt;code&gt;.env&lt;/code&gt; and get a typed &lt;code&gt;env.ts&lt;/code&gt; with a Zod schema and a generated &lt;code&gt;.env.example&lt;/code&gt;. Live: &lt;a href="https://dotenv2types.vercel.app" rel="noopener noreferrer"&gt;https://dotenv2types.vercel.app&lt;/a&gt; — Code: &lt;a href="https://github.com/SolvoHQ/dotenv2types" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/dotenv2types&lt;/a&gt; — Paste your .env file, drop the generated env.ts into your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  har2sdk — HAR → typed fetch SDK
&lt;/h3&gt;

&lt;p&gt;You captured a network trace and now want a real client. Paste a HAR export (Chrome/Firefox network tab) and get a typed TypeScript fetch SDK with semantically named methods, resource grouping, and auth detection. Live: &lt;a href="https://har2sdk.vercel.app" rel="noopener noreferrer"&gt;https://har2sdk.vercel.app&lt;/a&gt; — Code: &lt;a href="https://github.com/SolvoHQ/har2sdk" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/har2sdk&lt;/a&gt; — Export HAR from devtools, paste it, use the generated client.&lt;/p&gt;

&lt;p&gt;Feedback welcome — open an issue at &lt;a href="https://github.com/SolvoHQ/jsontosdk/issues" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/jsontosdk/issues&lt;/a&gt;&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Three no-signup dev tools we shipped this week</title>
      <dc:creator>SolvoHQ</dc:creator>
      <pubDate>Fri, 15 May 2026 08:23:12 +0000</pubDate>
      <link>https://dev.to/solvohq/three-no-signup-dev-tools-we-shipped-this-week-1c82</link>
      <guid>https://dev.to/solvohq/three-no-signup-dev-tools-we-shipped-this-week-1c82</guid>
      <description>&lt;p&gt;SolvoHQ builds small, single-purpose web tools for developers. No login, no install, no account — paste in, copy out. Here are three we put online this week. Each one is open source and runs the same way: paste your input, get typed TypeScript back in a few seconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  jsontosdk — JSON sample to a typed TypeScript SDK
&lt;/h3&gt;

&lt;p&gt;Hand-writing TypeScript types from a sample API response takes 5–30 minutes per endpoint, and most small or internal APIs never publish an OpenAPI spec to generate from.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live: &lt;a href="https://jsontosdk.vercel.app" rel="noopener noreferrer"&gt;https://jsontosdk.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/SolvoHQ/jsontosdk" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/jsontosdk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paste 1–3 JSON responses and get cleanly-named interfaces, Zod schemas, and a typed fetch helper — no signup.&lt;/p&gt;

&lt;h3&gt;
  
  
  dotenv2types — &lt;code&gt;.env&lt;/code&gt; to a typed env module
&lt;/h3&gt;

&lt;p&gt;Validating environment variables means hand-writing a Zod or envalid schema that mirrors your &lt;code&gt;.env&lt;/code&gt; and keeping the two in sync by hand.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live: &lt;a href="https://dotenv2types.vercel.app" rel="noopener noreferrer"&gt;https://dotenv2types.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/SolvoHQ/dotenv2types" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/dotenv2types&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paste a &lt;code&gt;.env&lt;/code&gt; and get a typed &lt;code&gt;env.ts&lt;/code&gt; with a Zod schema plus a commented &lt;code&gt;.env.example&lt;/code&gt; — no signup.&lt;/p&gt;

&lt;h3&gt;
  
  
  har2sdk — HAR capture to a typed fetch SDK
&lt;/h3&gt;

&lt;p&gt;Turning a browser network capture into a typed client normally means a two-step HAR to OpenAPI to TypeScript detour.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Live: &lt;a href="https://har2sdk.vercel.app" rel="noopener noreferrer"&gt;https://har2sdk.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Source: &lt;a href="https://github.com/SolvoHQ/har2sdk" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/har2sdk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Paste a HAR file exported from Chrome or Firefox DevTools and get a typed TypeScript fetch SDK with semantic method names, resource grouping, and auth detection — no signup.&lt;/p&gt;




&lt;p&gt;All three are open source under the SolvoHQ org. Feedback welcome — open an issue at &lt;a href="https://github.com/SolvoHQ/jsontosdk/issues" rel="noopener noreferrer"&gt;https://github.com/SolvoHQ/jsontosdk/issues&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>webdev</category>
      <category>tools</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
