<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Building Indie Apps At Shipyard Studios]]></title><description><![CDATA[Follow me as I try to turn indie apps into a profitable business.

I’m sharing what works, what doesn’t, and what I learn along the way.

Let's ship some apps. ]]></description><link>https://www.shipyardstudios.io</link><image><url>https://substackcdn.com/image/fetch/$s_!ACJh!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb377c27c-80d1-4a55-b484-74ecb2a9065a_760x760.png</url><title>Building Indie Apps At Shipyard Studios</title><link>https://www.shipyardstudios.io</link></image><generator>Substack</generator><lastBuildDate>Wed, 22 Apr 2026 08:47:35 GMT</lastBuildDate><atom:link href="https://www.shipyardstudios.io/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mike]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[mikegilroy@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[mikegilroy@substack.com]]></itunes:email><itunes:name><![CDATA[Mike Gilroy]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mike Gilroy]]></itunes:author><googleplay:owner><![CDATA[mikegilroy@substack.com]]></googleplay:owner><googleplay:email><![CDATA[mikegilroy@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mike Gilroy]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[AI Lacks A Delicate Touch. Distribution Wins.]]></title><description><![CDATA[Shipping an interactive photo zoom feature, Cal AI&#8217;s acquisition and some thoughts on where AI struggles with native app development.]]></description><link>https://www.shipyardstudios.io/p/ai-lacks-a-delicate-touch-distribution</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/ai-lacks-a-delicate-touch-distribution</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Mon, 16 Mar 2026 18:11:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZR3E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week I shipped a new zoom feature for PhotoJourney, got stuck trying to use AI to build it, and spent some time thinking about Cal AI&#8217;s acquisition by MyFitnessPal. All three got me thinking about where AI is helpful right now, where it still falls short and how it doesn&#8217;t make up for great distribution.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZR3E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZR3E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 424w, https://substackcdn.com/image/fetch/$s_!ZR3E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 848w, https://substackcdn.com/image/fetch/$s_!ZR3E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 1272w, https://substackcdn.com/image/fetch/$s_!ZR3E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZR3E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic" width="1456" height="939" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:939,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1525467,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/190896878?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZR3E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 424w, https://substackcdn.com/image/fetch/$s_!ZR3E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 848w, https://substackcdn.com/image/fetch/$s_!ZR3E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 1272w, https://substackcdn.com/image/fetch/$s_!ZR3E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa975c854-ef4e-4863-9810-3195e59714c7_7375x4755.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Good At Maths, Bad At Touch</h3><p>I shipped a zoom feature for <a href="https://apps.apple.com/app/photojourney-daily-timelapse/id6499454966">PhotoJourney</a> this week. The app has a photo compare screen where you put two photos side by side or use a swipe-to-reveal slider to spot differences over time, and I wanted to let people pinch into a specific area to compare detail up close. Check out the finished feature in the demo video below, or <a href="https://apps.apple.com/app/photojourney-daily-timelapse/id6499454966">in the app</a>. </p><p></p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;51cdcd56-dad8-456b-9170-ba85dcd94cbb&quot;,&quot;duration&quot;:null}"></div><p></p><p>AI handled building parts of this really well. The maths for cropping images to match a zoomed region, for example, would have taken me much longer to get right on my own. But the core challenge was getting zoom, swipe and scroll gestures to all work together on the same screen without conflicting, and AI struggled.</p><p>This is a pattern I keep running into in native app development. AI is generally great at building well-defined features and plugging into the existing architecture of the codebase. But it often struggles with features involving complex gestures, overlapping animation or UI that needs to feel right when you actually use it. For this zoom feature, it was able to set up the code for pinch gesture and a swipe gesture on the same screen. But it couldn&#8217;t reason well about what happens when a person touches the screen and those gestures conflict or how UI would look during interaction.</p><p>I still ended up using AI to build out the feature, but I had to be very specific in how I wanted that feature to be built under the hood. I wonder if Apple will build dev tools that let AI observe and interact with a running app in simulator down the line. That feels like the missing feedback loop to me.</p><p></p><h3>Where AI Built A Company Worth Acquiring</h3><p><a href="https://www.google.com/url?sa=t&amp;source=web&amp;rct=j&amp;opi=89978449&amp;url=https://apps.apple.com/us/app/cal-ai-calorie-tracker/id6480417616&amp;ved=2ahUKEwjF0b3h_KSTAxXMWkEAHavBOl0QFnoECBsQAQ&amp;usg=AOvVaw03ZRDZZ_4rxwyOI2NC7pmX">Cal AI </a>was recently acquired by MyFitnessPal, for an undisclosed sum, which reportedly exceeds $100 million. Their app does one thing well: helps you track your calories by taking a photo of your food. It does this using LLM technology to analyze food items in a photo and make a calculated estimate of calories and nutritional value of the food. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j3tz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j3tz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 424w, https://substackcdn.com/image/fetch/$s_!j3tz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 848w, https://substackcdn.com/image/fetch/$s_!j3tz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 1272w, https://substackcdn.com/image/fetch/$s_!j3tz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j3tz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic" width="1456" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/190896878?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j3tz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 424w, https://substackcdn.com/image/fetch/$s_!j3tz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 848w, https://substackcdn.com/image/fetch/$s_!j3tz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 1272w, https://substackcdn.com/image/fetch/$s_!j3tz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19f0b1ae-26db-4f53-9d84-bf24d4ba1f4b_2274x672.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Cal AI download and revenue estimates for February. Source: AppFigures.com</figcaption></figure></div><p>According to <a href="https://appfigures.com">AppFigures</a>, Cal AI reported over 900,000 downloads in February alone with an estimated $3 million in monthly revenue. That doesn&#8217;t happen because of the AI technology they used to build it. That happens because of distribution. Excellent social content, aggressive paid marketing and smart positioning.</p><p>Cal AI is an excellent example of what happens when someone picks the right (simple) problem for AI to solve and then puts serious effort into getting it in front of people, fast. The AI is what makes the product work, but the distribution is what made it worth acquiring.</p><p>When I started out as an indie dev, I didn&#8217;t give nearly enough credit to how much distribution was going to be by far my biggest challenge. I&#8217;ve since learned the hard way that you can build something that solves a problem yet still struggle to get it in front of even a handful of people. Going forward I will be focusing much more of my time on organic and paid social strategies for app distribution, so I&#8217;ll be sure to share what works and what doesn't.</p><p></p><h3>Goals for Next Week</h3><p>I&#8217;ve got a few <a href="https://apps.apple.com/app/wealthlog-net-worth-tracker/id6741539563">WealthLog</a> feature requests from users that I want to dig into. I&#8217;m also trying to get into a better rhythm with sharing blog posts. Writing doesn&#8217;t come naturally to me, so I&#8217;ve been building some AI tooling to help with editing and structuring posts. The goal is to make the process fast enough that posting weekly actually becomes a maintainable habit rather than something that eats half of my day.</p><p></p><p>That&#8217;s it for this week. Thanks for reading.</p><p>&#8211; Mike</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Building Indie Apps At Shipyard Studios! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[WealthLog Gets Goals (And A Lesson In Scope Creep)]]></title><description><![CDATA[I shipped WealthLog as a net worth tracker &#8212; a way see your full financial picture. The next step I wanted to tackle was adding the ability to set financial goals.]]></description><link>https://www.shipyardstudios.io/p/wealthlog-gets-goals-and-a-lesson</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/wealthlog-gets-goals-and-a-lesson</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Wed, 25 Feb 2026 06:01:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Zu6h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zu6h!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zu6h!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!Zu6h!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!Zu6h!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!Zu6h!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zu6h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic" width="1456" height="942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167594,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/189073741?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zu6h!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!Zu6h!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!Zu6h!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!Zu6h!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07209a17-c3a6-42f9-b58d-0fce2448c099_3626x2346.heic 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I shipped WealthLog as a net worth tracker &#8212; a way to connect all your accounts, see your full financial picture in one place and track how things change over time. The next step I wanted to tackle was adding the ability to set financial goals. Not just &#8220;here&#8217;s where you are&#8221; but &#8220;here&#8217;s where you&#8217;re trying to get to, here&#8217;s how far along you are and here&#8217;s what&#8217;s helping you progress.&#8221; </p><p>This past week I shipped &#8216;Goals&#8217; on WealthLog. Here&#8217;s what it looks like. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Mike Gilroy &#8211; Building Indie Apps At Shipyard Studios! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Choosing A Goal</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pA_q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pA_q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!pA_q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!pA_q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!pA_q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pA_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic" width="1456" height="942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168058,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/189073741?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pA_q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!pA_q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!pA_q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!pA_q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a405c18-67b7-46dd-9986-2f4c3ee63c1c_3626x2346.heic 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When you create a new goal, you initially pick from five types:</p><ul><li><p><strong>Net worth target</strong> &#8212; a target for your total wealth across all accounts</p></li><li><p><strong>Investment growth</strong> &#8212; for stocks, pensions, or other investments</p></li><li><p><strong>Savings growth</strong> &#8212; for an emergency fund or saving toward a big purchase</p></li><li><p><strong>Debt reduction</strong> &#8212; a payoff target for your mortgage, loans, or credit cards</p></li><li><p><strong>Custom goal</strong> &#8212; any combination of accounts you choose</p></li></ul><p>These goal types are actually set up in the exact same way under the hood, but I wanted users to get a feel for different types of goals they could create at first interaction. </p><p>Net worth goals automatically include all your accounts and stay in sync if you add or remove accounts later. </p><p>Debt reduction goals help you track towards lowering your overall debt, maybe for all your outstanding credit cards or a single student loan you want to pay off. </p><p>Custom goals are the most flexible &#8212; useful if you want to track something with a very specific combination of accounts. Maybe you want to track liquid asset growth across just your stocks and cash accounts while ignoring a pension or property as these are not very liquid. I wanted to leave an option for users to be creative and custom goals are very flexible. </p><div><hr></div><h2>Setting Up A Goal</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zikX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zikX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!zikX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!zikX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!zikX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zikX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic" width="1456" height="942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:134758,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/189073741?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zikX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!zikX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!zikX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!zikX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1037dadb-0581-4b16-8214-70f7da0dea79_3626x2346.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Once you&#8217;ve picked a goal type, you can name the goal, select which accounts to include, and set your target. There are two target modes: a one-time value target (e.g. reach &#163;50,000 total) or a monthly recurring target (e.g. add &#163;500 every month). The recurring option is more useful for building habits &#8212; more on that below.</p><p><strong>Target dates</strong> can be set as a specific date or by age. If you enter your date of birth and set a target age &#8212; say 60 &#8212; WealthLog works out the date automatically. Useful for retirement-type goals without having to do the maths yourself.</p><p>You can also set a start date for the goal. Either from today, so it starts at your current account values, or from an earlier date &#8212; right back to the first log recorded for those accounts. This lets you count progress you&#8217;ve already made if that&#8217;s relevant to the goal.</p><div><hr></div><h2>Tracking Your Goals</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GK4i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GK4i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!GK4i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!GK4i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!GK4i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GK4i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic" width="1456" height="942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212823,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/189073741?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GK4i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!GK4i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!GK4i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!GK4i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95efb519-9ee2-4b90-b5ae-5787c4e023a5_3626x2346.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>All your goals sit on a dedicated <strong>Goals</strong> screen. Each card shows your current value, your target and your progress. You can have as many goals as you want and sort them by due date, target amount or current progress.</p><p>Tapping into a goal opens a detail screen with charts and a breakdown of the included accounts and their individual contributions &#8212; useful when a goal spans multiple accounts and you want to see what&#8217;s actually driving the movement.</p><div><hr></div><h2>Monthly Goals UI Challenge</h2><p>The monthly recurring goal type was the trickiest part to get right, specifically the UI for showing month-by-month progress within a summary goal card. It needed to stay compact and provide useful information at a glance.</p><p>Initially I thought of a bar chart, with one bar for each month showing positive and negative gain. It worked but the problem I found was that negative values on a bar chart in a small space are awkward &#8212; a big negative month distorts the scale and makes the positive months look flat by comparison.</p><p>I ended up taking a different approach, using a circular progress ring for each month &#8212; similar to Apple&#8217;s fitness rings. A ring can represent positive and negative values through direction (clockwise for progress) and colour (green for months you hit your target, red for months you fell short). It&#8217;s more compact and handles the full range of values without the skewed scale problem.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eeDy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eeDy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!eeDy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!eeDy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!eeDy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eeDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic" width="1456" height="942" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:942,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:139668,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.shipyardstudios.io/i/189073741?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eeDy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 424w, https://substackcdn.com/image/fetch/$s_!eeDy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 848w, https://substackcdn.com/image/fetch/$s_!eeDy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 1272w, https://substackcdn.com/image/fetch/$s_!eeDy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4f15d40-5ec6-41ce-8fb1-21473a2e7d86_3626x2346.heic 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To be totally honest, I&#8217;m not sure I&#8217;m happy with this UI but I think it works well enough for a v1 and solves the core problem of handling varying positive and negative results.</p><div><hr></div><h2>A Lesson In Scope Creep </h2><p>The original plan for this feature was much simpler: a goal configuration screen and a list of goal cards. After sharing early designs with a few people, it was clear a goal detail screen with charts was worth adding &#8212; a progress bar alone doesn&#8217;t give you much to work with when you want to understand what&#8217;s actually driving movement. So I pushed the release back and built that first.</p><p>Then while building, I kept coming back to monthly recurring goals. An overall net worth target is useful, but it doesn&#8217;t give you much reason to check in regularly. A monthly savings commitment does &#8212; you can see your progress rings build up, hit your target and keep a streak going. That kind of feedback loop is what turns a tracker into something you actually use consistently. So that went in too, along with the extra calculation logic it needed for goals spanning multiple account combinations.</p><p>Scope creep has a compounding effect that&#8217;s easy to underestimate. Every feature added to a release isn&#8217;t just more build time &#8212; it&#8217;s more test cases, more edge cases, more surface area for bugs to hide. This release had more of all three than I&#8217;d have liked. The lesson I keep relearning: ship small and fast. Getting something in front of users early is better for gathering feedback, and honestly better for staying sane. Going forward I want to be much more deliberate about keeping releases tight rather than waiting until something feels fully established. WealthLog Goals is a good v1, but it could have been in user&#8217;s hands a lot sooner if I&#8217;d remembered age-old lessons on scope creep. </p><div><hr></div><h2>What Next For WealthLog?</h2><p>I&#8217;m glad I&#8217;ve shipped Goals. Hopefully it will add value by helping to motivate people towards more regular financial tracking and growing their wealth. It&#8217;s also a fun tool to be able to customize WealthLog a bit more to your unique life goals. But how do you choose an appropriate financial goal? That&#8217;s the question I&#8217;d like to address with future features, so more on that soon... For now, if you&#8217;ve got any thoughts on this or on the existing app please do get in touch. </p><div><hr></div><p>That&#8217;s all for this week. Thanks for reading. </p><p>&#8212; Mike</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Mike Gilroy &#8211; Building Indie Apps At Shipyard Studios! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Introducing WealthLog: a simpler way to track your net worth]]></title><description><![CDATA[Search almost any celebrity on Google, and one of the first suggestions will be their net worth.]]></description><link>https://www.shipyardstudios.io/p/introducing-wealthlog-a-simpler-way-to-track-your-net-worth</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/introducing-wealthlog-a-simpler-way-to-track-your-net-worth</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Thu, 10 Apr 2025 00:58:33 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a0b8ca48-6995-4092-b4e8-fe90c9fa5936_2000x1584.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eMT0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eMT0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eMT0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eMT0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eMT0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eMT0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Introducing WealthLog: a simpler way to track your net worth&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Introducing WealthLog: a simpler way to track your net worth" title="Introducing WealthLog: a simpler way to track your net worth" srcset="https://substackcdn.com/image/fetch/$s_!eMT0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eMT0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eMT0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eMT0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b5fbae4-b0bd-4ea0-b562-a2b81ff3daa4_2000x1584.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>Search almost any celebrity on Google, and one of the first suggestions will be their net worth. There&#8217;s clearly something fascinating about knowing what someone is&nbsp;<em>worth</em>. But your own number? That&#8217;s the one that really matters.</p><p>Your net worth is one of the most valuable numbers to understand when it comes to your financial health. It&#8217;s a simple calculation &#8212; what you own, minus what you owe &#8212; but it can tell you a lot: how you're progressing, how much flexibility you have, and where you might need to make changes to grow your wealth.</p><p>That&#8217;s the idea behind WealthLog &#8212; a new app I built to help anyone calculate, track and grow their net worth.&nbsp;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gQHg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gQHg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 424w, https://substackcdn.com/image/fetch/$s_!gQHg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 848w, https://substackcdn.com/image/fetch/$s_!gQHg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 1272w, https://substackcdn.com/image/fetch/$s_!gQHg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gQHg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png" width="1328" height="984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:984,&quot;width&quot;:1328,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Introducing WealthLog: a simpler way to track your net worth&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Introducing WealthLog: a simpler way to track your net worth" title="Introducing WealthLog: a simpler way to track your net worth" srcset="https://substackcdn.com/image/fetch/$s_!gQHg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 424w, https://substackcdn.com/image/fetch/$s_!gQHg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 848w, https://substackcdn.com/image/fetch/$s_!gQHg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 1272w, https://substackcdn.com/image/fetch/$s_!gQHg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F562d68c6-e8d9-43cc-b466-cb55ffb53d20_1328x984.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>What is net worth?</h2><p>Your&nbsp;<strong>net worth</strong>&nbsp;is a single figure that literally sums up your entire financial picture. It&#8217;s your total assets (things you own, like cash or investments) minus your total liabilities (things you owe, like credit card debt or mortages).</p><p>If you sold everything you own and use it to pay off everything you owe, your net worth is effectively the amount of money you&#8217;d have left. It&#8217;s a snapshot of your overall financial position &#8212; and it&#8217;s one of the clearest ways to track your wealth and financial progress.</p><p>Knowing and tracking your net worth isn&#8217;t just for the rich and famous. It&#8217;s a tool for <em>anyone</em>&nbsp;who wants to feel more in control of their money. It&#8217;s not about comparing yourself to others &#8212; it&#8217;s about comparing yourself to yesterday, and seeing real, personal progress over time.</p><div><hr></div><h2>Why your net worth matters</h2><p>Understanding your net worth can help you make better decisions &#8212; from everyday spending to major life choices. It can help answer questions like:</p><ul><li><p>How has my financial position changed since last year?</p></li><li><p>What&#8217;s the health of my emergency fund?</p></li><li><p>How close am I to being debt-free?</p></li><li><p>If I quit my job tomorrow, how long could I survive without income?</p></li><li><p>Do I have enough cash to support moving with all the one-off costs?</p></li><li><p>If I sold everything tomorrow and paid off all my debts, how much money would I have left?</p></li></ul><p>These are the kinds of questions net worth tracking has helped me answer &#8212; because I can clearly see the state of all my accounts, how they've changed over time, and spot opportunities for saving, growth and paying down debt.</p><div><hr></div><h2>A better app to track your money&nbsp;</h2><p>For the past 8 years or so, I've tracked my net worth with spreadsheets, using custom templates that I've added to over time. It worked &#8212; but it was clunky, slow, and easy to outgrow.</p><p>I also tried plenty of apps, but they had limitations too:</p><ul><li><p><strong>They required account syncing</strong>&nbsp;&#8212; which didn&#8217;t support some of my international accounts and left out anything not tied to a digital login.</p></li><li><p><strong>Manual entry was often painful or impossible</strong>&nbsp;&#8212; which made tracking niche assets or physical items frustrating.</p></li><li><p><strong>They lacked proper multi-currency support</strong>&nbsp;&#8212; even before living abroad the few investments I had were all in US dollars and I was operating in British pounds day-to-day.</p></li></ul><p>So I built&nbsp;<strong>WealthLog</strong>, a new app designed to fix all that.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5jh8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5jh8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5jh8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5jh8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5jh8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5jh8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg" width="2000" height="1584" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1584,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Introducing WealthLog: a simpler way to track your net worth&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Introducing WealthLog: a simpler way to track your net worth" title="Introducing WealthLog: a simpler way to track your net worth" srcset="https://substackcdn.com/image/fetch/$s_!5jh8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5jh8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5jh8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5jh8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5bb1829-3a00-4cb1-91e2-117d7022412a_2000x1584.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Meet WealthLog: your simple net worth tracker</h2><p>WealthLog is a simple, powerful, and flexible app that helps you track your net worth with ease. It&#8217;s built for clarity and control, without needing to sync your bank accounts.</p><ul><li><p><strong>Track any asset</strong> - from bank accounts and stocks to cash, rental deposits, and personal items &#8212; if it has value, you can add it.</p></li><li><p><strong>Track any liability</strong> - credit cards, student loans, car loans, mortgages &#8212; know exactly what you owe, and how it impacts your overall picture.</p></li><li><p><strong>Use any currency</strong> - add values in any currency. WealthLog handles automatic conversion into your main currency with live conversion rates.</p></li><li><p><strong>Visualize your journey</strong> - track your net worth over time with interactive charts that help you spot trends, dips, and growth.</p></li><li><p><strong>See where your money lives</strong> - pie charts and breakdowns show how your assets and debts are distributed &#8212; helping you identify imbalance and opportunity.</p></li></ul><div><hr></div><h2>Why now is better than ever to start tracking</h2><p>Right now, financial markets are all over the place. Global tariff wars, inflation, stock market crashes &#8212; it&#8217;s hard to know what&#8217;s coming next.</p><p>That makes it more important than ever to understand your own finances clearly.</p><p>When the world feels unpredictable, knowing your net worth can help you:</p><ul><li><p>Feel more confident about your financial decisions</p></li><li><p>Understand how much risk you can actually take on</p></li><li><p>React quickly when things change &#8212; or stay steady if that's best</p></li><li><p>Spot new opportunities to save, invest or pay down debt</p></li><li><p>Focus on what you&nbsp;<em>can</em>&nbsp;control, instead of worrying about what you can&#8217;t</p></li></ul><p>You can&#8217;t control the economy. But you&nbsp;<em>can</em>&nbsp;understand your own financial position &#8212; and make better decisions because of it.</p><div><hr></div><h2>Download WealthLog today!</h2><p>The very first version of WealthLog is now available for <a href="https://apps.apple.com/us/app/net-worth-tracker-wealthlog/id6741539563?ref=shipyardstudios.io">download</a>, but there's still so much I'd like to add.</p><p>If you give it a try, I&#8217;d love to hear what you think.</p><ul><li><p>What features would make it even more useful for you?</p></li><li><p>What parts do you like?</p></li><li><p>What needs work?</p></li></ul><h3>&#11088;&#65039; Support your local indie dev (me)</h3><p>If you like the app, a quick rating (or even a review if you&#8217;re feeling fancy) would mean a lot. It helps more people discover the app and keeps indie projects like this alive and improving. You can <a href="https://apps.apple.com/us/app/net-worth-tracker-wealthlog/id6741539563?action=write-review&amp;ref=shipyardstudios.io">leave a rating here.</a></p><h3>&#128272; Your financial data is private and secure</h3><p>Finances are personal and private, and I'd like to keep it that way. WealthLog doesn't require creating an account or entering any third-party bank logins. Any financial data you enter in the app is stored securely on your device or in your iCloud account, and is not visible by anyone but you. The only data collected and stored externally to the app is anonymous analytics and usage data, used to better understand how people are using the app and how it can be improved. This analytics data never includes financial amounts, account names or any personally identifiable information.</p><p></p><p>Looking forward to hearing what you think!</p><p>&#8211; Mike</p><p><a href="https://apps.apple.com/redeem?ctx=offercodes&amp;id=6741539563&amp;code=SHIPYARDBLOG&amp;ref=shipyardstudios.io">Claim 6-months free here!</a></p>]]></content:encoded></item><item><title><![CDATA[The Tools I Actually Use Every Day to Build Indie Apps]]></title><description><![CDATA[A look at everything I rely on to design, build, launch, and grow my apps.]]></description><link>https://www.shipyardstudios.io/p/the-tools-i-actually-use-every-day-to-build-indie-apps</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/the-tools-i-actually-use-every-day-to-build-indie-apps</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Fri, 04 Apr 2025 23:48:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a3ae364b-4563-460b-b68a-f4df7d2b78c7_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jVB2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jVB2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!jVB2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!jVB2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!jVB2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jVB2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Tools I Actually Use Every Day to Build Indie Apps&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Tools I Actually Use Every Day to Build Indie Apps" title="The Tools I Actually Use Every Day to Build Indie Apps" srcset="https://substackcdn.com/image/fetch/$s_!jVB2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!jVB2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!jVB2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!jVB2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F120c4acd-6fde-4728-9225-f98998d90fb2_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p><em>A look at everything I rely on to design, build, launch, and grow my apps.</em></p><p>I often see other developers sharing lists of their go-to tools, and I&#8217;ve always found those posts useful &#8212; even if just to pick up one or two new ideas. So I figured I&#8217;d share my own stack: the tools I use on a&nbsp;<strong>daily or near-daily basis</strong>&nbsp;while building and growing my indie apps.</p><p>It&#8217;s not a curated or optimized list &#8212; just the actual apps, services, and resources I rely on across design, development, analytics, monetization, and marketing.</p><p>Most are free, some are paid. But all of them are actually useful and help me move fast and efficiently as a solo developer.</p><div><hr></div><h2>&#129521; Design &amp; Prototyping</h2><h3><a href="https://www.figma.com/?ref=shipyardstudios.io">Figma</a>&nbsp;&#8212; UX, Icons, Screenshots</h3><p><strong>Price:</strong>&nbsp;Free plan available, paid from $12/month<br>I use Figma for everything from wireframes and prototypes to App Store screenshots and app icons. I still use the free (or near-free) plan and just work out of one big, slightly messy file. It&#8217;s flexible and fast, even if my organization could use some work.</p><div><hr></div><h3><a href="https://coolors.co/?ref=shipyardstudios.io">Coolors</a>&nbsp;&#8212; Color Palette Generator</h3><p><strong>Price:</strong>&nbsp;Free, Pro version from $3/month<br>Whenever I&#8217;m working on a new app or refreshing a UI, I use Coolors to generate color palettes and gradient ideas. Quick and visual, without needing to dive deep into color theory (although if you're not confident with colors, like me, I would recommend watching a few YouTube videos on basic color theory / building out a color palette for a product).</p><div><hr></div><h3><a href="https://storyset.com/?ref=shipyardstudios.io">Storyset</a>&nbsp;&#8212; Customizable Vector Illustrations</h3><p><strong>Price:</strong>&nbsp;Free with attribution<br>Great for onboarding illustrations or empty states. You can customize the illustrations' style and color directly from the site, so it can match your color scheme without any editing in a vector graphics tool.</p><div><hr></div><h2>&#128187; Development &amp; Architecture</h2><h3><a href="https://chat.openai.com/?ref=shipyardstudios.io">ChatGPT</a>&nbsp;&#8212; Copywriting, Code Help &amp; Brainstorming</h3><p><strong>Price:</strong>&nbsp;Free tier available, Plus plan $20/month <br>I use ChatGPT (Plus plan) almost daily for a mix of tasks: drafting onboarding copy, generating SwiftUI snippets, validating feature ideas, or just getting unstuck when I&#8217;m thinking through a tricky implementation. It&#8217;s not always perfect, but for lightweight help and ideation, it saves me time and helps me move faster.</p><p>I think the most useful thing ChatGPT does for me as an indie dev is copywriting. There are times when I need to think up a lot of copy for a lot of screens or features quickly - e.g. onboarding flows or copy for randomly generated push notifications &#8211; and ChatGPT is able to deliver high-quality simple copy fast (given a few prompt iterations).</p><div><hr></div><h3><a href="https://www.cursor.so/?ref=shipyardstudios.io">Cursor</a>&nbsp;&#8212; AI Coding Assistant</h3><p><strong>Price:</strong>&nbsp;Free plan available, paid from $20/month<br>Cursor helps me scaffold out features, refactor code, and navigate larger projects. It&#8217;s especially useful for generating boilerplate or architecture ideas. I still review and tweak everything it writes, as it often generates code that doesn't compile, but it saves a lot of time on setup.</p><div><hr></div><h3><a href="https://developer.apple.com/icloud/cloudkit/?ref=shipyardstudios.io">CloudKit</a>&nbsp;&#8212; Lightweight Cloud Storage</h3><p><strong>Price:</strong>&nbsp;Free (as part of Apple Developer Program)<br>CloudKit has become my preferred backend for iOS-only apps. It&#8217;s fast to implement, requires no logins, and works well with SwiftData. I&#8217;ve used Firebase Auth and Firestore in the past, but CloudKit has been faster and easier for my recent projects.</p><div><hr></div><h3><a href="https://git-fork.com/?ref=shipyardstudios.io">Fork</a>&nbsp;&#8212; Git Client</h3><p><strong>Price:</strong>&nbsp;<a href="https://git-fork.com/buy?ref=shipyardstudios.io">$59.99</a> for a licence, free trial available<br>My go-to Git GUI. It&#8217;s fast, stable, and easy to use. Far less buggy than some other Git clients I&#8217;ve tried.</p><div><hr></div><h2>&#128202; Analytics, ASO &amp; Monetization</h2><h3><a href="https://firebase.google.com/?ref=shipyardstudios.io">Firebase</a>&nbsp;&#8212; Analytics &amp; Crash Reporting</h3><p><strong>Price:</strong>&nbsp;Free tier available, pay-as-you-go<br>I use Firebase for crash reports and analytics. It gives me a good balance of functionality without worrying too much about usage limits, which is helpful when I&#8217;m testing new features or sending lots of event data.</p><p>In the past, I&#8217;ve also used Firebase Authentication and Firestore to handle user login and data storage. It worked well, but for my newer apps, I&#8217;ve found&nbsp;<strong>CloudKit</strong>&nbsp;to be much easier and faster to build with &#8212; especially since I&#8217;m currently focusing on iOS-only apps and not publishing to the Google Play Store. CloudKit&#8217;s native integration, no-login-required setup, and minimal backend configuration have made it a more efficient choice.</p><div><hr></div><h3><a href="https://appfigures.com/?ref=shipyardstudios.io">Appfigures</a>&nbsp;&#8212; Keyword Research &amp; App Tracking</h3><p><strong>Price:</strong>&nbsp;Starts at $9.99/month, I use $44.99/month plan (to track more keywords)<br>One of my most valuable tools. I use it to:</p><ul><li><p>Track keyword rankings</p></li><li><p>Explore search term opportunities</p></li><li><p>Monitor ratings and reviews</p></li><li><p>Get alerts for App Store features or Top 200 chart placements</p></li><li><p>Get a quick-look at competitor apps</p></li></ul><p>It&#8217;s the first place I go when researching keywords for a new app and I use it to monitor keywords daily for my existing or upcoming apps.</p><div><hr></div><h3><a href="https://trends.google.com/?ref=shipyardstudios.io">Google Trends</a>&nbsp;&#8212; Trend &amp; Seasonality Insights</h3><p><strong>Price:</strong>&nbsp;Free<br>I use this to validate broader demand and check seasonal trends for app ideas. It&#8217;s especially helpful when exploring use cases like fitness (January spikes) or avoiding trends that might be on the decline.</p><div><hr></div><h3><a href="https://www.revenuecat.com/?ref=shipyardstudios.io">RevenueCat</a>&nbsp;&#8212; In-App Subscriptions</h3><p><strong>Price:</strong>&nbsp;Free (up to $2.5k monthly tracked revenue), 1% of MTR (after 2.5k MTR).<br>Handles subscription logic and in-app purchases across Apple platforms. I use it for every app with a subscription model. I tried to do subscriptions without RevenueCat years ago and the pain was immense. If you're doing subscriptions on iOS (or Google) I would say it's a no brainer must-have.</p><p>Also the ability to remotely configure paywalls and track revenue in one place is incredibly useful with their new paywalls (in beta). Their podcast, SubClub, is also a great resource for learning from other product, growth and app developer success stories.</p><div><hr></div><h2>&#128241; Marketing &amp; Social Media</h2><h3><a href="https://xnapper.com/?ref=shipyardstudios.io">Xnapper</a>&nbsp;&#8212; Screenshots with nice gradient backgrounds</h3><p><strong>Price:</strong>&nbsp;One-time purchase ($29 USD)<br>I use this to generate clean, polished screenshots for social and the App Store. Quick to use and makes everything look more professional.</p><div><hr></div><h3><a href="https://www.capcut.com/?ref=shipyardstudios.io">CapCut</a>&nbsp;&#8212; Mobile Video Editor</h3><p><strong>Price:</strong>&nbsp;Free (paid plans available)<br>For short-form content like social media clips or quick app previews. Works well on iPhone and is easy to learn.</p><div><hr></div><h3><a href="https://www.apple.com/final-cut-pro/?ref=shipyardstudios.io">Final Cut Pro</a>&nbsp;&#8212; App Store Preview Videos</h3><p><strong>Price:</strong>&nbsp;$299 one-time or $4.99/month via Apple&#8217;s Pro App bundle<br>For more control when editing App Store preview videos or product demos. Heavier than CapCut, but gives me the precision I need for more polished videos (although I probably know less than 1% of what it can actually do!).</p><p>Disclaimer: I got the Mac version of Final Cut Pro for free when working at Apple and I still use this today, so I'm not sure if I'd jump to this immediately if I had to pay for it now given my limited usage.</p><div><hr></div><h2>&#128218; Learning &amp; Community</h2><h3><a href="https://developer.apple.com/app-store/developer-app/?ref=shipyardstudios.io">Apple Developer App</a>&nbsp;&#8212; WWDC &amp; Docs</h3><p><strong>Price:</strong>&nbsp;Free<br>I keep a backlog of WWDC sessions bookmarked in here. When I need a deep dive on StoreKit, CloudKit, or anything Apple-specific, this is where I go. Even really old videos are still useful for background on certain topics.</p><div><hr></div><h3><a href="https://www.youtube.com/@Kavsoft?ref=shipyardstudios.io">Kavsoft</a>&nbsp;&#8212; SwiftUI UIs &amp; Animations</h3><p><strong>Price:</strong>&nbsp;Free (YouTube)<br>Great for creative SwiftUI techniques and modern UI ideas. Really love the style of these videos too, no dialog, no talking, just some music and coding with the occasional explainer note. I often turn the speed up to 2x+ and slow down when I get to a bit I don't understand or that uses a new technique I've not seen before.</p><div><hr></div><h3><a href="https://www.youtube.com/@StewartLynch?ref=shipyardstudios.io">Stewart Lynch</a>&nbsp;&#8212; Swift Framework Tutorials</h3><p><strong>Price:</strong>&nbsp;Free (YouTube) + Paid Courses<br>Clear and detailed teaching, especially for Swift and SwiftUI frameworks. Love his teaching style and goes into depth on topics he covers, which is awesome.</p><div><hr></div><h3><a href="https://www.hackingwithswift.com/?ref=shipyardstudios.io">Hacking with Swift</a>&nbsp;&#8212; Go-To Swift Resource</h3><p><strong>Price:</strong>&nbsp;Free (Blog &amp; YouTube) + Paid courses &amp; books<br>Almost every &#8220;how do I do X in SwiftUI&#8221; search ends up here. It's still one of the most reliable resources for indie iOS devs, with an active community too.</p><div><hr></div><h3><a href="https://ghost.org/?ref=shipyardstudios.io">Ghost</a>&nbsp;&#8212; Blog &amp; Newsletter Platform</h3><p><strong>Price:</strong>&nbsp;Starts at $9/month <br>I use Ghost to run this blog and email newsletter. I considered Substack but wanted more ownership over my email list. Ghost has worked well so far.</p><div><hr></div><h2>&#128247; Visual Assets</h2><h3><a href="https://www.pexels.com/?ref=shipyardstudios.io">Pexels</a>&nbsp;&#8212; Royalty-Free Photos &amp; Videos</h3><p><strong>Price:</strong>&nbsp;Free with attribution.<br>I use Pexels for background images, lifestyle shots, and videos when building marketing materials or App Store previews.</p><div><hr></div><h3><a href="https://storyset.com/?ref=shipyardstudios.io">Storyset</a>&nbsp;&#8212; Vector Illustrations</h3><p><strong>Price:</strong>&nbsp;Free with attribution.<br>Clean and flexible illustrations for onboarding, empty states, or landing pages.</p><div><hr></div><h3><a href="https://developer.apple.com/sf-symbols/?ref=shipyardstudios.io">SF Symbols</a>&nbsp;&#8212; Native Icons for Apple Platforms</h3><p><strong>Price:</strong>&nbsp;Free<br>Apple&#8217;s SF Symbols library is my go-to for app icons and UI symbols. They&#8217;re scalable, built to match the system design language, and integrate directly with SwiftUI. I use the&nbsp;<a href="https://developer.apple.com/sf-symbols/?ref=shipyardstudios.io">SF Symbols Mac app</a>&nbsp;to explore icons, but when working on mockups in Figma, I rely on one of the many&nbsp;<strong>Figma plugins</strong>&nbsp;that let you insert SF Symbols directly &#8212; a much better option than copying over low-res screenshots or exporting clunky image assets.</p><div><hr></div><h2>&#128272; Security</h2><h3><a href="https://1password.com/?ref=shipyardstudios.io">1Password</a>&nbsp;&#8212; Passwords &amp; API Key Management</h3><p><strong>Price:</strong>&nbsp;Starts at $2.99/month<br>Helps me keep signing keys, API credentials, and business logins safe and organized. Essential when juggling multiple apps. I also use this for personal password management and it has been absolute life save on multiple occasions.</p><div><hr></div><h2>&#129529; Tools I've Moved Away From</h2><h3>Stack Overflow</h3><p>Still shows up in search results, but most answers are outdated or irrelevant for modern Swift problems. I find ChatGPT or Cursor much faster and more helpful in context.</p><h3>Notion</h3><p>I used to manage my roadmaps and feature lists in Notion, but I&#8217;ve switched back to Apple Notes. It&#8217;s just far simpler for my use case and I found myself over-planning in Notion, as it did make everything look a lot prettier &#10024;.</p><div><hr></div><h2>Final Thoughts</h2><p>This list isn&#8217;t exhaustive, but it covers all the tools I find myself coming back to again and again as a solo developer. They're not just "nice-to-haves" &#8212; they play a practical role in how I build, test, and grow apps.</p><p>If you're also building solo &#8212; or just want a simpler, more focused tool stack for developing apps for Apple platforms &#8212; I hope this helps give you a few ideas or shortcuts.</p><p>And if you use a tool that&#8217;s made a big difference to your workflow, I&#8217;d love to hear about it.</p><p>&#8212; Mike<br></p><h2>Join the crew</h2><p>Building apps, going indie, and figuring it all out as I go. Sign up to follow the journey &#8212; no spam, just weekly updates and insights straight to your inbox.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.shipyardstudios.io/subscribe?"><span>Subscribe</span></a></p><p>No spam. Unsubscribe anytime.</p>]]></content:encoded></item><item><title><![CDATA[Your MVP Isn’t Your App – It’s Your Onboarding]]></title><description><![CDATA[Ask ten different people what an MVP (minimum viable product) is, and you'll likely get ten different answers.]]></description><link>https://www.shipyardstudios.io/p/your-mvp-isnt-your-app-its-your-onboarding-2</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/your-mvp-isnt-your-app-its-your-onboarding-2</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Tue, 18 Mar 2025 22:12:40 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/20e9751a-5607-4a3d-b388-24dfeaa22a8e_1024x485.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q2ag!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q2ag!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 424w, https://substackcdn.com/image/fetch/$s_!q2ag!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 848w, https://substackcdn.com/image/fetch/$s_!q2ag!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 1272w, https://substackcdn.com/image/fetch/$s_!q2ag!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q2ag!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding" title="Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding" srcset="https://substackcdn.com/image/fetch/$s_!q2ag!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 424w, https://substackcdn.com/image/fetch/$s_!q2ag!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 848w, https://substackcdn.com/image/fetch/$s_!q2ag!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 1272w, https://substackcdn.com/image/fetch/$s_!q2ag!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12ba0ed4-69b0-4090-b110-b4eac250dcfb_1024x485.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p>Ask ten different people what an MVP (minimum viable product) is, and you'll likely get ten different answers. The concept has evolved significantly since it was first coined in the early 2000s, and its meaning often depends on who you ask.</p><p>Lately, I&#8217;ve been working on onboarding for a new app, and at the same time, I've been reading <em><a href="https://a.co/d/0Njqxrl?ref=shipyardstudios.io">The Launch Path</a></em>,&nbsp;by Bret Waters. In the book, Bret gets to the heart of what an MVP is really about by clarifying that: <em>"<strong>The real purpose of an MVP is learning, not showing.</strong>"</em></p><p>That got me thinking &#8211; when it comes to mobile apps, what&#8217;s the best way to focus on <em>learning</em> rather than just <em>showing</em>?</p><p>The answer might surprise you: <strong>Onboarding.</strong></p><h2>Collecting Feedback Through Onboarding</h2><p>One of the primary goals of an MVP is to validate your assumptions: Does your app idea truly resonate, and is there genuine value in what you're building or hoping to build? Onboarding provides a unique opportunity to validate these assumptions through direct user feedback immediately after a user downloads your app.</p><p>With <a href="https://apps.apple.com/app/photojourney-daily-timelapse/id6499454966?ref=shipyardstudios.io">PhotoJourney</a>, I recognized that there were many distinct use-cases for an app that turns daily photos into progress time-lapse videos &#8212; such as tracking fitness progress, documenting plant growth or capturing baby growth milestones. Each use-case attracted a different type of user and had different problems to solve.</p><p>Rather than waiting to see how these user groups would engage with the app, I asked users directly during onboarding what they intended to use the app for and which features mattered most to them. As I found out, measuring incremental changes was most important for users tracking fitness progress, whereas creating beautiful time-lapse videos was more essential for users documenting baby growth milestones.</p><p>By strategically asking questions during onboarding, you gain invaluable insights into user motivations, expectations, and specific needs &#8212; even if your app doesn&#8217;t currently support all the features they are asking for yet.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MWXI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MWXI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 424w, https://substackcdn.com/image/fetch/$s_!MWXI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 848w, https://substackcdn.com/image/fetch/$s_!MWXI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 1272w, https://substackcdn.com/image/fetch/$s_!MWXI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MWXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png" width="2000" height="1364" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1364,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding" title="Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding" srcset="https://substackcdn.com/image/fetch/$s_!MWXI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 424w, https://substackcdn.com/image/fetch/$s_!MWXI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 848w, https://substackcdn.com/image/fetch/$s_!MWXI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 1272w, https://substackcdn.com/image/fetch/$s_!MWXI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f866e55-ea90-46ec-bf39-8c9851259711_2000x1364.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Some of the questions asked during in <a href="https://apps.apple.com/app/photojourney-daily-timelapse/id6499454966?ref=shipyardstudios.io">PhotoJourney</a>'s onboarding</figcaption></figure></div><h2>Onboarding Is Where 80% Of Free Trial Starts Happen</h2><p>According to RevenueCat's&nbsp;<a href="https://www.revenuecat.com/state-of-subscription-apps-2025/?ref=shipyardstudios.io">State of Subscription Apps 2025</a>,&nbsp;<strong>80% of free trial starts occur during day one of using your app</strong>. If your onboarding doesn't effectively communicate the value of your app leading up to this critical moment &#8211; showing the very first paywall &#8211; you're leaving significant revenue on the table.</p><p>The paywall acts as the ultimate test for your app&#8217;s value proposition. If users convert at this point, it clearly indicates that your onboarding resonated strongly with their needs, demonstrating genuine interest and perceived value in your app's offering.</p><p>Additionally, if you're collecting feedback on WHY users are downloading your app and WHAT they most want from it, you can combine this data with your conversion data. This allows you to identify the specific type of user most likely to convert&#8212;these users genuinely value your product (or at least its concept) enough to transact.</p><p>You might see many users requesting a particular feature or use case, but if they're not converting or even starting free trials after requesting this feature in onboarding, it likely holds less true value (to them and your app) than their feedback suggests.</p><h2>Adjusting Your Value Proposition Based On Real-Time Responses</h2><p>Effective onboarding not only drives immediate conversions but also enables you to dynamically adjust your messaging in real-time based on user responses. This personalized approach significantly enhances your value proposition.</p><p>For PhotoJourney, this meant ensuring my messaging wasn't generic. Given the many possible use-cases, I tailored onboarding screenshots and demo videos to match the specific use-case the user selected early in the flow. Users looking to track fitness progress saw fitness-related imagery, while those interested in plant growth saw plant-focused content. This not only made the app more appealing to users but also provided a clearer signal at the paywall about which type of users were most likely to pay for the solution, helping me focus on building a profitable app business.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ytiv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ytiv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 424w, https://substackcdn.com/image/fetch/$s_!Ytiv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 848w, https://substackcdn.com/image/fetch/$s_!Ytiv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 1272w, https://substackcdn.com/image/fetch/$s_!Ytiv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ytiv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png" width="2000" height="1367" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1367,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding" title="Your MVP Isn&#8217;t Your App &#8211; It&#8217;s Your Onboarding" srcset="https://substackcdn.com/image/fetch/$s_!Ytiv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 424w, https://substackcdn.com/image/fetch/$s_!Ytiv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 848w, https://substackcdn.com/image/fetch/$s_!Ytiv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 1272w, https://substackcdn.com/image/fetch/$s_!Ytiv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F941a8ef0-fd65-488b-808f-48def90d1e05_2000x1367.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Demos, messaging and permission requests all tailored to the use case of the our current user: the plant lover &#127793;</figcaption></figure></div><p>My experience with PhotoJourney also illustrated the power of detailed, tailored onboarding. Initially, friends giving feedback on the app thought the onboarding process was too lengthy at 15+ screens, but real-world data showed less than 10% drop-off&nbsp;vs. having no onboarding, whilst also boosting overall conversion rates. Users genuinely seeking solutions weren't deterred; they valued the app more when the onboarding was specifically tailored to their needs.</p><h2>Designing Your Onboarding Solidifies Your Value Proposition</h2><p>Before building any app, I always perform a <a href="https://www.interaction-design.org/literature/topics/value-proposition-canvas?srsltid=AfmBOop4upG79OjKobfS92t4ALldBzdzaO_JK3RrUm6aVuHbGpeBZ2ug&amp;ref=shipyardstudios.io">value proposition exercise</a> to clearly define user needs and potential solutions. Onboarding directly links this theoretical exercise to real-world user validation, forcing you to think critically about what your customers genuinely value and would pay for.</p><p>If you find yourself struggling with how to clearly communicate your app&#8217;s value during onboarding, that&#8217;s a strong signal you may not yet fully understand your core value proposition. Conversely, if you find yourself positioning the app as doing everything for everyone then it's a sign your message might be diluted and not really focused on the users who will value your app the most.&nbsp;</p><p>Thoughtfully designing onboarding screens, and the messaging included in them, helps you stay focused on building core features that are validated by actual user feedback, ensuring efficient and profitable app development.</p><h2>Conclusion</h2><p>Onboarding is critical to mobile app success &#8212; not only as a proven revenue driver but as a powerful tool for early user feedback, assumption validation, and deepening your understanding of what your customers truly value.</p><p>Clearly communicating your value proposition through onboarding &#8212; and observing how different users respond and convert &#8212; enables easier, quicker and more cost-effective insights than waiting to see how users interact with the features in your app.&nbsp;</p>]]></content:encoded></item><item><title><![CDATA[🚀 Major Update: DogCam Gets AI Breed Prediction]]></title><description><![CDATA[DogCam started as a fun app to help you capture better photos of your dog by playing sounds from the camera to grab their attention.]]></description><link>https://www.shipyardstudios.io/p/major-update-bringing-ai-breed-detection-to-dogcam-2</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/major-update-bringing-ai-breed-detection-to-dogcam-2</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Tue, 11 Mar 2025 21:25:47 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0cc782f3-b9cb-408f-bbe2-d86dc7fe1b2b_2000x1303.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hfec!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hfec!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 424w, https://substackcdn.com/image/fetch/$s_!Hfec!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 848w, https://substackcdn.com/image/fetch/$s_!Hfec!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 1272w, https://substackcdn.com/image/fetch/$s_!Hfec!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hfec!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#128640; Major Update: DogCam Gets AI Breed Prediction&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#128640; Major Update: DogCam Gets AI Breed Prediction" title="&#128640; Major Update: DogCam Gets AI Breed Prediction" srcset="https://substackcdn.com/image/fetch/$s_!Hfec!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 424w, https://substackcdn.com/image/fetch/$s_!Hfec!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 848w, https://substackcdn.com/image/fetch/$s_!Hfec!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 1272w, https://substackcdn.com/image/fetch/$s_!Hfec!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59f17599-9d54-405c-9940-402ed13e4be3_2000x1303.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><p><a href="https://itunes.apple.com/app/id1441245944?ref=shipyardstudios.io">DogCam</a> started as a fun app to help you capture better photos of your dog by playing sounds from the camera to grab their attention. While it's evolved gradually since launch, it's been a while since I've introduced significant new features. Today, I'm excited to announce a major update: DogCam now includes powerful breed scanning and identification powered by AI.</p><div class="captioned-image-container"><figure><p>0:00</p><figcaption class="image-caption"> /0:19</figcaption><figcaption class="image-caption">1&#215;</figcaption><figcaption class="image-caption">DogCam 'scan' mode in action with Frankie the Frenchie &#10084;</figcaption></figure></div><h2>DogCam&#8217;s New AI-Powered Scan Mode</h2><ul><li><p><strong>Instant Dog Detection:</strong>&nbsp;The camera viewfinder will let you know when a dog is detected, meaning you're in the perfect position to start a breed scan.</p></li><li><p><strong>Quick Breed Scanning:</strong>&nbsp;Simply select the new "Scan" mode and capture a photo. Within seconds, DogCam will predict the breed.</p></li><li><p><strong>Breed Insights:</strong>&nbsp;As part of the scan result you'll also get insights into the breed&#8217;s coat type, typical bark volume, and personality traits. And if you're not sure if the prediction is accurate, you can compare with example photos of the breed.</p></li><li><p><strong>Scan And Save:</strong>&nbsp;Every scan is automatically saved to your photo library, so you can easily revisit past scans, compare breeds, or share results with friends.</p></li><li><p><strong>Doggo-distracting Sounds Built-in</strong>: Is your dog camera-shy? No worries, all of DogCam's sounds are still just a tap away whilst in scan mode, helping you snap the pawfect pose for an accurate breed prediction.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-PoN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-PoN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 424w, https://substackcdn.com/image/fetch/$s_!-PoN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 848w, https://substackcdn.com/image/fetch/$s_!-PoN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 1272w, https://substackcdn.com/image/fetch/$s_!-PoN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-PoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png" width="2000" height="1283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1283,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#128640; Major Update: DogCam Gets AI Breed Prediction&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#128640; Major Update: DogCam Gets AI Breed Prediction" title="&#128640; Major Update: DogCam Gets AI Breed Prediction" srcset="https://substackcdn.com/image/fetch/$s_!-PoN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 424w, https://substackcdn.com/image/fetch/$s_!-PoN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 848w, https://substackcdn.com/image/fetch/$s_!-PoN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 1272w, https://substackcdn.com/image/fetch/$s_!-PoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbab325c4-09f0-4821-a235-e789d8db553e_2000x1283.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">DogCam's all new dog breed catalogue</figcaption></figure></div><h2>Additional Feature Upgrades</h2><p>Alongside AI scanning, DogCam has received several other upgrades:</p><ul><li><p><strong>New Dedicated Soundboard Screen:</strong>&nbsp;A separate soundboard screen now lets you play sounds to interact with your dog without needing to open the camera.</p></li><li><p><strong>Favorite Sounds:</strong>&nbsp;You can now save your favorite sounds, making them easily accessible at the top of the list, whether on the camera or soundboard screen.</p></li><li><p><strong>Expanded Breed Catalogue:</strong>&nbsp;DogCam now includes a database of over 150 dog breeds, including rare and crossbreeds, each with detailed descriptions and example images.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_VAx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_VAx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 424w, https://substackcdn.com/image/fetch/$s_!_VAx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 848w, https://substackcdn.com/image/fetch/$s_!_VAx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 1272w, https://substackcdn.com/image/fetch/$s_!_VAx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_VAx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png" width="2000" height="1283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1283,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#128640; Major Update: DogCam Gets AI Breed Prediction&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#128640; Major Update: DogCam Gets AI Breed Prediction" title="&#128640; Major Update: DogCam Gets AI Breed Prediction" srcset="https://substackcdn.com/image/fetch/$s_!_VAx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 424w, https://substackcdn.com/image/fetch/$s_!_VAx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 848w, https://substackcdn.com/image/fetch/$s_!_VAx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 1272w, https://substackcdn.com/image/fetch/$s_!_VAx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd368de99-4f6a-493c-a7b2-d1e27e8ed7d2_2000x1283.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">A dedicated sound board for maximum head-tilting fun</figcaption></figure></div><h2>How I Built It &#8211; My AI Journey</h2><p>I tried a bunch of different AI solutions before settling on the one that worked best for DogCam. It had to be accurate, but also fit naturally into the app without making things complicated. There was a lot of trial and error &#8212; testing different models, scrapping ones that didn&#8217;t work well, and eventually finding a mix of AI tools that gave the best results.</p><h4>Trying to Build My Own Breed Classification Model</h4><p>My first idea was to train my own machine learning model using Apple&#8217;s CreateML. I pulled together over 25,000 images covering 120+ dog breeds, carefully labeling and organizing the dataset. But no matter how much I fine-tuned it, the accuracy just wasn&#8217;t where it needed to be. Similar-looking breeds kept getting confused, and mixed breeds were a real challenge. Adding more images didn&#8217;t help much, and rare breeds were still hit-or-miss.</p><h4>Testing Prebuilt ML Models</h4><p>Next, I looked into off-the-shelf machine learning models that could classify dog breeds. These worked reasonably well for the most common breeds, but they struggled with less familiar ones &#8212; especially crossbreeds. Since I wanted DogCam to be as useful as possible in real-world situations, these models felt too limited.</p><h4>Switching to OpenAI's LLM</h4><p>After hitting roadblocks with traditional ML classification models, I decided to try OpenAI&#8217;s LLM API. With the right prompts and settings, it delivered much better results across a wider variety of breeds. It also handled mixed breeds surprisingly well &#8212; something the previous models had struggled with. To keep things efficient, I optimized image sizes before sending them to the API, and was able to achieve a scan cost less than a penny while still maintaining high accuracy.</p><h4>Improving the Experience with Apple&#8217;s Vision Framework</h4><p>To make the scanning process smoother, I added Apple&#8217;s Vision framework to detect when a dog was actually in the frame in real-time. Now, when DogCam sees a dog, the viewfinder turns green, letting you know you&#8217;re good to scan. It&#8217;s a small touch, but it makes scanning feel way more natural and helps ensure better accuracy.</p><h4>Fine-Tuning for Better Accuracy</h4><p>Even after getting solid results from OpenAI, I spent time refining things further. I experimented with different prompts, adjusted OpenAI&#8217;s <a href="https://www.ibm.com/think/topics/llm-temperature?ref=shipyardstudios.io">temperature setting</a> to make predictions more consistent, and ran plenty of test scans to get things feeling right. After a lot of tweaking, I found a balance that makes breed scanning fast, accurate, and reliable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P_FT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P_FT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 424w, https://substackcdn.com/image/fetch/$s_!P_FT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 848w, https://substackcdn.com/image/fetch/$s_!P_FT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!P_FT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P_FT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png" width="2000" height="1496" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1496,&quot;width&quot;:2000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&#128640; Major Update: DogCam Gets AI Breed Prediction&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="&#128640; Major Update: DogCam Gets AI Breed Prediction" title="&#128640; Major Update: DogCam Gets AI Breed Prediction" srcset="https://substackcdn.com/image/fetch/$s_!P_FT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 424w, https://substackcdn.com/image/fetch/$s_!P_FT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 848w, https://substackcdn.com/image/fetch/$s_!P_FT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 1272w, https://substackcdn.com/image/fetch/$s_!P_FT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdca9b3ef-ee46-4daa-afdd-58d925d4fe01_2000x1496.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The dog-detecting viewfinder in action</figcaption></figure></div><h2>What's Next?</h2><p>This update for DogCam marks my first experience integrating AI into an existing app, and it's been eye-opening. I've learned a lot about leveraging powerful AI APIs and I'm excited to see how much more useful they can become for building new apps and features down the line. There&#8217;s still plenty more I&#8217;d love to explore with AI-powered dog scanning, but that&#8217;s a story for another app update...</p><h3>Dog Lovers Wanted &#128054;</h3><p>If you have a dog, I&#8217;d love for you to give the new DogCam features a go - feedback welcome! The app is already free to try but with limited scans and sounds, so here's a <a href="https://apps.apple.com/redeem?ctx=offercodes&amp;id=1441245944&amp;code=BLOG&amp;ref=shipyardstudios.io">promo link</a>&nbsp;for 3 months free unlimited dog-scanning and sounds.</p><p>Let me know what you think!</p><p>&#8212; Mike</p><h2>Join the crew</h2><p>Building apps, going indie, and figuring it all out as I go. Sign up to follow the journey &#8212; no spam, just weekly updates and insights straight to your inbox.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.shipyardstudios.io/subscribe?"><span>Subscribe</span></a></p><p>No spam. Unsubscribe anytime.</p>]]></content:encoded></item><item><title><![CDATA[How I Pick Profitable Indie App Ideas: 5 Key Traits]]></title><description><![CDATA[As a self-funded indie app developer, my goal isn&#8217;t just to build cool apps&#8212;it&#8217;s to build profitable, cash-flowing apps that can sustain my business.]]></description><link>https://www.shipyardstudios.io/p/2-how-i-pick-profitable-indie-app-ideas-5-key-traits</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/2-how-i-pick-profitable-indie-app-ideas-5-key-traits</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Mon, 24 Feb 2025 19:02:04 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/97fb0c61-cbfa-4e1e-8948-9df96026de52_2000x1333.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S-Jr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S-Jr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 424w, https://substackcdn.com/image/fetch/$s_!S-Jr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 848w, https://substackcdn.com/image/fetch/$s_!S-Jr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 1272w, https://substackcdn.com/image/fetch/$s_!S-Jr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S-Jr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;How I Pick Profitable Indie App Ideas: 5 Key Traits&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="How I Pick Profitable Indie App Ideas: 5 Key Traits" title="How I Pick Profitable Indie App Ideas: 5 Key Traits" srcset="https://substackcdn.com/image/fetch/$s_!S-Jr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 424w, https://substackcdn.com/image/fetch/$s_!S-Jr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 848w, https://substackcdn.com/image/fetch/$s_!S-Jr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 1272w, https://substackcdn.com/image/fetch/$s_!S-Jr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40bea775-318e-43c7-86da-b5f2deb2e741_2000x1333.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>As a self-funded indie app developer, my goal isn&#8217;t just to build cool apps&#8212;it&#8217;s to build profitable, cash-flowing apps that can sustain my business. With no venture backing, no massive marketing budgets, and no team of engineers, every app I choose to work on needs to have a real shot at making money.</p><p>But not all app ideas are created equal. Some are much harder to build, market, and monetize than others. A great idea on paper might flop if no one&#8217;s searching for it. A super useful app might not be viable if people aren&#8217;t willing to pay for it.</p><p>Over the past year, I&#8217;ve launched three apps, each with very different levels of success. With each launch, I&#8217;ve refined the criteria I use to pick my next project. Now, before I commit to building something, I evaluate it against five key characteristics to see if it has real potential.<br></p><p>As a self-funded indie app developer, my goal isn&#8217;t just to build cool apps&#8212;it&#8217;s to build profitable, cash-flowing apps that can sustain my business. With no venture backing, no massive marketing budgets, and no team of engineers, every app I choose to work on needs to have a real shot at making money.</p><p>But not all app ideas are created equal. Some are much harder to build, market, and monetize than others. A great idea on paper might flop if no one&#8217;s searching for it. A super useful app might not be viable if people aren&#8217;t willing to pay for it.</p><p>Over the past year, I&#8217;ve launched three apps, each with very different levels of success. With each launch, I&#8217;ve refined the criteria I use to pick my next project. Now, before I commit to building something, I evaluate it against five key characteristics to see if it has real potential.</p><h3><strong>1. Founder Fit</strong></h3><p>The first question I ask myself: <em>Am I the right person to build this?</em></p><p>As an indie developer, I don&#8217;t have the luxury of large-scale user testing or focus groups. That means the best way to avoid building something nobody wants is to pick an app where I already understand the problem deeply.</p><p>I look for:</p><ul><li><p><strong>Personal connection to the niche</strong> &#8211; Am I familiar with this space? Would I use this app myself?</p></li><li><p><strong>Past experience that gives me an edge</strong> &#8211; Do I have skills that make this easier for me to build than the average dev? For example, having worked on camera apps gives me a head start when building something in that category.</p></li><li><p><strong>Existing usage of similar tools</strong> &#8211; Do I already use similar apps? If so, I probably know what&#8217;s missing and how I could make a better version.</p></li></ul><p>The closer I am to the problem, the less likely I am to build the wrong thing. It also makes it easier to stay motivated&#8212;because I&#8217;m building something I actually care about.</p><h3><strong>2. App Store Traffic Potential</strong></h3><p>You can build the best app in the world, but if no one can find it, it won&#8217;t make a penny. Since I don&#8217;t have a big marketing budget, most of my users come from organic App Store search, so now when choosing an app will only pick apps that people are <em>already searching for</em>.</p><div data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/content/images/size/w1600/2025/02/Xnapper-2025-02-24-10.01.55.png&quot;}" data-component-name="AssetErrorToDOM"><picture><img src="/img/missing-image.png" height="455" width="728"></picture></div><p>Some example keywords that I target for PhotoJourney that have significant search volume and aren&#8217;t <em>too</em> competitive. Data from <a href="https://www.shipyardstudios.io/r/ac575be3?m=2a5d9f00-f570-4058-ad50-68eae5da6741">AppFigures</a>.</p><h4><strong>Part 1: Search Term Volume</strong></h4><p>Are enough people searching for this app to drive meaningful downloads? I check tools like <a href="https://www.shipyardstudios.io/r/43d11b89?m=2a5d9f00-f570-4058-ad50-68eae5da6741">Astro</a> and <a href="https://www.shipyardstudios.io/r/dcc60350?m=2a5d9f00-f570-4058-ad50-68eae5da6741">AppFigures</a> to see keyword popularity. A good target is a <strong>popularity score of at least 20+</strong> for sufficient demand (see above). If no one is searching for it, the app won&#8217;t grow organically.</p><h4><strong>Part 2: Search Term Competition</strong></h4><p>It&#8217;s not just about demand&#8212;can I actually rank? I aim for <strong>competition scores below 60</strong>, but I also manually check the top 10 ranked apps for a keyword:</p><ul><li><p>Are they using the keyword in their app name or subtitle?</p></li><li><p>Are they getting a high number of ratings each month?</p></li><li><p>Are they actually relevant to the keyword?</p></li></ul><p>If apps aren&#8217;t optimized or don&#8217;t fully match the search intent, there&#8217;s often an opportunity to rank higher&#8212;even in a moderately competitive space. Picking <strong>high-traffic, low-competition</strong> keywords is key to getting organic downloads without an ad budget.</p><h3><strong>3. App Stickiness</strong></h3><p>Not all downloads are equal. Some apps get used once and forgotten. Others become part of people&#8217;s daily routines, creating long-term engagement and revenue. I always aim for the latter because <strong>the more users return, the more valuable the app becomes</strong>&#8212;both to them and to my business.</p><p>A sticky app has:</p><ul><li><p><strong>Frequent usage</strong> &#8211; The more often users open the app (daily, weekly, or even monthly), the more opportunities there are to monetize. Daily-use apps (e.g., habit trackers, journaling apps) tend to perform best in terms of retention and revenue. If an app is only useful once in a while, it&#8217;s harder to justify a subscription.</p></li><li><p><strong>Data accumulation</strong> &#8211; Does the app get better the more someone uses it? Apps like my <strong><a href="https://www.shipyardstudios.io/r/6a786785?m=2a5d9f00-f570-4058-ad50-68eae5da6741">PhotoJourney</a></strong> app, which track progress over time, naturally become more valuable as a user builds up history. This increases retention because users don&#8217;t want to lose their past progress.</p></li><li><p><strong>Switching friction</strong> &#8211; How easy is it for a user to move to a competitor? If users have built up data, preferences, or history, they&#8217;re far less likely to switch to another app. Features like cloud backups, personalized insights, or custom settings all help increase this friction.</p></li></ul><p>Apps that score highly on stickiness are perfect for subscription revenue because users see continuous value in keeping the app. If an app is used often and holds valuable data, canceling a subscription feels like losing progress&#8212;making it more likely that users stick around for the long term.</p><div data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/content/images/size/w1600/2025/02/Xnapper-2025-02-24-09.56.28.png&quot;}" data-component-name="AssetErrorToDOM"><picture><img src="/img/missing-image.png" height="455" width="728"></picture></div><p>Recent cohorts from PhotoJourney with high retention (top) and DogCam with almost no retention (bottom)</p><h3><strong>4. Build Difficulty</strong></h3><p>All the market potential in the world doesn&#8217;t matter if I can&#8217;t actually build the thing.</p><p>As an indie dev, I have to be realistic about:</p><ul><li><p><strong>Technical complexity</strong> &#8211; Can I ship an MVP in a reasonable timeframe? If the app requires a sophisticated backend or deep expertise that I simply don&#8217;t have, it&#8217;s probably not the right fit. AI has changed the game in this area, making it easier than ever to work with new frameworks or technologies. With tools like Cursor and ChatGPT, I can get AI to write boilerplate code or even entire features. But even with AI assistance, this factor still matters. You still need to fine-tune, debug, and maintain the code long-term, so having at least some aligned skill set is essential. If an idea requires ongoing technical expertise far beyond what I can reasonably pick up, it&#8217;s a red flag.</p></li><li><p><strong>Indie viability</strong> &#8211; Some ideas just aren&#8217;t practical for a solo developer. Certain app concepts&#8212;like social networks, marketplaces, or anything requiring large-scale moderation and operations&#8212;are fundamentally built for teams. These types of apps typically require marketing teams to attract users, support teams to handle customer issues, and backend engineers to maintain complex infrastructure. Even if I could build an MVP alone, sustaining and scaling these kinds of apps as a solo dev would be a massive challenge. Instead, I focus on ideas that can realistically be maintained and grown without requiring a team to keep them running.</p></li></ul><p>Most indie apps don&#8217;t take off immediately. That means I need to be able to ship an MVP <em>relatively quickly</em>, test the market, and iterate. If an app idea sounds like a multi-year commitment just to get to launch, it&#8217;s probably too ambitious.</p><h3><strong>5. Fun Factor</strong></h3><p>At the end of the day, if I don&#8217;t <em>want</em> to build an app, I won&#8217;t finish it.</p><p>Every app idea has roadblocks&#8212;unexpected bugs, tedious UI work, or frustrating technical limitations. If I&#8217;m not excited about the project, it&#8217;s way too easy to get demotivated and move on to something else. That&#8217;s why I&#8217;ve found that the more <em>fun</em> an app is to build, the more likely I am to actually see it through.</p><p>A good example? <strong><a href="https://www.shipyardstudios.io/r/bfe3c537?m=2a5d9f00-f570-4058-ad50-68eae5da6741">Beachy</a></strong>&#8212;an app I made for visualizing ocean tides. It was filled with colorful animations, interactive UI, and fun little details that made development enjoyable. I loved working on it, and that excitement kept me pushing through the tough parts.</p><p>That said, <em>Beachy</em> wasn&#8217;t built with long-term success in mind. I shipped it in under two weeks for a <strong><a href="https://www.shipyardstudios.io/r/742f123d?m=2a5d9f00-f570-4058-ad50-68eae5da6741">RevenueCat hackathon</a></strong>, so I skipped some of the key traits I&#8217;d normally consider&#8212;like search traffic and stickiness. It was a fun project, but not something designed to be a sustainable business. Now, when picking an idea, I make sure fun isn&#8217;t the <em>only</em> factor driving the decision.</p><h3><strong>How My Apps Rank On These Traits</strong></h3><p>To put this framework to the test, here&#8217;s how my current apps stack up across these five traits. Each category is rated out of &#9733;&#9733;&#9733;&#9733;&#9733; based on my experience building and growing them.</p><p>As you can see below, the bulk of my monthly revenue comes from PhotoJourney, which also has the most organic traffic potential and highest stickiness.</p><p>Trait<strong>DogCamBeachyPhotoJourneyFounder Fit</strong>&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;<strong>Organic Traffic Potential</strong>&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;<strong>User Stickiness</strong>&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;<strong>Build Difficulty</strong>&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;<strong>Fun Factor</strong>&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;&#11088;&#65039;<strong>Monthly Revenue %</strong>12%1%87%</p><h2><strong>Final Thoughts</strong></h2><p>Picking the right app idea is half the battle in indie development. The best ideas aren&#8217;t just fun to build&#8212;they&#8217;re <em>profitable, discoverable, and sustainable.</em></p><p>Now, every time I evaluate an idea, I run it through these five filters:</p><p>1. Am I the right person to build this?<br>2. Do people already search for it on the App Store?<br>3. Will users come back regularly?<br>4. Can I actually build and maintain it?<br>5. Will it be fun or interesting enough to keep me motivated?</p><p>If an idea scores well across the board, there&#8217;s a good chance it&#8217;s worth pursuing. If not, it&#8217;s better to move on and find something that does.</p><p>Indie development is a long game. The more strategic I am with app selection, the better my odds of building something that <em>actually</em> makes money.</p><p>What about you? How do you decide what to build? Let me know&#8212;I&#8217;d love to hear your take.</p><p>- Mike</p>]]></content:encoded></item><item><title><![CDATA[One Year Into Indie Dev Life: Reflections On Leaving Apple]]></title><description><![CDATA[This is the story of how I went from working at Apple to taking a leap into indie development.]]></description><link>https://www.shipyardstudios.io/p/1-one-year-into-indie-life-reflections-on-leaving-apple-2</link><guid isPermaLink="false">https://www.shipyardstudios.io/p/1-one-year-into-indie-life-reflections-on-leaving-apple-2</guid><dc:creator><![CDATA[Mike Gilroy]]></dc:creator><pubDate>Sat, 15 Feb 2025 21:40:32 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1727f7ce-1739-4cec-9a83-0f43702dde1f_1920x1364.gif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gir-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gir-!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 424w, https://substackcdn.com/image/fetch/$s_!gir-!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 848w, https://substackcdn.com/image/fetch/$s_!gir-!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 1272w, https://substackcdn.com/image/fetch/$s_!gir-!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gir-!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;One Year Into Indie Dev Life: Reflections On Leaving Apple&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="One Year Into Indie Dev Life: Reflections On Leaving Apple" title="One Year Into Indie Dev Life: Reflections On Leaving Apple" srcset="https://substackcdn.com/image/fetch/$s_!gir-!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 424w, https://substackcdn.com/image/fetch/$s_!gir-!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 848w, https://substackcdn.com/image/fetch/$s_!gir-!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 1272w, https://substackcdn.com/image/fetch/$s_!gir-!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8fed3e39-3ef7-4662-8b0f-1a846f893ae0_1920x1364.gif 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>This is the story of how I went from working at Apple to taking a leap into indie development. What led me to make the jump? What did I love about working at Apple? And what made me realize I needed to go solo? Let&#8217;s dive in.</p><div data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/content/images/2025/02/Logo-square-blac-cropped.png&quot;}" data-component-name="AssetErrorToDOM"><picture><img src="/img/missing-image.png" height="455" width="728"></picture></div><p><strong><a href="https://www.shipyardstudios.io/r/d59f6fc7?m=2a5d9f00-f570-4058-ad50-68eae5da6741">SHIPYARD STUDIOS</a></strong></p><p><strong><a href="https://www.shipyardstudios.io/r/9e27370e?m=2a5d9f00-f570-4058-ad50-68eae5da6741">#1 - One Year Into Indie Dev Life: Reflections On Leaving Apple</a></strong></p><p style="text-align: center;">I left Apple to build my own apps, have more creative freedom, and work closer to product and design. In this post, I share my journey from iOS developer to Apple engineer to indie dev&#8212;and why I made the leap.</p><p>By Mike Gilroy &#8226; 15 Feb 2025 <a href="https://www.shipyardstudios.io/r/f49d2c2e?m=2a5d9f00-f570-4058-ad50-68eae5da6741">View in browser</a></p><div data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/content/images/size/w1200/2025/02/tempImagespiwzk.gif&quot;}" data-component-name="AssetErrorToDOM"><picture><img src="/img/missing-image.png" height="455" width="728"></picture></div><p>This is the story of how I went from working at Apple to taking a leap into indie development. What led me to make the jump? What did I love about working at Apple? And what made me realize I needed to go solo? Let&#8217;s dive in.</p><h2><strong>Before Apple: A Decade Of iOS Development</strong></h2><p>Before joining Apple, I spent nearly a decade working as an iOS developer. I built apps for a variety of companies&#8212;startups, agencies, large tech firms&#8212;each with its own challenges and ways of working. I shipped features for apps in different industries, learned what makes a good user experience, and got to see firsthand how different teams approached building for Apple&#8217;s platforms.</p><p>What I enjoyed most in those years was working closely with product and design. The best roles were the ones where I had autonomy but also got to collaborate with smart designers and product managers to bring features to life. That balance of ownership and teamwork was what made the work fulfilling.</p><p>But as much as I loved iOS development, there was always one company that felt like the ultimate destination for an iOS engineer: Apple.</p><h2><strong>Why I Joined Apple</strong></h2><p>For iOS developers, Apple is <em>the</em> mothership. I was always fascinated by what it would be like to work there&#8212;how the software I used every day was made, what the internal culture was like, and what it really took to build at Apple&#8217;s level.</p><p>When an opportunity came up to join the App Store team, I knew I had to go for it. I&#8217;ve always loved apps&#8212;not just building them, but also discovering new ones, following trends, and thinking about how people find and use apps. I felt like I had a unique perspective, both as a developer and as a customer, and this was a chance to contribute directly to the App Store experience.</p><p>And of course, I wanted to see behind the curtain. How was the sausage made? I wanted to find out.</p><h2><strong>What I Worked On At Apple</strong></h2><p>At Apple I worked on the App Store across iOS, macOS, tvOS, and watchOS. My focus was adding new UI, animations, and functionality across the entire App Store, but I spent a lot of time specifically on the Today tab&#8212;the page that showcases curated stories, featured apps, and special collections.</p><p>One of my favorite projects was building animated mesh gradients for the Today page story cards. I had never gone this deep into animation before, and it was such a fun challenge to bring these visual elements to life. Apple places a huge emphasis on the details&#8212;animations, smoothness, polish&#8212;and I had the time to iterate and refine until things looked and felt <em>just right</em>. Working so closely with designers on something that visually cool was a highlight for me.</p><div data-attrs="{&quot;url&quot;:&quot;https://www.shipyardstudios.io/content/images/size/w1600/2025/02/Frame-184.jpg&quot;}" data-component-name="AssetErrorToDOM"><picture><img src="/img/missing-image.png" height="455" width="728"></picture></div><p>Animated mesh gradient backgrounds on the Today tab</p><h2><strong>What I Loved About Working At Apple</strong></h2><p>There were a lot of things I enjoyed about working at Apple:</p><ul><li><p><strong>The high bar for quality</strong>. There was always time given to make things <em>work</em> and <em>look</em> great. Unlike some companies where you ship and move on, Apple prioritized polish.</p></li><li><p><strong>The impact</strong>. The UI I built was used by hundreds of millions of people. That&#8217;s a surreal feeling as a developer.</p></li><li><p><strong>The people</strong>. I got to work with some incredibly talented designers, engineers, and product experts. I learned a ton from people who had been refining their craft for years.</p></li></ul><p>And yet, despite all of this, I started to feel like something was missing.</p><h2><strong>Why I Left To Go Indie</strong></h2><p>After a while, I realized that I missed being involved in product and design decisions. While I loved building great UI, I wasn&#8217;t as close to the bigger picture as I wanted to be. At Apple I was executing on features, but I wasn&#8217;t the one deciding <em>what</em> to build or <em>why</em>.</p><p>I had plenty of app ideas I wanted to build, but working at Apple made side projects unrealistic due to conflicts of interest&#8212;especially since I was on the App Store team. That meant no iOS apps on the side, which took away a major creative outlet for me. Before joining Apple, I had spent years building my own apps, and I really missed that freedom to create and ship.</p><p>Then there was the lifestyle factor. I wanted more freedom to travel, more control over my own schedule, and the ability to work on things I truly cared about. Apple was an incredible experience, but I knew deep down that I wanted to take a shot at doing my own thing.</p><h2><strong>The Leap Into Indie Life</strong></h2><p>Leaving Apple wasn&#8217;t an easy decision. The security, the salary, the prestige&#8212;it&#8217;s all very tempting to stay. But I knew that if I didn&#8217;t take the leap now, I might never do it.</p><p>So here I am, one year into indie life. I&#8217;ve built and launched multiple apps, experimented with different ideas, and learned more than I ever expected about running a business. It hasn&#8217;t been smooth sailing, but I have zero regrets about making the jump.</p><p>This is just the start. Going forward, I want to share more about what I&#8217;m building, the lessons I&#8217;m learning, and the ups and downs of this indie journey. If you&#8217;re thinking about going indie yourself&#8212;or if you&#8217;re just curious about what it&#8217;s like&#8212;I&#8217;d love to hear from you.</p><p>Thanks for reading, and see you in the next post! &#128640;</p><p>&#8211; Mike</p>]]></content:encoded></item></channel></rss>