Building a Full-Stack Todo App with Node.js, React, and React Native in a Monorepo

Sugand singh
4 min readJul 31, 2023

Introduction

In the world of software development, managing complex projects efficiently is crucial to success. One approach gaining popularity is the Mono repo, a repository that houses multiple projects under a single codebase. In this blog post, we will walk you through the process of creating a full-stack todo app using Node.js, React, and React Native within a Mono repo structure. By the end of this guide, you’ll have a robust, scalable, and maintainable to-do app ready to conquer the productivity world.

1. Understanding the Mono repo Approach

A Mono repo combines all related projects into one repository, fostering code sharing, streamlined development, and easier dependency management. For our full-stack todo app, this structure will enable us to manage the backend (Node.js) and frontend (React and React Native) components seamlessly.

2. Setting up the Mono repo

Let’s start by setting up the Mono repo using tools like Lerna or Yarn Workspaces. These tools help manage dependencies and run scripts across the projects in the Mono repo. We’ll create the folder structure and initialize the package.json files accordingly.

  1. Create a new directory for the Mono repo and navigate into it.
  2. Initialize the Mono repo using either Lerna or Yarn Workspaces. Use lerna init or yarn init -y respectively.
  3. Create three subdirectories: backend, web, andmobile to house the backend, web frontend, and mobile app code, respectively.
  4. Initialize each subdirectory with a new Node.js project using npm init or yarn init.
  5. Install the necessary dependencies for each subdirectory. For example, in the backend folder, install Express.js and MongoDB packages.

3. Building the Backend with Node.js

The backend of our to-do app will be powered by Node.js, using frameworks like Express.js for routing and MongoDB for data storage. We’ll design a RESTful API to handle CRUD operations for to-do items. By leveraging the Mono repo structure, we can easily share utility functions and models with the frontend.

  1. Set up the Express.js server in the backend directory.
  2. Create routes for CRUD operations (Create, Read, Update, Delete) for to-do items.
  3. Set up MongoDB and connect it to the backend server using a MongoDB library (e.g., Mongoose).
  4. Implement controllers and models to handle the business logic and data storage for to-do items.
  5. Test the backend routes using tools like Postman or Insomnia.

4. Developing the Web Frontend with React

With the backend in place, we’ll shift our focus to the web frontend built with React. We’ll design the user interface, implement components, and utilize state management libraries like Redux or the React Context API. The React app will interact with the backend API to create, read, update, and delete to-do items.

  1. Set up the React app in the web directory usingcreate-react-app or similar.
  2. Create components for displaying a list of to-do items, adding new items, updating, and deleting items.
  3. Implement the Redux or React Context API for state management to handle to-do items.
  4. Connect the web frontend to the backend API using asynchronous requests (e.g., Axios) to perform CRUD operations on to-do items.
  5. Style the web app using CSS or a CSS-in-JS library like styled-components.

5. Crafting the Mobile App with React Native

Now, it’s time to take our to-do app mobile with React Native. With the shared components from the Mono repo, we can ensure consistent functionality and design between the web and mobile versions.

  1. Set up the React Native app in the mobile directory using expo init or react-native init.
  2. Create React Native components similar to those in the web app for displaying, adding, updating, and deleting to-do items.
  3. Utilize React Navigation to manage app navigation between screens.
  4. Connect the mobile app to the backend API using asynchronous requests (e.g., Axios) to interact with the to-do items.
  5. Style the mobile app using React Native styling and layout components

Conclusion

Building a full-stack todo app with Node.js, React, and React Native within a Mono repo structure offers numerous benefits in terms of development speed, code sharing, and maintainability. By combining powerful technologies and development practices, our to-do app will showcase how Mono Repo can empower teams to manage complex projects efficiently. Whether you’re a seasoned developer or just starting your journey, embracing Monorepos can lead to more productive and enjoyable development experiences. So, let’s embark on this exciting journey of building our dream to-do app!

You can follow this blog for project setup
You can have a look at this github repo for reference

--

--

Sugand singh

Experienced React Native dev, UI/UX expert, performance optimizer. Keeping up with mobile trends. Let's build mobile magic!