Full-stack software engineer with production experience across JavaScript, REST APIs, and
AWS cloud services. Shipped List Total, an independent iOS app, to the App Store. Based in
Frisco, Texas.
SHIPPED
iOS · APP STORE · 2026 · $2.99
List Total
A running total for the lists you already keep. Add a price and quantity to any Apple
Reminders item and List Total does the math as you shop. No account, no server, and
nothing to migrate.
You find out what a shopping trip costs at the register, which is the one moment you
can no longer do anything about it. Every other app that attempts to solve this asks
you to abandon the list you already keep in Reminders and re-enter it somewhere else
behind a sign-up.
ARCHITECTURE
SwiftUI throughout, with EventKit as the only data layer. There is no database and no
backend: Apple Reminders is the store, so lists keep syncing through the
user's own iCloud account exactly as they did before installing the app. Reminders has
no price or quantity field, so cost and count are encoded into the item's existing
text and parsed back out on read, then totals and remaining-to-buy are derived values
computed in the view model rather than stored state. Shipped for iOS 26 with zero data
collection.
THE HARD PART: STRUCTURED DATA IN A STORE I DON'T OWN
The product promise: keep using Reminders. This is also the hardest
engineering constraint in the app. I need typed numbers per item, and Reminders gives
me strings. I can't add a column, I can't migrate anyone, and the user can edit the
same list in Apple's app, on a Mac, or from Siri while my app is open. Three things
followed from that:
01The encoding has to be legible to humans, not just to me.
Whatever I write into a reminder is text a user will see in Apple's own app
forever. So the format reads as something a person would have typed, and an item
that has never been touched by List Total is simply an item with no price. It is
not an error state and not a migration prompt.
02Parsing is forgiving; writing is strict. The reader accepts the
sloppy variants people actually type and ignores anything it can't understand,
rather than throwing. Every write goes back out in one canonical form. Unparseable
text is never destroyed. Worst case an item contributes nothing to the total,
which is a visible, correctable outcome instead of silent data loss in someone's
shopping list.
03Treat the store as the source of truth. Totals are computed from
whatever EventKit currently reports and the app refreshes on external change
rather than assuming it owns the list. That's what makes iCloud conflicts a
non-event: I have no second copy that can disagree.
The payoff is the thing I'd defend in review: the app has no onboarding, no account,
no sync layer, and no data of its own to lose.
WHAT I'D DO DIFFERENTLY
Write the encode/decode round-trip tests before the UI. It's the one piece where
a bug corrupts data a user actually cares about, and it's trivially testable in
isolation. I built it alongside the interface instead, which meant I was verifying
parsing by shopping.
Decide the permission story on day one. EventKit access is the entire app:
without it there is nothing to show, so the denied and not-yet-asked states
deserved to be designed screens from the start rather than something I handled
once the happy path worked.
Ship the paid tier with a way to try it. $2.99 with no free path means the App
Store page has to do all the convincing, and I have no data on how many people
bounced because they couldn't see a total on their own list first.
EXPERIENCE
2022 — PRESENT
Feb 2026 — Present
Frisco, TX
Independent iOS Developer & Software Engineer
Self-Employed
Designed, built, and shipped List Total to the App Store, a running total for Apple
Reminders lists.
Shipped a SwiftUI app built entirely on EventKit: Apple Reminders is the data
store, so lists sync through the user's own iCloud with no account, no backend,
and zero data collection.
Designed a human-legible encoding for price and quantity inside Reminders'
existing text fields, with forgiving reads and canonical writes so external edits
from Apple's app or Siri never corrupt a list.
Owned the full product lifecycle across SwiftUI, EventKit, and iOS 26:
architecture, UI/UX, App Store release, and post-launch iteration.
May 2025 — Feb 2026
Dish account · Contract
Software Engineer
Tech Mahindra
Event-driven architecture across production AWS systems.
Designed and built event-driven architectures on AWS with EventBridge —
configuring buses, rules, targets, and schemas.
Integrated Lambda, Step Functions, SQS, SNS, and DynamoDB to meet architecture
best practices and improve reliability.
Delivered dead-letter queue, retry, and error-handling improvements that
increased the reliability of event-driven services.
Coordinated across engineering teams to support active releases with minimal
downtime.
Jan 2024 — May 2025
Parental Leave
Took leave following the birth of my child.
Sept 2022 — Jan 2024
Plano, TX
Software Engineer
Dish Network
Converted from contractor to full-time on demonstrated domain expertise.
Recognized for mobile device management domain expertise and hired
full-time.
Identified and resolved production issues through proactive monitoring, improving
system stability.
Partnered with the architecture team to bridge system-design intent and business
requirements.