A fullstack Node.js/React.js/Typescript/monorepo application to search and save favorite movies. Movies are pulled from OMDB public API's with an search as you type infinite scroll list.
- Backend: Node.js (18.x or higher), Typescript, express.js, Winston
- Front end: React.js, Typescript, Material UI (MUI), Zustand (state manager)
- Common libraries: Zod (For end to end data validation), axios
- monorepo: Yarn workspaces setup is used.
- Node.js v18.x (or higher) must be installed. This is also marked in
.node-version
andpackage.json
files of individual workspaces. yarn
must be installed
git clone https://github.com/abaldawa/favourite-movies-tracker.git
cd favourite-movies-tracker
- execute
yarn
cd workspaces/server
cp .env.example .env
(Basically create a.env
file in the folderworkspace/server
)- Open
.env
file and add setOMDB_API_KEY
environment variable to your OMDB api secret key. - Execute
yarn dev
from the root of the application (favourite-movies-tracker
) - Go to
http://localhost:3000
to see the UI
Below video demonstrates the functionality of the application
favorite-movies-tracker-demo.mov
- End to end runtime data type safety is implemented using ZOD both on frontend and backend and all the validation errors are handled and shown to the user on UI in popup.
- Monorepo is fully used to share as much data as possible between frontend and backend (ex. ZOD schemas, rest api's, error's etc.) and is the single source of truth.
- The implemented code architecture and design patterns are fully scalable both on the backend and frontend such that adding new features/functionalities would be very easy in the future.
- Scalable and central error handling is fully implemented to a granular level both on the backend and frontend.
- Helpful comment and JSDOC documentation is added in the code base explaining the logic which makes the code easy to understand.
- Appropriate naming conventions and scalable folder structure is used to better fit with the monorepo architecture.
- When the UI is loading the data then the Loader is shown on the UI
- If the data loading fails for any reason then an error popup displaying the exact error is shown on the UI.
- Zod is used for data validation and if the data is received in an incorrect format (both on the frontend and backend) then the exact validation error details popup is shown on the UI.
- The data coming from OMDB Api's are also validated using ZOD on the server and any error is shown on the UI as a popup.
- When searching for a movie "infinite search result fetch on scroll end" functionality is implemented (as also highlighted on the output gif) so as a user you can keep scrolling through all the search results infinitely in the searchbox itself.