A Progressive Web Application designed to help you maintain meaningful relationships by providing timely reminders to stay in touch with your contacts.
Nudge is a contact management system that helps you organize your relationships into different "circles" with customizable reminder intervals. The application evolved from a monolithic architecture to a modular, maintainable structure that follows modern React best practices.
- Contact Organization: Group contacts into circles (Family, Close Friends, Friends, Colleagues, Acquaintances)
- Smart Reminders: Configurable notification intervals for each circle
- Birthday Tracking: Never miss a birthday with automatic notifications
- PWA Support: Installable on mobile devices with offline capabilities
- Theme System: Light, dark, and auto themes based on system preferences
- Responsive Design: Works seamlessly on desktop and mobile devices
The application has undergone a significant architectural transformation from a monolithic structure to a modular, maintainable system:
Previous Architecture:
- All functionality contained within a single large component
- Tight coupling between UI and business logic
- Difficult to maintain and extend
- Limited code reusability
Current Modular Architecture:
- Separation of concerns through custom hooks
- Centralized state management with React Context
- Reusable UI components
- Service layer for API interactions
- Utility functions for business logic
-
Clone the repository:
git clone <repository-url> cd nudge
-
Start the application with Docker Compose:
docker-compose up
-
Access the app at:
http://localhost:8765
-
Install dependencies:
npm install
-
Start the development server:
npm run dev
-
Or build for production:
npm run build npm start
nudge/
├── public/ # Static assets
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── common/ # Generic components (Button, Input)
│ │ ├── contacts/ # Contact-specific components
│ │ └── layout/ # Layout components
│ ├── context/ # React Context providers
│ ├── hooks/ # Custom hooks for business logic
│ ├── services/ # API and external service integrations
│ ├── styles/ # CSS and styling
│ └── utils/ # Utility functions
├── data/ # Data storage (JSON file)
├── server.js # Express server
└── package.json
All application data is stored in ./data/data.json on your host system, ensuring persistence across container restarts. This includes:
- Contact information
- Circle configurations
- User settings
- Notification preferences
- Node.js 16+
- npm or yarn
- Docker (optional, for containerized deployment)
npm run dev- Start development server with hot reloadnpm run server- Start only the Express servernpm run client- Start only the React development servernpm run build- Build for productionnpm start- Start production server
PORT- Server port (default: 8765)NODE_ENV- Environment mode (development/production)
-
Build the Docker image:
docker build -t nudge-app . -
Run with Docker Compose:
docker-compose up -d
The application is designed for easy deployment on Network Attached Storage (NAS) devices:
- Copy all files to your NAS
- Run
docker-compose up -d - Configure port forwarding if needed
- Access via your NAS IP address
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and questions:
- Check the DOCUMENTATION.md for detailed technical information
- Search existing issues
- Create a new issue with detailed information