<?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: ちーあい</title>
    <description>The latest articles on DEV Community by ちーあい (@chii-ai).</description>
    <link>https://dev.to/chii-ai</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%2F4114742%2F33751936-4028-44b9-8907-b1510bec9a08.png</url>
      <title>DEV Community: ちーあい</title>
      <link>https://dev.to/chii-ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chii-ai"/>
    <language>en</language>
    <item>
      <title>Make AI Coding Requests Reviewable: Five Habits and an Acceptance Checklist</title>
      <dc:creator>ちーあい</dc:creator>
      <pubDate>Tue, 22 Sep 2026 14:54:17 +0000</pubDate>
      <link>https://dev.to/chii-ai/make-ai-coding-requests-reviewable-five-habits-and-an-acceptance-checklist-1gec</link>
      <guid>https://dev.to/chii-ai/make-ai-coding-requests-reviewable-five-habits-and-an-acceptance-checklist-1gec</guid>
      <description>&lt;p&gt;AI-assisted coding becomes harder to review when one sentence mixes several targets, exceptions, and intended behaviors. In my solo iOS work, I find that separating those pieces makes the conversation easier to correct.&lt;/p&gt;

&lt;p&gt;This is a practical workflow from my experience, not a benchmark showing that clause count determines accuracy. The example below is a hypothetical profile editor, not a claim about a production defect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a request that is hard to verify
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Fix the name field and the Save button so empty names are rejected and errors are red, but keep the normal flow and show a confirmation when it works.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What exactly should turn red? Does “empty” include whitespace? Does a failed save still show confirmation? A reviewer must supply missing decisions before even checking the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five changes to the instruction
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Number the requirements
&lt;/h3&gt;

&lt;p&gt;Give every independently checkable behavior its own item. This provides a stable reference for implementation and review: “R3 is missing” is more useful than “the form still feels wrong.”&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Put short clarifications in parentheses
&lt;/h3&gt;

&lt;p&gt;Write “Save button (the checkmark in the top-right corner)” instead of leaving the target implicit. Keep parentheses short. A separate condition deserves a separate requirement.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. State the goal and your current understanding
&lt;/h3&gt;

&lt;p&gt;Goal: prevent accidentally saving a blank display name.&lt;/p&gt;

&lt;p&gt;Current understanding: the form allows an empty value. Ask the coding assistant to verify that assumption against the actual implementation before editing. Do not present an untested guess as a confirmed bug.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Restate current and intended behavior on every revision
&lt;/h3&gt;

&lt;p&gt;For the feature being changed, say what it does now and what it should do afterward. Include behavior that must be preserved. This is especially useful after several revisions, when an earlier message may describe an older implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Separate combined requests without losing logical conditions
&lt;/h3&gt;

&lt;p&gt;“A and B” can hide two separate changes or a shared condition. Write one rule per target when scope is ambiguous. However, preserve genuine conjunctions: “signed in AND has edit permission” requires both predicates. Splitting the prose must not change that logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  A reviewable replacement prompt
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Target: profile editor, display-name validation and Save action.
Goal: prevent blank display names from being persisted.

Current behavior (my understanding; verify first):
An empty name can be submitted.

Required behavior:
R1. Treat a name as blank if trimming whitespace and newlines
    produces an empty string.
R2. For a blank name, show “Enter a name” below the field.
R3. For a blank name, do not call the persistence operation.
R4. Render the validation message in red (the message itself).
R5. For a valid name, preserve the existing persistence behavior.
R6. Show a success confirmation only after persistence succeeds.
R7. Preserve the existing handling of persistence failures.

Before editing:
Check the implementation and identify any incorrect assumption
or conflict in these requirements.

After editing:
Report the change and verification result for each R-number.
Mark unverified items explicitly.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The prompt is longer, but the conditions are easier to locate. It also avoids accidentally requesting a red button when only the message should be red.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn the requirements into checks
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Input or event&lt;/th&gt;
&lt;th&gt;Expected observation&lt;/th&gt;
&lt;th&gt;Requirements&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Empty string&lt;/td&gt;
&lt;td&gt;Validation message; no persistence call&lt;/td&gt;
&lt;td&gt;R1–R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spaces and a newline&lt;/td&gt;
&lt;td&gt;Same as empty input&lt;/td&gt;
&lt;td&gt;R1–R4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Valid name, save succeeds&lt;/td&gt;
&lt;td&gt;Existing save behavior; confirmation after success&lt;/td&gt;
&lt;td&gt;R5–R6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Valid name, save fails&lt;/td&gt;
&lt;td&gt;Existing failure handling; no success confirmation&lt;/td&gt;
&lt;td&gt;R6–R7&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are suggested checks for the example, not tests I ran against an app in this article. In a real change, verify both the visible UI and the side effect: a warning alone does not prove that persistence was skipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep the next revision equally explicit
&lt;/h2&gt;

&lt;p&gt;If R2 needs different wording, restate its current message and replacement message. If the save flow has changed since the previous prompt, update that baseline. Requirement numbers help only if their meaning stays current.&lt;/p&gt;

&lt;p&gt;My next step is to review AI-assisted changes item by item as implemented, incorrect, or unverified. That makes the result easier to inspect and gives the next prompt a concrete starting point.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I am an independent developer of Wacha, an iOS party-game collection. This post was drafted and organized with AI assistance from my development experiences and notes.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>I Shipped Three iOS Apps With AI: 12 Downloads, $37, and ¥3</title>
      <dc:creator>ちーあい</dc:creator>
      <pubDate>Tue, 08 Sep 2026 01:46:03 +0000</pubDate>
      <link>https://dev.to/chii-ai/i-shipped-three-ios-apps-with-ai-12-downloads-37-and-y3-57fc</link>
      <guid>https://dev.to/chii-ai/i-shipped-three-ios-apps-with-ai-12-downloads-37-and-y3-57fc</guid>
      <description>&lt;p&gt;I am an independent developer who has shipped three iOS apps with the help of AI. The results are not a polished success story: one paid app generated &lt;strong&gt;$37.18&lt;/strong&gt; in roughly two months, another took about three months to build and earned only &lt;strong&gt;¥3&lt;/strong&gt; from ads, and my multilingual party-game collection Wacha! reached &lt;strong&gt;12 downloads on its first day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those first two apps do not support multiple languages, so I am not linking them here as recommendations for international readers. They still matter to this story because they taught me that finishing a product, monetizing it, and helping people discover it are three separate challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Wacha!?
&lt;/h2&gt;

&lt;p&gt;Wacha! is a free iPhone party-game collection for 2–8 players. It combines social deduction, quizzes, cards, word games, and action games, with both local and online play. The app supports Japanese, English, and Korean.&lt;/p&gt;

&lt;p&gt;Players join a six-digit room, pick a game, and keep playing together without creating an account. Messages and visual stamps remain available in the lobby and during games.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI was part of the entire workflow
&lt;/h2&gt;

&lt;p&gt;I used AI for more than code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading an expanding Swift codebase&lt;/li&gt;
&lt;li&gt;Implementing and debugging game rules&lt;/li&gt;
&lt;li&gt;Generating visual assets&lt;/li&gt;
&lt;li&gt;Translating the interface&lt;/li&gt;
&lt;li&gt;Preparing App Store review notes&lt;/li&gt;
&lt;li&gt;Writing outreach copy&lt;/li&gt;
&lt;li&gt;Building and updating the product website&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have also used Claude Code and Cursor professionally. For this personal workflow, Codex has been the best fit for me—not as a universal benchmark, but because it can connect long natural-language requirements, source analysis, image generation, and visual feedback from screenshots in one continuous context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Developing away from the desk
&lt;/h2&gt;

&lt;p&gt;I sometimes leave my Mac running at home and work remotely while I am away. I send concrete tasks to Codex for implementation, review preparation, localization, and promotion. AI keeps production moving, while product decisions, testing, and responsibility for the release remain mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the small numbers taught me
&lt;/h2&gt;

&lt;p&gt;The biggest lesson was that building and distribution are different jobs. AI can dramatically increase the amount one person can create, but it does not automatically create an audience. Instead of hiding the small numbers, I use them to decide what to improve next.&lt;/p&gt;

&lt;p&gt;I am continuing to add games, improve multiplayer behavior, and make it easier for groups to start playing immediately.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nandemorankingapp.com/wacha/ai-app-story-en" rel="noopener noreferrer"&gt;Read the complete development notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apps.apple.com/app/id6802128817" rel="noopener noreferrer"&gt;Try Wacha! for free on the App Store&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I am the developer of Wacha!.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>indie</category>
      <category>ios</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
