Pay for nothing. Literally.
V0ID is a satirical iOS app disguised as a premium digital detox experience. Users subscribe to... nothing. A black screen, a breathing circle, and deadpan humour throughout.
Coming soon
- SwiftUI — Pure SwiftUI, no UIKit views (except AVPlayer splash)
- SwiftData — Local persistence for user stats, session counts, preferences
- StoreKit 2 — Auto-renewable subscriptions (monthly/yearly) + lifetime non-consumable
- CloudKit — Global counter tracking total seconds humanity has "wasted" across all users
- AVKit — Video splash screen on launch with crossfade transition
VoidApp (entry point)
├── SplashView → Video splash on launch (AVPlayerLayer)
├── OnboardingView → 3-screen fade-through intro
├── ContentView → Main container, sheet management
│ ├── VoidScreen → Breathing circle animation, timer
│ ├── SettingsView → Stats, wallpaper picker, FAQ, share
│ └── PaywallView → 3-tier subscription selector
└── VoidSheet → Reusable dark sheet container
Models:
VoidManager— SwiftData-backed state (sessions, time, wallpaper)SubscriptionManager— StoreKit 2 product loading, purchasing, entitlement checkingCloudCounter— CloudKit public database read/write for global counterNotificationManager— Deadpan local notifications (2/day, 7-day rolling schedule)
- 🕳️ Premium nothing experience with 3 subscription tiers
- ⏱️ Tracks money wasted, sessions, and time spent doing nothing
- 🌍 Global CloudKit counter — "Humanity has wasted X on nothing"
- 🔔 Deadpan push notifications ("This notification cost you approximately £0.006")
- 🎨 4 wallpaper options (all black)
- 🎬 Video splash screen
- 🧪 Hidden 5-tap test mode for debug builds
| Tier | Product ID | Price |
|---|---|---|
| Monthly | PREMIUM |
£0.99/mo |
| Yearly | VOIDANNUAL |
£5.99/yr |
| Lifetime | PREMIUM_LIFETIME |
£9.99 |
- iOS 17.0+
- Xcode 16+
- Apple Developer account (for CloudKit + StoreKit)
- Clone the repo
- Open
Void.xcodeprojin Xcode - Update the team/bundle ID in Signing & Capabilities
- Link
V0ID.storekitin the scheme for StoreKit testing - Build and run
Uses a single GlobalStats record in the public database with a total (Int64) field. No indexes required — fetched by record ID, not queried.
MIT