Home / Blog / Design

Design

Widget design notes: five moments a day, and no delete button

The Home Screen widget is the most outgoing part of PicLoom: it stands in for the app on your Lock Screen and first pages, telling you how the library is doing. A few design decisions worth recording.

Five moments a day

The small widget isn't one static card but a schedule that rotates with the clock:

The same "progress" reads as motivation at 9 a.m. and as pressure at 10 p.m. Putting information in the right moment matters more than fitting all the information on one screen.

Eleven states and fallback chains

The widget's only input is a snapshot the main app writes into the App Group: progress, streak, memories, story summary, thumbnails compressed to 512px. If any piece is missing, no slot may show an empty panel — so every slot has a fallback chain: no memory falls back to story visuals, no story falls back to a getting-started card. All eleven states were screenshot-archived and verified one by one.

Photo previews are prepared by the app. The keep action updates the shared transactional ledger and verifies Pro through StoreKit. Photo permission and actual deletion remain in the app.

Why there's no delete button

Deletion happens only inside the app, behind the iOS system confirmation.

That rule was set on day one. Sorting happens in a light state of mind; deleting deserves a deliberate confirmation. Removing delete from the Home Screen puts physical distance between a slip of the finger and a goodbye. The widget's only write action is "✓ Keep" — an iOS 17 interactive widget AppIntent that writes straight into the shared decision store, without even opening the app.

Deep links and state recovery

Each slot deep-links into the matching screen via photokeep://: a memory to the calendar, the nudge to sorting, a story to the story page. On the app side, snapshots are rewritten and timelines reloaded whenever decisions change or a story is generated, and after a process restart the latest story summary is restored from the local cache, so the line you just read doesn't vanish.

For the technical boundaries behind the story summary, read the previous post: how the daily story gets written.