Let's Reinvent the Wheel

Blog

Coding TypeGym: A Rust Terminal Typing Trainer | Part 3: Typing Logic

In Part 3 of our TypeGym series we make the trainer actually work: real input handling (typing, backspace, Ctrl+W), session timing, and the first real stats (WPM + accuracy), all shown directly in the Ratatui UI when you finish a run.

Coding TypeGym: A Rust Terminal Typing Trainer | Part 2: Ratatui UI

In Part 2 of our TypeGym series we build the real typing screen UI using Ratatui: character classification (hit/miss/empty), line/page building, styled rendering, centering, and correct cursor placement.

Coding TypeGym: A Rust Terminal Typing Trainer | Part 1: Main Loop

In Part 1 of our TypeGym series we set up the terminal app skeleton using Rust + Ratatui: a clean main loop, a UI event loop, and the first round of key handling. Nothing fancy yet. Just the foundation we will build the actual typing trainer on top of.

2025

Tower Blocks: Episode 6 - Tower Collapse

In this episode we introduce a new game state that animates the tower collapse after game over. Instead of instantly resetting, blocks now shrink and rotate away with staggered timing, creating a smooth and satisfying transition before restarting the game. This adds polish, pacing and a more finished feel to the overall game loop.

Tower Blocks: Episode 5 - Custom Lighting Shaders

In this episode we upgrade the visuals of Tower Blocks by writing custom lighting shaders in GLSL. We move from flat colored cubes to fully lit 3D blocks using ambient, diffuse and specular lighting. This step brings real depth to the scene.

Tower Blocks: Episode 4 - Falling Blocks

In this episode we add the missing piece that makes Tower Blocks feel alive: falling chopped blocks and a smooth-following camera. Imperfect placements now result in tumbling pieces that fall and spin, while the camera glides upward as the tower grows. The game is no longer just functional. It reacts.

Tower Blocks: Episode 3 - UI Animations

In previous episode we built the core gameplay: blocks move, players place them and the tower grows. Now in this episode we focus on polishing the experience by adding smooth text effects: animated score scaling, overlay fade-ins and sliding titles. It’s all about giving the UI some life and making the game feel responsive and dynamic.

Tower Blocks: Episode 2 - Core Game Mechanics

In this episode we bring the Tower Blocks game to life by adding core game mechanics: block movement, stacking logic, placement handling and the essential game loop with win/loss conditions.

Tower Blocks: Episode 1 - Building the 3D Scene

In this episode we set up the foundation for our Tower Blocks game in C using Raylib. We establish a 3D scene with an orthographic camera, render stackable blocks, implement user input and make the camera follow the growing tower. Laying the groundwork for future gameplay mechanics.

Snake Rewind: Episode 8 - Visual Glitchcraft

In this episode we dive into retro inspired shader effects: scanlines, flicker, distortion and chromatic aberration. This gives our Snake Rewind the look and feel of a glitched out arcade display.

Snake Rewind: Episode 7 - Shine On

In this episode we give Snake Rewind its first post processing effect: a glowing bloom shader that adds depth, atmosphere and a retro arcade vibe to the entire game.

Snake Rewind: Episode 6 - Flashy Feedback

In this episode we bring the score display to life with animated scaling and rotation. We add a satisfying visual feedback every time the player eats food and grows the snake.

Snake Rewind: Episode 5 - Snake Ends Here

In this episode we complete the core gameplay loop by adding collision detection, game over logic and a restart system. Thus giving the player something to fear and the game real stakes.

Snake Rewind: Episode 4 - Past Self, Present Danger

In this episode we introduce the clone mechanic: snakes that replay your past moves with deadly precision. It is a strategic twist that transforms Snake Rewind from a simple remake into a tactical survival challenge.

Snake Rewind: Episode 3 - Feeding the Beast

In this episode we introduce food to the game allowing the snake to grow and bringing the core gameplay loop to life. It’s a small change that makes a big difference and sets the stage for the clone mechanic coming next.

Snake Rewind: Episode 2 - Slither With Style

In this episode we breathe life into the grid by implementing smooth step based snake movement and clean keyboard input handling - laying the groundwork for gameplay mechanics to come.

Snake Rewind: Episode 1 - Gridlocked Pixels

In the first episode of Snake Rewind we lay the groundwork for a retro inspired Snake game by building a crisp pixel perfect tile grid using Raylib. This foundational system sets the stage for everything to come: from clone mechanics to shader powered visuals.

Quadtree Art, Part 3: Prioritized Subdivision with Binary Heap

In this final part we introduce a priority queue to guide image subdivision based on color error and area. The result is a smarter and faster rendering process that focuses effort where it visually matters most.

Quadtree Art, Part 2: Linear Subdivision with Quads

We implement basic image subdivision using a dynamic array to manage quads. The result looks interesting but without prioritization we end up spending time on regions that barely matter. This part sets the stage for a smarter approach in Part 3.

Quadtree Art, Part 1: Setting Up the Canvas

Setting up rendering pipeline using SDL3 and stb_image. We load an image, create a framebuffer and display the result using a texture. This part lays the groundwork for interactive image subdivision in future parts.

0n0FF: Teaching a Puzzle to Solve Itself

We extend 0n0FF with a real time solver powered by Breadth First Search (BFS) and bit manipulation. Learn how to compute perfect puzzle solutions and guide players with subtle visual hints - all in React and TypeScript.

0n0FF: A Flipping Puzzle in React

A compact logic puzzle where every click flips an entire row and column. Using TypeScript, React, Context, and Reducers, we implement the game from scratch with a clean, minimal UI and satisfying interactions

Solving Boggle Backwards

A simple Boggle solver that flips the problem on its head: instead of finding words on the board, we check if dictionary words can be formed from the board. Surprisingly simple, surprisingly effective.

Terminal Rainbows in Zig: A Colorful cat-like Tool

A small learning project that explores how tools like lolcat create colorful and animated terminal output. This time we use Zig for the first time to add some color to our terminal and learn how ANSI escape codes make it all work.

Doom Fire Animation with PPM and mpv

Learn how to create a mesmerizing Doom Fire animation from scratch in C11, using only the PPM image format and mpv for display. This hands-on tutorial walks you through simulating classic pixel fire in a modern C environment, without any graphics libraries - just raw image output and a powerful video player.

Build Your Own RoyalRoad to EPUB Converter

Learn how to build a simple Python script that scrapes stories from RoyalRoad and converts them into EPUB files for offline reading. This beginner friendly project uses BeautifulSoup, requests, and EbookLib to walk you through a full pipeline from HTML scraping to ebook generation. A perfect start for anyone looking to automate something useful.

The Start of Something New

Let’s Reinvent the Wheel is all about learning by building from scratch. We’re starting with an empty GitHub and LeetCode profile, exploring backend, frontend, and interview prep. The goal is to recreate existing tools and ideas to truly understand how they work. No fixed roadmap — just hands-on projects that challenge and teach