A full-stack note-taking application built with the MERN stack (MongoDB, Express, React, Node.js). ThinkBoard allows users to create, view, and manage notes efficiently with a modern UI.
- Create, read, update, and delete notes
- Rate limiting for API requests
- Responsive design with Tailwind CSS
- RESTful API backend
- Modern React frontend with Vite
NoteForge/
├── backend/ # Express.js API server
│ ├── src/
│ ├── controllers/
│ ├── models/
│ ├── routes/
│ └── middleware/
├── frontend/ # React client app
│ ├── src/
│ ├── components/
│ ├── pages/
│ └── lib/
├── README.md
└── package.json
Minimum tools and services required to run the project locally:
- Node.js (LTS) — Node 18+ recommended
- npm — used to install dependencies and run scripts
- MongoDB — either a local mongod instance or a hosted MongoDB Atlas cluster
- A Clerk account (for authentication) — you'll need a publishable key and a secret key (see "Environment variables" below)
-
Clone the repository:
git clone https://github.com/DeepakAC3/mern-thinkboard.git cd mern-thinkboard -
Install backend dependencies:
cd backend npm install -
Install frontend dependencies:
cd ../frontend npm install
-
Start the backend server:
cd backend npm start -
Start the frontend development server:
cd frontend npm run dev -
Open your browser at http://localhost:5173
This project uses Clerk for authentication. Clerk is integrated on both frontend and backend:
- Frontend:
@clerk/clerk-reactwithClerkProvider(seefrontend/src/main.jsx). - Backend:
@clerk/expressmiddleware is applied to protect API routes (seebackend/src/middleware/clerkAuth.js).
Environment variables used for Clerk:
-
Backend (
backend/.env):CLERK_SECRET_KEY— server secret key (sk_...)CLERK_PUBLISHABLE_KEY— optional server-side copy of the publishable key (pk_...)CLIENT_URL— the frontend origin (used for CORS), e.g.http://localhost:5173or your deployed frontend URL
A simple MERN notes app with Clerk authentication.
- Install backend and frontend deps:
cd backend && npm install
cd ../frontend && npm install- Run locally:
# backend
cd backend && npm start
# frontend
cd ../frontend && npm run dev- Frontend: set
VITE_CLERK_PUBLISHABLE_KEY(build-time). - Backend: set
CLERK_SECRET_KEYandCLIENT_URL(for CORS). - You must register your production domain in Clerk to use live production keys — Clerk requires a valid domain (ETLD+1) for cookies.
