<?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: Daniel Dao</title>
    <description>The latest articles on DEV Community by Daniel Dao (@dndao).</description>
    <link>https://dev.to/dndao</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%2F3915339%2F5a5c668d-830d-493d-a496-6831d75eb979.JPG</url>
      <title>DEV Community: Daniel Dao</title>
      <link>https://dev.to/dndao</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dndao"/>
    <language>en</language>
    <item>
      <title>My first article on DevTo - about an app I "built" with Claude. 

Should software engineers change their job title to "design consultant/product owner/implementation instructor"?</title>
      <dc:creator>Daniel Dao</dc:creator>
      <pubDate>Wed, 06 May 2026 07:42:22 +0000</pubDate>
      <link>https://dev.to/dndao/my-first-article-on-devto-about-an-app-i-built-with-claude-should-software-engineers-4022</link>
      <guid>https://dev.to/dndao/my-first-article-on-devto-about-an-app-i-built-with-claude-should-software-engineers-4022</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5" class="crayons-story__hidden-navigation-link"&gt;I built a chess notation trainer with Claude — and never wrote a single line of code&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="/dndao" 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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3915339%2F5a5c668d-830d-493d-a496-6831d75eb979.JPG" alt="dndao profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dndao" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Daniel Dao
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Daniel Dao
                
              
              &lt;div id="story-author-preview-content-3619301" 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="/dndao" 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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3915339%2F5a5c668d-830d-493d-a496-6831d75eb979.JPG" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Daniel Dao&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/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 6&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/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5" id="article-link-3619301"&gt;
          I built a chess notation trainer with Claude — and never wrote a single line of code
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&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/nextjs"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;nextjs&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&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;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5" 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; reaction&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&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;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>career</category>
      <category>claude</category>
      <category>showdev</category>
    </item>
    <item>
      <title>I built a chess notation trainer with Claude — and never wrote a single line of code</title>
      <dc:creator>Daniel Dao</dc:creator>
      <pubDate>Wed, 06 May 2026 07:30:52 +0000</pubDate>
      <link>https://dev.to/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5</link>
      <guid>https://dev.to/dndao/i-built-a-chess-notation-trainer-with-claude-and-never-wrote-a-single-line-of-code-ll5</guid>
      <description>&lt;p&gt;I picked up &lt;em&gt;Logical Chess: Move by Move&lt;/em&gt; a few months ago. Great book. Except every few pages I'd hit a move like &lt;code&gt;Nxb5+&lt;/code&gt; or &lt;code&gt;O-O-O&lt;/code&gt; and completely lose the thread. I'd stop, count files, second-guess myself, then forget what Chernev was actually explaining.&lt;/p&gt;

&lt;p&gt;I went looking for a free tool that just drilled notation. Nothing paywalled, nothing that needed an account. Couldn't find one I liked.&lt;/p&gt;

&lt;p&gt;So I built it: &lt;strong&gt;&lt;a href="https://chessnotate.com" rel="noopener noreferrer"&gt;ChessNotate&lt;/a&gt;&lt;/strong&gt; - a free, offline-capable chess notation trainer with spaced repetition.&lt;/p&gt;

&lt;p&gt;And I built the entire thing without writing a single line of code myself.&lt;/p&gt;

&lt;p&gt;Here's what that actually looked like.&lt;/p&gt;




&lt;h2&gt;
  
  
  The workflow: Claude Code + Claude Design + Reddit
&lt;/h2&gt;

&lt;p&gt;I'm more of an infra person, not a developer. I can read and understand the code code and spot when something's off — but I'm not sitting there writing TypeScript by hand. This project was a chance to see how far I could push Claude as a genuine engineering and design collaborator.&lt;/p&gt;

&lt;p&gt;The answer: very far.&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Code in Dispatch mode
&lt;/h3&gt;

&lt;p&gt;I'd describe a feature in plain English — the scope, the constraints, the expected behaviour — and Dispatch would coordinate multiple subagents to tackle it in parallel. One agent working on the spaced repetition logic. Another building the drill state machine. Another wiring up IndexedDB with Dexie. All at once.&lt;/p&gt;

&lt;p&gt;The SM-2 spaced repetition algorithm, the PGN parser, the drill runners, the local storage layer — all of it was built this way. I never typed a function.&lt;/p&gt;

&lt;p&gt;My actual job was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing the product specs (what this feature needs to do, what the edge cases are)&lt;/li&gt;
&lt;li&gt;Reviewing the output (does this make sense? does it handle castling? what about en passant?)&lt;/li&gt;
&lt;li&gt;Making architectural calls (no backend, no auth, local-first, pure functions in &lt;code&gt;lib/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Asking the right questions when something felt off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a genuinely different mental model from AI autocomplete. Less "finish my sentence" and more "here's the brief, come back when it's done."&lt;/p&gt;

&lt;h3&gt;
  
  
  Claude Design for the UI
&lt;/h3&gt;

&lt;p&gt;The visual design — the editorial aesthetic, the typography system, the component library — was handled with &lt;strong&gt;Claude Design&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I gave it a direction: minimal, dark, book-like, not gamified. Think NYT Games energy. Serif headlines, generous whitespace, the board as the hero of every screen. I wanted it to feel like a considered tool, not another flashcard app.&lt;/p&gt;

&lt;p&gt;Claude Design took that brief and executed it — colour tokens, type scale, spacing system, button variants, the whole thing. I reviewed, gave feedback, it iterated. The design system doc it produced became the ground truth that Claude Code then built against.&lt;/p&gt;

&lt;p&gt;No Figma. No fiddling with CSS variables by hand.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the app actually does
&lt;/h2&gt;

&lt;p&gt;Three drill modes, all free, no account:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Square ID&lt;/strong&gt; — A coordinate appears (&lt;code&gt;f3&lt;/code&gt;) and you tap the square as fast as possible. Spaced repetition schedules harder squares more frequently until you've burnt the board into memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notation Write&lt;/strong&gt; — A position appears and you write the SAN notation for the move. The tricky part: handling disambiguation when two pieces can reach the same square. &lt;code&gt;Ne2&lt;/code&gt; isn't always enough — sometimes it needs to be &lt;code&gt;Nge2&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PGN Walkthrough&lt;/strong&gt; — Step through famous games move by move. Read the notation in context, see the position update, understand what the book is actually telling you.&lt;/p&gt;

&lt;p&gt;No backend. No database. Everything lives in IndexedDB on your device. Fully offline-capable via PWA. Clear your browser storage and it's gone — that's a conscious tradeoff for zero infrastructure.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I actually contributed
&lt;/h2&gt;

&lt;p&gt;I want to be honest about this, because the "I built this solo" narrative in indie dev is getting murky.&lt;/p&gt;

&lt;p&gt;I contributed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The product idea and the problem definition&lt;/li&gt;
&lt;li&gt;The spec documents (detailed enough that Claude Code could build against them which tbh Claude also co-authored)&lt;/li&gt;
&lt;li&gt;The architectural decisions&lt;/li&gt;
&lt;li&gt;The design direction and brand brief&lt;/li&gt;
&lt;li&gt;Every review pass — catching bugs, edge cases, UX decisions that felt off&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tools handled execution. The decisions were mine.&lt;/p&gt;

&lt;p&gt;I think that's a legitimate way to build software in 2025, and I'd rather say it plainly than pretend I was up at midnight writing TypeScript.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;More famous games for the PGN walkthrough&lt;/li&gt;
&lt;li&gt;A fourth drill: &lt;strong&gt;Read &amp;amp; Play&lt;/strong&gt; — you see the notation, you play the move on the board. The exact skill you need to follow a chess book.&lt;/li&gt;
&lt;li&gt;Mobile haptic feedback polish&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you're learning chess and notation slows you down, give it a try: &lt;strong&gt;&lt;a href="https://chessnotate.com" rel="noopener noreferrer"&gt;chessnotate.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And if you've built something meaningful with Claude Code or similar AI tooling — I'd genuinely like to hear how you're thinking about the human/AI split in your workflow. The question of "what's actually mine" is one I'm still working through.&lt;/p&gt;

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