DEV Community

RunnerY
RunnerY

Posted on

<DAY 1> I'm going to build an app where you lose money if you don’t run.

What I Did Today

What I did

  • Came up with the idea
  • Threw the idea to GPT and some friends
  • Roughly designed the architecture and had it built up to this point
  • Generated an app icon to get myself hyped

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.


The Idea

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

Context

This is my second time doing solo development, and I’m basically a vibe coder.

I occasionally write code, but my day job is closer to a data analyst (mostly sales, though).


Spec

If you don’t run this month,

how much money are you okay with losing?

※ No charge will occur if you achieve your goal.

[ ¥500 ] [ ¥1,000 ] [ ¥3,000 ]
↑ Recommended
[ Custom input ]

Rules

  • Minimum: ¥500
  • Default: ¥1,000
  • Maximum: ¥10,000

2026/01/23 — Work Log

✅ Completed Tasks

1. Created iOS project skeleton

Built a directory structure based on DDD architecture:

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
Enter fullscreen mode Exit fullscreen mode
  1. Xcode project setup Created RunForPay.xcodeproj

Configured HealthKit permission messages in Info.plist

Set HealthKit / Sign in with Apple entitlements in RunForPay.entitlements

  1. Skeleton implementation (16 files) Domain

Challenge, Minutes, DepositAmount, Ports

UseCases

GetMonthlyRunningMinutes, AuthorizeDeposit

UI

LoginView, ChallengeView, DepositSelectView, ChallengeViewModel

Infra

HealthKitMinuteSource, StripeAuthorizer, InMemoryChallengeStore

Shared

DateUtils

🚧 Blockers
Cannot install Xcode: macOS 15.6 or later is required

Need to update macOS

▶️ Next Steps
Update macOS

Install Xcode

Open project in Xcode and set Team ID

Add Stripe SDK / Supabase SDK via Swift Package Manager

Confirm build

Top comments (0)