• Stars
    star
    851
  • Rank 51,439 (Top 2 %)
  • Language
    Dart
  • License
    GNU General Publi...
  • Created over 2 years ago
  • Updated 18 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

💸 An app created to help users manage a budget and purchases

Cashew

Icon


Promo banner


Cashew is a full-fledged, feature-rich application designed to empower users in managing their finances effectively. Built using Flutter - with Drift's SQL package, and Firebase - this app offers a seamless and intuitive user experience across various devices. Development started in September 2021.


Feature

Cashew was featured on YouTube! Thanks Sam Beckman!

Review Video

Release

Check out the official website!

This application is available on the App Store, Google Play, GitHub and as a Web App (PWA).

Changelog

Changes and progress about development is all heavily documented in GitHub commits and in the changelog

Key Features

💸 Budget Management

  • Custom Budgets and Time Periods: Set up personalized budgets with flexible time periods, such as monthly, weekly, daily, or any custom time period that suits your financial planning needs. A custom time period is useful if you plan on setting a one-time travel budget!
  • Added Budgets: Selectively add transactions to specific budgets, allowing you to focus on specific expense categories.
  • Category Spending Limits per Budget: Set limits for each category within a budget, ensuring responsible spending.
  • Past Budget History Viewing: Analyze your spending habits over time by accessing past budget history, enabling comparison and tracking of financial progress.
  • Goals: Create spending and saving goals and put transactions towards different purchases or savings. Track your progress towards achieving your financial goals.

💰 Transaction Management

  • Support for Different Transaction Types: Categorize transactions effectively based on types such as upcoming, subscription, repeating, debts (borrowed), and credit (lent). Each type behaves in certain ways in the interface. Pay your upcoming transactions when you're ready, or mark your lent out transactions as collected.
  • Custom Categories: Create personalized categories to organize transactions according to your unique spending habits. Search through multiple icons and select the default option as expenses or income when adding transactions.
  • Custom Titles: Automatically assign transactions with the same name to specific categories, saving time and ensuring consistency. These titles are stored in memory and popup when you add another transaction with a similar name.
  • Search and Filters: Easily search and filter transactions based on various criteria such as date, category, amount, or custom tags, enabling quick access to information.
  • Easy Editing: Long-press and swipe to select multiple budgets, edit accordingly as needed or delete multiple at once.

💱 Financial Flexibility

  • Multiple Currencies and Accounts: Manage finances across different currencies and accounts with up-to-date conversion rates for accurate calculations and effortless currency conversions. The interface shows the original amount added and the converted amount to the selected account.
  • Switch Accounts and Currencies with Ease: On the homepage, easily select a different account and currency and everything will be converted automatically in an instant.

🔒 Enhanced Security and Accessibility

  • Biometric Lock: Secure budget data using biometric authentication, adding an extra layer of privacy.
  • Google Login: Conveniently log in to the app using your Google account, ensuring a streamlined and hassle-free authentication process.

🎨 User Experience and Design

  • Material You Design: Enjoy a visually appealing and modern interface, following the principles of Material You design for a delightful user experience.
  • Custom Accent Color: Personalize the app by selecting a custom accent color that suits your style, or follow that of the system.
  • Light and Dark Mode: Seamlessly switch between light and dark themes to optimize visibility and reduce eye strain.
  • Customizable Home Screen: Tailor the home screen layout and widgets to display the financial information that matters most to you, providing a personalized and efficient dashboard.
  • Detailed Graph Visuals: Gain valuable insights into spending patterns through detailed and interactive graphs, visualizing financial data at a glance.
  • Beautiful Adaptive UI: A responsive user interface that adapts flawlessly to both web and mobile platforms, providing an immersive and consistent user experience across devices.

☁ Backup and Syncing

  • Cross-Device Sync: Keep budget data synchronized across all devices, ensuring access to financial information wherever you go.
  • Google Drive Backup: Safeguard budget data by utilizing Google Drive's backup functionality, allowing easy restoration of data if needed.
  • Discontinued: Budget Sharing (Alpha): Collaborate with family members, friends, or colleagues by sharing budgets, enabling collective tracking and management of shared expenses.

💿 Smart Automation

  • Notifications: Stay informed about important financial events and receive timely reminders for budget goals, transactions, and upcoming due dates.
  • Import CSV Files: Seamlessly import financial data by uploading CSV files, facilitating a smooth transition from other applications or platforms.
  • Import Google Sheets: Seamlessly import Google Sheets tables, quickly importing many transactions from a spreadsheet.
  • Unsupported: Auto Email Transaction Parsing (Beta): Automatically parse transaction details from email receipts, making expense tracking effortless and efficient.

Bundled Packages

This repository contains, bundled in, modified versions of the discontinued packages listed below. They can be found in the folder /budget/packages

Translations

The translations are available here: https://docs.google.com/spreadsheets/d/1QQqt28cmrby6JqxLm-oxUXCuM3alniLJ6IRhcPJDOtk/edit?usp=sharing. If you would like to help translate, please reach out on email: [email protected]

To Update Translations

  1. Run budget\assets\translations\generate-translations.py
  2. Restart the application

Developer Notes

Android Release

  • To build an app-bundle Android release, run flutter build appbundle --release

Note: required Android SDK.

iOS Release

  • To build an IPA iOS release, run flutter build ipa

Note: requires MacOS.

Firebase Deployment

  • To deploy to firebase, run firebase deploy

Note: required Firebase.

GitHub release

Scripts

deploy_and_build_windows.bat

  • Deploy to Firebase and build the apk and appbundle

open_release_builds.bat

  • Opens the location of the built apk and appbundle

update_translations.bat

  • Downloads the latest version of Cashew translations. Runs budget\assets\translations\generate-translations.py

Develop Wirelessly on Android

  • adb tcpip 5555
  • adb connect <IP>
  • Get the phone's IP by going to About Phone > Status Information > IP Address

Migrate Database

  1. Make any database changes to the schema and tables
  2. Bump the schema version
    • Change int schemaVersionGlobal = ...+1 in tables.dart
  3. Make sure you are in application root directory
    • cd .\budget\
  4. Generate database code
    • Run dart run build_runner build
  5. Export the new schema
  6. Generate step-by-step migrations
    • Run dart run drift_dev schema steps drift_schemas/ lib\database\schema_versions.dart
  7. Implement migration strategy
    • Edit await stepByStep(...) function in tables.dart and add the migration strategy for the new version migration

Get Platform

  • Use getPlatform() from functions.dart
  • Since Platform is not supported on web, we must create a wrapper and always use this to determine the current platform

Push Route

  • If we want to navigate to a new page, stick to pushRoute(context, page) function from functions.dart
  • It handles the platform routing and PageRouteBuilder

Wallets vs. Accounts

  • Wallets have been been renamed to Accounts on the front-end but internally, the name Wallet is still used.

Objectives vs. Goals

  • Objectives have been been renamed to Goals on the front-end but internally, the name Objectives is still used.

More Repositories

1

Allowance

🧮 A simple spending tracker in the form of a calculator-like interface
Dart
66
star
2

ACNH-Pocket-Guide

🌳 A mobile application created to help users with tracking collections and progress through Animal Crossing
JavaScript
24
star
3

GooglyCalendar

📅 Turns your Google Calendar into a task list!
JavaScript
9
star
4

AnimalCrossingNH-App

🌳 A mobile application used to help with tracking collections and progress through Animal Crossing. This application is no longer maintained. See https://github.com/jameskokoska/AnimalCrossingNH-App-React for the new version
Dart
8
star
5

react-native-scrollable-bottom-sheet

📃 A simple bottom sheet popup modal that supports scrollable content for React Native.
TypeScript
5
star
6

CAPTCHA-Solver

🔠 A CAPTCHA solver using machine learning with a bidirectional LSTM model
Python
5
star
7

Dementia-Inpatient-Virtual-Presence

Virtual Presence Software for Agitated Inpatients with Dementia
Dart
3
star
8

ACNH-Pocket-Guide-Catalog-Scanner

📸 Scan your ACNH catalog with your phone and import it into ACNH Pocket Guide automatically!
Dart
3
star
9

Map-Connections

🗺️ A vanilla JavaScript library made for easily showing global connections visually on a webpage
JavaScript
2
star
10

ExcelPrograms

🗂️ A few programs created in Google Sheets, also works in MS Excel. Includes: bill splitter, collaborative checklist, mark tracker, course selection helper
2
star
11

rvl

💻 University of Toronto Robot Vision & Learning (RVL) website backbone.
JavaScript
2
star
12

jameskokoska

📚 A readme used for my GitHub main profile page
2
star
13

VerilogPlaygroundFPGA

🖥️ Various programs written in Verilog
Verilog
1
star
14

Reversi

🎲 A Reversi game made using C and console output
C
1
star
15

NewTabPage

🌇 A web page with various shortcuts, messages, and animations which can be used as a New Tab page
CSS
1
star
16

NetworksFileTransfer

📶 A simple client and server implementation that transfers a file across a socket
C
1
star
17

TicTacToe-Cpp

❌⭕ A TicTacToe game written in C++, accesses a graphical interface server
C++
1
star
18

MaterialWebsite

🎨 A website following material guidelines. Designed and programmed as fast as possible as a 'race against time'.
HTML
1
star
19

SimpleChat

💬 A straight forward natural understanding reply bot, pulling information from various sources.
Python
1
star
20

ACNH-Pocket-Guide-Website

🌳 A website showing off the ACNH Pocket Guide App
HTML
1
star
21

NetworksMessaging

📠 A simple chat messaging program using UNIX TCP sockets across a local network with several features.
C
1
star
22

MATLABPlayground

📈 Various programs written in MATLAB
MATLAB
1
star
23

ARMPlayground

💾 Various programs written in ARM
Assembly
1
star
24

Walnut

📚 A web application assisting students with course selection at UofT
JavaScript
1
star
25

DontForgetTheLyric

🎤 A web based application recreating the Don't Forget The Lyric game
HTML
1
star
26

jameskokoska.github.io

🌎 My personal website source code
CSS
1
star
27

TTC-Map

🚇 A TTC transit map build, contains code for programming Arduino controlling LEDs
C++
1
star
28

ECE297-MapApplication

🗺️ A map application written in C++ from a very low level API reading from an OpenStreetMaps database
1
star
29

DiscordBot

🤖 Discord bot containing various utility and fun commands
Python
1
star
30

PianoTiles-C-DE1-SoC

🎹 A Piano Tiles game written in C, for the DE1-SoC FPGA board, with VGA graphics output and keyboard input
C
1
star
31

BoldWebsite

⛰️ A website designed with a bold front end style in mind
CSS
1
star
32

PictureBrowser

🖼️ Creates an interface to select and 'like' pictures from a large file base
Python
1
star
33

PianoTiles-Verilog

🎹 A Piano Tiles game written in Verilog, for the DE1-SoC FPGA board, with VGA graphics output and keyboard input
Verilog
1
star
34

TicTacToe-C

❌⭕ A TicTacToe game written in C
C
1
star
35

KLWP-Background

🏠 A homescreen LWP for Android using the KLWP application
1
star
36

ACNH-Catalog-Scanner-Web

📸 Scan your ACNH catalog using game recordings and import it into ACNH Pocket Guide automatically!
JavaScript
1
star
37

DesignWebsite

👋 A resume like website following different design rules. Designed around animations and a modern clean style.
CSS
1
star