{"id":28677750,"url":"https://github.com/m-u-t-e/todoot","last_synced_at":"2025-08-07T09:16:56.319Z","repository":{"id":298177899,"uuid":"999123067","full_name":"M-U-T-E/ToDoot","owner":"M-U-T-E","description":"Minimal Todo app","archived":false,"fork":false,"pushed_at":"2025-07-31T15:00:43.000Z","size":498,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-31T18:16:03.931Z","etag":null,"topics":["cmake","cpp","cpp20","crow","orm","rest","rest-api","sqlite","todoapp","todolist-application","todoweb","webserver"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/M-U-T-E.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-09T19:18:03.000Z","updated_at":"2025-07-31T15:00:46.000Z","dependencies_parsed_at":"2025-06-09T20:43:59.039Z","dependency_job_id":null,"html_url":"https://github.com/M-U-T-E/ToDoot","commit_stats":null,"previous_names":["m-u-t-e/todoot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/M-U-T-E/ToDoot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/M-U-T-E%2FToDoot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/M-U-T-E%2FToDoot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/M-U-T-E%2FToDoot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/M-U-T-E%2FToDoot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/M-U-T-E","download_url":"https://codeload.github.com/M-U-T-E/ToDoot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/M-U-T-E%2FToDoot/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269231375,"owners_count":24382365,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-07T02:00:09.698Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cmake","cpp","cpp20","crow","orm","rest","rest-api","sqlite","todoapp","todolist-application","todoweb","webserver"],"created_at":"2025-06-14T00:30:30.775Z","updated_at":"2025-08-07T09:16:56.310Z","avatar_url":"https://github.com/M-U-T-E.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ToDoot 📝\n\n![C++](https://img.shields.io/badge/C%2B%2B-17-00599C?style=for-the-badge\u0026logo=cplusplus)\n![GCC](https://img.shields.io/badge/GCC-Required-4E8A09?style=for-the-badge\u0026logo=gcc)\n![CMake](https://img.shields.io/badge/CMake-3.16%2B-064F8C?style=for-the-badge\u0026logo=cmake)\n![SQLite](https://img.shields.io/badge/SQLite-3-003B57?style=for-the-badge\u0026logo=sqlite)\n\n---\n\n## About The Project\n\n**ToDoot** is a minimalist web application for managing your daily tasks. It's built from the ground up using C++ and modern tools. The backend is powered by the **Crow C++ microframework** for handling HTTP requests and **SQLite** for persistent data storage, managed through the elegant `sqlite_orm` library.\n\nThe goal was to create a self-contained, high-performance To-Do application that is both easy to compile and run on a Linux system.\n\n### Key Features ✨\n\n* **RESTful API**: A clean API for creating, retrieving, updating, and deleting tasks.\n* **Simple Web UI**: A basic but functional web interface to interact with your To-Do list.\n* **Lightweight**: Built with performance in mind using efficient C++ libraries.\n* **Persistent Storage**: Your tasks are saved in an SQLite database file (`db.sqlite`).\n\n---\n\n## Demo 🎬\n\n\u003cimg src=\"https://github.com/M-U-T-E/ToDoot/blob/main/assets/Demo.gif?raw=true\" alt=\"Demo.gif\" width=\"1000\"/\u003e\n\n---\n\n## Getting Started 🚀\n\nFollow these instructions to get a local copy up and running on your Linux machine.\n\n### Prerequisites\n\nYou'll need the **GCC C++ compiler**, CMake, and a few libraries installed through your distribution's package manager. `sqlite_orm` is bundled with the project and does not need to be installed separately.\n\n* **GCC C++ Compiler** (**Required**: This project is currently only compatible with GCC).\n* **CMake** (version 3.16 or higher).\n* **Crow framework**, **Zlib**, and **SQLite3** development libraries.\n\n### Installation \u0026 Build\n\n1.  **Install System Dependencies**\n    Install the required development libraries using your distro's package manager.\n\n    * On **Debian/Ubuntu-based systems**:\n        ```sh\n        sudo apt update\n        sudo apt install libcrow-dev zlib1g-dev libsqlite3-dev\n        ```\n    * On **Fedora/CentOS-based systems**:\n        ```sh\n        sudo dnf install crow-devel zlib-devel sqlite-devel\n        ```\n    * On **Arch Linux-based systems**:\n        ```sh\n        yay -Syu base-devel cmake crow zlib sqlite\n        # you can use paru as well\n        ```\n\n2.  **Clone Project \u0026 Sub-dependencies**\n    Clone the main repository and the `sqlite_orm` library into the `vendor` directory.\n\n    ```sh\n    # Clone the ToDoot project\n    git clone https://github.com/M-U-T-E/ToDoot.git\n    cd ToDoot\n\n    # Clone sqlite_orm into the vendor directory\n    git clone https://github.com/fnc12/sqlite_orm.git vendor/sqlite_orm\n    ```\n\n3.  **Configure and Build with CMake**\n    Make sure your system is configured to use GCC as the default C++ compiler.\n\n    ```sh\n    # Create a build directory\n    mkdir build \u0026\u0026 cd build\n\n    # Run CMake (it will find sqlite_orm automatically)\n    cmake ..\n\n    # Compile the project\n    cmake --build .\n    ```\n\n4.  **Run the Server**\n    Once the build is complete, you can find the executable in the `build` directory.\n\n    ```sh\n    ./ToDoot\n    ```\n\n5.  **Access the Application**\n    Open your web browser and navigate to `http://localhost:18080/home`.\n\n---\n\n## API Endpoints 🌐\n\nThe server provides a REST API to manage To-Do items. The base URL is `http://localhost:18080`.\n\n| Method | Endpoint                 | Description                                                              | Request Body (JSON)                                                  | Response Body (Success)                                                              |\n| :----- | :----------------------- | :----------------------------------------------------------------------- | :------------------------------------------------------------------- | :----------------------------------------------------------------------------------- |\n| `GET`  | `/`                      | Redirects (301) to `/home`.                                              | *None* | *Empty Body* |\n| `GET`  | `/home`                  | Serves the main `index.html` page.                                       | *None* | HTML Content                                                                         |\n| `GET`  | `/api/todos`             | Retrieves a list of all To-Do items.                                     | *None* | `[{\"id\": 1, \"title\": \"...\", \"description\": \"...\", \"completed\": false}]`               |\n| `POST` | `/api/todos`             | Adds a new To-Do item. **description** and **completed** are optional.   | `{\"title\": \"New Todo\", \"description\": \"...\", \"completed\": false}`    | `{\"id\": 2, \"title\": \"New Todo\", \"description\": \"...\", \"completed\": false}`            |\n| `GET`  | `/api/todos/\u003cid\u003e`        | Retrieves a single To-Do item by its ID.                                 | *None* | `{\"id\": 1, \"title\": \"...\", \"description\": \"...\", \"completed\": false}`                 |\n| `PUT`  | `/api/todos/\u003cid\u003e`        | Updates a To-Do's fields. All fields are optional.                       | `{\"title\": \"Updated\", \"description\": \"...\", \"completed\": true}`      | `{\"id\": 1, \"title\": \"Updated\", \"description\": \"...\", \"completed\": true}`             |\n| `POST` | `/api/todos/\u003cid\u003e/toggle` | Toggles the completion status of a To-Do.                                | *None* | `{\"id\": 1, \"title\": \"...\", \"description\": \"...\", \"completed\": true}`                  |\n| `DELETE`| `/api/todos/\u003cid\u003e`      | Deletes a specific To-Do item by its ID.                                 | *None* | `{\"message\": \"Todo deleted successfully\"}`                                           |\n\n---\n\n## Project Structure 📂\n\n```\nToDoot/\n├── CMakeLists.txt\n├── main.cpp\n├── build/            # Build output (created after running CMake)\n├── include/          # Header files\n│   ├── database/\n│   │   └── DatabaseManager.h\n│   ├── handlers/\n│   │   └── TodoHandlers.h\n│   └── models/\n│       └── Todo.h\n├── src/              # Source files\n│   ├── database/\n│   │   └── DatabaseManager.cpp\n│   └── handlers/\n│       └── TodoHandlers.cpp\n├── static/           # Static assets\n│   ├── css/\n│   │   └── style.css\n│   ├── js/\n│   │   └── todosManager.js\n│   └── index.html\n└── vendor/           # Vendored dependencies\n└── sqlite_orm/\n```\n---\n\n## License 📜\n\nDistributed under the MIT License. See `LICENSE` file for more information.\n\n---\n\n## Author 👨‍💻\n\n**M-U-T-E** - [GitHub Profile](https://github.com/M-U-T-E)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-u-t-e%2Ftodoot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm-u-t-e%2Ftodoot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm-u-t-e%2Ftodoot/lists"}