A full-stack notebook management web app built with React, Node.js, Express, and PostgreSQL, deployed using Docker. Users can create, search, and manage notebooks within workspaces.
- React 18, Tailwind CSS
- React Router for navigation
- Redux Toolkit for state management
- Axios for API requests
- Express.js as the web framework
- PostgreSQL as the database
- Sequelize ORM for database interactions
- JWT authentication
- Tables:
users
,workspaces
,notebooks
- Relationships: Users → Workspaces → Notebooks
- Docker for containerization
- Docker Compose for service orchestration
✅ User Authentication (Login, Signup)
✅ Create & Manage Workspaces
✅ Create & Manage Notebooks
✅ Search & Filter Notebooks
✅ Pagination for Large Data
git clone https://github.com/maulimogal/notebook-app.git
cd notebook-app
Your application consists of the following components:
- Framework: React.js
- State Management: Redux Toolkit (or React Context API)
- UI Framework: Tailwind CSS
- API Communication: Axios
- Routing: React Router
✅ Authentication: Login, Signup
✅ Dashboard: Displays workspaces and notebooks
✅ Notebook Table: Includes search, pagination, sorting
✅ Create Notebook Form
- Framework: Express.js
- Database ORM: Sequelize (PostgreSQL)
- Authentication: JWT (JSON Web Token)
- Middleware: CORS, Helmet, Body-parser
POST /auth/login
→ User loginPOST /auth/signup
→ User registrationGET /workspaces
→ Fetch all workspacesPOST /notebooks
→ Create a new notebookGET /notebooks?workspace_id={id}
→ Fetch notebooks by workspaceGET /notebooks/search?query={search_term}
→ Search notebooksDELETE /notebooks/:id
→ Delete a notebook
- users
(id, name, email, password, created_at, updated_at)
- workspaces
(id, name, user_id, created_at)
- notebooks
(id, name, workspace_id, owner, interpreter, created_at)
✅ Frontend Dockerfile (React app)
✅ Backend Dockerfile (Node.js API)
✅ Docker Compose for PostgreSQL & app services
(Insert your system architecture diagram here)
POST /auth/signup
→ Register userPOST /auth/login
→ Authenticate user
GET /workspaces
→ Fetch all workspaces
POST /notebooks
→ Create a new notebookGET /notebooks?workspace_id={id}
→ Get notebooksGET /notebooks/search?query={search_term}
→ Search notebooksDELETE /notebooks/:id
→ Delete a notebook
- Mauli Mogal (@maulimogal)
🚀 Happy Coding!