🔗 Live App
👉 Click here to watch the demo on Loom
- Secure authentication for user registration and login.
- Financial transaction tracking (income and expenses) with attributes like amount, category, description, and date.
- Automatic calculation of the current balance and categorization for detailed analysis.
- Visual charts for tracking expenses and income.
- Management of custom categories (create, edit, and delete).
- Fast performance for calculations and chart rendering.
- Scalability to handle a large number of users and data.
- Intuitive and responsive interface, compatible with browsers and mobile devices.
- Must include E2E testing.
- Advanced security (HTTPS, JWT authentication, attack prevention).
- Support for 23 color themes with light and dark modes: [ 'Slate', 'Gray', 'Zinc', 'Neutral', 'Stone', 'Red', 'Orange', 'Amber', 'Yellow', 'Lime', 'Green', 'Emerald', 'Teal', 'Cyan', 'Sky', 'Blue', 'Indigo', 'Violet', 'Purple', 'Fuchsia', 'Pink', 'Rose', ]
Before you begin, ensure you have met the following requirements:
- You have installed the latest version of Node.js.
Open the terminal and use the following command to clone the project to your computer:
git clone https://github.com/viniciusferreira7/finance-app
cd <PROJECT_DIRECTORY_NAME>
- If you don’t have PNPM installed, add it globally using npm: bash:
npm install -g pnpm
- It is recommended to clone the project in the same folder:
git clone https://github.com/viniciusferreira7/finance-api
- Follow all the steps to run the API in readme from finance-api.
⚠️ Attention: finance-app and the API must be at the same directory level.
pnpm start:api
pnpm install
pnpm dev
- @formkit/auto-animate: ^0.8.2
- @hookform/resolvers: ^3.3.4
- @radix-ui/react-alert-dialog: ^1.0.5
- @radix-ui/react-checkbox: ^1.0.4
- @radix-ui/react-dialog: ^1.0.5
- @radix-ui/react-dropdown-menu: ^2.0.6
- @radix-ui/react-icons: ^1.3.0
- @radix-ui/react-label: ^2.0.2
- @radix-ui/react-popover: ^1.0.7
- @radix-ui/react-select: ^2.0.0
- @radix-ui/react-separator: ^1.0.3
- @radix-ui/react-slot: ^1.0.2
- @radix-ui/react-toast: ^1.1.5
- @radix-ui/react-tooltip: ^1.0.7
- @tanstack/query-core: ^5.49.1
- @tanstack/react-query: ^5.49.2
- @tanstack/react-query-devtools: ^5.49.2
- axios: ^1.6.8
- class-variance-authority: ^0.7.0
- clsx: ^2.1.0
- cmdk: ^1.0.0
- dayjs: ^1.11.11
- jotai: ^2.8.1
- jotai-utils: ^0.0.0
- lucide-react: ^0.390.0
- next: 14.2.1
- next-auth: ^4.24.7
- next-themes: ^0.3.0
- nuqs: ^1.19.3
- react: ^18
- react-day-picker: ^8.10.1
- react-dom: ^18
- react-hook-form: ^7.51.3
- react-number-format: ^5.4.0
- recharts: ^2.12.7
- sonner: ^1.4.41
- tailwind-merge: ^2.2.2
- tailwindcss-animate: ^1.0.7
- vaul: ^0.9.1
- wonka: ^6.3.4
- zod: ^3.22.4
- @faker-js/faker: ^8.4.1
- @playwright/test: ^1.46.0
- @rocketseat/eslint-config: ^2.2.2
- @testing-library/jest-dom: ^6.4.8
- @testing-library/react: ^16.0.0
- @testing-library/user-event: ^14.5.2
- @types/node: ^20
- @types/react: ^18
- @types/react-dom: ^18
- @vitejs/plugin-react: ^4.3.1
- eslint: ^8
- eslint-config-next: 14.2.1
- eslint-plugin-simple-import-sort: ^12.1.0
- happy-dom: ^14.12.3
- postcss: ^8
- prettier-plugin-tailwindcss: ^0.5.14
- tailwind-scrollbar: ^3.1.0
- tailwindcss: ^3.4.1
- typescript: ^5
- vite-tsconfig-paths: ^4.3.2
- vitest: ^2.0.5