A full-stack web application for creating, managing, and organizing your personal notes with a clean, intuitive interface. Built with modern web technologies, professional design principles, and a powerful rich text editor.
Note Stream is a secure, user-friendly note-taking application that allows users to create, edit, view, and delete notes with ease. The application features user authentication, a professional settings page, advanced search functionality, and a beautiful, responsive user interface powered by the Quill rich text editor.
- User Authentication: Secure registration and login system with password hashing using PBKDF2
- Create Notes: Easily create new notes with title and rich content using Quill editor
- View Notes: Browse all your notes in a clean, organized list view
- Edit Notes: Modify existing notes with automatic timestamp tracking
- Delete Notes: Remove notes you no longer need
- Sort & Organization: Notes are automatically sorted by last updated date and creation date
- Search Functionality: Powerful search that checks both note titles and content with real-time filtering
- Quill Rich Text Editor: Professional text editor with formatting options
- Text Formatting: Bold, italic, underline, code blocks, and lists
- Delta Format Storage: Uses Quill's Delta format for full-fidelity content preservation
- Large Editor Canvas: Spacious editing area (500px on desktop) for comfortable writing
- Fallback Support: HTML fallback for compatibility and legacy content
- Responsive Design: Works seamlessly on desktop, tablet, and mobile devices
- Professional Settings Page: Manage account information and view statistics
- Account Statistics: Track total notes created and account age
- Beautiful UI: Modern, gradient-based design with smooth animations and transitions
- Modern Editor Interface: Professional, spacious note editing with enhanced styling
- Search Bar: Elegant search interface with clear button and smooth animations
- Search Button: Interactive search button with ripple effect animations
- Secure Password Hashing: PBKDF2 with 310,000 iterations for secure password storage
- Session Management: Secure session handling with Passport.js authentication
- Account Deletion: Two-step verification process for account deletion with password confirmation
- Password Verification: Password confirmation required before account deletion
- Node.js: JavaScript runtime for server-side development
- Express.js: Web framework for building RESTful APIs and routing
- MongoDB: NoSQL database for storing user accounts and notes
- Mongoose: MongoDB object modeling with schema validation
- Passport.js: Authentication middleware for user login and registration
- Crypto: Built-in Node.js crypto module for secure password hashing
- HTML5: Semantic markup for web pages
- CSS3: Custom styling with gradients, animations, and responsive layouts
- EJS (Embedded JavaScript): Server-side templating engine
- Bootstrap 5: Responsive UI framework for components and grid system
- Quill Editor: Rich text editor for professional note content
- JavaScript (Vanilla): Client-side interactivity and form handling
- Method Override: HTTP verb tunneling for PUT/DELETE requests in forms
- Express Sessions: Server-side session management
- dotenv: Environment variable management
Note-taking-App/
βββ models/
β βββ models.js # Mongoose schemas for User and Note
βββ routers/
β βββ auth.js # Authentication routes (login, register, logout)
β βββ notes.js # Note CRUD operations
β βββ users.js # User settings and account management
βββ views/
β βββ partials/
β β βββ header.ejs # Navigation header component
β βββ home.ejs # Landing/home page
β βββ login.ejs # Login page
β βββ register.ejs # Registration page
β βββ index.ejs # Notes list view
β βββ view.ejs # Single note view
β βββ add.ejs # Add new note form
β βββ edit.ejs # Edit note form
β βββ settings.ejs # User settings and account management
βββ public/
β βββ stylesheets/
β βββ style.css # Global and page-specific styles
βββ index.js # Main application file
βββ package.json # Project dependencies and metadata
βββ README.md # This file
- Node.js (v14 or higher)
- MongoDB (running locally or MongoDB Atlas connection string)
- npm or yarn package manager
-
Clone the repository
git clone https://github.com/hsn200406/Note-taking-App.git cd Note-taking-App -
Install dependencies
npm install
-
Configure MongoDB
- Ensure MongoDB is running on your system or have a MongoDB Atlas connection string
- Update the MongoDB connection string in
index.jsif needed:mongoose.connect('mongodb://localhost:27017/notesApp')
-
Start the application
npm start // or node index.js
-
Access the application
- Open your browser and navigate to
http://localhost:3000
- Open your browser and navigate to
- Click "Register" on the home page or login page
- Enter a username (minimum 6 characters) and password (minimum 12 characters with uppercase, lowercase, number, and special character)
- Submit the form to create your account
- Log in to your account
- Click "Create a Note" button
- Enter a title and content for your note
- Click "Save Note" to store it
- View: Click "View" button or note title to view its full content
- Edit: Click the "Edit" button to modify a note with Quill editor
- Delete: Click the "Delete" button to remove a note (confirmation required)
- Sort: Notes are automatically sorted by last updated date
- Search: Use the search bar to find notes by title or content
- Type your search query in the search bar
- Click the blue search button or press Enter
- Results update in real-time showing matching notes
- Click the Γ button to clear your search and see all notes again
- Click the "Settings" gear icon in the navigation bar
- View your profile information and account statistics
- To delete your account:
- Click "Delete Account Permanently"
- Enter your password to verify
- Confirm that passwords match
- Click "Proceed" to move to final confirmation
- Click "Yes, Delete Everything" to permanently delete your account
GET /auth/register- Display registration formPOST /auth/register- Submit registration formGET /auth/login- Display login formPOST /auth/login- Submit login formPOST /auth/logout- Logout user
GET /notes- Display all user notes (supports search via query parameter)GET /noteswith?search=query- Search notes by title or contentGET /notes/new- Display new note formPOST /notes- Create new note with rich text contentGET /notes/:id- View single note with formatted contentGET /notes/:id/edit- Display edit formPUT /notes/:id- Update note with Delta format preservationDELETE /notes/:id- Delete note
- Uses PBKDF2 with 310,000 iterations for password hashing
- Salt is randomly generated for each password
- Password requirements:
- Minimum 12 characters
- At least one uppercase letter
- At least one lowercase letter
- At least one number
- At least one special character (@$!%*?&)
- Secure session handling with Passport.js
- Session expiration: 24 hours
- HttpOnly cookies for session management
- Two-step verification process
- Password confirmation required before deletion
- Clear warnings about data loss
- All associated notes are permanently deleted
{
username: String (required, unique),
hashedPassword: String (required),
passwordSalt: String (required),
createdAt: Date (default: now),
updatedAt: Date,
lastLoginAt: Date
}{
title: String (required),
content: String (required, HTML content),
contentDelta: Object (Quill Delta format for full fidelity),
user: ObjectId (reference to User),
createdAt: Date (default: now),
updatedAt: Date (tracks last modification)
}- Modern Editor Interface: Large, professional note editing area (500px height on desktop)
- Gradient Backgrounds: Eye-catching blue gradient backgrounds (#0d6efd to #0a58ca)
- Card-Based Layout: Clean, organized note cards with hover effects
- Rich Text Toolbar: Quill editor toolbar with formatting options
- Responsive Grid: Bootstrap grid system for perfect alignment on all devices
- Danger Zone Styling: Red gradient backgrounds for destructive actions
- Smooth Animations: Transitions and transforms for interactive elements
- Search Interface: Elegant search bar with icon and smooth button animations
- Ripple Effects: Interactive search button with expanding ripple on hover
- Professional Typography: Clear hierarchy and readable fonts
- Mobile Responsive: Optimized layouts for tablets and mobile devices
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
Hassan - GitHub Profile
If you encounter any issues or have questions, please open an issue on the GitHub repository.
Built with β€οΈ using Node.js and MongoDB