<?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>Forem: RunnerY</title>
    <description>The latest articles on Forem by RunnerY (@runpay).</description>
    <link>https://forem.com/runpay</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%2F1566319%2F79e1a5b8-2b51-48c6-b856-f79c5bde0d36.png</url>
      <title>Forem: RunnerY</title>
      <link>https://forem.com/runpay</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/runpay"/>
    <language>en</language>
    <item>
      <title>&lt;Day6&gt; Run or Pay? ~App Store Review Submitted!!~</title>
      <dc:creator>RunnerY</dc:creator>
      <pubDate>Mon, 16 Feb 2026 12:03:20 +0000</pubDate>
      <link>https://forem.com/runpay/run-or-pay-app-store-review-submitted-36ne</link>
      <guid>https://forem.com/runpay/run-or-pay-app-store-review-submitted-36ne</guid>
      <description>&lt;p&gt;&lt;strong&gt;Pay if you don’t run??&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
I built an app to help people overcome lack of exercise!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Choose how much you’ll pay if you don’t run for &lt;strong&gt;30 minutes within 6 days&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select your commitment amount (&lt;strong&gt;¥500–¥10,000&lt;/strong&gt;)&lt;/li&gt;
&lt;li&gt;Track your running distance and time using the &lt;strong&gt;in-app timer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;If you fail to complete the challenge in time, the selected amount is &lt;strong&gt;charged&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;If you succeed, the &lt;strong&gt;payment is canceled&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In other words, this app creates a &lt;strong&gt;financial commitment to yourself&lt;/strong&gt;, forcing you into a situation where you &lt;em&gt;have to run&lt;/em&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Daily Report — 2026/02/16
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎉 App Store submission completed!
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Submission date&lt;/strong&gt;: Feb 16, 2026
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current status&lt;/strong&gt;: In review (usually 1–3 days)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TestFlight&lt;/strong&gt;: External testing ongoing
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe&lt;/strong&gt;: Switched to production mode
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Progress Summary (since Feb 1)
&lt;/h2&gt;

&lt;p&gt;Over the past two weeks, I moved from the final stage of MVP development to &lt;strong&gt;App Store submission&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✅ Major Achievements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Onboarding implementation (early February)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;strong&gt;5 onboarding screens&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Pre-challenge explanations (measurement method, reducing psychological friction)&lt;/li&gt;
&lt;li&gt;Clear explanation of &lt;strong&gt;“What happens if you pay?”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Added image assets (English &amp;amp; Japanese)&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  2. Built-in GPS workout tracking (mid-February)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Implemented &lt;strong&gt;in-app running tracking&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Integrated &lt;strong&gt;CoreLocation + HealthKit&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Real-time display: elapsed time, distance, pace&lt;/li&gt;
&lt;li&gt;Automatically saves data to HealthKit after tracking&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simple experience without external apps&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  3. Challenge parameter update
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Goal time&lt;/strong&gt;: 60 minutes → &lt;strong&gt;30 minutes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Easier for beginners to complete&lt;/li&gt;
&lt;li&gt;Achievable with &lt;strong&gt;15 minutes × 2 runs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Challenge period remains &lt;strong&gt;6 days&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  4. Stripe production migration (Feb 15)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Switched from test mode to production mode&lt;/li&gt;
&lt;li&gt;Production API keys configured&lt;/li&gt;
&lt;li&gt;Edge Functions updated&lt;/li&gt;
&lt;li&gt;iOS publishableKey updated&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;iOS&lt;/strong&gt;: SwiftUI + HealthKit + CoreLocation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: Sign in with Apple&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: Supabase (Auth, PostgreSQL, Edge Functions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt;: Stripe (PaymentIntent with manual capture)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monthly cost&lt;/strong&gt;: ¥0 (excluding Apple Developer Program)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Current Feature Set (v1.0)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sign in with Apple authentication&lt;/li&gt;
&lt;li&gt;30-minute running challenge in 6 days (fixed)&lt;/li&gt;
&lt;li&gt;Commitment amount selection (¥500–¥10,000)&lt;/li&gt;
&lt;li&gt;Built-in GPS workout tracker&lt;/li&gt;
&lt;li&gt;HealthKit integration (Apple Watch &amp;amp; other apps supported)&lt;/li&gt;
&lt;li&gt;Stripe pre-authorization (no charge if successful)&lt;/li&gt;
&lt;li&gt;Automatic charge on failure&lt;/li&gt;
&lt;li&gt;Early completion support&lt;/li&gt;
&lt;li&gt;Challenge history view&lt;/li&gt;
&lt;li&gt;Onboarding experience&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Not included in v1.0 (future work)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Notifications / reminders&lt;/li&gt;
&lt;li&gt;Custom challenge duration&lt;/li&gt;
&lt;li&gt;Custom goal time&lt;/li&gt;
&lt;li&gt;Apple Watch standalone app&lt;/li&gt;
&lt;li&gt;Social features&lt;/li&gt;
&lt;li&gt;Multi-language support (English only for now)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Roadmap
&lt;/h2&gt;

&lt;h3&gt;
  
  
  v1.1 — Improvements (after approval)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;UI/UX improvements based on feedback&lt;/li&gt;
&lt;li&gt;Bug fixes and crash fixes&lt;/li&gt;
&lt;li&gt;Performance optimization&lt;/li&gt;
&lt;li&gt;Notifications (reminders)&lt;/li&gt;
&lt;li&gt;Onboarding improvements&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  v1.2 — Feature expansion
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Detailed challenge history&lt;/li&gt;
&lt;li&gt;Stats &amp;amp; graphs&lt;/li&gt;
&lt;li&gt;Apple Watch support&lt;/li&gt;
&lt;li&gt;Widgets&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  v2.0 — Major update
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Customizable goal time&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Reflections &amp;amp; Learnings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Changes over the past two weeks
&lt;/h3&gt;

&lt;p&gt;On Feb 1, I had just started &lt;strong&gt;external TestFlight testing&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
In two weeks, I completed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Onboarding (major UX improvement)&lt;/li&gt;
&lt;li&gt;Built-in tracking feature&lt;/li&gt;
&lt;li&gt;Production environment migration&lt;/li&gt;
&lt;li&gt;App Store submission&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Decisions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Why reduce the goal?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
To improve first-time user retention.&lt;br&gt;&lt;br&gt;
60 minutes felt like too high of a psychological barrier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why add built-in tracking?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
External app setup was too complex for beginners.&lt;br&gt;&lt;br&gt;
I prioritized simplicity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Run or Pay MVP has finally reached App Store review.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two weeks ago, external testing had just begun.&lt;br&gt;&lt;br&gt;
Since then, onboarding, built-in tracking, and production migration were completed — culminating in submission.&lt;/p&gt;

&lt;p&gt;While waiting for review results, I’ll focus on &lt;strong&gt;marketing preparation and TestFlight feedback&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Next update when the review result arrives!&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>devjournal</category>
      <category>ios</category>
      <category>showdev</category>
    </item>
    <item>
      <title>&lt;Day 5&gt; A “Pay If You Don’t Run” App? Onboarding and Marketing should be serious</title>
      <dc:creator>RunnerY</dc:creator>
      <pubDate>Sat, 31 Jan 2026 16:23:55 +0000</pubDate>
      <link>https://forem.com/runpay/a-pay-if-you-dont-run-app-onboarding-and-marketing-should-be-serious-oc8</link>
      <guid>https://forem.com/runpay/a-pay-if-you-dont-run-app-onboarding-and-marketing-should-be-serious-oc8</guid>
      <description>&lt;h1&gt;
  
  
  What I’m Building
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Users set how much money they’re willing to pay &lt;strong&gt;if they fail to run 60 minutes within 6 days&lt;/strong&gt;, and the app pre-authorizes that payment.&lt;/li&gt;
&lt;li&gt;Running activity is tracked via &lt;strong&gt;HealthKit&lt;/strong&gt; using an iPhone or Apple Watch.&lt;/li&gt;
&lt;li&gt;Because users are financially committed, they’re effectively forced to run—helping improve running habits in Japan.&lt;/li&gt;
&lt;li&gt;If the user fails to reach the goal, the pre-committed money is transferred to the operator.
If the goal is achieved, the payment authorization is canceled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you’re interested in trying it out, please leave a comment. I’ll share a test version of the app somehow!&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Daily Report - 2026/02/01
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TestFlight&lt;/strong&gt;: ✅ External testing live&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testers&lt;/strong&gt;: Friends have started testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Phase&lt;/strong&gt;: Onboarding &amp;amp; technical validation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Progress Since 2026/01/29
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Challenge Period Change
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Shortened from &lt;strong&gt;7 days → 6 days&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Reason: To avoid expiration risk of Stripe authorization (7-day limit)&lt;/li&gt;
&lt;li&gt;Secured a 1-day safety margin&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ UI/UX Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improved loading state handling (ChallengeView)&lt;/li&gt;
&lt;li&gt;Improved remaining time display&lt;/li&gt;
&lt;li&gt;Added clearer challenge description (“Run 60 minutes in 6 days”)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Stronger Authentication Validation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Blocked authorization and challenge actions when not logged in&lt;/li&gt;
&lt;li&gt;Added authentication checks to the &lt;code&gt;complete-challenge&lt;/code&gt; Edge Function&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ &lt;code&gt;complete-challenge&lt;/code&gt; Edge Function
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Purpose&lt;/strong&gt;: Called from the UI when the goal is achieved before the deadline&lt;/li&gt;
&lt;li&gt;Separate from &lt;code&gt;process-expired-challenges&lt;/code&gt; (automatic expiration handling)&lt;/li&gt;
&lt;li&gt;Cancels the authorization and completes the challenge immediately&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ External Testing Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Passed Apple review&lt;/li&gt;
&lt;li&gt;Began distribution via public link to friends&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Today’s Focus
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🔶 Measurement Onboarding Validation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Verify whether users can correctly record running activity&lt;/li&gt;
&lt;li&gt;Identify issues caused by insufficient explanations&lt;/li&gt;
&lt;li&gt;Consider a YouTube video or in-app tutorial&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔶 Technical Validation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Run E2E tests personally (create challenge → achieve → complete)&lt;/li&gt;
&lt;li&gt;Verify early-completion flow via &lt;code&gt;complete-challenge&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Prepare tests for automatic judgment after 6 days&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  This Week
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Add a “How to Measure” link to ChallengeView&lt;/li&gt;
&lt;li&gt;[ ] Create a YouTube video explaining how to record running activity&lt;/li&gt;
&lt;li&gt;[ ] Collect feedback from friends&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Before Production Release
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Finalize onboarding&lt;/li&gt;
&lt;li&gt;[ ] Switch Stripe to live mode&lt;/li&gt;
&lt;li&gt;[ ] Submit for App Store review&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Instructions for Testers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Record &lt;strong&gt;Running&lt;/strong&gt; using the Workout app on Apple Watch or iPhone&lt;/li&gt;
&lt;li&gt;Nike Run Club / Strava must have Health app integration enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Observation Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can first-time users understand how to measure running?&lt;/li&gt;
&lt;li&gt;Are there any issues in the HealthKit permission flow?&lt;/li&gt;
&lt;li&gt;Is running activity reflected correctly in the app?&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devjournal</category>
      <category>ios</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>&lt;Day4&gt;Run or Pay? App building. Done Apple Developer Program &amp; inside TestFlight</title>
      <dc:creator>RunnerY</dc:creator>
      <pubDate>Wed, 28 Jan 2026 15:44:45 +0000</pubDate>
      <link>https://forem.com/runpay/run-or-pay-app-building-done-apple-developer-program-inside-testflight-1a7e</link>
      <guid>https://forem.com/runpay/run-or-pay-app-building-done-apple-developer-program-inside-testflight-1a7e</guid>
      <description>&lt;h2&gt;
  
  
  What I’m Building
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Users set an amount of money they agree to pay &lt;strong&gt;if they fail to run at least 60 minutes within a week&lt;/strong&gt;, and authorize the payment in advance.&lt;/li&gt;
&lt;li&gt;Running time is measured via &lt;strong&gt;HealthKit&lt;/strong&gt; using an &lt;strong&gt;iPhone or Apple Watch&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Because money is on the line, users are effectively forced to run, helping build consistent exercise habits.&lt;/li&gt;
&lt;li&gt;If the user &lt;strong&gt;fails to reach the target&lt;/strong&gt;, the pre-authorized payment is captured by the service.
If the target &lt;strong&gt;is achieved&lt;/strong&gt;, the payment is automatically canceled.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you try the beta version, I'll send you TestFlight invitation code! Please comment!&lt;/p&gt;

&lt;p&gt;The app icon is ready:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptbczufeacmoiiqp6the.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fptbczufeacmoiiqp6the.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’ve Done So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Finally completed account registration&lt;/li&gt;
&lt;li&gt;Implemented &lt;strong&gt;Sign in with Apple&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Since the app was designed around Apple ID login from the start,
I can now test all features properly on a real device&lt;/li&gt;
&lt;li&gt;Added logic to measure &lt;strong&gt;running time via HealthKit&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Concern #1: Payments in Production
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Payments are the most anxiety-inducing part when thinking about real-world usage.&lt;/li&gt;
&lt;li&gt;So far, I’ve been doing a lot of vibe coding, but &lt;strong&gt;payment-related logic needs proper test coverage&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Main concerns:

&lt;ul&gt;
&lt;li&gt;Whether the cron job that checks user status and determines challenge completion works reliably&lt;/li&gt;
&lt;li&gt;Whether payment cancellations are handled correctly&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;I’m also unsure whether Japanese users will feel comfortable making payments via &lt;strong&gt;Stripe&lt;/strong&gt;, which isn’t very familiar in Japan.&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Concern #2: Measurement via External Apps
&lt;/h2&gt;

&lt;p&gt;The app relies on workouts recorded by external apps, so all of the following need to work correctly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple Watch workouts&lt;/li&gt;
&lt;li&gt;iPhone Fitness app workouts (latest iOS)&lt;/li&gt;
&lt;li&gt;Nike Training / Nike Run Club workouts&lt;/li&gt;
&lt;li&gt;Strava workouts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of these need to be tested — ideally by real users.&lt;/p&gt;

&lt;p&gt;For the MVP, I decided to &lt;strong&gt;skip in-app workout tracking&lt;/strong&gt;, since the implementation and running costs don’t justify it at this stage.&lt;/p&gt;




&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apple Developer Program&lt;/strong&gt;: ✅ Approved&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TestFlight&lt;/strong&gt;: ✅ Internal testing successfully distributed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App State&lt;/strong&gt;: Ready for TestFlight distribution&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Progress Since 2025-01-25
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Sign in with Apple
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enabled &lt;em&gt;Sign in with Apple&lt;/em&gt; in Xcode Capabilities&lt;/li&gt;
&lt;li&gt;Integrated with Supabase Auth&lt;/li&gt;
&lt;li&gt;Successfully tested on a real device&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Shortened Challenge Duration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reduced from &lt;strong&gt;28 days → 7 days&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Easier to test and lowers user drop-off risk&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ HealthKit Background Delivery
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implemented automatic DB sync when a workout ends&lt;/li&gt;
&lt;li&gt;Progress updates even when the app is killed&lt;/li&gt;
&lt;li&gt;Uses &lt;code&gt;enableBackgroundDelivery&lt;/code&gt; in &lt;code&gt;HealthKitBackgroundService.swift&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Users don’t need to open the app for progress to be reflected&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ TestFlight Distribution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Xcode Cloud setup completed&lt;/li&gt;
&lt;li&gt;Build successfully uploaded to App Store Connect&lt;/li&gt;
&lt;li&gt;Created internal test group &lt;strong&gt;“friend”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Build &lt;strong&gt;1.0 (7)&lt;/strong&gt; is available for testing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ App Store Connect Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;NSCameraUsageDescription&lt;/code&gt; (required by Stripe SDK)&lt;/li&gt;
&lt;li&gt;Export compliance completed (no encryption)&lt;/li&gt;
&lt;li&gt;Test information fully filled in&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Test the TestFlight build on my own iPhone&lt;/li&gt;
&lt;li&gt;[ ] Apply for external testing (Apple review)&lt;/li&gt;
&lt;li&gt;[ ] Distribute via public TestFlight link to friends&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devjournal</category>
      <category>ios</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>&lt;DAY 3&gt; “Pay-if-you-don’t-run” app by vibe coding ~ Still waiting on Apple Developer Program approval 😤</title>
      <dc:creator>RunnerY</dc:creator>
      <pubDate>Sun, 25 Jan 2026 05:52:16 +0000</pubDate>
      <link>https://forem.com/runpay/pay-if-you-dont-run-app-by-vibe-coding-still-waiting-on-apple-developer-program-o90</link>
      <guid>https://forem.com/runpay/pay-if-you-dont-run-app-by-vibe-coding-still-waiting-on-apple-developer-program-o90</guid>
      <description>&lt;h1&gt;
  
  
  What I'm Building
&lt;/h1&gt;

&lt;p&gt;I’m building an app with the following concept:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users are asked how much money they want to put at stake for the month, and a payment authorization is set up in advance.&lt;/li&gt;
&lt;li&gt;Running distance is tracked via HealthKit using an iPhone or Apple Watch.&lt;/li&gt;
&lt;li&gt;Because money is on the line, users are effectively forced to run.&lt;/li&gt;
&lt;li&gt;This (hopefully) contributes to improving exercise habits in Japan.&lt;/li&gt;
&lt;li&gt;If the user fails to reach their self-defined distance goal, the pre-committed money is paid to the operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is based on the concept of &lt;strong&gt;commitment&lt;/strong&gt; in psychology and economics.&lt;br&gt;&lt;br&gt;
A similar app exists overseas called &lt;em&gt;Stickk&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Went Well
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;HealthKit integration &lt;em&gt;probably&lt;/em&gt; works. Let me test it already.&lt;/li&gt;
&lt;li&gt;The app icon is done.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezdysw28b9tlbq9a43eu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezdysw28b9tlbq9a43eu.png" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There isn’t much I can do right now.&lt;br&gt;&lt;br&gt;
Maybe create a public Notion page, or think about marketing strategies.&lt;/p&gt;

&lt;p&gt;I haven’t written any tests.&lt;br&gt;&lt;br&gt;
Right — I should write tests.&lt;/p&gt;




&lt;h2&gt;
  
  
  Status
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Apple Developer Program&lt;/strong&gt;: Registered on 1/23, not yet activated&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App status&lt;/strong&gt;: MVP is basically complete, waiting for Sign in with Apple&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Completed Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ✅ Stripe Payments
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PaymentSheet integration completed&lt;/li&gt;
&lt;li&gt;Authorization-only flow using &lt;code&gt;capture_method=manual&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Successful testing on a real device&lt;/li&gt;
&lt;li&gt;Fixed PaymentSheet presentation error (handled topmost ViewController)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ HealthKit Integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Implemented running data retrieval&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;NSHealthShareUsageDescription&lt;/code&gt; to Info.plist&lt;/li&gt;
&lt;li&gt;Successfully authorized and fetched data on a real device&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ Batch Processing (Edge Functions)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;process-expired-challenges&lt;/code&gt;: evaluates 28-day challenges and handles payments&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;update-progress&lt;/code&gt;: updates user progress&lt;/li&gt;
&lt;li&gt;Deployed to Supabase&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ GitHub Actions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.github/workflows/process-challenges.yml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Runs automatically every day at 00:00 UTC&lt;/li&gt;
&lt;li&gt;Secrets configured (&lt;code&gt;SUPABASE_ANON_KEY&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ UI Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Countdown display for remaining days/hours&lt;/li&gt;
&lt;li&gt;Fixed deposit amount display&lt;/li&gt;
&lt;li&gt;Changed challenge duration from monthly to 28 days&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ App Store Preparation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Privacy policy created (&lt;code&gt;docs/privacy-policy.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;App Store description written (&lt;code&gt;docs/appstore-description.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;App icon set (1024x1024)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pending Tasks
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ⏳ Sign in with Apple
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocker&lt;/strong&gt;: Waiting for Apple Developer Program approval&lt;/li&gt;
&lt;li&gt;Tasks after approval:

&lt;ol&gt;
&lt;li&gt;Enable Sign in with Apple in Xcode Capabilities&lt;/li&gt;
&lt;li&gt;Implement Supabase Auth integration&lt;/li&gt;
&lt;li&gt;Update RLS policies&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⏳ Database Persistence Testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Currently blocked by RLS (writes not allowed without authentication)&lt;/li&gt;
&lt;li&gt;Temporarily testing with a dev user ID&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⏳ TestFlight Distribution
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To be done after Developer Program approval&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⏳ App Store Submission
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;To be submitted after all features are implemented and tested&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iOS&lt;/td&gt;
&lt;td&gt;iOS 17+, SwiftUI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth&lt;/td&gt;
&lt;td&gt;Sign in with Apple (planned)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payments&lt;/td&gt;
&lt;td&gt;Stripe&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Activity Data&lt;/td&gt;
&lt;td&gt;HealthKit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Batch Jobs&lt;/td&gt;
&lt;td&gt;Supabase Edge Functions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD&lt;/td&gt;
&lt;td&gt;GitHub Actions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Key File Changes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1/23
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;StripeAuthorizer.swift&lt;/code&gt; – Stripe PaymentSheet integration&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Challenge.swift&lt;/code&gt; – Added &lt;code&gt;stripePaymentIntentId&lt;/code&gt;, remaining time calculation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ChallengeView.swift&lt;/code&gt; – Added countdown UI&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SupabaseChallengeStore.swift&lt;/code&gt; – Dev user ID support&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Info.plist&lt;/code&gt; – Added HealthKit configuration&lt;/li&gt;
&lt;li&gt;Created and deployed Edge Functions&lt;/li&gt;
&lt;li&gt;Configured GitHub Actions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1/24
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;StripeAuthorizer.swift&lt;/code&gt; – Fixed PaymentSheet presentation issue

&lt;ul&gt;
&lt;li&gt;Updated to retrieve the topmost ViewController&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Next Actions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wait for Developer Program approval&lt;/strong&gt; (up to 48 hours)&lt;/li&gt;
&lt;li&gt;After approval:

&lt;ul&gt;
&lt;li&gt;Implement Sign in with Apple&lt;/li&gt;
&lt;li&gt;Integrate Supabase Auth&lt;/li&gt;
&lt;li&gt;Configure RLS policies&lt;/li&gt;
&lt;li&gt;Distribute via TestFlight&lt;/li&gt;
&lt;li&gt;Submit to the App Store&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Apple Developer Program: $99/year (registered on 1/23)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devjournal</category>
      <category>ios</category>
      <category>sideprojects</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>&lt;DAY2&gt; An app where you get charged if you don’t run: applying to the Apple Developer Program and connecting Supabase and Stripe</title>
      <dc:creator>RunnerY</dc:creator>
      <pubDate>Fri, 23 Jan 2026 13:30:30 +0000</pubDate>
      <link>https://forem.com/runpay/an-app-where-you-get-charged-if-you-dont-run-applying-to-the-apple-developer-program-and-14fg</link>
      <guid>https://forem.com/runpay/an-app-where-you-get-charged-if-you-dont-run-applying-to-the-apple-developer-program-and-14fg</guid>
      <description>&lt;p&gt;Here’s the rough idea.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ask users how much money they’re willing to put at stake for the month, and reserve (authorize) that amount in advance.&lt;/li&gt;
&lt;li&gt;Track the user’s running distance via HealthKit using an iPhone or Apple Watch.&lt;/li&gt;
&lt;li&gt;Because money is on the line, users are effectively forced to run, which (hopefully) contributes to improving exercise habits in Japan.&lt;/li&gt;
&lt;li&gt;If the user fails to reach the distance they originally set, the pre-committed money is paid out to the operator.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdqcjiq2uerjkrgvm59b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdqcjiq2uerjkrgvm59b.png" alt=" " width="800" height="1609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By the way, this is my second time doing solo development, and I’m basically a vibe coder!&lt;br&gt;&lt;br&gt;
I occasionally write code, but my day job is closer to being a data analyst (mostly sales, though).&lt;/p&gt;

&lt;h2&gt;
  
  
  Today’s Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The Apple Developer Program apparently takes up to two days to reflect changes, which is slower than expected.&lt;/li&gt;
&lt;li&gt;Because authentication isn’t working yet, I can’t make much progress on testing.&lt;/li&gt;
&lt;li&gt;Still, things moved along nicely overall. I’d like to have friends test it this weekend, but realistically I might not make it in time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  2026-01-23 Development Log
&lt;/h1&gt;

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

&lt;h3&gt;
  
  
  1. Apple Developer Program Registration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Paid the $99 fee&lt;/li&gt;
&lt;li&gt;Waiting for it to reflect in Xcode (up to 48 hours)&lt;/li&gt;
&lt;li&gt;Sign in with Apple will be implemented after that&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. End-of-Month Batch Processing (Edge Functions)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created and deployed &lt;code&gt;process-expired-challenges&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Determines challenges that have passed 28 days&lt;/li&gt;
&lt;li&gt;Goal achieved → cancel authorization (refund)&lt;/li&gt;
&lt;li&gt;Goal not achieved → capture payment (charge)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Created and deployed &lt;code&gt;update-progress&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Updates progress (running minutes)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. GitHub Actions Setup
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;code&gt;.github/workflows/process-challenges.yml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Runs &lt;code&gt;process-expired-challenges&lt;/code&gt; every day at 00:00 UTC&lt;/li&gt;
&lt;li&gt;Secrets will be configured after pushing to GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. HealthKit Integration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;NSHealthShareUsageDescription&lt;/code&gt; to &lt;code&gt;Info.plist&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;requestAuthorization()&lt;/code&gt; to the &lt;code&gt;ActivityMinuteSource&lt;/code&gt; protocol&lt;/li&gt;
&lt;li&gt;Request HealthKit authorization on app launch in &lt;code&gt;ChallengeView&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real device testing successful&lt;/strong&gt; 🎉

&lt;ul&gt;
&lt;li&gt;HealthKit authorization dialog appeared&lt;/li&gt;
&lt;li&gt;Successfully obtained permission to read workout data&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. UI Improvements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added remaining time display

&lt;ul&gt;
&lt;li&gt;2+ days: “X days remaining”&lt;/li&gt;
&lt;li&gt;1–2 days: “1 day and X hours remaining”&lt;/li&gt;
&lt;li&gt;Less than 1 day: “hh:mm remaining”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Fixed commitment amount display

&lt;ul&gt;
&lt;li&gt;Adjusted timing for closing the sheet after payment completion&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Code Changes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Added &lt;code&gt;stripePaymentIntentId&lt;/code&gt; to the &lt;code&gt;Challenge&lt;/code&gt; model&lt;/li&gt;
&lt;li&gt;Added remaining time calculation properties to the &lt;code&gt;Challenge&lt;/code&gt; model&lt;/li&gt;
&lt;li&gt;Updated &lt;code&gt;SupabaseChallengeStore&lt;/code&gt; to use a development user ID&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Blockers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Waiting for Developer Program Activation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sign in with Apple cannot be used yet&lt;/li&gt;
&lt;li&gt;Because authentication is required by RLS, database save testing cannot be done&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Temporary Workaround (Not Implemented)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Relaxing Supabase RLS would allow testing without authentication&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Confirm Developer Program Activation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check via Xcode → Settings → Accounts&lt;/li&gt;
&lt;li&gt;If the Team appears, it’s good to go&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Implement Sign in with Apple&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrate with Supabase Auth&lt;/li&gt;
&lt;li&gt;Create Supabase users from Apple IDs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Test Database Persistence&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a challenge → verify it’s saved in Supabase&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prepare for Release&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push to GitHub &amp;amp; configure Secrets&lt;/li&gt;
&lt;li&gt;Create app icon&lt;/li&gt;
&lt;li&gt;Create privacy policy&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Commit History
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;feat: add countdown UI and commitment money&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Plus Edge Functions deployments and other changes&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Verified Functionality
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Simulator&lt;/th&gt;
&lt;th&gt;Real Device&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Stripe Payment&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HealthKit Auth&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UI Rendering&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DB Persistence&lt;/td&gt;
&lt;td&gt;❌ RLS&lt;/td&gt;
&lt;td&gt;❌ RLS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>mobile</category>
      <category>healthydebate</category>
      <category>vibecoding</category>
      <category>stripe</category>
    </item>
    <item>
      <title>&lt;DAY 1&gt; I'm going to build an app where you lose money if you don’t run.</title>
      <dc:creator>RunnerY</dc:creator>
      <pubDate>Thu, 22 Jan 2026 17:31:04 +0000</pubDate>
      <link>https://forem.com/runpay/im-going-to-build-an-app-where-you-lose-money-if-you-dont-run-1mnm</link>
      <guid>https://forem.com/runpay/im-going-to-build-an-app-where-you-lose-money-if-you-dont-run-1mnm</guid>
      <description>&lt;h1&gt;
  
  
  What I Did Today
&lt;/h1&gt;

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

&lt;ul&gt;
&lt;li&gt;Came up with the idea
&lt;/li&gt;
&lt;li&gt;Threw the idea to GPT and some friends
&lt;/li&gt;
&lt;li&gt;Roughly designed the architecture and had it built up to this point
&lt;/li&gt;
&lt;li&gt;Generated an app icon to get myself hyped
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There’s no strong guarantee this will work, but I want to try getting an iOS app through App Review—and honestly, I want to run more myself—so I’m building this.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Idea
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Users sign up
&lt;/li&gt;
&lt;li&gt;They are asked how much money they’re willing to put at stake for the month
&lt;/li&gt;
&lt;li&gt;Running distance is tracked via HealthKit
&lt;/li&gt;
&lt;li&gt;Because money is on the line, users are forced to run
&lt;/li&gt;
&lt;li&gt;This (hopefully) contributes to improving exercise habits in Japan
&lt;/li&gt;
&lt;li&gt;If the user fails to reach their self-set goal, their money is charged
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is my second time doing solo development, and I’m basically a &lt;em&gt;vibe coder&lt;/em&gt;.&lt;br&gt;&lt;br&gt;
I occasionally write code, but my day job is closer to a data analyst (mostly sales, though).&lt;/p&gt;


&lt;h2&gt;
  
  
  Spec
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you don’t run this month,&lt;br&gt;&lt;br&gt;
how much money are you okay with losing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;※ No charge will occur if you achieve your goal.&lt;/p&gt;

&lt;p&gt;[ ¥500 ] [ ¥1,000 ] [ ¥3,000 ]&lt;br&gt;
↑ Recommended&lt;br&gt;
[ Custom input ]&lt;/p&gt;
&lt;h3&gt;
  
  
  Rules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Minimum: ¥500
&lt;/li&gt;
&lt;li&gt;Default: ¥1,000
&lt;/li&gt;
&lt;li&gt;Maximum: ¥10,000
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  2026/01/23 — Work Log
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ Completed Tasks
&lt;/h3&gt;
&lt;h3&gt;
  
  
  1. Created iOS project skeleton
&lt;/h3&gt;

&lt;p&gt;Built a directory structure based on &lt;strong&gt;DDD architecture&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ios/RunForPay/
├── App/
│   ├── RunForPayApp.swift      # App entry point
│   ├── AppContainer.swift      # DI container
│   └── ContentView.swift       # Root view
├── UI/
│   ├── LoginView.swift         # Sign in with Apple
│   ├── ChallengeView.swift     # Progress display
│   ├── DepositSelectView.swift # Deposit selection
│   └── ChallengeViewModel.swift
├── Domain/
│   ├── Challenge.swift         # Entity
│   ├── Minutes.swift           # Value Object
│   ├── DepositAmount.swift     # Value Object
│   └── Ports.swift             # Protocols
├── UseCases/
│   ├── GetMonthlyRunningMinutes.swift
│   └── AuthorizeDeposit.swift
├── Infra/
│   ├── Measurement/
│   │   └── HealthKitMinuteSource.swift
│   ├── Payments/
│   │   └── StripeAuthorizer.swift
│   └── Persistence/
│       └── InMemoryChallengeStore.swift
└── Shared/
    └── DateUtils.swift
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Xcode project setup
Created RunForPay.xcodeproj&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Configured HealthKit permission messages in Info.plist&lt;/p&gt;

&lt;p&gt;Set HealthKit / Sign in with Apple entitlements in RunForPay.entitlements&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Skeleton implementation (16 files)
Domain&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Challenge, Minutes, DepositAmount, Ports&lt;/p&gt;

&lt;p&gt;UseCases&lt;/p&gt;

&lt;p&gt;GetMonthlyRunningMinutes, AuthorizeDeposit&lt;/p&gt;

&lt;p&gt;UI&lt;/p&gt;

&lt;p&gt;LoginView, ChallengeView, DepositSelectView, ChallengeViewModel&lt;/p&gt;

&lt;p&gt;Infra&lt;/p&gt;

&lt;p&gt;HealthKitMinuteSource, StripeAuthorizer, InMemoryChallengeStore&lt;/p&gt;

&lt;p&gt;Shared&lt;/p&gt;

&lt;p&gt;DateUtils&lt;/p&gt;

&lt;p&gt;🚧 Blockers&lt;br&gt;
Cannot install Xcode: macOS 15.6 or later is required&lt;/p&gt;

&lt;p&gt;Need to update macOS&lt;/p&gt;

&lt;p&gt;▶️ Next Steps&lt;br&gt;
Update macOS&lt;/p&gt;

&lt;p&gt;Install Xcode&lt;/p&gt;

&lt;p&gt;Open project in Xcode and set Team ID&lt;/p&gt;

&lt;p&gt;Add Stripe SDK / Supabase SDK via Swift Package Manager&lt;/p&gt;

&lt;p&gt;Confirm build&lt;/p&gt;

</description>
      <category>healthydebate</category>
      <category>vibecoding</category>
      <category>ios</category>
    </item>
  </channel>
</rss>
