Annotify 1.17 is live. The mosaic tool was still on a legacy capture API — rebuilt it on Apple's ScreenCaptureKit for better stability on macOS 14 and later. Also fixed a lingering selection outline after deselecting with the hand tool. #buildinpublic#indiedev#macOS#AppStore
#buildinpublic: almost moved CalSyncAlert's subtitle to "event reminder" — 5x the searches. But the top 5 there all have 11k–171k reviews. Can't win that yet. So I'm anchoring "calendar alarm": smaller, but actually rankable. Take the hill you can take. #indiedev#iOS
Not every meeting needs to ring — but turning off the whole app feels like overkill. CalSyncAlert v1.9 — tap the bell on any event to skip just that alarm. Widget reflects it; the rest of your calendar keeps ringing.
https://t.co/ApxYJ7v4hc
#indiedev#iOS#buildinpublic
@SamurAI_3x9 Exactly the table I was missing — thanks for running it on your own time. The 61→36 catch is the part I'd have gotten wrong. Honest call: anchor "calendar alarm" now (that 0-review #5 is the way in), grow into "event reminder" as reviews build. That locks my subtitle. 🙏
Per-event alarm skip: easy.
Widget mirroring that skip in real time: hard.
CalSyncAlert pipes the skip state through App Groups, so the toggle and widget can't lie to each other.
https://t.co/1y9PWPGNIC
#indiedev#iOS#buildinpublic
IntervalTimer Duo 1.2 is live.
Spent it on the part nobody screenshots: the trial→upgrade flow. Tap a locked feature, upgrade opens instantly; when the 14-day trial ends it shows once, not every launch. Plus iPad timer alignment + fixes.
https://t.co/wlhAAeQ4LR
#buildinpublic
@giftpilotapp Likewise — the UX needle is the whole game here, and half the battle was just refusing to ship the version that quietly lies. Appreciate you following the thread this far. Rooting for your build 🙌
@SamurAI_3x9 Yes please — exactly the comparison I keep guessing at. "event reminder" is the term I'm most tempted to move CalSyncAlert's subtitle toward, but I've never seen POP vs downloads/day side by side to justify it. If you drop that table here it decides my next subtitle. Thanks.
@ilan_hertz Right — the real question underneath: what counts as a resolution event? A rep tapping "done" is a claim, not a resolution — that just moves "dismiss" down a layer. State should clear only when the SLA's promise is observable — resolution has to be verifiable, not asserted.
For weeks I wrote about "listening over announcing."
Today shipping a product built on that idea ✨
Verbr — feedback platform for indie apps. Anonymous posts, votes, public changelogs.
Free to start → https://t.co/5h7IqCsx6E
#indiedev#buildinpublic
@hivinz_ "Whole point of the architecture" — yeah, that's the part I wish Apple's docs said out loud. Once you accept widgets as a separate process, the shared container stops feeling like a workaround and starts feeling like the contract.
@Altawesomeee "Only reliable path" matches my own takeaway exactly. The framing came from frustration — I kept trying to keep widget state derived from the app and it always drifted on the next launch. Good to know I'm not the only one who walked into that wall.
@jaick_pp Throttle window is the part nobody documents until shipping. Splitting optimistic local + best-effort widget reload makes the contract honest — app stops promising what the widget can't guarantee. "Widgets are eventually consistent, app UI isn't." Thanks for naming this.
@ilan_hertz Amber → red — color is cheaper attention than a notification. But pin-to-top raises a question: who owns the clock? If the rep can dismiss it, the asymmetry collapses. Only the resolution clears it — then the clock isn't a UI affordance, it's a state machine.
@SamurAI_3x9 Appreciate this — "event reminder" POP 43 is concrete enough to act on. Hadn't checked the "calalarm" autocomplete cluster yet, that's on me. Slotting it into the next subtitle iter and benchmarking the four named apps first. Thanks for running this on your own time.
@giftpilotapp Thanks — surfaced granularity vs. buried-in-settings was the trade-off I kept stuck on. The "polished" part is the widget mirroring the skip state in real time. Extra App Groups wiring, but non-negotiable once you surface the bell. A toggle the widget contradicts is a UI lie.
@ilan_hertz Agreed — visibility has to be asymmetric: silent on track, only breach surfaced. Two knobs: (1) deadline stamps the moment Y is clicked — rep can't quietly extend it, (2) breach reads "X min late and counting," not "missed." Static reads like a log; a counter is an open wound.
@jaick_pp Honest: not unified. IntervalTimer = fastlane snapshot (iOS+Mac, 5 langs). CalSyncAlert iOS = XCUITest + Pillow for captions (4 langs). Annotify/Taskin/Habiting are still hand-rolled. The design layer is per-app, so shared pipelines keep losing to per-app tweaks.
@Altawesomeee Thanks — that's exactly the framing I was after. Burying it in Settings was the easy ship; surfacing the bell meant also wiring skip state through to the widget via App Groups. Once you commit to surfaced, the widget has to mirror — otherwise it's a UI lie.
@ilan_hertz Right — gaming the lane is exactly what kills it. The fix I keep coming back to: make Y a commitment, not a shortcut. After Y, the user sees a visible SLA ("response within 1h"). Misses get logged as broken trust, not a free pass. Y = both sides are on the clock.