## Inspiration

Supplements are easy to buy but surprisingly difficult to track well. A person may take several products with different serving sizes, nutrient forms, reminders, and label formats. Existing workflows often require repetitive manual entry, make uncertain assumptions from labels, or depend heavily on cloud accounts.

We built Verdant to make supplement tracking clearer and more private. The goal was not to provide medical advice, but to help people organize what they take, record intake consistently, review nutrient information, and remain in control of their own data.

## What it does

Verdant is a local-first supplement and nutrient tracker for iPhone.

Users can:

  • Create supplements manually or look them up by barcode through the NIH Dietary Supplement Label Database
  • Record complete or supported partial servings
  • Review daily intake, history, nutrient summaries, and local trends
  • Configure local reminders
  • Scan a supplement label with on-device text recognition and review an editable draft before saving
  • Export selected records as PDF or CSV reports

The core tracking experience remains free. Verdant Pro Lifetime is a one-time, non-consumable purchase that unlocks advanced local workflows:

  • Scan Label with Apple Vision OCR
  • Batch Quick Log
  • Mark Taken from supported reminder actions
  • PDF and CSV export
  • Reviewed JSON label import

Existing records remain readable and manageable even without Pro access.

## How we built it

Verdant is a native iPhone app built with Swift and SwiftUI using a testable, view-model-driven architecture. Core Data stores supplement, nutrient, and intake records locally.

Barcode capture uses AVFoundation, followed by a user-initiated NIH DSLD lookup. Scan Label uses Apple Vision for on-device text recognition. A conservative local parser extracts supported facts and leaves ambiguous units or nutrient forms unresolved instead of silently guessing or converting them.

On eligible iOS 26 devices, Apple Foundation Models may assist with product metadata such as the product name or serving description. Nutrient values remain controlled by the deterministic parser, and every result still goes through an editable review before it can be saved. Verdant does not upload label images or recognized label text to a hosted AI service.

Swift Charts powers local insights, UserNotifications handles reminders, LocalAuthentication protects report preparation, and the app supports English, Traditional Chinese, Dynamic Type, VoiceOver, and dark mode.

## How we used RevenueCat

RevenueCat powers Verdant Pro Lifetime, a real one-time purchase rather than a subscription.

The app uses a provider-neutral pro entitlement boundary. RevenueCat CustomerInfo is the source of truth, and the app does not create a second paid-status flag in Core Data or UserDefaults.

The purchase flow:

  • Loads the current lifetime package from the RevenueCat Offering
  • Displays the localized App Store price
  • Grants access only after CustomerInfo confirms the active pro entitlement
  • Supports explicit Restore Purchases
  • Uses RevenueCat's cached entitlement state for offline access
  • Preserves every free workflow when the store or entitlement service is unavailable

This architecture keeps feature code independent from a specific product identifier and leaves room for future products without rewriting every feature gate.

## Challenges we ran into

### Designing monetization without locking user data

The hardest product decision was deciding what should be paid. We chose to monetize convenience and advanced workflows, not basic tracking, accessibility, safety information, or access to existing records.

### Treating label recognition as untrusted input

Supplement labels contain ambiguous nutrient names, specialized units, and serving-size semantics. Automatically “fixing” uncertain data could create a convincing but incorrect result. Verdant instead surfaces unresolved facts and requires review before saving.

### Handling real purchase states

A completed store call does not necessarily mean an entitlement is active. We had to model loading, cancellation, pending approval, configuration problems, restore results, offline cache behavior, and completed purchases that do not yet return the expected entitlement.

### Shipping through App Review

The first submission required additional reviewer information. We prepared clearer access instructions and physical-device evidence, then shipped Verdant publicly on the App Store during the Shipaton window.

### Preserving privacy and accessibility

Camera denial, notification denial, larger text, VoiceOver, localization, and loss of Pro access all needed usable fallback paths. These states influenced the architecture rather than being added at the end.

## Accomplishments that we are proud of

  • Shipped a public iPhone app with a real RevenueCat-powered purchase
  • Built a Free/Pro boundary that does not hold existing user records hostage
  • Kept label OCR and parsing on device
  • Required human review instead of presenting generated facts as authoritative
  • Supported purchase, restore, entitlement-loss, and offline states
  • Delivered the app in English and Traditional Chinese with native accessibility support

## What we learned

We learned that entitlement design is product architecture, not just payment integration. Features should ask whether a capability is available, rather than knowing which StoreKit product purchased it.

We also learned that responsible automation sometimes means doing less. Leaving an ambiguous label fact unresolved is better than producing a polished but incorrect answer.

Finally, shipping a real IAP required coordination across app code, RevenueCat configuration, App Store Connect, privacy disclosures, localization, accessibility, reviewer instructions, and physical-device testing. RevenueCat reduced the amount of custom transaction infrastructure while still letting us preserve an app-owned product boundary.

## What's next

We plan to keep improving label review, multilingual nutrient identity, reminder workflows, accessibility, and local data safety.

Verdant will remain honest about its scope: no hosted AI, account system, subscription, or cross-device sync will be claimed until those services have a complete privacy, reliability, migration, and operating model.

Built With

Share this project:

Updates

Submission history