This project is a MERN (MongoDB, Express.js, React, Node.js) full-stack web application designed to help you organize and manage your notes.
📺 Watch the full development walkthrough and demo in Turkish: 🔗 Project Video Link
SkyNotes is a minimalist, yet feature-rich MERN stack note-taking application designed to provide users with a seamless experience for organizing their thoughts and ideas.
It focuses on intuitive note management including creation, editing, deletion, and quick access via search and pinning functionalities.
A primary long-term goal for this project is to integrate with cloud services (e.g., AWS) for robust data synchronization and scalable deployment.
- React
- React Router DOM
- Tailwind CSS
- React Icons
- Moment.js (for date formatting)
- Node.js
- Express.js
- Mongoose (MongoDB interactions)
- JSON Web Token (JWT)
- dotenv
- cors
- nodemon (dev server reloading)
- MongoDB
- Postman (for API testing)
- 🔐 User Registration and Login (JWT Authentication)
- 📝 Create, Edit, and Delete Notes
- 🔍 Search Notes by Title or Content
- 📌 Pin Notes for Quick Access
- 💬 Responsive Modal Design
- ⚡ Live Search with Debounce
- 📅 Human-Readable Date Format (Moment.js)
- 🔔 Toast Notifications (Create, Edit, Delete)
- 📭 Empty State UI when no notes exist
Prerequisites: Node.js 24 (see .nvmrc; use nvm use if you use nvm).
- Navigate to the
backenddirectory. - Install dependencies:
npm install- Copy
backend/.env.exampletobackend/.envand fill in the values (at leastACCESS_TOKEN_SECRETandMONGODB_URI; e.g. your MongoDB Atlas connection string). - Start the backend server by running:
npm start- Navigate to the
frontenddirectory. - Install dependencies:
npm install- (Optional) Copy
frontend/.env.exampletofrontend/.envto set API URL and dev port. - Start the frontend development server:
npm run dev- Access the application in your browser:
- Frontend: http://localhost:5174
- Backend: http://localhost:8001
-
Frontend (in
frontend/) was created with: npm create vite@latest -
Tailwind CSS setup: Tailwind Vite Installation Guide
-
Font: Google Fonts - Noto Sans
-
Date formatting with: moment → npm i moment
-
SVGs used from:
- The 404 error page is not fully customized yet.
- The project was created with React, and pages and components were developed.
- React Router DOM is used for page navigation.
- Styling is done with Tailwind CSS and custom CSS layers.
- Core components such as Navbar, Login screen, Password Input, Search bar, Note Add/Edit Modal, and Tag Input were created.
- A backend API was created using Node.js, Express.js, and Mongoose.
- User and Note models were created.
- Essential API endpoints (user registration, login, note creation, editing, deletion, note retrieval, and note pinning) were developed and connected.
- User information and notes are retrieved from the backend and displayed dynamically.
- Live search functionality with debouncing was integrated for efficient note filtering.
- Note pinning functionality was stabilized to correctly reflect the pinned status visually.
- Add/Edit Note modal user experience was improved (responsive design, Escape key closure).
- Confirmation messages (toasts) have been added for note operations.
- The EmptyCard component is displayed when no notes are found.
- Addressed and resolved layout issues affecting note card display, particularly during search or with fewer notes.
- YunoHost: A GitHub Actions workflow (
.github/workflows/deploy-yunohost.yml) builds and deploys to a YunoHost server via rsync. See docs/DEPLOYMENT-YUNOHOST.md for setup (Nginx, PM2, SSO, secrets). - Elastic Beanstalk: The workflow
.github/workflows/deploy-backend-to-eb.ymlis currently temporarily disabled.
If you have any questions or feedback, feel free to:
-
📩 Open an issue on the GitHub repository
-
🤝 Contact me directly via GitHub
📌 Note: This README provides a general overview. For more detailed usage, refer to the codebase or open an issue.