This project was created for study and portfolio purposes. Feel free to go around the code and run it by yourself. It's not for commercial purposes, so you can use my code and ideas for whatever you want. Just remember to give me the credits you enjoy it.
MyPocket is a simple web application for managing personal finances. With the application the user can register and start importing the daily transactions and creating monthly budgets to control expenses. There is a dashboard where the user can get an overview of how the finances are going.
To see the app in action you can visit the production instance deployed in aws:
The applications in running using containers.
The project was designed to have a backend and frontend running separatedly.
- Clone the repository
git clone https://github.com/danielfreitas662/MyPocket.com.git
- Go to MyPocket.Backend folder and run the project
dotnet watch run --project MyPocket.API
The API should run on https://localhost:7220/ The endpoints of the API will be available at the base address https://localhost:7220/api/
- Go to MuPocket.Frontend folder and run the project
npm run dev
The web application should run on http://localhost:3000/
Click here to view backend code.
.NET 6 (c#)
PostgreSQL
Click here to view frontend code.
Next.js 13 (experimental to this date) React.js (TypeScript) SASS
I tried to implement everything I could to avoid using of external libraries. The only dependencies are:
- appexcharts: Plotting charts on screen for the dashboard
- clsx: Conditionally insert classes on the components
- jose: Managing JWT
- react-hook-form: Managing forms
- react-icons: SVG
- react-toastify: Notifications popups
- moment: Manage date and time
Find bellow all the components created for input data, feedback, loading state and more.
The component uses moment library to manage date value and format. The user can navigate throught the years and months and pick the date. It's possible to clear the value and set the value for today
The component uses moment library to manage date value and format. All the properties from input component are available to be used
The component masks input applying currency symbol, thousand and decimal separator. The output and input is always a raw number. It has all the same propperties from the TextInput component.
The select component opens a dropdown menu when given focus. The user can type to filter the options. It is possible to customize the option item label and clear value by clicking the cross on the right side of the component. It monitors screen size to check if the dropdown menu will fit bellow the component and renders above it if it doesn't fit.
This component shows a message that can be styled as error, success or information. It has a timeout the dismiss the component in 3 seconds (it can be customized) or it can be manually dismissed.
This component lets you wrap a button and override its onClick event. This way the user can have a confirmation box when click on the button.
Displays a back button, title and extras
The component render a table element and supoport several functionalities.
- Pagination
- Sort columns by clicking header column
- Filter columns
- Horizontal and vertical scroll
- Summary (footer)
- onChange event to capture pagination, filters and sorters