I ship Composed alone, and I try to write one of these posts every week — a plain account of what actually changed in the app, why, and how it feels now. No roadmap theater. No “we’re excited to announce.” Just the diff.

Here is what landed this week.

An iPhone sitting on a wooden desk in soft morning light next to a coffee cup

A quieter first run

For a while the paywall showed up too fast. You would sign in, the showcase slides would start, and within a few beats the price sheet was already sliding up. Some people bounced. Fair.

I rebuilt the entire first-run sequence this week. The onboarding is now a ten-slide showcase that takes its time — a slide about voice capture, one about the unified Today view, one about prep tasks that generate before an event, one about departure timing that updates based on where you actually are. The price sheet waits until the end, and it waits a beat longer than it used to so it does not feel like an ambush.

I also went through every slide with the language rules open on the other monitor. A few small but important edits:

  • The deadline slide no longer flashes a yellow-on-yellow contrast miss. It reads “A week out,” “A few days out,” and “This week” — the three moments I actually want to tell you about.
  • The list slide used to show a foil card with a harsh shame counter at the top — the kind of language I have sworn off, the shame-stick school of productivity. It now shows two calm rows: “Added 3 days ago” and “Added 5 days ago.” Same information. Different feeling.
  • The word “reminders” is gone from the user-facing copy. They are reminders now, everywhere. This was already the rule; it was just leaking into a few corners of the app.

Small stuff. But onboarding is the one place a new person meets the whole system in three minutes, so every wrong word lands harder there than anywhere else.

Coach marks on the main screens

This is the change I am most excited to watch this week.

After onboarding, the first time you land on Today, Add, Notes, Month, or Settings, a small card drifts in with one sentence about what that screen does. Tap it to dismiss, or let it fade out on its own after six seconds. Each card fires exactly once per install, then never again.

The Today card says: “Tap + or just say it. Try: ‘Coffee with Sarah tomorrow at 2.’”

That is it. The whole thing. No tooltips stacked on top of tooltips. No arrow pointing at the tab bar. Just a single honest sentence letting you know what the quickest path looks like, then out of your way.

The Notes card is my favorite: “Your notes link to events. Try creating one for your next trip.” That sentence is doing a lot of work. New users do not usually guess that Composed Notes are woven into the event graph — that writing “hotel confirmation 3X72K” in a trip note will show up on the event itself. A coach mark is a small place to say that out loud.

I built the component as a single SwiftUI modifier — .coachMark(key:message:) — so it can be applied to any screen in one line and the state is persisted in a coachMark_<key>_seen flag. Per-screen. Per install. Never shown twice.

A close-up of an iPhone screen showing a calm, minimalist app interface

Redeem codes now work at the paywall

Smaller but worth noting. I had built a RedeemCodeSheet a while back for gifting Pro to friends, early supporters, and the Composed for ADHD folks I was sending access to manually. The sheet existed in the code but was never wired into the build target, so the entry button at the bottom of the paywall did nothing.

It is live now. If you have a redeem code from me, you can tap “Redeem code” at the bottom of the paywall, paste it in, and get Pro instantly without running through the App Store purchase flow.

This matters for one reason: it means I can hand codes to people I know are building things with Composed in the wild, without asking them to navigate the App Store’s redeem flow, which is buried three menus deep and always feels like homework.

Under the hood: the subscription state machine

One fix I want to mention even though it is technically invisible: if you ever get a refund, your app now correctly flips back to the free state the next time you open it. Before this week, a refunded subscription could leave you in an in-between state where the paywall would never come back. Not common, but real, and it is fixed.

Same category: if you were already a Pro user on the old build and updated, there was a half-second flicker where the paywall would try to show itself before the app realized you already paid. Gone. The app now waits for subscription status before deciding what to render, so the transition is clean.

What’s next

The next thing on my desk is Google Calendar sync write-back improvements — specifically around how Composed tags events it created versus events it is only reading. That is the kind of work that is either invisible or the cause of every bug you have ever had with a planning app, depending on how careful I am. So it gets its own week.

If you want to follow along in real time, I post daily from @jessemeria on Instagram — small moments, not screenshots of menus. And if you are not on the email list yet, that is where the slower updates live, the ones I write once a week when the dust settles.

Back to it.


This is part of the “Composed in the Wild” series — a weekly honest log of what actually shipped in the app. Previous entry: I Scheduled a Dentist Follow-Up in 10 Seconds.