Expense log app (Tallybook)
Local-first personal expense log for iOS and Android: keypad capture in integer minor units, categories with monthly budgets, month overview with accessible chart and table, correction history, recurring expenses, search/filters and CSV export. No bank connections.
Creator ($9 a month) includes up to 20 new premium families a billing month (5 in any 24 hours). Already a member? Open your library.
- Version
- 1.0.2
- Platforms
- iOS, Android
- Framework
- expo
- Archive
- 1.9 MB 128 files
Screens from the build
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)
(open full size)App screenshots may come from an Expo web export; those are labelled as such and are not native verification. Native runs are listed under Tested with their own status.
What it does
- log expense with amount keypad
- categorize and budget monthly
- review month by category
- correct an entry with history
- delete with undo and restore
- recurring expenses
- search and filter by date range and category
- export CSV via share sheet
- persist across restarts
Screens
ledgerMonth total vs budget, search, filters, date-grouped historyexpense-detailExpense detail with correction history, duplicate, deletecomposeKeypad-first create/edit with validation and unsaved-changes guardfilterDate range presets/custom range and categories with live countoverviewSpend by category vs budget as bars or data tablesettingsCurrency, appearance, export, sample data, erasecategoriesCategories and budgets listcategory-editName, budget, icon, colour, archive, deleterecurringRecurring rules with next daterule-editWeekly/monthly rule editor, pause, deletedeletedRecently deleted with restore/emptyeraseTyped-confirmation erase of all data
States covered
- Loading
- Empty
- No results
- Error
- Validation
- Destructive confirm
- Undo
- First run
- Deleted elsewhere
Stack and versions
| expo | 57.0.25 |
|---|---|
| expo-router | 57.0.23 |
| react | 19.2.3 |
| react-native | 0.86.3 |
| typescript | 6.0.3 |
| expo-sqlite | 57.0.3 |
| jest | 29.7.0 |
| jest-expo | 57.0.5 |
| @testing-library/react-native | 14.0.1 |
Commands:
| install | npm ci |
|---|---|
| dev | npx expo start |
| test | npm test |
| typecheck | npx tsc --noEmit |
| build | npx expo prebuild && npx expo run:ios | npx expo run:android (or EAS Build) |
| e2e | none automated; native script in docs/VERIFICATION.md |
| web_preview | npx expo export -p web --output-dir dist && node scripts/preview-screenshots.mjs |
Tested
| Check | Platform | Tool | Result | Date |
|---|---|---|---|---|
| dependency pins for Expo SDK 57 native modules (react-native-reanimated 4.5.1, react-native-worklets 0.10.1, react-native-gesture-handler 2.32): expo install --check, npm audit 0, jest, tsc, expo-doctor, Metro iOS + Android bundles | Node | npm 11 + expo install --check | Pass | 2026-09-26 |
| unit + screen tests (40) | Node | jest 29.7.0 + jest-expo 57.0.5 + @testing-library/react-native 14.0.1 | Pass | 2026-09-26 |
| typecheck | Node | typescript 6.0.3 (tsc --noEmit) | Pass | 2026-09-26 |
| expo-doctor | Node | expo-doctor 1.20.4 | Pass | 2026-09-26 |
| native project generation (expo prebuild --no-install) | Node | expo 57.0.25 prebuild | Pass | 2026-09-26 |
| web export preview screenshots (not native verification) | Web app | expo export -p web + Playwright 1.56 Chromium | Pass | 2026-09-26 |
| fresh-copy reproduction (npm ci, npm test, tsc) | Node | npm 10.9.7 / node 22.22.2, cold Jest cache | Pass | 2026-09-26 |
| Release build of this archive: install, launch, relaunch, dark mode; no crash reports | iOS | iOS Simulator (iPhone 17 Pro, Xcode 27) | Pass | 2026-09-26 |
| Release build of this archive: install, launch, relaunch, dark mode; no crash in logcat | Android | Android Emulator (Pixel 9) | Pass | 2026-09-26 |
Not included
- No bank, card or Open Banking connections: all entries are typed by the person
- No currency conversion: totals and budgets use the default currency; other currencies are listed separately
- No account, cloud sync or backup service: data is local to the device (CSV export is the portable copy)
- No notifications, receipt capture, biometric lock or at-rest encryption
- No analytics or network calls from app code
Each boundary comes with instructions for adding it in docs/INTEGRATION-BOUNDARIES.md.
Known limitations
- Native iOS/Android runs not yet verified by the author (pending custodian run on a Mac)
- Web export is a layout preview only (sql.js + localStorage), not a supported platform
- Budgets are monthly, per category, in the default currency only
- Phone layout on tablets; no list-detail split
- JS tab bar (native tabs are unstable in SDK 57)
- Expenses only: no income, transfers or split transactions
- Tests need Node >= 22.13 (@testing-library/react-native 14)
Licence
Use in unlimited end products incl. client/commercial; no resale/redistribution as a template, kit or dataset; no ML training. Survives cancellation for delivered versions.
Full terms: Motif template licence. Open-source parts keep their own licences (licenses.json, id lic-premium-expense-log-1-0-2).
Ask your agent
Use Motif to activate the premium-expense-log template and download it. Then adapt it for a climbing gym's route log: replace the content and imagery, keep the design tokens and every state in docs/STATE-MATRIX.md, and run check_design_contract before you finish.Motif guides applied
app-design-gate-workflow · app-category-finance · app-transplant-test-no-generic-template-app · app-template-tab-fab-onboarding-budgets · app-visual-identity-system-five-decisions · app-functional-truth-rulings · app-screen-state-matrix · app-empty-states · app-destructive-actions-undo-vs-confirm · app-trash-and-soft-delete · app-swipe-actions-with-accessible-alternatives · app-form-validation-feedback · app-input-types-and-autofill · app-save-model-and-unsaved-changes-guard · app-search-filters-and-no-results-recovery · app-local-persistence-choice-expo · app-sqlite-data-model-offline-first · app-tab-bar-implementation-expo-router · app-theming-light-dark-system · app-dynamic-type-and-font-scaling · app-touch-targets-and-spacing · app-react-native-accessibility-semantics · app-safe-areas-and-edge-to-edge · app-onboarding-first-value · app-haptics-usage-guidelines · app-back-navigation-ios-android · app-platform-conventions-vs-brand · sys-chart-selection-by-question · sys-accessible-chart-text-alternative-and-data-table · sys-honest-axes-and-lie-factor
Archive
SHA-256 060fc4af7cd91d92e8340851d417f78456aa4c60f66a2ecc80b0bc84f315b815