<?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: DevDesign</title>
    <description>The latest articles on DEV Community by DevDesign (@inioluwa241).</description>
    <link>https://dev.to/inioluwa241</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%2F3952347%2F3a99929d-68b5-448b-a939-d0cd44eed74f.png</url>
      <title>DEV Community: DevDesign</title>
      <link>https://dev.to/inioluwa241</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/inioluwa241"/>
    <language>en</language>
    <item>
      <title>How I Built an App That Forces You to Remember Your Goals — and Finally Finished It</title>
      <dc:creator>DevDesign</dc:creator>
      <pubDate>Sun, 07 Jun 2026 19:47:29 +0000</pubDate>
      <link>https://dev.to/inioluwa241/how-i-built-an-app-that-forces-you-to-remember-your-goals-and-finally-finished-it-15md</link>
      <guid>https://dev.to/inioluwa241/how-i-built-an-app-that-forces-you-to-remember-your-goals-and-finally-finished-it-15md</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-06-07"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built Goal OS — an Android app designed to make your goals absolutely impossible to ignore.&lt;/p&gt;

&lt;p&gt;I’m a Mechanical Engineering student and a self-taught developer, and I suffer from a problem most of us share: I set ambitious goals, feel incredibly motivated for about twenty-four hours, and then completely forget them. Every goal-tracking app I tried had the exact same structural flaw: you have to open it for it to work. The moment life gets busy, the app disappears into an app drawer, and your goals disappear with it.&lt;/p&gt;

&lt;p&gt;Goal OS flips that dynamic entirely. Instead of forcing you to visit your goals, it embeds them directly into your daily rhythm:&lt;/p&gt;

&lt;p&gt;Personalized Morning Alarms: Greets you by name and briefs you on your specific focus areas for the day.&lt;/p&gt;

&lt;p&gt;Context-Aware Reminders: Notifications don't just say "open the app"; they route directly to the specific goal they are about.&lt;/p&gt;

&lt;p&gt;Progress Logs: A continuous history of your effort, keeping you accountable over time.&lt;/p&gt;

&lt;p&gt;Weekly Review System: A built-in mechanism that forces you to pause and reflect on your wins, challenges, and overall direction.&lt;/p&gt;

&lt;p&gt;This isn’t just a tracker. It’s a comprehensive system for people who are serious about what they are building toward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;This is a link to a demo for the app &lt;a href="https://youtube.com/shorts/KcS3G5t_3mg?si=dGZ6sOyAtfbFNxPv" rel="noopener noreferrer"&gt;https://youtube.com/shorts/KcS3G5t_3mg?si=dGZ6sOyAtfbFNxPv&lt;/a&gt;.&lt;br&gt;
And here is the link to the github repository&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&lt;/h2&gt;

&lt;p&gt;I started Goal OS in the first week of April. The base was there — goal creation, SQLite storage, Supabase sync, clean UI. But the features that made it actually different from every other goal app were either broken or missing entirely.&lt;br&gt;
Notifications were firing at midnight instead of scheduled times. Reminder notifications had no goal context — just a generic ping. Vision rotation notifications showed as blank cards in the notification shade. There was no progress logging, no weekly reflection, no history. A newArchEnabled conflict between app.json and gradle.properties was silently breaking the build. The SQLite path in the native helper was wrong so it loaded empty data without a single error thrown.&lt;br&gt;
The app looked finished. It wasn't.&lt;br&gt;
What I fixed and finished:&lt;/p&gt;

&lt;p&gt;Progress logging — every check-in creates a timestamped log, visible as a full history on the goal detail screen&lt;br&gt;
Weekly Review screen — mood selector, wins, challenges, reflection, and a scrollable list of past reviews&lt;br&gt;
Notification deep linking — tapping any notification navigates directly to the relevant goal, not the home screen&lt;br&gt;
Personalized morning alarm — greets you by name, feels like a brief not a ping&lt;br&gt;
Midday and evening notifications — reference your actual top goal title, not generic copy&lt;br&gt;
Streak warning — fires at 8:30pm if your streak is at risk&lt;br&gt;
Background fetch task — streak checks run even when the app is fully closed&lt;br&gt;
Build fixed — resolved newArchEnabled conflict, removed duplicate expo-build-properties entry, corrected SQLite path&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;Copilot changed how I work on complex features — not by writing code for me, but by letting me work at the level of intent rather than implementation detail.&lt;br&gt;
The most valuable thing I learned was how to write prompts that actually work. Vague prompts get vague code. Specific prompts — ones that reference exact file names, existing function patterns, and the precise behavior you want — get code that slots directly into your project without introducing new conventions or breaking what's already there.&lt;br&gt;
Here's a concrete example. I needed to build a full Weekly Review screen — mood selector, multiple text inputs, a save function that writes to SQLite and syncs to Supabase, and a past reviews list. Instead of asking Copilot to "build a weekly review screen," I gave it this:&lt;/p&gt;

&lt;p&gt;"Create components/weekly-review.tsx. Use useColorScheme, Colors, ThemedText, ThemedView from existing imports. Load reviews on mount using getWeeklyReviews(). Show a mood selector with 5 emoji buttons stored as values 1–5, active one highlighted with c.accent. Three multiline TextInputs for wins, challenges, and reflection. A save button that calls addWeeklyReview, clears the form, and calls syncLocalDataToSupabase if a user_id exists. Below the form, a past reviews list showing week_start, mood emoji, and truncated wins. Follow the exact same StyleSheet pattern as components/morning-brief-settig.tsx."&lt;/p&gt;

&lt;p&gt;The output needed minimal adjustment. Because I told it exactly which existing components to use, which DB functions to call, and which file to match for styling — it worked within my codebase instead of inventing its own patterns.&lt;br&gt;
I used the same approach across every feature I finished during this sprint. For progress logging, I told Copilot exactly which table columns existed and which existing function to use as a style reference. For notification fixes, I described the exact bug — "goal reminder trigger time is always midnight because new Date('YYYY-MM-DD').getHours() returns 0" — and told it to default to 9am without changing anything else. For the background fetch task, I gave it exact import paths, the task name constant, and which useEffect to register it from. Each time: one precise prompt, one clean result.&lt;br&gt;
That's a different way of building — and it's faster.&lt;/p&gt;

&lt;p&gt;Takeaways&lt;br&gt;
This sprint taught me a fundamental truth about AI-assisted development: Copilot is not a replacement for understanding your own codebase. It is a force multiplier for developers who already do.&lt;/p&gt;

&lt;p&gt;The more context and architectural precision you feed it, the more effective it becomes. By the end of this sprint, I wasn't spending my mental energy on syntax or repetitive boilerplate. I was thinking purely about the product logic and the engineering requirements, translating that high-level intent into instructions precise enough for Copilot to execute cleanly.&lt;/p&gt;

&lt;p&gt;That is an entirely different, incredibly fast way of building software.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
    </item>
  </channel>
</rss>
