There are two sections to the app, settings and expense dashboard.
User can define a budget in settings in addition to defining different categories in which expenses can be made. Both of these options are in settings page.
Once this setup is done, user can add expenses in any of the categories. A summary page shows the expense trend.
Must have features:
- Add expense
- Edit Expense
- Delete Expense ( soft delete, show striked or some other indication that it's deleted, don't remove the entry from the database)
- Expense and budget summary with chart
- Settings page
Good to have extra features:
- Google auth and basic user profile with name, photo and occupation only.
- Undo delete expense
- Upload invoice or any image along with expense
- Download invoice from expense listing.
Things to note:
- Frontend should be written in React & Typescript.
- You need to use Redux for state management
- You are free to use any technology for the backend.
- You can use Ant Design or Bootstrap for the UI components.
- We are really, really interested in your object oriented development skills, so please solve the problem keeping this in mind. Also handle the edge cases (if any).
- Your codebase should have the same level of structure and organised as any mature open source project including coding conventions, directory structure, a README.md with clear instructions and additionally a runner shell script that automates the entire build and execute process.
- You need to use Git for version control. We expect you to send us a standard zip or tarball of your source code when you're done that includes git metadata (the .git folder) in the tarball so that we can look at your commit logs and understand how your solution has evolved. Frequent commits are a huge plus.
- Do not check in vendor libraries or output from the build process. Use a standard build automation & dependency system like dep/npm.
- Write unit tests/specs for the back-end. Additionally, it's a huge plus if you follow TDD.
- Do not make your solution or this problem publicly available by, for example, using GitHub or Bitbucket or by posting this problem to a blog or forum.

