<?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: Azeez Balogun</title>
    <description>The latest articles on DEV Community by Azeez Balogun (@balo).</description>
    <link>https://dev.to/balo</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%2F3917502%2F828f5281-9b27-4498-962d-af6ca3ccafc8.jpg</url>
      <title>DEV Community: Azeez Balogun</title>
      <link>https://dev.to/balo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/balo"/>
    <language>en</language>
    <item>
      <title>I Built a 3D Space Typing Game Where Every Word You Type Launches a Missile</title>
      <dc:creator>Azeez Balogun</dc:creator>
      <pubDate>Thu, 07 May 2026 08:39:59 +0000</pubDate>
      <link>https://dev.to/balo/i-built-a-3d-space-typing-game-where-every-word-you-type-launches-a-missile-4okc</link>
      <guid>https://dev.to/balo/i-built-a-3d-space-typing-game-where-every-word-you-type-launches-a-missile-4okc</guid>
      <description>&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/-Yr_WiuXXVE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Typing practice is boring. Let's be honest - staring at a paragraph of text and watching a WPM counter tick up isn't exactly compelling gameplay. So I built something different.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app-bcayy2sxivb5.appmedo.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;TypeSh!t&lt;/strong&gt;&lt;/a&gt; is a 3D space defense typing game. Enemy ships chase you through deep space and launch missiles labeled with words. Type the word correctly, and your ship fires an interceptor that blows it up. Miss too many, and your ship goes down.&lt;/p&gt;

&lt;p&gt;It sounds simple. It's not.&lt;/p&gt;

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

&lt;p&gt;I wanted to answer one question: &lt;em&gt;what if getting better at typing felt like winning a dogfight?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most typing tools treat practice as a chore. But the skills that make someone a fast typist - pattern recognition, rapid decision-making, muscle memory - are the same skills gamers already train for hours. The gap isn't motivation. It's packaging.&lt;/p&gt;

&lt;p&gt;So I wrapped a spaced repetition learning engine inside a Three.js space combat game. You're not studying vocabulary. You're defending your ship. The words you struggle with keep coming back (that's SM-2 doing its job), but you don't notice because you're too busy trying to survive.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's under the hood
&lt;/h2&gt;

&lt;p&gt;The game runs entirely in the browser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Three.js + @react-three/fiber&lt;/strong&gt; for the 3D scene - PBR materials on the ships, particle systems for engine trails and explosions, volumetric fog for depth, dynamic point lights that follow every vessel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;274,000+ words&lt;/strong&gt; from the word-list npm package, categorized by length into five difficulty tiers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adaptive difficulty&lt;/strong&gt; that uses an exponential moving average across your WPM, accuracy, and reaction time - no sudden spikes, just a curve that tightens as you improve&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seven game modes&lt;/strong&gt; - Survival, Time Attack, Zen, Boss Mode, Hardcore, Speedrun, and Story Mode with AI-narrated short stories where the narrative itself becomes your missiles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time multiplayer&lt;/strong&gt; using deterministic simulation - both clients run the same seeded word sequence independently, so the server only syncs scores and events, not positions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A full tournament system&lt;/strong&gt; - single and double elimination brackets, match lobbies with ready-state sync, shared seeds for competitive fairness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; for persistence - leaderboards, word stats, replays, friend lists, tournament data, all cross-device&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The hard parts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Making it feel right.&lt;/strong&gt; The difference between a frustrating typing game and an addictive one comes down to three tiny decisions: reset the input buffer immediately when no word matches (don't make players press Escape), lock to a single word once only one candidate remains, and slow down the last missile by 20% when it's close to hitting you. That last one is a trick stolen from Tetris - perceived fairness matters more than actual fairness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3D text readability.&lt;/strong&gt; Word labels are canvas-rendered textures applied to billboard sprites. Getting them readable against a dark space background with explosions and particle trails everywhere required semi-transparent dark backing panels and careful color-coding by difficulty (white → yellow → orange → red → magenta).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multiplayer without lag.&lt;/strong&gt; Each client runs its own simulation from a shared seed. The server never tracks missile positions. This means zero interpolation, zero rubber-banding, and the game feels identical whether you're playing solo or in a tournament match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One leaderboard entry per player per mode.&lt;/strong&gt; Sounds simple until you're handling concurrent submissions, UPSERT logic, rank recalculation, and cache invalidation - all inside a database transaction that needs to complete before the Game Over screen renders.&lt;/p&gt;

&lt;h2&gt;
  
  
  The modes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Survival&lt;/strong&gt; - enemies spawn faster until you can't keep up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time Attack&lt;/strong&gt; - 60 seconds, score multiplier 1.5x, survive or don't&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zen&lt;/strong&gt; - no death, just flow state with capped difficulty&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Boss Mode&lt;/strong&gt; - armored missiles that take three correct typings to destroy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardcore&lt;/strong&gt; - one hit and you're done, 2x multiplier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speedrun&lt;/strong&gt; - fixed 50-word sequence, same for everyone, ranked by completion time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Story Mode&lt;/strong&gt; - an AI narrator tells a short story, and the words from the narrative appear as missiles synchronized with the narration&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'd build next
&lt;/h2&gt;

&lt;p&gt;Sound design is the obvious gap - explosions should boom, engines should hum, and that last-missile-approaching moment needs a heartbeat. Ship customization (unlockable skins earned through play), spectator mode for tournaments, and mobile touch controls are all on the roadmap.&lt;/p&gt;

&lt;p&gt;The bigger vision is B2B: companies licensing focus sessions for domain-specific typing training. A medical team practicing anatomy terms. A trading desk drilling financial vocabulary. Same game, different word banks, real skill development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://app-bcayy2sxivb5.appmedo.com/" rel="noopener noreferrer"&gt;TypeSh!t&lt;/a&gt; is live and playable. Defend your ship. Get faster. Watch your weak words disappear from the rotation as SM-2 pushes them further and further apart.&lt;/p&gt;

&lt;p&gt;Every word you nail is a missile that never hits you again.&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.amazonaws.com%2Fuploads%2Farticles%2Fmnrrq4hljx2i28e1711o.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.amazonaws.com%2Fuploads%2Farticles%2Fmnrrq4hljx2i28e1711o.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2F345oic8muygph8vrsfzk.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.amazonaws.com%2Fuploads%2Farticles%2F345oic8muygph8vrsfzk.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2F863df7wkbz2ubd0205u2.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.amazonaws.com%2Fuploads%2Farticles%2F863df7wkbz2ubd0205u2.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Fvtk5fx799d8rf40lplhi.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.amazonaws.com%2Fuploads%2Farticles%2Fvtk5fx799d8rf40lplhi.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Ftha0if2tnnldtp7milp2.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.amazonaws.com%2Fuploads%2Farticles%2Ftha0if2tnnldtp7milp2.png" alt=" " width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Fpvjf4wufougzqnvgvkw3.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.amazonaws.com%2Fuploads%2Farticles%2Fpvjf4wufougzqnvgvkw3.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2F7t45j6rv6qx52vg3z4sl.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.amazonaws.com%2Fuploads%2Farticles%2F7t45j6rv6qx52vg3z4sl.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Fs7j54c2br2o4yqmmp066.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.amazonaws.com%2Fuploads%2Farticles%2Fs7j54c2br2o4yqmmp066.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2F526ottdb6mk1lxfsuw41.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.amazonaws.com%2Fuploads%2Farticles%2F526ottdb6mk1lxfsuw41.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Faeoc9udfjd7iejjn8by6.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.amazonaws.com%2Fuploads%2Farticles%2Faeoc9udfjd7iejjn8by6.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Fea09jejljl54l3kkk24b.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.amazonaws.com%2Fuploads%2Farticles%2Fea09jejljl54l3kkk24b.png" width="800" height="390"&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.amazonaws.com%2Fuploads%2Farticles%2Fn50o4dvawgpqe5s9xyyf.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.amazonaws.com%2Fuploads%2Farticles%2Fn50o4dvawgpqe5s9xyyf.png" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>builtwithmedo</category>
    </item>
  </channel>
</rss>
