GithubHelp home page GithubHelp logo

serversideup / financial-freedom Goto Github PK

View Code? Open in Web Editor NEW
1.7K 1.7K 142.0 4.03 MB

๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ An open source alternative to Mint, YNAB, and more. Stay on budget and build wealth without sacrificing your privacy.

Home Page: https://serversideup.net/open-source/financial-freedom/

License: GNU General Public License v3.0

PHP 43.51% Vue 54.05% Blade 0.16% JavaScript 2.00% CSS 0.27%
budgeting finance financial-independence laravel vuejs

financial-freedom's People

Contributors

danpastori avatar jaydrogers avatar luzpaz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

financial-freedom's Issues

Ability to Delete Transactions

These should be soft deletes. We should also allow for checks on import that transactions that are deleted aren't re-imported.

Top 5 Tags For Month

Make a dashboard widget that shows the user their top 5 used tags for the month and the sum of the expenses.

Build Issues Templates

We need to build issue templates for our GitHub repo. This will help organize the process of managing user requests.

The following are the templates we need to build:

  • Feature Request
  • Bug Report
  • Question

Build Policies & Request Validations for Resources

We need to block access for the following resources through Policies:

  • Transactions
  • Accounts

The policy will block unauthorized User access.

We also need to build request validations for resources so invalid data does not get entered. The following resources need request validations:

  • Transactions
  • Accounts

Add Notification System

Description

Right now when events happen there is no way to notify the user. We need to add a simple notification system where an action can dispatch an event that let's the user know what happened in the system.

What We Need To create

A Notification Banner

This should show when the action is completed.
image

A Simple Reusable System

We should be able to reuse this for 3 types of notifications

  1. Success
  2. Failure
  3. Warning

Event Dispatch:
type : success, failure, warning (determines the icon)
title : The top heading
message : This will be the message to display to the user.

Example

EventBus.$emit('notification', {
  type: 'success',
  title: 'Transaction Created!',
  message: 'Your transaction for $34.53 has been added.'
});

Show Transactions For Account

We should have a table of all of the associated transactions for the account on the account screen. This will give a good top level overview of the account.

Design Standardized App States

We really need to tell the user what's going on. The following app states should be designed:

  • Empty -> If there's a table, or dataset that has 0 records, we should show an empty state
  • Loading -> Some processes take a second or two. Ensure these are displayed nice so the user knows what is going on.

Ability to Allocate Money in Accounts

This is one of my biggest frustrations with most financial budgeting software. You have an account that all of your transactions come out of. It's just a pool at this point. What if you are saving for a yearly or longer term purchase? This doesn't directly correlate to a transaction and you don't want to open a new account for each purchase you are saving for.

We need the ability to go into an account, and allocate a part of the account. Essentially these are "pseudo-transactions".

  • Set aside 12/month for Amazon Prime
  • Save for a down payment on a car
  • Save for Christmas Gifts. This should be allocated monthly, but spent once.

Create Request Validators and Policies for All Account Endpoints

Need to confirm that all account endpoints have proper request validators and policies for security.

Validators

  • POST /api/v1/accounts
  • PUT /api/v1/savings-accounts/{savingsAccount}
  • PUT /api/v1/cash-accounts/{cashAccount}
  • PUT /api/v1/checking-accounts/{checkingAccount}
  • PUT /api/v1/loans/{loan}
  • PUT /api/v1/credit-cards/{creditCard}

Policies

  • GET /api/v1/savings-accounts/{savingsAccount}
  • PUT /api/v1/savings-accounts/{savingsAccount}
  • GET /api/v1/savings-accounts/{savingsAccount}/transactions
  • GET /api/v1/cash-accounts/{cashAccount}
  • PUT /api/v1/cash-accounts/{cashAccount}
  • GET /api/v1/cash-accounts/{cashAccount}/allocations
  • GET /api/v1/cash-accounts/{cashAccount}/transactions
  • GET /api/v1/checking-accounts/{checkingAccount}
  • PUT /api/v1/checking-accounts/{checkingAccount}
  • GET /api/v1/checking-accounts/{checkingAccount}/allocations
  • GET /api/v1/checking-accounts/{checkingAccount}/transactions
  • GET /api/v1/loans/{loan}
  • PUT /api/v1/loans/{loan}
  • GET /api/v1/loans/{loan}/transactions
  • GET /api/v1/credit-cards/{creditCard}
  • PUT /api/v1/credit-cards/{creditCard}
  • GET /api/v1/credit-cards/{creditCard}/transactions

Parent and Child Tags

Description

The ability to create parent and child tags will be extremely helpful on narrowing down expenses precisely. By default, newly created tags should be parent tags. In the user's settings, they should be able to adjust tag colors and set parent tags. This will allow for expenses to be grouped accordingly and not double counted.

Create a README file

Problem

  • People do not understand what this is
  • It takes too many brain calories to understand what is going on

Solution

  • Create a detailed README file

Things to talk about:

  • What is this project about?
  • Why are your working on it?
  • Can they contribute?
  • How can they follow along?
  • How can they run this themselves?

Setup Nuxt Content site with Docs

ToDo

  • Configure domain financialfreedom.app
  • Have automated builds with CloudFlare
  • Ensure a spot is available for the landing page
  • Ensure the docs are loading

Merge Add Transaction Modals

Issue

Right now, we have two modals to add transactions. It'd be nice to have a single source of functionality, this way we can update and re-use the code in multiple places.

How it Happened

I was prototyping some code and needed a quick way to over-ride settings. For example, if I add a transaction on the /transactions page, the modal allows you to select the account. If I add a transaction on an individual account page, the account is pre-selected. We should allow for an account to be pre-set and the modal re-used from anywhere.

How to Solve

Merge functionality from:

  • /resources/js/Components/Accounts/AddTransaction.vue
  • /resources/js/Components/Transactions/AddTransaction.vue

Into

  • /resources/js/Components/Transactions/AddTransaction.vue

Need to Account For

  • Redirect after completion (might need to adjust the POST /api/v1/transactions endpoint)
  • Pre-selecting an account

Unable to register

Issue description

Unable to register. Input does not submit to server. Maybe this is due to an environment issue. The register.blade.php file looks like pretty boilerplate Jetstream. Wanted to log it in case other people experienced this issue too..

Environment

  • Local on mac, latest Chrome.

Steps to reproduce the issue

  1. Head to https://financial-freedom.dev.test/register
  2. Submit information
  3. See error

What is expected?

Information should submit

Link to where issue can be reproduced

Additional details / screenshots

Screen Shot 2022-04-08 at 5 14 41 PM

Abstract Functionality To Services

Description

The best way to make maintainable, re-usable code is to make small controllers and abstract the functionality to services. This allows for code re-use on certain routes.

We also need to comment out these services so we can easily guide contributors to how they are used.

Create Update Script

As Stoic Money progresses, an update script will be essential. This will allow users to update their app without overwriting their customizations.

What We Need to Account For

  • Database Seeders (categories, institutions, defaults)
  • Database Migrations (new features, tables, etc.)
  • Options

Approach
Create a command that when run takes into account the current version of the app and runs incremental upgrades.

php artisan stoic-money:update

Checks version and we have a script that loops until completely updated.
If we are on version 1.0 and going to 1.1 then we run 1 update.
If we are on version 1.0 and going to 1.9 then we run every update in between.

Heatmap of Spending by Day

Why is this helpful

Identifying patterns to show which days you spend the most.

How are we going to accomplish this?

  • Going to display this on the dashboard
  • Take the last 90 days of transactions and split them up by days
  • Make 3 grids for each group of 30 days. Each grid will be 6 x 5
  • Find the highest and lowest day to set our 0 and 100% points
  • Use the ratio of day to highest day to be the percentage alpha on the square.
  • Allow the user to exclude certain tags (such as rent cause it'd most likely be the highest day and not make much sense)

Remove references to Stoic Money

Issue description

After the name change from Stoic Money to Financial Freedom, there are still references in the code.

What is expected?

  • All references to Stoic Money should be changed to Financial Freedom

Additional details / screenshots

image

Deep Link Transaction Views

Issue

Every time you filter or change date on the list of transactions, then navigate away, you have to re-apply all filters in order to go back to your view. This is super annoying when you are trying to add receipts, work with calculations, etc.

Solution

Deep link all filters and dates when viewing transactions.

Examples

/transactions/?start-date=YYYY-MM-DD
/transactions/?start-date=YYYY-MM-DD&end-date=YYYY-MM-DD
/transactions/?tags=groceries,snacks&start-date=YYYY-MM-DD&end-date=YYYY-MM-DD

On Import, Prevent Duplicate Transactions

Issue

When importing a CSV, it's important to prevent duplications from happening.

How To Solve

  • Load transactions from earliest-to-ending date for the account being imported.
  • If a transaction exists that matches date and amount, flag on import with a warning icon.
  • Allow user to click "View Potential Duplicate" that pops up a modal and shows the individual transaction.
  • If the transaction is a duplicate, allow the user to select "Is Duplicate" and it will de-select the import.

Monthly Tag Breakdown Widget

Description

After #5 is completed, we can make a monthly breakdown of the expenses by tags. This widget will be displayed on the dashboard.

Account For

  • Tags on transaction splits
  • Parent & Child tags ( group total of all of the child tags on the parent tags )

Create and Solidify Dashboard Widget Plugins

Allowing users to create their own dashboard plugins really extends how far we can go with niching down on analysis. This will also allow for a ton of creativity

Thoughts on how this will work

  • Create a plugin directory that registers the plugin using JSON
  • Allow certain data to be injected into the widget and queried
  • Allow the user to organize their dashboard with the widgets
  • Allow settings to be saved (date ranges, accounts, etc) so they can further customize their experience.

Ability to Manage All Transaction Fields

Issue

Right now we can't change the name, date, or description on transaction fields. We should be able to edit all of these fields. There's no reason they can't be editable.

Fields that need edit capabilities:

  • Name
  • Date
  • Description

Check for Duplicate Imports

Check for duplicates on import of transactions. This should be a combination of Amount + Date when importing a CSV. With Plaid, we will have an ID.

Create App Level Search

We should utilize Meilisearch to create an app level search. We should search:

  • Accounts
  • Transactions

419 on register/login when attempting to setup fresh clone of repo.

Issue description

Get a 419 error when attempting to login/register. This may have something to do with sanctum. I tried updating my .env (SANCTUM_STATEFUL_DOMAINS) but no luck! Maybe the .env.example needs updating? I'm unsure.

It's a 100% something to do with the csrf token as if I disable (VerifyCsrfToken) middleware in kernal it kinda fixes the issue but then causes more issue.

Environment

  • Chrome/Mac.
  • I'm running just using valet and mysql hosted locally. (Unsure how to get docker running ๐Ÿคท )

Steps to reproduce the issue

  1. Install new freshly cloned code base.
  2. Setup application per usual and run it.

What is expected?

API should return results.

Link to where issue can be reproduced

Fresh install and attempting to register/login.

Additional details / screenshots

Screen Shot 2022-07-18 at 10 05 23 AM

Write Tests for All API Endpoints

Issue description

Tests will ensure that all endpoints behave correctly. We need to write thorough tests for all of the endpoints in the application.

What is expected?

Endpoints operate in a way that is expected. Bugs are minimized upon deployments.

Mariadb error

Issue description

During migration, an error occurred.

Environment

Steps to reproduce the issue

  1. run php artisan migrate

What is expected?

Finished migrating

Link to where issue can be reproduced

Additional details / screenshots

2022-08-09 12:56:48 6 [ERROR] InnoDB: preallocating 114688 bytes for file ./financial_freedom/sessions.ibd failed with error 2
2022-08-09 12:56:48 0x7fd26c0cd700  InnoDB: Assertion failure in file /home/buildbot/buildbot/build/mariadb-10.5.16/storage/innobase/fil/fil0fil.cc line 620
InnoDB: Failing assertion: fsize != os_offset_t(-1)
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to https://jira.mariadb.org/
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: https://mariadb.com/kb/en/library/innodb-recovery-modes/
InnoDB: about forcing recovery.
220809 12:56:48 [ERROR] mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.

To report this bug, see https://mariadb.com/kb/en/reporting-bugs

We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.

Server version: 10.5.16-MariaDB-1:10.5.16+maria~focal
key_buffer_size=134217728
read_buffer_size=131072
max_used_connections=2
max_threads=153
thread_count=2
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 467873 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Thread pointer: 0x7fd24c00de08
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0x7fd26c0ccd58 thread_stack 0x49000
Printing to addr2line failed
mysqld(my_print_stacktrace+0x32)[0x5628bb87e182]
mysqld(handle_fatal_signal+0x485)[0x5628bb2c2f35]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x14420)[0x7fd2830ed420]
/lib/x86_64-linux-gnu/libc.so.6(gsignal+0xcb)[0x7fd282bf100b]
/lib/x86_64-linux-gnu/libc.so.6(abort+0x12b)[0x7fd282bd0859]
mysqld(+0x643bd5)[0x5628baf79bd5]
mysqld(+0x656220)[0x5628baf8c220]
mysqld(+0x6564cd)[0x5628baf8c4cd]
mysqld(+0x65953b)[0x5628baf8f53b]
mysqld(+0x659889)[0x5628baf8f889]
mysqld(+0xe7fdc0)[0x5628bb7b5dc0]
mysqld(+0xdd94d4)[0x5628bb70f4d4]
mysqld(+0xe2fc4d)[0x5628bb765c4d]
mysqld(+0xe30392)[0x5628bb766392]
mysqld(+0xd33e28)[0x5628bb669e28]
mysqld(+0xcb2a61)[0x5628bb5e8a61]
mysqld(+0xcbb5a5)[0x5628bb5f15a5]
mysqld(+0xcc0f90)[0x5628bb5f6f90]
mysqld(+0x81785c)[0x5628bb14d85c]
mysqld(_Z17mysql_alter_tableP3THDPK25st_mysql_const_lex_stringS3_P14HA_CREATE_INFOP10TABLE_LISTP10Alter_infojP8st_orderbb+0x3a87)[0x5628bb15a877]
mysqld(_ZN19Sql_cmd_alter_table7executeEP3THD+0x371)[0x5628bb1bbf31]
mysqld(_Z21mysql_execute_commandP3THD+0x10e6)[0x5628bb0b09f6]
mysqld(_ZN18Prepared_statement7executeEP6Stringb+0x465)[0x5628bb0c52c5]
mysqld(_ZN18Prepared_statement12execute_loopEP6StringbPhS2_+0xa1)[0x5628bb0c54b1]
mysqld(+0x7903a5)[0x5628bb0c63a5]
mysqld(_Z19mysqld_stmt_executeP3THDPcj+0x30)[0x5628bb0c65e0]
mysqld(_Z16dispatch_command19enum_server_commandP3THDPcjbb+0x22c7)[0x5628bb0ad107]
mysqld(_Z10do_commandP3THD+0x123)[0x5628bb0aebc3]
mysqld(_Z24do_handle_one_connectionP7CONNECTb+0x421)[0x5628bb1b7281]
mysqld(handle_one_connection+0x5d)[0x5628bb1b76fd]
mysqld(+0xbea77f)[0x5628bb52077f]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x8609)[0x7fd2830e1609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7fd282ccd133]

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0x7fd24c024088): alter table `sessions` add index `sessions_user_id_index`(`user_id`)

Connection ID (thread ID): 6
Status: NOT_KILLED

Optimizer switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=on,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=on,condition_pushdown_for_derived=on,split_materialized=on,condition_pushdown_for_subquery=on,rowid_filter=on,condition_pushdown_from_having=on,not_null_range_scan=off

The manual page at https://mariadb.com/kb/en/how-to-produce-a-full-stack-trace-for-mysqld/ contains
information that should help you find out what is causing the crash.
Writing a core file...
Working directory at /var/lib/mysql
Resource Limits:
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             unlimited            unlimited            processes 
Max open files            1048576              1048576              files     
Max locked memory         83968000             83968000             bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       15708                15708                signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        
Core pattern: core

Fatal signal 11 while backtracing

Cannot access container on port 443, can't login on community forum either

[[I tried signing with GH on https://id.serversideup.net/ but it won't work. I tried making a new account but it said the email is in use by GH. I tried resetting the password but it said the same thing. I have no access to create a post on the community forum. Sorry to bother you here]]

Following https://community.serversideup.net/t/how-do-i-setup-financial-freedom-in-a-docker-container/568

  • When I clone the repo and create the container, port 80 and 443 are available (docker ps -a), but 443 return "Unable to connect". I have no idea how to test FF and ditch firefly-iii. Is there new development on how to run and test financial-freedom? I'm very excited!

  • Is there also a way to remove my account on the community forum so I can create an ordinary one?

Create Transaction Categories

I think we need categories. This is a more logical approach for hierarchies. Tags are flat level. We should allow transactions to be categorized and allow the user to make more categories in the administration section. This way it can be fully customizable for the user. With tags, this should be for filtering.

Examples: 
$4.07 at Whole Foods
Category: Groceries
Tags: #snacks

$35.01 at Ralph's
Category: Groceries
Tags: #essentials

$44.29 at Chevron
Category: Auto
Sub-Category: Gas
Tags: N/A
	

You can now run queries based on a combo of tags and categories allowing you to really narrow down your focus. You can even split transactions and narrow it down even more:

Examples:
$108.00 at Whole Foods
SPLIT - 
	$75.48 
	Category: Groceries
	Tags: #essentials

	$32.52
	Category: Groceries
	Tags: #snacks

$74.00 at Wal Mart
SPLIT -
	$25.00
	Category: Groceries
	Tags: #essentials

Show Receipt Icon on Transaction Listing

Simple UX fix, but show a receipt or attachment icon on each transaction listing. It will help the user see which transactions have receipts associated with them.

When Importing Transactions Allow Date to Be Adjusted

Issue

Right now the transaction date cannot be changed when importing transactions. This is important for allocating and visualizing budgets.

Example

Say rent was paid for the month of September on the 29th. It didn't clear the bank until October 2nd. The transaction date would be October 2nd and would not automatically compute in September budgets. We should allow the date to be changed when importing transactions.

Automatic Account Deductions

Purpose

The goal is to make manual adding of transactions as easy as possible, then integrate Plaid for automatic as an option but not required. This means we need to sync the transaction to the account it took place on. I'm initially going to have this as a setting, but will add verifications upon adding transactions.

Example

I make a purchase with my debit card of $25.00. My checking account associated with my debit card has a balance of $3,000.00. After that purchase, the account balance should be $2,975.00 automatically. We shouldn't have to go through and update the account AFTER we add all of the transactions, the process should go hand in hand.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.