A modern, lightweight memo management application built with React and Material-UI. Create, edit, search, and organize your memos with due date tracking and persistent local storage.
- Create Memos - Add memos with title, content, and optional due dates
- Edit Memos - Update existing memos with ease
- Search Functionality - Real-time search by memo title with URL parameter support
- Delete Memos - Remove memos you no longer need
- Due Date Tracking - Set optional due dates for your memos using a native date picker
- Persistent Storage - All memos are saved locally in your browser using localStorage
- Toast Notifications - Visual feedback for all actions (create, update, delete)
- Responsive Design - Mobile-first UI with bottom navigation
- Fast Performance - Built with Vite for lightning-fast development and optimized production builds
- React 19.1.0 - UI library
- React Router DOM 7.9.6 - Client-side routing
- Vite 7.0.4 - Build tool and dev server
- Material-UI (MUI) 7.3.5 - Component library
- MUI Icons 7.3.5 - Icon components
- Emotion - CSS-in-JS styling
- react-hot-toast 2.6.0 - Toast notifications
- react-use 17.6.0 - Custom React hooks (localStorage, etc.)
- @fontsource/roboto - Material Design typography
# Clone the repository
git clone <your-repo-url>
# Navigate to project directory
cd memo
# Install dependencies
npm installStart the development server with hot module replacement:
npm run devThe app will be available at http://localhost:5173
Build the application for production:
npm run buildPreview the production build locally:
npm run previewmemo/
├── src/
│ ├── features/
│ │ ├── add/
│ │ │ └── Add.jsx # Create new memos
│ │ ├── edit/
│ │ │ ├── Edit.jsx # Edit page wrapper
│ │ │ └── MemoItem.jsx # Edit form and logic
│ │ ├── home/
│ │ │ └── Home.jsx # Home page
│ │ ├── memo-list/
│ │ │ ├── MemoList.jsx # Memo list container
│ │ │ └── MemoListItem.jsx # Individual memo item
│ │ └── search/
│ │ └── Search.jsx # Search functionality
│ ├── ui/
│ │ ├── AppLayout.jsx # Main layout wrapper
│ │ ├── NavBar.jsx # Top navigation bar
│ │ └── BottomNavBar.jsx # Bottom navigation
│ ├── assets/ # Static assets
│ ├── App.jsx # Main app component with routing
│ └── main.jsx # Application entry point
├── public/ # Public assets
├── index.html # HTML entry point
├── vite.config.js # Vite configuration
└── package.json # Project dependencies
/- Home page displaying all memos/add- Create a new memo/search- Search through your memos/memo/:memoId- Edit a specific memo
Memos are stored in localStorage with the following structure:
{
id: Number, // Unique timestamp-based ID (Date.now())
title: String, // Memo title
body: String, // Memo content
dueDate: String // Optional due date in ISO format (YYYY-MM-DD)
}- Uses
useLocalStoragehook from react-use - Data automatically syncs across components
- Survives browser refreshes and sessions
- Search term stored in URL query parameters (
?q=searchterm) - Allows bookmarking and sharing search results
- Real-time filtering by memo title (case-insensitive)
- Due dates stored in ISO format (YYYY-MM-DD)
- Manual date parsing prevents timezone conversion issues
- Displays the exact date selected by the user
- Success notifications for create/update operations
- Error notifications for delete operations
- Custom styled with consistent theme
Works on all modern browsers that support:
- ES6+ JavaScript
- LocalStorage API
- HTML5 Date Input
Contributions are welcome! Please feel free to submit a Pull Request.
This project is open source and available under the MIT License.
Created with React and Material-UI
Note: This application stores all data locally in your browser. No data is sent to any server. Clear your browser's localStorage to reset all memos.