Project finfolio
is a personal finance management and analysis system that helps individuals track income, expenses, savings, and
investments with Python, PostgreSQL, and interactive Power BI dashboards.
Most personal finance tools in the market depend on third-party integrations such as email parsing, SMS reading, or automatic syncing with bank accounts. While convenient, these approaches often come at the cost of privacy β data is shared across multiple platforms, leaving users with little to no control over how their financial information is stored or used. In addition, most of these apps share personal information which leads to unnecessary telemarketing calls and may trigger other fradulent activities.
To resolve this, meet finfolio
a project designed with a privacy-first approach, ensuring that users maintain complete
ownership of their data. The robust database design makes the application suitable for personal usage that let's you track
expenses, incomes and even plugins added for tracking share market investments (like stocks, mutual funds) and generate summary
notes with LLM powered third-party applications (optional) and other paid tools built on top of the project as an extensions.
The project has the following key objectives and development stages, complexity (user-friendly), and other important details are as follows:
MVP Feature | Feature Note | Development Status |
---|---|---|
β Fully Offline Operation | Data is Stored and Managed by End-User. | π§ |
β Zero Third-Party Data Sharing | No Data Sharing/Third-Party Integration. | π§ |
β Flexible Data Entry | Manual/Import Flat Files | π§ |
β Essential Financial Dashboards | Intercative PowerBI Dashboard | π§ |
This is now a NextJS project using PostgREST that automatically provides REST API for the underlying tables and data. Since the data is hosted in a secured cloud of choice by the end user, so any new changes in the database can automatically reflect in the RESTful API design without updating the underlying ORM models giving the felxibility and reducing coding dependency when the underying is updated.
npm install # install dependencies with npm
npm run dev # run the development server in http://localhost:3000
# create suitable environment variables that hosts your database
# and this is referenced in the shell script to initialize and host service
# check https://docs.postgrest.org/en/v13/ for more information
export ORACLE_POSTGRES_HOST=localhost
export ORACLE_POSTGRES_PORT=5432
export ORACLE_POSTGRES_USERNAME=webanon
export ORACLE_POSTGRES_PASSWORD=password
# run the postgrest using the ./postgrest.sh
# the configuration is defined under the postgrest.conf
# not the shell script name is same as the service, so ./ is used
./postgrest.sh # API server runs in http://localhost:3100
In addition, if you are using a windows machine, then the same can be done by installing PostgREST ZIP file from source code and then adding the unzipped file under environment variables. The script can be run as below:
set PGRST_DB_URI=postgres://postgres:password@localhost:port/finfolio
postgrest postgrest.conf
The project uses the next/font
and is configured
globally with the constant defaultFont
to switch between fonts easily as per user's preferences.
The PostgREST comes in-built with Swagger UI 2.0 and is available in the root path as per the configuration file. The
file is designed to handle all the necessary schemas that are required currently defined under the ./database
directory
and all the tables have GET, POST, UPDATE
defined along with.