# Negotium - Minimalist To Do App A beautiful, minimal to-do list application featuring smooth animations, intelligent date management, and a modern design that helps you stay organized and productive. ![Negotium Screenshot](docs/screenshot.png) ## 💭 Why Negotium? While powerful tools like Trello and Vikunja excel at managing complex projects and long-term planning, sometimes you just need a simple, focused space for your daily tasks. That's why I built Negotium, a straightforward to-do list for today and tomorrow. Nothing more, nothing less. Built with Svelte for speed and simplicity. No overwhelming features, no endless project boards, no complexity. Just a clean interface for your daily workflow. ## ✨ Features ### Core Functionality - ✅ **Add, complete, and delete tasks** with smooth animations - â†Šī¸ **Undo** - `Cmd/Ctrl+Z` brings back a deleted task, in its original position - 📅 **Today & Tomorrow lists** - Plan ahead with separate task lists - 🔄 **Unfinished work carries over** - When a new day begins, tasks you didn't finish move to Today; completed ones are cleared away - đŸŽ¯ **Reorder by drag or keyboard** - Drag with a mouse, long-press and drag on touch, or use `Alt+↑`/`Alt+↓` - 💾 **Persistent storage** - All tasks saved locally in your browser - 📊 **Task statistics** - See how many tasks remain at a glance ## 🚀 Getting Started ### Quick Start with Docker (Recommended) Pull and run the pre-built Docker image: ```bash # Pull the image docker pull ghcr.io/aculix/negotium:main # Run the container docker run -d -p 3000:80 --name negotium ghcr.io/aculix/negotium:main ``` Then open `http://localhost:3000` in your browser. To stop the container: ```bash docker stop negotium docker rm negotium ``` ### Manual Installation If you prefer to run the application locally without Docker: 1. Clone the repository: ```bash git clone cd negotium ``` 2. Install dependencies: ```bash npm install ``` 3. Start the development server: ```bash npm run dev ``` 4. Open `http://localhost:3000` in your browser #### Build for Production ```bash npm run build ``` The optimized files will be in the `dist` directory. #### Running the Tests ```bash npm test ``` The date, storage, rollover, task and undo logic lives in `src/lib/` as plain modules that take the current time as an argument, so behaviour at a day boundary is covered by ordinary unit tests rather than by waiting for midnight. ## 📖 How to Use ### Managing Tasks - **Add a task**: Type in the input field and press Enter - **Complete a task**: Click the checkbox next to the task - **Delete a task**: Hover over a task and click the delete icon, or press `Delete` with the task focused - **Undo a delete**: Press `Cmd/Ctrl+Z` — the task returns to where it was - **Reorder tasks**: Drag with a mouse, long-press then drag on touch, or focus a task and press `Alt+↑`/`Alt+↓` - **Clear input**: Press Escape while the input is focused ### Date Management - **Switch between Today and Tomorrow**: Click the date button in the header - **Plan ahead**: Add tasks to Tomorrow's list before you need them - **Separate lists**: Today and Tomorrow maintain independent task lists - **Carry-over**: When a new day begins, whatever you didn't finish moves into Today. Completed tasks are cleared away with the day they belonged to. This works across gaps too — if you don't open Negotium for a week, everything still outstanding is waiting for you. - **While it's open**: The app notices the day change on its own, so a tab left open overnight rolls over without a reload. ### Theme Toggle - Click the sun/moon icon in the header to switch themes - Your preference is saved automatically and restored on reload - Respects system dark mode preference on first visit ### Keyboard Shortcuts - **Enter**: Add task (when input is focused) - **Escape**: Clear input field (when input is focused) - **Space/Enter**: Toggle task completion (when a task's checkbox is focused) - **Delete**: Delete the focused task - **Cmd/Ctrl+Z**: Undo the last delete or clear-completed - **Alt+↑ / Alt+↓**: Move the focused task up or down Backspace no longer deletes a task. It is too easily pressed by accident, and deletions used to be unrecoverable. ## 💾 Data Storage All data is stored locally in your browser using localStorage: - **Tasks**: One key per date, in ISO form (`negotium-tasks-2026-08-15`) - **Theme**: Your theme preference (`negotium-theme`) - **No server required**: Everything runs entirely client-side - **Privacy first**: Your data never leaves your device - **Self-pruning**: Past days are removed as their unfinished tasks carry forward, so storage doesn't grow without bound Earlier versions keyed tasks by a different date format (`negotium-tasks-Sat Aug 15 2026`). Those are converted automatically the first time you open this version — nothing to do, and nothing is lost. ## 📄 License MIT License - Free for personal and commercial use. ## 🤝 Contributing Contributions are welcome! Feel free to submit issues and pull requests.