A full-stack local network notes sharing application with folder management, rich text editing, file attachments, and backup functionality.
- Create, rename, and delete folders
- Nested folder structure support
- Visual folder tree navigation
- Drag and drop notes between folders
- Create, edit, delete notes within folders
- Rich text editor with Markdown support
- Code syntax highlighting with multiple languages
- Auto-save functionality
- Timestamp tracking (created/modified)
- Word and character count statistics
- Image upload support (JPG, PNG, GIF, WebP)
- Drag & drop file upload interface
- Image preview in notes
- File size limit: 10MB per file
- Organized file storage
- Global search across all notes and folders
- Search by note title, content, and folder names
- Highlight search results
- Search suggestions and autocomplete
- Recent search history
- SQLite database for reliable data storage
- JSON export/import functionality
- Backup history management
- Automatic data persistence on server restart
- Accessible from any device on the local network
- CORS enabled for cross-origin requests
- Static file serving for uploaded images
- Real-time server status display
- Node.js - Runtime environment
- Express.js - Web framework
- SQLite - Database with better-sqlite3
- Multer - File upload handling
- CORS - Cross-origin resource sharing
- Helmet - Security middleware
- React - UI framework
- Vite - Build tool and dev server
- Tailwind CSS - Styling framework
- React Syntax Highlighter - Code highlighting
- React Markdown - Markdown rendering
- React Dropzone - File upload interface
- Axios - HTTP client
- Lucide React - Icons
- Node.js (v16 or higher)
- npm or yarn
-
Clone or download the project
git clone <repository-url> cd office-notes-sharing-app
-
Install all dependencies
npm run install-all
-
Initialize the database
cd server npm run init-db -
Start the development servers
npm run dev
If you prefer to install dependencies manually:
-
Install root dependencies
npm install
-
Install server dependencies
cd server npm install npm run init-db -
Install client dependencies
cd ../client npm install -
Start the servers
# Terminal 1 - Start server cd server npm run dev # Terminal 2 - Start client cd client npm run dev
-
Development mode (recommended for testing)
npm run dev
This starts both the backend server (port 3000) and frontend client (port 5173).
-
Production mode
npm run build npm start
Once started, you'll see output similar to:
π Office Notes Sharing App Server Started!
============================================
π± Local: http://localhost:3000
π Network Access:
http://192.168.1.100:3000
http://10.0.0.50:3000
============================================
- Local access: Open
http://localhost:3000in your browser - Network access: Other devices on your network can access using the displayed IP addresses
- Create Folders: Click "New Folder" to create organizational folders
- Create Notes: Select a folder and click "New Note" to create notes
- Edit Notes: Click on any note to open the rich text editor
- Upload Files: Use the upload button in the note editor to attach images
- Search: Use the search bar to find notes and folders
- Backup: Use the backup manager (database icon) to export/import data
The note editor supports Markdown formatting:
- Bold:
**text** - Italic:
*text* - Headers:
# H1,## H2, etc. - Lists:
- itemor1. item - Code:
`code`for inline,``` for blocks - Links:
[text](url) - Images:

The editor automatically detects and highlights code in various languages:
- JavaScript, Python, HTML, CSS, SQL
- And many more supported by Prism.js
Create a .env file in the server directory:
PORT=3000
NODE_ENV=developmentThe SQLite database is automatically created at server/database.sqlite. The database includes:
- Folders table with nested structure
- Notes table with content and metadata
- Attachments table for file references
Uploaded files are stored in server/uploads/ with unique filenames to prevent conflicts.
GET /api/folders- Get all foldersPOST /api/folders- Create folderPUT /api/folders/:id- Update folderDELETE /api/folders/:id- Delete folder
GET /api/notes- Get all notesGET /api/notes/folder/:folderId- Get notes by folderPOST /api/notes- Create notePUT /api/notes/:id- Update noteDELETE /api/notes/:id- Delete notePATCH /api/notes/:id/autosave- Auto-save note content
POST /api/upload/single- Upload single filePOST /api/upload/multiple- Upload multiple filesDELETE /api/upload/:id- Delete attachment
GET /api/search- Global searchGET /api/search/advanced- Advanced search with filtersGET /api/search/suggestions- Search suggestions
POST /api/backup/export- Export dataPOST /api/backup/import- Import dataGET /api/backup/history- Get backup history
- File type validation for uploads
- File size limits (10MB per file)
- Path traversal protection
- Input sanitization
- Rate limiting for API requests
- CORS configuration for network access
-
Port already in use
- Change the port in the
.envfile or kill the process using the port
- Change the port in the
-
Database errors
- Delete
server/database.sqliteand runnpm run init-dbagain
- Delete
-
File upload fails
- Check that the
server/uploads/directory exists and is writable - Verify file size is under 10MB
- Ensure file type is supported (JPG, PNG, GIF, WebP)
- Check that the
-
Network access issues
- Check firewall settings
- Ensure devices are on the same network
- Verify the server IP address is correct
- Use browser developer tools to check for console errors
- Check server logs for backend errors
- Use the network tab to debug API requests
- Clear browser cache if UI changes don't appear
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License.
For issues and questions:
- Check the troubleshooting section
- Review the API documentation
- Create an issue in the repository
Note: This application is designed for local network use. For production deployment, consider additional security measures and proper hosting infrastructure.