<?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: Abhay kumar</title>
    <description>The latest articles on DEV Community by Abhay kumar (@orbit_with_abhay).</description>
    <link>https://dev.to/orbit_with_abhay</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%2F3998126%2Fd53b09ed-32c4-4f71-a74a-cfa2429211e5.jpg</url>
      <title>DEV Community: Abhay kumar</title>
      <link>https://dev.to/orbit_with_abhay</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/orbit_with_abhay"/>
    <language>en</language>
    <item>
      <title>I Built a Collection of Free Developer Tools Because I Was Tired of Opening 10 Browser Tabs</title>
      <dc:creator>Abhay kumar</dc:creator>
      <pubDate>Tue, 23 Jun 2026 07:45:20 +0000</pubDate>
      <link>https://dev.to/orbit_with_abhay/i-built-a-collection-of-free-developer-tools-because-i-was-tired-of-opening-10-browser-tabs-1jia</link>
      <guid>https://dev.to/orbit_with_abhay/i-built-a-collection-of-free-developer-tools-because-i-was-tired-of-opening-10-browser-tabs-1jia</guid>
      <description>&lt;p&gt;As developers and testers, we spend a surprising amount of time doing small repetitive tasks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formatting JSON.&lt;/li&gt;
&lt;li&gt;Decoding JWT tokens.&lt;/li&gt;
&lt;li&gt;Comparing API responses.&lt;/li&gt;
&lt;li&gt;Testing regex patterns.&lt;/li&gt;
&lt;li&gt;Converting timestamps.&lt;/li&gt;
&lt;li&gt;Encoding and decoding Base64 strings.
None of these tasks are difficult, but constantly switching between different websites breaks focus and slows down the workflow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few months ago, while working on OrbitTest and testing APIs daily, I noticed that I was repeatedly opening the same set of utility websites. Sometimes I had more utility tabs open than actual project tabs.&lt;/p&gt;

&lt;p&gt;That became the motivation behind creating a dedicated tools section on OrbitTest.&lt;/p&gt;

&lt;p&gt;The goal wasn't to build something revolutionary.&lt;/p&gt;

&lt;p&gt;The goal was simple:&lt;/p&gt;

&lt;p&gt;Keep frequently used developer utilities in one place and make them fast, clean, and accessible.&lt;/p&gt;

&lt;p&gt;Some of the tools currently available include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSON Formatter &amp;amp; Validator&lt;/li&gt;
&lt;li&gt;JWT Decoder&lt;/li&gt;
&lt;li&gt;Base64 Encoder / Decoder&lt;/li&gt;
&lt;li&gt;JSON Compare Tool&lt;/li&gt;
&lt;li&gt;Regex Tester&lt;/li&gt;
&lt;li&gt;Timestamp Converter&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - XML ↔ JSON Converter
&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%2Fgv5oagq52zxya66ivwt8.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%2Fgv5oagq52zxya66ivwt8.png" alt=" " width="800" height="370"&gt;&lt;/a&gt;JSON Schema Generator&lt;br&gt;
Everything runs directly in the browser and is designed to be lightweight and easy to use.&lt;/p&gt;

&lt;p&gt;One thing I've learned while building products is that not every feature has to be a massive innovation. Sometimes removing small daily frustrations creates the most value.&lt;/p&gt;

&lt;p&gt;If you're a developer, tester, QA engineer, or anyone working with APIs, I'd love to know:&lt;/p&gt;

&lt;p&gt;What's the developer tool you use almost every day?&lt;/p&gt;

&lt;p&gt;You can explore the tools here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.orbittest.dev/tools" rel="noopener noreferrer"&gt;https://www.orbittest.dev/tools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback is always welcome.&lt;/p&gt;

</description>
      <category>json</category>
      <category>orbittest</category>
      <category>developertools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why "Log in with Google" never sees your password (PKCE, explained)</title>
      <dc:creator>Abhay kumar</dc:creator>
      <pubDate>Tue, 23 Jun 2026 06:59:35 +0000</pubDate>
      <link>https://dev.to/orbit_with_abhay/why-log-in-with-google-never-sees-your-password-pkce-explained-2e02</link>
      <guid>https://dev.to/orbit_with_abhay/why-log-in-with-google-never-sees-your-password-pkce-explained-2e02</guid>
      <description>&lt;p&gt;Ever wondered how "Log in with Google" works without the app ever touching&lt;br&gt;
your password? That's OAuth 2.0 — and on mobile apps and SPAs, the piece that&lt;br&gt;
makes it safe is PKCE (Proof Key for Code Exchange).&lt;/p&gt;

&lt;p&gt;The problem PKCE solves: a public client (a mobile app or SPA) can't keep a&lt;br&gt;
secret. So an attacker who intercepts the authorization code could exchange it&lt;br&gt;
for a token.&lt;/p&gt;

&lt;p&gt;PKCE fixes this with a simple trick:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The app generates a random "code verifier"&lt;/li&gt;
&lt;li&gt;It sends a hashed version (the "code challenge") when starting login&lt;/li&gt;
&lt;li&gt;To redeem the code, it must present the original verifier&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An intercepted code is useless without the verifier that only the real app has.&lt;/p&gt;

&lt;p&gt;I broke down the whole flow step by step — what each value does and the exact&lt;br&gt;
attack it prevents:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.orbittest.dev/blog/oauth-authorization-code-flow-pkce" rel="noopener noreferrer"&gt;https://www.orbittest.dev/blog/oauth-authorization-code-flow-pkce&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Are you using PKCE in your SPA/mobile auth today?&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%2F3urbh9kzynzpnnogpezb.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%2F3urbh9kzynzpnnogpezb.png" alt=" " width="744" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>oauth</category>
      <category>authentication</category>
      <category>orbittest</category>
    </item>
    <item>
      <title>Stop waiting for the backend — mock any API in seconds</title>
      <dc:creator>Abhay kumar</dc:creator>
      <pubDate>Tue, 23 Jun 2026 06:57:16 +0000</pubDate>
      <link>https://dev.to/orbit_with_abhay/stop-waiting-for-the-backend-mock-any-api-in-seconds-4b06</link>
      <guid>https://dev.to/orbit_with_abhay/stop-waiting-for-the-backend-mock-any-api-in-seconds-4b06</guid>
      <description>&lt;p&gt;Frontend devs lose so much time waiting on backend APIs that aren't ready.&lt;/p&gt;

&lt;p&gt;The usual "fix" — hand-writing JSON mock files and wiring up routes — just&lt;br&gt;
trades one chore for another, and the mocks drift from reality over time.&lt;/p&gt;

&lt;p&gt;A faster pattern: record a real API response once, then replay it from a local&lt;br&gt;
mock server. Your app points at &lt;a href="http://127.0.0.1:4010" rel="noopener noreferrer"&gt;http://127.0.0.1:4010&lt;/a&gt; instead of the real&lt;br&gt;
backend and keeps working — even offline, even when the backend is down.&lt;/p&gt;

&lt;p&gt;Great for:&lt;br&gt;
• Building UI before the API exists&lt;br&gt;
• Stable, repeatable test data&lt;br&gt;
• Demos that don't depend on the network&lt;br&gt;
• Avoiding third-party rate limits during dev&lt;/p&gt;

&lt;p&gt;I wrote up the record-once/mock-instantly approach (with a short demo):&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.orbittest.dev/blog/ghost-mock-server-local-api-mocking" rel="noopener noreferrer"&gt;https://www.orbittest.dev/blog/ghost-mock-server-local-api-mocking&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How do you handle "API isn't ready yet" on your team?&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%2F8vwla49dyo0wrsvcvrmr.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%2F8vwla49dyo0wrsvcvrmr.png" alt=" " width="733" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>productivity</category>
      <category>webdev</category>
      <category>testing</category>
    </item>
    <item>
      <title>Is your JWT encrypted? (No — and that trips up a lot of devs)</title>
      <dc:creator>Abhay kumar</dc:creator>
      <pubDate>Tue, 23 Jun 2026 06:50:07 +0000</pubDate>
      <link>https://dev.to/orbit_with_abhay/is-your-jwt-encrypted-no-and-that-trips-up-a-lot-of-devs-386e</link>
      <guid>https://dev.to/orbit_with_abhay/is-your-jwt-encrypted-no-and-that-trips-up-a-lot-of-devs-386e</guid>
      <description>&lt;p&gt;Common misconception: "JWTs are encrypted, so I can store data in them."&lt;/p&gt;

&lt;p&gt;Reality: a standard JWT's header and payload are only &lt;strong&gt;Base64-encoded&lt;/strong&gt; —&lt;br&gt;
fully readable by anyone. Paste one into any decoder and the claims fall right&lt;br&gt;
out. The signature proves the token wasn't &lt;em&gt;tampered with&lt;/em&gt;; it does NOT hide&lt;br&gt;
the contents.&lt;/p&gt;

&lt;p&gt;So: never put secrets in a JWT payload.&lt;/p&gt;

&lt;p&gt;While we're clearing up auth confusion, three things that look similar but&lt;br&gt;
aren't:&lt;br&gt;
• Encoding (Base64) → representation, reversible, no key&lt;br&gt;
• Encryption (AES)  → protection, reversible &lt;em&gt;with a key&lt;/em&gt;&lt;br&gt;
• Hashing (SHA-256) → one-way, can't be reversed (why passwords are hashed)&lt;/p&gt;

&lt;p&gt;I wrote a from-scratch guide to API authentication — Basic Auth, API keys,&lt;br&gt;
bearer tokens, JWT, and OAuth 2.0 — plus how to actually test each one:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.orbittest.dev/blog/api-authentication-oauth-jwt-tokens" rel="noopener noreferrer"&gt;https://www.orbittest.dev/blog/api-authentication-oauth-jwt-tokens&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What auth method does your current project use?&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%2F4o8uxr1k1qjbhnpqwx3k.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%2F4o8uxr1k1qjbhnpqwx3k.png" alt=" " width="736" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>api</category>
      <category>webdev</category>
      <category>authentication</category>
    </item>
    <item>
      <title>401 vs 403, 400 vs 422 — the status codes everyone mixes up</title>
      <dc:creator>Abhay kumar</dc:creator>
      <pubDate>Tue, 23 Jun 2026 06:47:58 +0000</pubDate>
      <link>https://dev.to/orbit_with_abhay/401-vs-403-400-vs-422-the-status-codes-everyone-mixes-up-d72</link>
      <guid>https://dev.to/orbit_with_abhay/401-vs-403-400-vs-422-the-status-codes-everyone-mixes-up-d72</guid>
      <description>&lt;p&gt;Quick quiz — which status code is correct?&lt;/p&gt;

&lt;p&gt;• You're not logged in → ?&lt;br&gt;
• You're logged in but not allowed → ?&lt;br&gt;
• The JSON is malformed → ?&lt;br&gt;
• The JSON is valid but the email is invalid → ?&lt;/p&gt;

&lt;p&gt;Answers:&lt;br&gt;
• 401 Unauthorized  → "who are you?" (missing/invalid auth)&lt;br&gt;
• 403 Forbidden     → "I know you, you still can't"&lt;br&gt;
• 400 Bad Request   → malformed request&lt;br&gt;
• 422 Unprocessable → valid request, failed validation&lt;/p&gt;

&lt;p&gt;The #1 mistake I see: returning 200 OK for a login failure, or 500 for bad&lt;br&gt;
user input. Both break monitoring and make debugging miserable, because the&lt;br&gt;
first digit of a status code is supposed to tell you whose fault it is:&lt;/p&gt;

&lt;p&gt;2xx = success · 3xx = go elsewhere · 4xx = your fault · 5xx = server's fault&lt;/p&gt;

&lt;p&gt;I put together a complete guide with real examples, a cheat-sheet table, and a&lt;br&gt;
testing checklist for every category:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.orbittest.dev/blog/http-status-codes-explained" rel="noopener noreferrer"&gt;https://www.orbittest.dev/blog/http-status-codes-explained&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the most misused status code you've seen in the wild?&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%2F8y2tioyfwabunt06vn30.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%2F8y2tioyfwabunt06vn30.png" alt=" " width="742" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>backend</category>
    </item>
    <item>
      <title>A passing 200 OK doesn't mean your API didn't break</title>
      <dc:creator>Abhay kumar</dc:creator>
      <pubDate>Tue, 23 Jun 2026 06:44:48 +0000</pubDate>
      <link>https://dev.to/orbit_with_abhay/a-passing-200-ok-doesnt-mean-your-api-didnt-break-2bbc</link>
      <guid>https://dev.to/orbit_with_abhay/a-passing-200-ok-doesnt-mean-your-api-didnt-break-2bbc</guid>
      <description>&lt;p&gt;Here's a bug that ships to production constantly, with every test green:&lt;/p&gt;

&lt;p&gt;The backend renames one field.&lt;/p&gt;

&lt;p&gt;Before:&lt;br&gt;
{ "subscription": "Premium" }&lt;/p&gt;

&lt;p&gt;After:&lt;br&gt;
{ "plan": "Premium" }&lt;/p&gt;

&lt;p&gt;✅ Endpoint returns 200&lt;br&gt;
✅ Unit tests pass&lt;br&gt;
✅ Build is green&lt;br&gt;
❌ The mobile app reads &lt;code&gt;response.subscription&lt;/code&gt; → undefined → crash&lt;/p&gt;

&lt;p&gt;Functional tests check &lt;em&gt;that&lt;/em&gt; a response came back. They don't check its&lt;br&gt;
&lt;em&gt;shape&lt;/em&gt;. That gap is exactly what contract testing closes — it verifies the&lt;br&gt;
response still matches what consumers expect (fields, types, structure).&lt;/p&gt;

&lt;p&gt;A few rules that prevent most of these incidents:&lt;br&gt;
• Never rename or remove a field without versioning&lt;br&gt;
• number → string is a breaking change, even if your language coerces it&lt;br&gt;
• Add new fields; don't replace old ones&lt;br&gt;
• Run schema checks in CI, not just on your laptop&lt;/p&gt;

&lt;p&gt;I wrote a full breakdown — contract vs integration testing, consumer-driven&lt;br&gt;
contracts, the 5 most common breakages, and how to catch drift automatically:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.orbittest.dev/blog/contract-testing-explained" rel="noopener noreferrer"&gt;https://www.orbittest.dev/blog/contract-testing-explained&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How does your team catch breaking API changes today? Curious what's working.&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%2Fo7zj7a2wqhmdz2v6yuso.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%2Fo7zj7a2wqhmdz2v6yuso.png" alt=" " width="755" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>testing</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
