<?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: Chandra Sekhar Dey</title>
    <description>The latest articles on DEV Community by Chandra Sekhar Dey (@chandra_sekhardey_5df51e).</description>
    <link>https://dev.to/chandra_sekhardey_5df51e</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%2F4044121%2F0353afbe-b61b-4117-893e-6555ddb34259.png</url>
      <title>DEV Community: Chandra Sekhar Dey</title>
      <link>https://dev.to/chandra_sekhardey_5df51e</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chandra_sekhardey_5df51e"/>
    <language>en</language>
    <item>
      <title>Building a Function Key (F1–F12) Tester: Handling the Fn-Row Mess Across OSes</title>
      <dc:creator>Chandra Sekhar Dey</dc:creator>
      <pubDate>Wed, 30 Sep 2026 21:24:57 +0000</pubDate>
      <link>https://dev.to/chandra_sekhardey_5df51e/building-a-function-key-f1-f12-tester-handling-the-fn-row-mess-across-oses-4m6a</link>
      <guid>https://dev.to/chandra_sekhardey_5df51e/building-a-function-key-f1-f12-tester-handling-the-fn-row-mess-across-oses-4m6a</guid>
      <description>&lt;p&gt;Function keys seem like the simplest possible thing to test — 12 keys, press them, see if they register. Building the Function Key Test for KeyboardTest.tech turned out to have more edge cases than expected, mostly because F-keys don't behave consistently across operating systems, browsers, or laptop firmware.&lt;/p&gt;

&lt;p&gt;The base implementation is simple enough&lt;br&gt;
javascript&lt;br&gt;
const fKeys = ['F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12'];&lt;br&gt;
const registered = new Set();&lt;/p&gt;

&lt;p&gt;document.addEventListener('keydown', (e) =&amp;gt; {&lt;br&gt;
  if (fKeys.includes(e.key)) {&lt;br&gt;
    registered.add(e.key);&lt;br&gt;
    updateKeyUI(e.key, true);&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;document.addEventListener('keyup', (e) =&amp;gt; {&lt;br&gt;
  if (fKeys.includes(e.key)) {&lt;br&gt;
    updateKeyUI(e.key, false);&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;That covers the happy path. Here's where it got complicated.&lt;/p&gt;

&lt;p&gt;Problem 1: laptops remap the entire row by default&lt;/p&gt;

&lt;p&gt;On most laptops, F1–F12 aren't F-keys out of the box — they're brightness, volume, media playback, etc., with true function-key behavior gated behind an Fn modifier (or the reverse, depending on a BIOS/firmware toggle). A user can press what they believe is "F5" and actually send a browser refresh shortcut instead of a pure F5 keypress, or vice versa, depending on their Fn-lock state — and there's no reliable way to query that state from JavaScript. The most honest fix wasn't a code fix at all — it was adding a visible note in the UI: "If F-keys aren't registering, try holding Fn while pressing them (or check your Fn-lock setting)." Sometimes the right engineering answer is admitting what you can't detect and guiding the user instead.&lt;/p&gt;

&lt;p&gt;Problem 2: browsers intercept some F-keys before your JS ever sees them&lt;/p&gt;

&lt;p&gt;F1 (Help), F6 (address bar focus in some browsers), F11 (fullscreen), and F12 (DevTools) are commonly intercepted at the browser level for their own default behavior. Depending on the browser, your keydown listener may fire and the default action happens, or the default action wins and your listener never fires at all. This is inconsistent enough across Chrome/Firefox/Safari that I ended up documenting per-browser caveats directly in the tool's FAQ rather than pretending it's uniformly solvable — a decision that felt uncomfortable at first (admitting a limitation) but is more honest than silently failing.&lt;/p&gt;

&lt;p&gt;Problem 3: e.key vs e.code actually matters here&lt;/p&gt;

&lt;p&gt;Using e.key seemed natural since it directly gives you "F7" as a string. But e.key reflects the interpreted result, which can be affected by OS-level remapping. e.code ("F7" as a physical key code) is more reliable for "did this physical key get pressed" — which is the actual question a hardware tester needs answered, not "what action resulted from this press."&lt;/p&gt;

&lt;p&gt;Problem 4: visually distinguishing "not tested yet" from "failed"&lt;/p&gt;

&lt;p&gt;A key that simply hasn't been pressed yet looks identical to a key that was pressed but didn't register — from the UI's perspective, both are just "never got a keydown event." I ended up adding an explicit "press every key to complete the test" prompt and a completion indicator, so a user isn't left wondering whether an untested key silently failed.&lt;/p&gt;

&lt;p&gt;Takeaway&lt;/p&gt;

&lt;p&gt;The hardest part of this feature wasn't the JavaScript — it was accepting that a browser-based tester has a real ceiling on what it can verify when firmware/OS layers get involved, and building the UI to be honest about that ceiling instead of overclaiming certainty.&lt;/p&gt;

&lt;p&gt;If you've built anything that tests hardware behavior through a browser sandbox, curious where you've hit similar detection ceilings — would like to compare notes.&lt;/p&gt;

</description>
      <category>javascriptlibraries</category>
      <category>webdev</category>
      <category>nextjs</category>
      <category>ui</category>
    </item>
    <item>
      <title>Optimizing a Client-Heavy Next.js Tool for Instant Load — What Actually Moved the Needle</title>
      <dc:creator>Chandra Sekhar Dey</dc:creator>
      <pubDate>Wed, 16 Sep 2026 18:12:39 +0000</pubDate>
      <link>https://dev.to/chandra_sekhardey_5df51e/optimizing-a-client-heavy-nextjs-tool-for-instant-load-what-actually-moved-the-needle-f8o</link>
      <guid>https://dev.to/chandra_sekhardey_5df51e/optimizing-a-client-heavy-nextjs-tool-for-instant-load-what-actually-moved-the-needle-f8o</guid>
      <description>&lt;p&gt;KeyboardTest.tech is almost entirely client-side JavaScript — the whole point is real-time keyboard event handling in the browser. That's exactly the kind of app that can quietly balloon in bundle size and feel sluggish on load if you're not paying attention. Here's what I actually did to keep it fast, and a couple of things I tried that didn't help as much as expected.&lt;/p&gt;

&lt;p&gt;Static generation for everything that doesn't need to be dynamic&lt;/p&gt;

&lt;p&gt;Since the actual testing logic runs entirely client-side, there's no reason for the tool pages themselves to hit a server on every request. Static generation via Next.js App Router means the HTML shell ships instantly, and the interactive bits hydrate in after — the user sees the page immediately instead of waiting on a render round-trip.&lt;/p&gt;

&lt;p&gt;Splitting client components aggressively&lt;/p&gt;

&lt;p&gt;Not every part of a tool page needs to be a client component. The static content — headings, FAQ text, the "how to use this" copy — stays as server-rendered content, while only the actual interactive keyboard UI is marked "use client". This keeps the client-side JS bundle scoped to what genuinely needs interactivity instead of hydrating the entire page.&lt;/p&gt;

&lt;p&gt;The thing that surprised me: font loading mattered more than I expected&lt;/p&gt;

&lt;p&gt;Early versions had a visible layout shift from web font loading. Switching to font-display: swap and self-hosting the fonts (rather than a third-party font CDN round-trip) fixed most of the perceived jank — this had a bigger visible impact on "does this feel fast" than several JS optimizations combined.&lt;/p&gt;

&lt;p&gt;What didn't help as much as I hoped: code-splitting the event-handling logic&lt;/p&gt;

&lt;p&gt;I expected lazy-loading the keyboard event detection logic (ghosting/chatter/rollover) to meaningfully cut initial bundle size. In practice, it's small enough that the added complexity of a dynamic import wasn't worth the marginal savings — sometimes the "obviously correct" optimization isn't worth the engineering overhead for the actual bytes saved. Worth measuring before assuming.&lt;/p&gt;

&lt;p&gt;Debounced rendering for the visual key-state UI&lt;/p&gt;

&lt;p&gt;Every keydown/keyup was originally triggering a full re-render of the on-screen keyboard. Batching state updates and only re-rendering the specific key components that changed (rather than the whole keyboard grid) made multi-key stress-testing noticeably smoother, especially on lower-end devices.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>performance</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>I Built a Browser-Based Keyboard Tester: What I Learned About Keyboard Events</title>
      <dc:creator>Chandra Sekhar Dey</dc:creator>
      <pubDate>Thu, 20 Aug 2026 03:56:10 +0000</pubDate>
      <link>https://dev.to/chandra_sekhardey_5df51e/i-built-a-browser-based-keyboard-tester-what-i-learned-about-keyboard-events-dia</link>
      <guid>https://dev.to/chandra_sekhardey_5df51e/i-built-a-browser-based-keyboard-tester-what-i-learned-about-keyboard-events-dia</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Browser-Based Keyboard Tester: What I Learned About Keyboard Events
&lt;/h1&gt;

&lt;p&gt;A keyboard seems simple until you try to build something that needs to detect every key a user presses.&lt;/p&gt;

&lt;p&gt;I recently built &lt;a href="https://keyboardtest.tech" rel="noopener noreferrer"&gt;keyboardtest&lt;/a&gt;, a browser-based keyboard testing tool. The idea is simple: press a key, and immediately see whether the browser receives the keyboard event.&lt;/p&gt;

&lt;p&gt;But building something this simple taught me a few interesting things about browser keyboard input.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic idea
&lt;/h2&gt;

&lt;p&gt;Browsers provide keyboard events that allow JavaScript applications to react when users press and release keys.&lt;/p&gt;

&lt;p&gt;For a simple keyboard tester, the basic flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Listen for a keyboard event.&lt;/li&gt;
&lt;li&gt;Identify the key that was pressed.&lt;/li&gt;
&lt;li&gt;Update the corresponding key on the virtual keyboard.&lt;/li&gt;
&lt;li&gt;Keep track of keys that are currently pressed.&lt;/li&gt;
&lt;li&gt;Reset the visual state when the key is released.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result is a virtual keyboard that reacts in real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why testing every key is useful
&lt;/h2&gt;

&lt;p&gt;A keyboard tester can be useful when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A key appears to be broken&lt;/li&gt;
&lt;li&gt;You're checking a new keyboard&lt;/li&gt;
&lt;li&gt;You're buying a used laptop&lt;/li&gt;
&lt;li&gt;You're troubleshooting a mechanical keyboard&lt;/li&gt;
&lt;li&gt;You want to check a gaming keyboard&lt;/li&gt;
&lt;li&gt;Several keys behave unexpectedly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of guessing whether a keyboard is working, you can visually check which keys are being registered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some interesting edge cases
&lt;/h2&gt;

&lt;p&gt;Keyboard input isn't always as straightforward as it looks.&lt;/p&gt;

&lt;p&gt;Modifier keys such as &lt;code&gt;Shift&lt;/code&gt;, &lt;code&gt;Ctrl&lt;/code&gt;, &lt;code&gt;Alt&lt;/code&gt;, and &lt;code&gt;Meta&lt;/code&gt; need special handling because they can be held while other keys are pressed.&lt;/p&gt;

&lt;p&gt;There are also differences between physical keyboard layouts and the values reported by the browser. A useful keyboard tester therefore needs to think carefully about how it represents keys rather than assuming every keyboard has exactly the same layout.&lt;/p&gt;

&lt;p&gt;Another interesting area is simultaneous key presses. This is particularly important for gaming keyboards, where users may press several keys at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the project
&lt;/h2&gt;

&lt;p&gt;The main goal of keyboardtest was to keep the experience simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the website&lt;/li&gt;
&lt;li&gt;Start pressing keys&lt;/li&gt;
&lt;li&gt;See the result immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no desktop application to install and no complicated configuration.&lt;/p&gt;

&lt;p&gt;You can try it here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://keyboardtest.tech" rel="noopener noreferrer"&gt;https://keyboardtest.tech&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm continuing to improve the project and I'm particularly interested in browser compatibility, keyboard layouts, accessibility, and better ways to diagnose keyboard problems.&lt;/p&gt;

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

&lt;p&gt;The biggest lesson was that even a small browser utility can have surprisingly interesting technical details behind it.&lt;/p&gt;

&lt;p&gt;Keyboard events are easy to demonstrate, but building a useful tool around them means thinking about different operating systems, layouts, modifier keys, simultaneous input, and user experience.&lt;/p&gt;

&lt;p&gt;If you've built anything involving browser keyboard events, I'd be interested to hear about the edge cases you've encountered.&lt;/p&gt;

&lt;p&gt;What keyboard-related browser feature would you add to a testing tool?&lt;br&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%2Fm66ivuodx8mlvz367hrn.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%2Fm66ivuodx8mlvz367hrn.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Building a Browser-Based Keyboard Tester: Ghosting, NKRO, and the Quirks of the KeyboardEvent API</title>
      <dc:creator>Chandra Sekhar Dey</dc:creator>
      <pubDate>Mon, 03 Aug 2026 17:47:02 +0000</pubDate>
      <link>https://dev.to/chandra_sekhardey_5df51e/building-a-browser-based-keyboard-tester-ghosting-nkro-and-the-quirks-of-the-keyboardevent-api-3pi7</link>
      <guid>https://dev.to/chandra_sekhardey_5df51e/building-a-browser-based-keyboard-tester-ghosting-nkro-and-the-quirks-of-the-keyboardevent-api-3pi7</guid>
      <description>&lt;p&gt;I built KeyboardTest.tech — a free, no-install keyboard diagnostic tool that runs entirely in the browser. Here's what I learned wrestling with the KeyboardEvent API to detect stuck keys, ghosting, and rollover limits client-side, with zero server logging.&lt;br&gt;
The core problem: the browser doesn't tell you what you think it does&lt;/p&gt;

&lt;p&gt;keydown and keyup seem simple until you try to build something like an NKRO (N-Key Rollover) checker. A few gotchas that cost me real debugging time:&lt;/p&gt;

&lt;p&gt;event.code vs event.key — key gives you the character produced (locale + modifier-dependent), code gives you the physical key position (layout-independent). For a hardware tester, you almost always want code. Using key will silently break for non-QWERTY layouts.&lt;br&gt;
The OS eats some combos before JS ever sees them. Certain OS-level shortcuts (screenshot combos, some Meta/Cmd chords) never reach the page. You can't "test" what the browser never receives — worth being upfront about this as a limitation rather than pretending full hardware-level access.&lt;br&gt;
Ghosting isn't a JS bug, it's a hardware/matrix limitation. Cheap keyboards use a key matrix that can only resolve certain simultaneous key combinations. When you hold enough keys at once, the matrix can't disambiguate and either drops a keypress or reports a "phantom" one. From the browser, this shows up as a keydown that never fires (not a keyup that fires incorrectly) — which means your ghosting detector is really just: track expected keys pressed vs. actual keydown events received, then diff.&lt;br&gt;
Detecting rollover without native access&lt;/p&gt;

&lt;p&gt;There's no navigator.keyboard.getRollover() — so an NKRO tester really just:&lt;/p&gt;

&lt;p&gt;Listens for every keydown and adds event.code to a Set.&lt;br&gt;
Listens for keyup and removes it.&lt;br&gt;
Tracks the maximum size the Set ever reached during a session.&lt;/p&gt;

&lt;p&gt;That max size is your empirical rollover ceiling. It's not perfect (you're bounded by however many keys the user's fingers can physically hold down during testing), but for practical "is this a 6KRO or NKRO keyboard" purposes, it works well — most users can get 8-10+ keys down at once if they try.&lt;/p&gt;

&lt;p&gt;Chatter/double-typing detection&lt;/p&gt;

&lt;p&gt;Switch chatter (one physical press registering as two) shows up as two keydown events for the same code within an implausibly short window with no keyup in between. A naive Date.now() timestamp diff on consecutive keydowns for the same code, with a threshold tuned against real bouncy-switch recordings, catches the overwhelming majority of cases without false-positiving on fast intentional double-taps (those have a keyup between them).&lt;/p&gt;

&lt;p&gt;Zero-logging by design&lt;/p&gt;

&lt;p&gt;Everything above runs entirely client-side — no keystroke data is ever sent to a server. For a tool whose entire premise is "let me mash random keys to test my hardware," that's a privacy requirement, not just a nice-to-have. If you're building anything similar, it's worth architecting for this from the start rather than bolting on privacy later — it also simplifies GDPR/CCPA compliance considerably since there's no keystroke data to protect in the first place.&lt;/p&gt;

&lt;p&gt;Stack notes&lt;/p&gt;

&lt;p&gt;Built with Next.js (App Router) + TypeScript + Tailwind. Static generation for the tool pages themselves (no server round-trip needed since all the diagnostic logic is client-side JS), with MDX for the blog/guide content.&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%2Fu9xwli5bf25szgg8ci2r.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%2Fu9xwli5bf25szgg8ci2r.png" alt=" " width="800" height="366"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>nextjs</category>
      <category>cloudflarechallenge</category>
    </item>
    <item>
      <title>I Built a Free Browser-Based Keyboard Testing Tool with Next.js</title>
      <dc:creator>Chandra Sekhar Dey</dc:creator>
      <pubDate>Thu, 23 Jul 2026 15:54:55 +0000</pubDate>
      <link>https://dev.to/chandra_sekhardey_5df51e/i-built-a-free-browser-based-keyboard-testing-tool-with-nextjs-2d9j</link>
      <guid>https://dev.to/chandra_sekhardey_5df51e/i-built-a-free-browser-based-keyboard-testing-tool-with-nextjs-2d9j</guid>
      <description>&lt;p&gt;As developers, we often need to verify whether a keyboard is working correctly. Maybe a key has stopped responding, a mechanical switch is chattering, or you're trying to test anti-ghosting before gaming.&lt;/p&gt;

&lt;p&gt;Most existing tools either require downloading software, contain intrusive ads, or don't provide enough information for debugging.&lt;/p&gt;

&lt;p&gt;So I decided to build KeyboardTester.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://keyboardtest.tech" rel="noopener noreferrer"&gt;https://keyboardtest.tech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why I Built It&lt;/p&gt;

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

&lt;p&gt;No installation&lt;br&gt;
No account required&lt;br&gt;
Works instantly in any modern browser&lt;br&gt;
Privacy-friendly (everything happens in the browser)&lt;/p&gt;

&lt;p&gt;Whether you're a developer, gamer, IT technician, or just troubleshooting a laptop keyboard, you should be able to test every key within seconds.&lt;/p&gt;

&lt;p&gt;Tech Stack&lt;/p&gt;

&lt;p&gt;The project is built using:&lt;/p&gt;

&lt;p&gt;Next.js 16 (App Router)&lt;br&gt;
React 19&lt;br&gt;
TypeScript&lt;br&gt;
Tailwind CSS&lt;br&gt;
Shadcn UI / Radix UI&lt;br&gt;
Static deployment through Cloudflare CDN&lt;/p&gt;

&lt;p&gt;The application is designed to be lightweight, responsive, and accessible.&lt;/p&gt;

&lt;p&gt;Features&lt;/p&gt;

&lt;p&gt;Current features include:&lt;/p&gt;

&lt;p&gt;🎹 Interactive keyboard tester&lt;br&gt;
⌨️ Real-time key highlighting&lt;br&gt;
👻 Ghosting and N-Key Rollover (NKRO) testing&lt;br&gt;
⚡ Multiple simultaneous key detection&lt;br&gt;
📊 Key event inspector (key, code, keyCode)&lt;br&gt;
⏱️ Typing speed (WPM) test&lt;br&gt;
🖱️ CPS (Clicks Per Second) tester&lt;br&gt;
🍎 macOS keyboard layout support&lt;br&gt;
🪟 Windows and laptop keyboard layouts&lt;br&gt;
Challenges&lt;/p&gt;

&lt;p&gt;One interesting challenge was handling browser keyboard events consistently.&lt;/p&gt;

&lt;p&gt;Different operating systems and browsers can report keys differently, especially modifier keys like:&lt;/p&gt;

&lt;p&gt;Command (⌘)&lt;br&gt;
Option (⌥)&lt;br&gt;
Alt&lt;br&gt;
Fn&lt;br&gt;
Windows key&lt;/p&gt;

&lt;p&gt;Making the tester behave consistently required careful handling of keyboard events across platforms.&lt;/p&gt;

&lt;p&gt;Performance&lt;/p&gt;

&lt;p&gt;One thing I wanted to prioritize was speed.&lt;/p&gt;

&lt;p&gt;The site loads quickly because it's statically generated and served through a global CDN. Since processing happens locally in the browser, there are no server round trips while testing your keyboard.&lt;/p&gt;

&lt;p&gt;What's Next?&lt;/p&gt;

&lt;p&gt;I'm planning to add:&lt;/p&gt;

&lt;p&gt;More international keyboard layouts&lt;br&gt;
Better accessibility improvements&lt;br&gt;
Additional hardware diagnostics&lt;br&gt;
More typing analytics&lt;br&gt;
New testing utilities&lt;br&gt;
I'd Love Your Feedback&lt;/p&gt;

&lt;p&gt;If you enjoy building developer tools or have ideas for keyboard diagnostics, I'd appreciate your feedback.&lt;/p&gt;

&lt;p&gt;You can try it here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://keyboardtest.tech" rel="noopener noreferrer"&gt;https://keyboardtest.tech&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%2Fqj6swdmt2vp8y4f2muh0.webp" 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%2Fqj6swdmt2vp8y4f2muh0.webp" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>react</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
