<?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: Simon White</title>
    <description>The latest articles on DEV Community by Simon White (@houbsta).</description>
    <link>https://dev.to/houbsta</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%2F3862637%2F5e617683-29b9-4367-8917-db3fb18db7b4.jpeg</url>
      <title>DEV Community: Simon White</title>
      <link>https://dev.to/houbsta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/houbsta"/>
    <language>en</language>
    <item>
      <title>I built an iOS app at 50 using AI tools. Here's what actually worked</title>
      <dc:creator>Simon White</dc:creator>
      <pubDate>Sun, 05 Apr 2026 18:33:44 +0000</pubDate>
      <link>https://dev.to/houbsta/title-i-built-an-ios-app-at-50-using-ai-tools-heres-what-actually-worked-2mci</link>
      <guid>https://dev.to/houbsta/title-i-built-an-ios-app-at-50-using-ai-tools-heres-what-actually-worked-2mci</guid>
      <description>&lt;p&gt;When I started this project, I genuinely wasn't sure I could finish it. I'm a UX and ex-web developer — 25 years of ASP, PHP, JavaScript. Swift felt like a completely different planet.&lt;/p&gt;

&lt;p&gt;The idea had been sitting in my head for a while: a Tinder-style interface for your photo library. Swipe right to keep, swipe left to mark for deletion, review the pile before anything gets permanently removed. Simple concept. But the gap between "simple concept" and "working iOS app" felt enormous.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI-assisted path
&lt;/h2&gt;

&lt;p&gt;I started with Cursor for the initial scaffolding. Then iterated with ChatGPT for smaller modifications and UI experiments. The real breakthrough came with Claude — specifically Claude Projects for keeping context across the whole codebase, and Claude Code for the final review and polish.&lt;/p&gt;

&lt;p&gt;What surprised me wasn't just that the code worked. It's that I actually understood it. The iterative back-and-forth forced me to engage with Swift and Xcode properly, not just copy-paste. By the end I was making architectural decisions myself, pushing back on suggestions that didn't fit the app's design intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Photo Declutter&lt;/strong&gt; is a calm, session-based photo triage app for iOS.&lt;/p&gt;

&lt;p&gt;The core loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start a short session (5 minutes by default)&lt;/li&gt;
&lt;li&gt;Swipe through photos one at a time&lt;/li&gt;
&lt;li&gt;Right to keep, left to mark for release&lt;/li&gt;
&lt;li&gt;Review marked photos before anything is deleted&lt;/li&gt;
&lt;li&gt;Confirm — then let them go&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A few things I deliberately built in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two safety steps before any deletion — the in-app review screen, plus iOS's 30-day Recently Deleted album&lt;/li&gt;
&lt;li&gt;No automatic decisions — no AI duplicate detection, no auto-delete&lt;/li&gt;
&lt;li&gt;No account, no tracking, no data leaves the device&lt;/li&gt;
&lt;li&gt;Calm pacing — short sessions, one photo at a time, a zen-garden aesthetic&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The technical bits that were hardest
&lt;/h2&gt;

&lt;p&gt;A few things that took real iteration to get right:&lt;/p&gt;

&lt;p&gt;PHPhotoLibrary change observer — requires NSObject inheritance, needed careful handling around @MainActor and deinit for Swift concurrency.&lt;/p&gt;

&lt;p&gt;Animation via onChange is fragile — I learned this the hard way with the double-tap "Rediscovered" feature (adds a photo to a custom album with a heart animation). Driving opacity directly from the gesture state turned out to be far more reliable.&lt;/p&gt;

&lt;p&gt;True random vs shuffle — true random selection means some photos never appear, others repeat. The fix was shuffling the library once, and keeping it active (except for changes to the library, which a listener takes care of).&lt;/p&gt;

&lt;p&gt;HEIC and WhatsApp sharing — sharing HEIC images via the standard share sheet gets silently rejected by WhatsApp. Fix: transcode to JPEG via a temp file URL before sharing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The business model
&lt;/h2&gt;

&lt;p&gt;The app is free, no ads, no subscription. Two optional ways to support development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A tip jar ("buy me a coffee") on the About screen&lt;/li&gt;
&lt;li&gt;A one-time unlock for sessions longer than 5 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted it to feel like a daily ritual, not a product hunting for your wallet. Small apps that chase you for money at every session — I find that depressing both as a user and a developer.&lt;br&gt;
Where it stands&lt;/p&gt;

&lt;p&gt;V1.0 is live on the App Store, approved in about 2 days, localised in French and English. V1.1 will add the StoreKit premium unlock properly once I can test it thoroughly.&lt;/p&gt;

&lt;p&gt;Happy to talk Swift, AI-assisted development, indie App Store reality, or the UX philosophy. What worked for you when learning a new language or platform?&lt;/p&gt;

&lt;p&gt;FAQ &amp;amp; privacy policy: caperet.com/photo/&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://apps.apple.com/us/app/photo-declutter/id6761546408" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fis1-ssl.mzstatic.com%2Fimage%2Fthumb%2FPurpleSource211%2Fv4%2Fe5%2F3c%2F58%2Fe53c5894-f94e-ea1d-30ea-d7845fbb741d%2FPlaceholder.mill%2F1200x630wa.jpg" height="420" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://apps.apple.com/us/app/photo-declutter/id6761546408" rel="noopener noreferrer" class="c-link"&gt;
            ‎Photo Declutter App - App Store
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Download Photo Declutter by Caperet on the App Store. See screenshots, ratings and reviews, user tips, and more apps like Photo Declutter.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fapps.apple.com%2Fassets%2Ffavicon%2Ffavicon-32.png" width="32" height="32"&gt;
          apps.apple.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>swift</category>
      <category>ios</category>
      <category>ai</category>
      <category>indiehacker</category>
    </item>
  </channel>
</rss>
