<?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: Claes Järudd</title>
    <description>The latest articles on DEV Community by Claes Järudd (@claes_jrudd_21e68cfe9296).</description>
    <link>https://dev.to/claes_jrudd_21e68cfe9296</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%2F4077951%2F31be2401-e75f-478f-8899-02eb8f2af968.png</url>
      <title>DEV Community: Claes Järudd</title>
      <link>https://dev.to/claes_jrudd_21e68cfe9296</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/claes_jrudd_21e68cfe9296"/>
    <language>en</language>
    <item>
      <title>So proud of this! Try it at workthosekeys.com</title>
      <dc:creator>Claes Järudd</dc:creator>
      <pubDate>Fri, 14 Aug 2026 16:18:35 +0000</pubDate>
      <link>https://dev.to/claes_jrudd_21e68cfe9296/so-proud-of-this-try-it-at-workthosekeyscom-404p</link>
      <guid>https://dev.to/claes_jrudd_21e68cfe9296/so-proud-of-this-try-it-at-workthosekeyscom-404p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i" class="crayons-story__hidden-navigation-link"&gt;I built a typing trainer with an AI no-code tool — 31 sub-levels, per-bigram error tracking, and why "net WPM" matters&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/claes_jrudd_21e68cfe9296" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4077951%2F31be2401-e75f-478f-8899-02eb8f2af968.png" alt="claes_jrudd_21e68cfe9296 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/claes_jrudd_21e68cfe9296" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Claes Järudd
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Claes Järudd
                
                
              
              &lt;div id="story-author-preview-content-4398052" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/claes_jrudd_21e68cfe9296" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4077951%2F31be2401-e75f-478f-8899-02eb8f2af968.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Claes Järudd&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 14&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i" id="article-link-4398052"&gt;
          I built a typing trainer with an AI no-code tool — 31 sub-levels, per-bigram error tracking, and why "net WPM" matters
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;1&lt;span class="hidden s:inline"&gt;&amp;nbsp;reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I built a typing trainer with an AI no-code tool — 31 sub-levels, per-bigram error tracking, and why "net WPM" matters</title>
      <dc:creator>Claes Järudd</dc:creator>
      <pubDate>Fri, 14 Aug 2026 16:17:28 +0000</pubDate>
      <link>https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i</link>
      <guid>https://dev.to/claes_jrudd_21e68cfe9296/i-built-a-typing-trainer-with-an-ai-no-code-tool-31-sub-levels-per-bigram-error-tracking-and-o6i</guid>
      <description>&lt;p&gt;I'm a first-year engineering physics student who also teaches sailing on the side, which meant this summer I had zero interest in learning to code from scratch just to build one tool. So I built WorkThoseKeys (workthosekeys.com) using Lovable — a prompt-based AI app builder — instead of hand-writing it. (It was TypeCast, then Typefast, before I landed on this name — long story.)&lt;/p&gt;

&lt;p&gt;A few things I actually had to think hard about:&lt;/p&gt;

&lt;p&gt;Home-row-first, but broken into 31 sub-levels, not 8. Eight top-level stages, each split into sub-levels (1a through 8c) that introduce one finger at a time before combining them. Every level ends the same way: warmup, weak points, integration, progress check. It's slower to get to "fun" content, but shortcuts here just get relearned badly later.&lt;/p&gt;

&lt;p&gt;Weak-spot drills are built from per-character AND per-bigram error rates, not a fixed word list. The app tracks which specific letter pairs you fumble, not just which letters, and builds practice sessions around that. Two people with the same overall accuracy can have completely different weak points.&lt;/p&gt;

&lt;p&gt;Keyboard layout and content language are independent settings. Most typing trainers assume "Swedish keyboard" means "Swedish words." I split those apart — Swedish (å, ä, ö) and US layouts, on-screen keyboard with live next-key highlighting, layout chosen separately from what language you're typing.&lt;/p&gt;

&lt;p&gt;What "net WPM" actually means. Raw words-per-minute rewards fast sloppy typing. Net WPM subtracts errors, which is a more honest number but a less flattering one.&lt;/p&gt;

&lt;p&gt;There's also an AI coach that turns your typing data into actual tips — not just "you're at 65% on this bigram," but plain-language advice on what to fix. This is separate from the weak-spot drill engine (which builds practice sessions from your errors); the coach is the layer that explains them back to you.&lt;/p&gt;

&lt;p&gt;On top of that there's a book mode I'm fairly proud of — type real public-domain literature segment by segment, position saved between sessions, ranging from a three-stanza Emily Dickinson poem to the entirety of Moby-Dick (1.19 million characters, for anyone who wants a long-term project).&lt;/p&gt;

&lt;p&gt;Everything's free, and there's a full guest mode — no signup, nothing stored, all lessons/drills/books work anyway. Sign in with Google only if you want your stats and streaks to persist.&lt;/p&gt;

&lt;p&gt;Curious what other devs think about whether building with an AI tool changes what corners you're tempted to cut versus writing it by hand. Happy to answer questions about the Lovable build process specifically.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://workthosekeys.com" rel="noopener noreferrer"&gt;Live site!&lt;/a&gt;&lt;br&gt;
&lt;a href="https://typefast.fun" rel="noopener noreferrer"&gt;Old link&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
