<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Renee Chung</title>
    <description>The latest articles on DEV Community by Renee Chung (@reneecst).</description>
    <link>https://dev.to/reneecst</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3592957%2F67aa636f-2d2e-4f00-9828-1581039a7365.jpg</url>
      <title>DEV Community: Renee Chung</title>
      <link>https://dev.to/reneecst</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/reneecst"/>
    <language>en</language>
    <item>
      <title>How I Ship Apps While Working a Full-Time Job</title>
      <dc:creator>Renee Chung</dc:creator>
      <pubDate>Wed, 10 Jun 2026 08:21:05 +0000</pubDate>
      <link>https://dev.to/reneecst/how-i-ship-apps-while-working-a-full-time-job-50ol</link>
      <guid>https://dev.to/reneecst/how-i-ship-apps-while-working-a-full-time-job-50ol</guid>
      <description>&lt;p&gt;I have a full-time job. I also build and ship indie apps on the side.&lt;/p&gt;

&lt;p&gt;Not because I have endless energy or some heroic morning routine. Most evenings my brain is fried. And yet — I've shipped three apps this year with more on the way.&lt;/p&gt;

&lt;p&gt;Here's how I actually do it, without the productivity guru fluff.&lt;/p&gt;




&lt;h2&gt;
  
  
  The reality first
&lt;/h2&gt;

&lt;p&gt;Let me be honest about what "shipping while working full-time" actually looks like.&lt;/p&gt;

&lt;p&gt;It's not glamorous. Some evenings I open my laptop and manage to fix one bug before calling it a night. Some weeks I barely touch my side projects at all.&lt;/p&gt;

&lt;p&gt;I'm not optimising for speed. I'm optimising for &lt;em&gt;not stopping&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  I build small things on purpose
&lt;/h2&gt;

&lt;p&gt;My apps are not complex platforms. They are focused, single-purpose tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A recipe generator that works from your pantry&lt;/li&gt;
&lt;li&gt;An expense tracker&lt;/li&gt;
&lt;li&gt;A mood tracker&lt;/li&gt;
&lt;li&gt;A to-do list that only lets you focus on one thing at a time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each one has a core feature and not much else. That's not a limitation — it's the whole strategy. A focused app is something one person can design, build, test, and ship. A platform is a team problem.&lt;/p&gt;

&lt;p&gt;When scope is small, the distance between "idea" and "live on the App Store" stays short enough to survive a fried brain.&lt;/p&gt;




&lt;h2&gt;
  
  
  I committed to one stack early
&lt;/h2&gt;

&lt;p&gt;Flutter, Supabase, RevenueCat. I chose these deliberately — not because I already knew them, but because I wanted to learn them properly and keep using them across every app I build.&lt;/p&gt;

&lt;p&gt;The bet is on compounding. Every app I ship with this stack means the next one starts with more familiarity. Instead of re-learning tooling from scratch each time, I'm slowly building muscle memory — and spending more time on the actual product.&lt;/p&gt;

&lt;p&gt;Pick a stack with intention. Stick with it long enough to get boring with it. The returns show up later.&lt;/p&gt;




&lt;h2&gt;
  
  
  I separate high-energy and low-energy tasks
&lt;/h2&gt;

&lt;p&gt;Building a new feature requires a switched-on brain. Writing App Store copy, researching keywords, updating a README, fixing a minor UI issue — these don't.&lt;/p&gt;

&lt;p&gt;I've learned to match the task to my energy level. Evenings after a heavy day are not the time to architect a new system. They are fine for polishing a screen, writing a social post, or planning tomorrow's actual work.&lt;/p&gt;

&lt;p&gt;Brainstorming, writing, admin — these are fried-brain friendly. Save the hard coding sessions for when you're actually sharp.&lt;/p&gt;




&lt;h2&gt;
  
  
  I don't wait for motivation
&lt;/h2&gt;

&lt;p&gt;Motivation is unreliable. Routine is not.&lt;/p&gt;

&lt;p&gt;I don't wait to feel inspired before opening the project. I just open it. Sometimes I close it 20 minutes later having done almost nothing useful. That's fine. The habit of showing up matters more than any single session.&lt;/p&gt;

&lt;p&gt;The apps that never get shipped are the ones that only get worked on when the developer feels like it.&lt;/p&gt;




&lt;h2&gt;
  
  
  I ship before it's perfect
&lt;/h2&gt;

&lt;p&gt;SimplePlate, my AI recipe app, went through 10 App Store review rounds before it was approved. It launched with bugs I knew about. It launched with features I wished were better.&lt;/p&gt;

&lt;p&gt;It launched.&lt;/p&gt;

&lt;p&gt;A live app with imperfections beats a perfect app that exists only on your laptop. Real users find real problems. Real downloads tell you whether the idea has legs. Waiting for perfect is just delayed quitting.&lt;/p&gt;




&lt;h2&gt;
  
  
  The honest reason it works
&lt;/h2&gt;

&lt;p&gt;Every app is a small step toward something bigger. The indie portfolio is a long game — slow, sometimes frustrating, occasionally exciting when a stranger downloads something you made on a tired Tuesday evening.&lt;/p&gt;

&lt;p&gt;That context keeps me going on the nights when I'd rather just watch TV.&lt;/p&gt;

&lt;p&gt;You don't need a perfect schedule or unlimited energy. You need a reason, a small scope, and the discipline to keep showing up even when the sessions are short and messy.&lt;/p&gt;

&lt;p&gt;That's it. That's the whole system.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building 10 Flutter apps in 2026 and documenting the journey. Currently 3/10 live. Follow along on &lt;a href="https://x.com/renee_chung" rel="noopener noreferrer"&gt;X (@renee_chung)&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mobile</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>I learned how to build an AI wrapper by shipping a real app</title>
      <dc:creator>Renee Chung</dc:creator>
      <pubDate>Sun, 07 Jun 2026 04:06:30 +0000</pubDate>
      <link>https://dev.to/reneecst/i-learned-how-to-build-an-ai-wrapper-by-shipping-a-real-app-18ep</link>
      <guid>https://dev.to/reneecst/i-learned-how-to-build-an-ai-wrapper-by-shipping-a-real-app-18ep</guid>
      <description>&lt;p&gt;I'm not an AI researcher. I'm a backend developer with 16 years of Laravel and PHP experience who wanted to build something with AI.&lt;br&gt;
So I did what made sense — I built a real app.&lt;/p&gt;
&lt;h2&gt;
  
  
  The idea
&lt;/h2&gt;

&lt;p&gt;Simple Plate is an AI recipe generator. Tell it what ingredients you have, your dietary preferences and cuisine mood, and it generates three recipe ideas for you. Simple problem. Simple solution.&lt;/p&gt;

&lt;p&gt;What I didn't expect was how much I'd learn about working with AI APIs by actually shipping something real.&lt;/p&gt;
&lt;h2&gt;
  
  
  The "AI" part is simpler than you think
&lt;/h2&gt;

&lt;p&gt;The core AI integration is straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;dartfinal&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;chat&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;completions&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;model:&lt;/span&gt; &lt;span class="s"&gt;'gpt-4o-mini'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;messages:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'role'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'system'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'content'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;systemPrompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;'role'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;'user'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;'content'&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;userPrompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. The API call itself is not the hard part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt engineering is everything
&lt;/h2&gt;

&lt;p&gt;The hard part is getting consistent, useful output. My prompts evolved significantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First version: vague, inconsistent results&lt;/li&gt;
&lt;li&gt;Added dietary restrictions: better but still repetitive&lt;/li&gt;
&lt;li&gt;Added cuisine mood: more variety&lt;/li&gt;
&lt;li&gt;Added avoid list for recent recipes: solved repetition&lt;/li&gt;
&lt;li&gt;Added pantry scoped history: solved repetition properly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The prompt is where 80% of the real work lives in an AI wrapper.&lt;/p&gt;

&lt;h2&gt;
  
  
  The non-AI parts took longer
&lt;/h2&gt;

&lt;p&gt;Honest truth — the OpenAI integration took a day. Everything else took weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple App Store: 8 rejections before approval&lt;/li&gt;
&lt;li&gt;Email verification with Supabase and custom SMTP&lt;/li&gt;
&lt;li&gt;Deep linking on Android&lt;/li&gt;
&lt;li&gt;RevenueCat subscription setup across iOS and Android&lt;/li&gt;
&lt;li&gt;UTC timezone bugs in recipe scheduling&lt;/li&gt;
&lt;li&gt;Image generation and caching in Supabase storage&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;Start with the prompt engineering earlier. I spent too long on UI before nailing the core AI output quality. The prompt is your product — treat it that way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The result
&lt;/h2&gt;

&lt;p&gt;Simple Plate is live on both the App Store and Google Play. Built solo in about a month using Flutter, Supabase, OpenAI, and RevenueCat.&lt;/p&gt;

&lt;p&gt;Zero subscribers so far. But it's real, it's live, and I learned more about AI integration by shipping it than I would have from any tutorial.&lt;/p&gt;

&lt;p&gt;Sometimes the best way to learn is to just build something real.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apps.apple.com/us/app/simple-plate/id6765864279" rel="noopener noreferrer"&gt;Apple Store&lt;/a&gt; | &lt;a href="https://play.google.com/store/apps/details?id=com.ravingcode.simpleplate" rel="noopener noreferrer"&gt;Google Play Store&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>ai</category>
      <category>mobile</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
