Built on the calendar day
Dates are stored as calendar text, so a bill due on the 28th shows on the 28th wherever the user is.
Engineering detail
Money in a budget moves by the calendar day. Rent paid on 28 February belongs to 28 February wherever the user happens to be, so the app treats a date as a date: never a timestamp, never shifted by a timezone.
Every user-facing date is stored as plain YYYY-MM-DD text. It has no timezone to drift, sorts chronologically, and reads the same in the database, the API and the UI.
The rule holds across the stack. The API returns each date exactly as it was entered, and the date-sensitive tests run in three timezones on every build.






