<?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: Peaceful Hours</title>
    <description>The latest articles on DEV Community by Peaceful Hours (@peaceful_hours_bf2345026c).</description>
    <link>https://dev.to/peaceful_hours_bf2345026c</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%2F4177689%2Fce704e06-db60-45a3-b675-124b62f313d2.png</url>
      <title>DEV Community: Peaceful Hours</title>
      <link>https://dev.to/peaceful_hours_bf2345026c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/peaceful_hours_bf2345026c"/>
    <language>en</language>
    <item>
      <title>I Built a Chess Tool That Turns My Lost Games Into Personalized Puzzles</title>
      <dc:creator>Peaceful Hours</dc:creator>
      <pubDate>Sat, 17 Oct 2026 10:19:26 +0000</pubDate>
      <link>https://dev.to/peaceful_hours_bf2345026c/i-built-a-chess-tool-that-turns-my-lost-games-into-personalized-puzzles-5dcl</link>
      <guid>https://dev.to/peaceful_hours_bf2345026c/i-built-a-chess-tool-that-turns-my-lost-games-into-personalized-puzzles-5dcl</guid>
      <description>&lt;p&gt;One thing I've noticed about improving at chess is that solving puzzles is useful, but learning from your own mistakes is important too.&lt;br&gt;
When I lose a game on Chess.com or Lichess, I can analyse it to understand what went wrong. But I wanted an easier way to turn those mistakes into something I could practise later.&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%2F67vjcsb9w1y41bcxn2a6.jpg" 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%2F67vjcsb9w1y41bcxn2a6.jpg" alt=" " width="800" height="292"&gt;&lt;/a&gt;&lt;br&gt;
So I decided to build a chess tool around that idea.&lt;br&gt;
What does it do?&lt;br&gt;
The app currently has two main features.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Personalized chess puzzle builder
You can import your lost games from Chess.com or Lichess and use them to create puzzles based on your own games.
Instead of practising only with generic puzzles, you can revisit positions from games you've actually played.&lt;/li&gt;
&lt;/ol&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%2F4rk7va57uhjlmh52esvf.jpg" 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%2F4rk7va57uhjlmh52esvf.jpg" alt=" " width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Position analysis with adjustable playing strength
The app also includes a chessboard for analysing individual positions.&lt;/li&gt;
&lt;/ol&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%2F8i82mknpxnj33m5psu62.jpg" 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%2F8i82mknpxnj33m5psu62.jpg" alt=" " width="720" height="1292"&gt;&lt;/a&gt;&lt;br&gt;
You can configure the engine to a preferred playing-strength level, allowing you to explore positions without always relying on the strongest possible engine play.&lt;br&gt;
This feature focuses on analysing individual positions rather than analysing an entire game.&lt;br&gt;
Why did I build it?&lt;br&gt;
I wanted a practical way to connect analysing my mistakes with practising them.&lt;br&gt;
The idea is simple: if I repeatedly make certain mistakes in my own games, I should be able to revisit those positions and work on understanding them.&lt;br&gt;
I built this tool to make that process easier.&lt;br&gt;
Try it out&lt;br&gt;
The app is live, and I'm looking for people who enjoy playing chess and are willing to try it.&lt;br&gt;
♟️ Try the app: &lt;a href="https://chess-puzzle-builder.vercel.app/" rel="noopener noreferrer"&gt;https://chess-puzzle-builder.vercel.app/&lt;/a&gt;&lt;br&gt;
I'd especially appreciate feedback on these questions:&lt;br&gt;
Is creating puzzles from your own lost games useful?&lt;br&gt;
Would you use an adjustable-strength engine when analysing positions?&lt;br&gt;
What features would make this tool more useful for improving at chess?&lt;br&gt;
Did you encounter any bugs or confusing parts of the interface?&lt;br&gt;
I'm still working on improving the app, so honest criticism is welcome.&lt;br&gt;
Thanks for reading!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>showdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>I built a zero-backend chess audit tool using Stockfish WASM and client-side processing</title>
      <dc:creator>Peaceful Hours</dc:creator>
      <pubDate>Wed, 14 Oct 2026 07:49:12 +0000</pubDate>
      <link>https://dev.to/peaceful_hours_bf2345026c/i-built-a-zero-backend-chess-audit-tool-using-stockfish-wasm-and-client-side-processing-5069</link>
      <guid>https://dev.to/peaceful_hours_bf2345026c/i-built-a-zero-backend-chess-audit-tool-using-stockfish-wasm-and-client-side-processing-5069</guid>
      <description>&lt;p&gt;Hey dev.to community! 👋&lt;/p&gt;

&lt;p&gt;I wanted to share a browser-based tool I recently built: Chess Blunder Heatmap.&lt;/p&gt;

&lt;p&gt;Instead of focusing on single-game move-by-move engine analysis, the app aggregates a player’s game history to generate a macro-level heatmap of weak board squares and a phase breakdown (opening, middlegame, endgame).&lt;/p&gt;

&lt;p&gt;🛠️ The Tech Stack &amp;amp; Architecture&lt;br&gt;
Frontend: Clean client-side JavaScript hosted on Vercel.&lt;/p&gt;

&lt;p&gt;Engine: Stockfish WASM running directly in the browser.&lt;/p&gt;

&lt;p&gt;Backend: None. Everything is processed locally on the user's client.&lt;/p&gt;

&lt;p&gt;💡 Why WebAssembly &amp;amp; Client-Side?&lt;br&gt;
Zero Server Costs: Offloading engine evaluation to the client means zero compute bill or complex server infrastructure.&lt;/p&gt;

&lt;p&gt;Privacy &amp;amp; Frictionless UX: Users don't need to create an account, log in, or store their game logs on a remote server. You just enter a Chess.com username and run the audit.&lt;/p&gt;

&lt;p&gt;🧪 Features&lt;br&gt;
Visual board heatmap showing exact squares where blunders occur over time.&lt;/p&gt;

&lt;p&gt;Phase performance metrics (opening, middlegame, endgame).&lt;/p&gt;

&lt;p&gt;Instant testing with famous profiles (e.g., test Hikaru to audit a GM's blind spots).&lt;/p&gt;

&lt;p&gt;Check out the live tool here: &lt;a href="https://chess-blunder-heatmap.vercel.app/" rel="noopener noreferrer"&gt;https://chess-blunder-heatmap.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love to hear your thoughts on performance, WASM execution limits, or UI/UX feedback!&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%2Fxkuu7jw7kxf5h54x3bj9.jpg" 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%2Fxkuu7jw7kxf5h54x3bj9.jpg" alt=" " width="800" height="368"&gt;&lt;/a&gt;&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%2Fgqnut2p2va46a3x87gej.jpg" 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%2Fgqnut2p2va46a3x87gej.jpg" alt=" " width="800" height="365"&gt;&lt;/a&gt;&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%2Fx5f0r2zsnzncyk7jjee5.jpg" 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%2Fx5f0r2zsnzncyk7jjee5.jpg" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>showdev</category>
      <category>api</category>
    </item>
    <item>
      <title>Building a zero-cost anonymous "Confession Roulette" app with a forced-contribution loop</title>
      <dc:creator>Peaceful Hours</dc:creator>
      <pubDate>Sun, 11 Oct 2026 19:17:00 +0000</pubDate>
      <link>https://dev.to/peaceful_hours_bf2345026c/building-a-zero-cost-anonymous-confession-roulette-app-with-a-forced-contribution-loop-6o9</link>
      <guid>https://dev.to/peaceful_hours_bf2345026c/building-a-zero-cost-anonymous-confession-roulette-app-with-a-forced-contribution-loop-6o9</guid>
      <description>&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%2Fwxk9puyfwdvl84jgfz2x.jpg" 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%2Fwxk9puyfwdvl84jgfz2x.jpg" alt=" " width="720" height="1332"&gt;&lt;/a&gt;I built a lightweight, zero-maintenance web app called &lt;strong&gt;Confession Roulette&lt;/strong&gt; to experiment with random document fetching and an organic user-retention &lt;/p&gt;

&lt;h3&gt;
  
  
  🔗 Live Demo
&lt;/h3&gt;

&lt;p&gt;Try the app here: &lt;strong&gt;&lt;a href="https://confession-roulette.vercel.app" rel="noopener noreferrer"&gt;https://confession-roulette.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ⚙️ How the Loop Works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Users cycle through anonymous confessions submitted by others.&lt;/li&gt;
&lt;li&gt;Every &lt;strong&gt;3rd "Next" click&lt;/strong&gt; triggers a forced-contribution modal requiring the user to submit a secret before they can continue browsing.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  🛠️ Tech Stack &amp;amp; Constraints
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Single-file HTML + Tailwind CSS (via CDN)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend &amp;amp; DB:&lt;/strong&gt; Firebase Firestore for random document reads/writes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Vercel (Edge network)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Management:&lt;/strong&gt; Uses browser &lt;code&gt;localStorage&lt;/code&gt; to track seen document IDs so users never receive duplicate confessions without needing user logins or authentication databases.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;I wanted to keep the project completely free to run and self-sustaining. Would love any feedback on the forced-contribution loop or UI edge cases!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>javascript</category>
      <category>tailwindcss</category>
    </item>
  </channel>
</rss>
