- 🔐 Secure Authentication - User registration and login with JWT tokens
- 📓 Multiple Notebooks - Organize notes into customizable notebooks with icons and colors
- 📝 Rich Text Editor - Full-featured editor with:
- Bold, italic, strikethrough formatting
- Headings (H1, H2, H3)
- Bullet and numbered lists
- ✅ Task/Todo lists with checkboxes
- 💻 Code blocks with syntax highlighting
- 🖼️ Image uploads
- 🔗 Links
- Blockquotes
- ⭐ Favorites - Star important notes for quick access
- 📌 Pin Notes - Pin notes to the top of your list
- 🔍 Search - Quick search across all your notes (⌘K / Ctrl+K)
- 🌙 Dark/Light Mode - Beautiful dark theme by default
- 💾 Auto-save - Notes are automatically saved as you type
- 📱 Responsive Design - Works on desktop and mobile
- React 18
- Vite
- TailwindCSS
- Framer Motion (animations)
- TipTap (rich text editor)
- Zustand (state management)
- React Router DOM
- Axios
- Node.js
- Express.js
- MongoDB with Mongoose
- JWT Authentication
- Multer (file uploads)
- xml2js (XML processing)
- Node.js 18+
- MongoDB (local or Atlas)
- npm or yarn
-
Clone the repository
cd notty_react -
Install dependencies
npm run install:all
Or install separately:
npm install cd server && npm install cd ../client && npm install
-
Configure environment variables
Edit
server/.env:PORT=5000 MONGODB_URI=mongodb://localhost:27017/notty JWT_SECRET=your-super-secret-jwt-key-change-in-production JWT_EXPIRE=7d
-
Start MongoDB
# If using local MongoDB mongod -
Run the application
# From root directory - runs both frontend and backend npm run devOr run separately:
# Terminal 1 - Backend npm run server # Terminal 2 - Frontend npm run client
-
Open the app
- Frontend: http://localhost:3000
- Backend API: http://localhost:5000
notty_react/
├── client/ # React frontend
│ ├── public/ # Static assets
│ ├── src/
│ │ ├── api/ # API configuration
│ │ ├── components/ # React components
│ │ ├── pages/ # Page components
│ │ ├── store/ # Zustand stores
│ │ ├── App.jsx # Main app component
│ │ └── main.jsx # Entry point
│ ├── package.json
│ └── vite.config.js
│
├── server/ # Express backend
│ ├── config/ # Database config
│ ├── middleware/ # Auth middleware
│ ├── models/ # Mongoose models
│ ├── routes/ # API routes
│ ├── uploads/ # Uploaded files
│ ├── index.js # Server entry
│ └── package.json
│
└── package.json # Root package.json
POST /api/auth/register- Register new userPOST /api/auth/login- Login userGET /api/auth/me- Get current userPUT /api/auth/profile- Update profile
GET /api/notebooks- Get all notebooksGET /api/notebooks/:id- Get single notebookPOST /api/notebooks- Create notebookPUT /api/notebooks/:id- Update notebookDELETE /api/notebooks/:id- Delete notebook
GET /api/notes- Get all notes (with filters)GET /api/notes/:id- Get single noteGET /api/notes/:id/xml- Get note as XMLPOST /api/notes- Create notePUT /api/notes/:id- Update noteDELETE /api/notes/:id- Delete notePOST /api/notes/import-xml- Import note from XML
POST /api/upload- Upload image
⌘/Ctrl + K- Open search⌘/Ctrl + S- Save note⌘/Ctrl + B- Bold⌘/Ctrl + I- ItalicEscape- Close modals
Each notebook can have:
- Custom emoji icon (📓, 💼, 💡, etc.)
- Custom color accent
Toggle between dark and light mode in Settings or sidebar.
- TipTap - Amazing rich text editor
- Lucide Icons - Beautiful icons
- TailwindCSS - Utility-first CSS
- Framer Motion - Smooth animations
Built with ❤️ for productivity lovers