AI prompts
base on Donetick an open-source, user-friendly app for managing tasks and chores, featuring customizable options to help you and others stay organized
# <img src="assets/icon.png" alt="drawing" width="45"/>Donetick
**Simplify Tasks & Chores, Together!**
Donetick is an open-source, user-friendly app designed to help you organize tasks and chores effectively. featuring customizable options to help you and others stay organized




[](https://discord.gg/6hSH6F33q7)
[](https://www.reddit.com/r/donetick)
---
## Features
### Task & Chore Management
**Collaborative**: Create and manage tasks either solo or with family and friends. You can create a group and share or assign some of the tasks or chores with others.
**Natural Language Task Creation**: Describe what you need to do in plain English. Donetick automatically extracts dates, times, and recurrence patterns from phrases like “Change water filter every 6 months” or “Take the trash out every Monday and Tuesday at 6:15 pm.”
**Task Advanced Scheduling**:
- Supports flexible scheduling: daily, weekly, monthly, yearly, specific months, specific days of the week, or even adaptive scheduling — where Donetick learns from historical completions to suggest due dates automatically.
- Due Date vs Completion Date Based Recurrence: Choose whether recurring tasks should be scheduled from the previous due date (ideal for a consistent cadence) or from the actual completion date (useful when tasks are often delayed).
- Assignee Rotation: Automatically rotate task assignments based on who has completed the fewest tasks, randomly, or in turns(round-robin) order.
- Time Tracking & Session Insights: Track how much time you spend on a task whether in a single session or across multiple.
**Subtasks with Smart Reset**: Break tasks into smaller steps with subtasks, each trackable on its own. For recurring tasks, subtasks automatically reset when the main task is completed. subtasks can be nested as well!
**Organize with Priorities and Labels**: Organize everything using custom labels and priorities. Labels can be shared across your group, making it easy to filter and sort tasks by category. Priorities help you stay focused Donetick supports five levels: P1, P2, P3, P4, and No Priority.
**Add Photos**: Attach photos directly to tasks. Supports local storage (WIP) or cloud providers including AWS S3, Cloudflare R2, MinIO, and other S3-compatible services.
**Things**: A unique feature in Donetick. “Things” let you track data that isn’t a task. A Thing can be a number, boolean (true/false), or plain text. You can also mark tasks as done automatically when a Thing changes to a certain value.
**NFC Tag Support**: Create physical triggers by writing NFC tags that instantly mark tasks as complete when scanned.
### Gamification & Progress
**Points System**: Built-in points system that rewards task completion and tracks your progress over time.
**Completion Restrictions** : You can restrict task completion until a certain time, for example, make a task completable only within the last X hours before its due date. This helps prevent marking tasks as "done" too early.
**Comprehensive Analytics**: See task breakdowns by label, completion status, and other helpful graphs.
### Security & Authentication
**Multi-Factor Authentication**: Supports TOTP-based MFA.
**Multiple Sign-In Options**: Choose from local accounts or any OAuth2 provider that supports OIDC, like Keycloak, Authentik, Authelia, etc. (Tested with Authentik.)
### Notifications & Integrations
**Dashboard View**: If you’re on a larger screen (like a laptop or tablet) and logged in as an admin, Donetick shows a mount-friendly dashboard layout. a full task list, calendar, and recent activity all in one place. Perfect for wall-mounted displays or shared tablets. With the ability for any user to pick their account and complete a task on the go!
**Realtime Sync**: Enable realtime sync to instantly reflect task changes across all connected devices and users. whether you are adding, editing, or completing a task. It reflects immediately on enabled devices!
**Offline Support**: You can access donetick if you lose connection and navigate some areas, but this is very limited functionality at the moment.
**Multi-Platform Notifications**: Get reminders through the mobile app (we have an alpha iOS app on TestFlight, and the Android APK is available in releases), as well as via Telegram, Discord, or Pushover.
**Home Assistant Integration**: Manage and view tasks directly within Home Assistant using the official integration. It creates separate to-do lists for each Donetick user. Donetick Home Assistant Integration
### Developer & API Features
**REST API**: Full access to Donetick’s features through a REST API, great for custom automations and integrations. (For external use, we recommend using the eAPI, which offers limited access intended for long-lived access tokens.)
**Webhook System**: Connect Donetick to external systems using flexible webhook support good for custom notification flows or automations.
---
## Quick Start
> [!NOTE]
> Before running the application, ensure you have a valid `selfhosted.yaml` configuration file.
> If you don't have one, create a `selfhosted.yaml` file based on the example provided [here](https://github.com/donetick/donetick/blob/main/config/selfhosted.yaml).
> Place the `selfhosted.yaml` file in the `/config` directory within your application's root directory
### Using Docker
1. **Pull the latest image:**
```bash
docker pull donetick/donetick
```
2. **Run the container:** Replace `/path/to/host/data` with your preferred data directory:
```bash
docker run -v /path/to/host/data:/donetick-data -p 2021:2021 \
-e DT_ENV=selfhosted \
-e DT_SQLITE_PATH=/donetick-data/donetick.db \
donetick/donetick
```
### Using Docker Compose
Use this template to set up Donetick with Docker Compose:
```yaml
services:
donetick:
image: donetick/donetick
container_name: donetick
restart: unless-stopped
ports:
- 2021:2021
volumes:
- ./data:/donetick-data
- ./config:/config
environment:
- DT_ENV=selfhosted
- DT_SQLITE_PATH=/donetick-data/donetick.db
```
### Using the Binary
1. **Download the latest release** from the [Releases](https://github.com/donetick/donetick/releases) page.
2. **Extract the file** and navigate to the folder:
```bash
cd path/to/extracted-folder
```
3. **Run Donetick:**
```bash
DT_ENV=selfhosted ./donetick
```
---
## Development Environment
### Build the frontend
1. Clone the frontend repository:
```bash
git clone https://github.com/donetick/frontend.git donetick-frontend
```
2. Navigate to the frontend directory:
```bash
cd donetick-frontend
```
3. Install dependencies:
```bash
npm install
```
4. Build the frontend:
```bash
npm run build-selfhosted
```
### Build the application
1. Clone the repository:
```bash
git clone https://github.com/donetick/donetick.git
```
2. Navigate to the project directory:
```bash
cd donetick
```
3. Install dependencies:
```bash
go mod download
```
4. Copy the frontend build to the application:
```bash
rm -rf ./frontend/dist
cp -r ../donetick-frontend/dist ./frontend
```
5. Run the app locally:
```bash
go run .
```
Or build the application:
```bash
go build -o donetick .
```
### Build the development Docker image
> Make sure to build the frontend and the app first before building the Docker image.
1. Build the Docker image:
```bash
docker build -t donetick/donetick -f Dockerfile.dev .
```
---
## Contributing
Contributions are welcome! If you want to work on something that is not listed as an issue, please open a [Discussion](https://github.com/donetick/donetick/discussions) first to ensure it aligns with our goals and to avoid any unnecessary effort!
---
## License
This project is licensed under the **AGPLv3**. See the [LICENSE](LICENSE) file for more details.
---
## Join the Discussion
For ideas or feature requests, please use GitHub Discussions. We also have a Discord server and a subreddit for those who prefer those platforms!
[](https://discord.gg/6hSH6F33q7)
[](https://www.reddit.com/r/donetick)
[](https://github.com/donetick/donetick/discussions)
---
## Support Donetick
If you find it helpful, consider supporting us by starring the repository, contributing code, or sharing feedback!
---
", Assign "at most 3 tags" to the expected json: {"id":"14341","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"