
UNNotificationRequest carries no type field, so once a notification is delivered the app can't tell a reminder from a brief from a nudge. Every row in the feed rendered with a person avatar whose initial was just the first letter of the copy, producing an avatar labelled "F" for "Fresh from your meeting?". I introduced a notification-kind model reconstructed from the identifier namespace and reminder-only payload keys, which drives a real glyph per kind. It also carries an isPostEvent flag that hides retrospective nudges from the feed until they've actually fired, because a "summarise your meeting" row listed 14 hours ahead of the meeting reads as nonsense.capture(name:properties:) API anywhere in the app. Every event and every property key that can leave the device is declared as a typed enum in a single file, with associated values constrained to booleans, counts, and enum labels so call sites physically cannot smuggle content into properties. The absolute rule is that field names may be sent and field values never are. A dedicated test acts as the CI gate and fails the build if any event or property key outside those closed lists ever appears.GeometryReader. Screen-bounds lookups are banned outright, so layouts survive every device size and dynamic type setting.What the client had to say
Rania is an absolute joy to work with. She's responsive, has great ideas, is flexible as things change, and oozes integrity. Combined with her technical abilities, she's a really great partner to have by your side as you figure things out.
Catherine Madden
Jun 12, 2026, Client
Posted Aug 15, 2026
Voice-first iOS app that turns speech into structured, searchable person profiles. AES-GCM client-side encryption so the server never reads user data, LLM intent routing for capture vs recall, pgvector semantic search, and allowlisted analytics that can't leak content. In beta.