-
-
One sentence answers the question. One strip is the only chart. No calendar.
-
On device, no account, no server copy. Nothing to breach, nothing to sell.
-
Tap a chip to log. There is no Save button, because the tap is the save.
-
Press the strip and drag to travel your cycle. Release on a day to open it.
-
A late day states the fact once, then stays quiet. No speculation, no meter.
-
Local reminders that never name what they are about on a lock screen.
-
Six cycles in one view. Patterns, drawn as ranges, not scores out of ten.
-
Stop paying and the app turns read only. Your data stays, and export keeps working.
-
Sola Logo
Inspiration
When a period app's business model is attention, the software gets built to hold you: a calendar you are obliged to fill, a meter rating your chance of pregnancy today, a notification speculating about why you might be late.
Sola started from one question. What is left of a period tracker after you delete every part of it that exists to bring you back?
What it does
Sola tracks cycles, trying to conceive, and pregnancy, and answers in one sentence: Ten days to your period. Under the sentence is a strip of bars, one per day. That strip is the only chart in the app. The same component serves home, the day sheet, Trends, and the 40 week pregnancy view.
Nothing leaves the phone. No account, no email, no server copy of anyone's cycle. iCloud backup is yours, and it stays off until you turn it on.
Every refusal is paired with the thing that replaced it.
| Deleted | Replaced by |
|---|---|
| The calendar | The strip, and a press and drag gesture that travels it |
| Save buttons | Save on tap, with a haptic doing the button's work |
| The chance of pregnancy meter | One sentence, with an honest range |
| Speculation when you are late | The fact, stated once, then silence |
Press the strip and drag. It zooms under your thumb and a mono pill names the day. Predicted days are dashed, and the window widens when the app is less certain. Uncertainty is drawn rather than claimed.
The haptic vocabulary is written down, and the prohibitions are the interesting half. Nothing near money, not even on success, because haptics near a price read as manipulation. Nothing in an anxious state. Exactly one notification.success in the whole app, for the moment you switch to pregnancy.
How we built it
SwiftUI on iOS 18.6, SwiftData, Swift Testing. No Swift Charts, no TabView, no system sheets. Both themes were built independently rather than one ported from the other. Ten languages ship, and VoiceOver reads the strip as one sentence rather than as forty bars.
RevenueCat powers the purchase behind a bespoke SwiftUI paywall, holding entitlements, trial eligibility and restore across monthly, yearly and lifetime. Health data never touches it, and the app reads the entitlement rather than recording it. The SDK import is confined to one folder, and a test fails the build when feature code names an SDK type.
Challenges we ran into
The first real user went looking for a calendar within fifteen minutes, because reaching a specific date is what deleting it costs you. The roadmap had predicted that complaint and ruled that no fix be built until testing hurt. It hurt, so we shipped the smallest answer: release the scrub gesture on a day to open it, and a pager at the top of the day sheet. There is still no calendar tab.
Nine more languages, where the hard part was not the sentences. Ninety-six strings are clinical symptom terms, so each was resolved per language against a public health authority that publishes for patients, then checked against how Flo and Clue render the same term. That is 864 cited entries. Store metadata was researched natively rather than translated, because the German subtitle and the English one share no concept. We stopped at ten languages honestly: Instrument Sans is Latin only, and right to left would mirror the strip, which is a timeline.
We also skipped the $25,000 push notification category. Qualifying meant sending cycle timing through someone else's server, which breaks the one promise the product is built on.
What we learned
Deletion is a design method, but every refusal needs a replacement. The only one that hurt was the one we had not replaced yet.
Log in or sign up for Devpost to join the conversation.