{"id":17356737,"url":"https://github.com/thujuli/todo-flask","last_synced_at":"2025-07-02T15:36:21.973Z","repository":{"id":177901427,"uuid":"660970542","full_name":"thujuli/todo-flask","owner":"thujuli","description":"A simple todo list app built in Flask and Bootstrap","archived":false,"fork":false,"pushed_at":"2023-08-07T02:31:33.000Z","size":879,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T15:50:00.574Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thujuli.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2023-07-01T11:29:22.000Z","updated_at":"2023-07-08T07:46:52.000Z","dependencies_parsed_at":"2024-12-06T10:41:52.410Z","dependency_job_id":"f72562fd-ec28-49e8-8c08-482dacf5cea5","html_url":"https://github.com/thujuli/todo-flask","commit_stats":null,"previous_names":["thujuli/todo-flask"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/thujuli/todo-flask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Ftodo-flask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Ftodo-flask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Ftodo-flask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Ftodo-flask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thujuli","download_url":"https://codeload.github.com/thujuli/todo-flask/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thujuli%2Ftodo-flask/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263166744,"owners_count":23424230,"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","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":[],"created_at":"2024-10-15T18:58:22.860Z","updated_at":"2025-07-02T15:36:21.948Z","avatar_url":"https://github.com/thujuli.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# TODO APP FLASK API\n\n## Backgound\n\nThis my final project, create a simple todo app using a minimalis frontend (html, css, js and bootstrap framework) with minimalis backend (flask framework).\n\nAnd for deployment is use Docker and Docker Compose.\n\n## Requirements\n\n- Web Browser (Chrome, Firefox etc.)\n- Text Editor (VSCode, Neovim, Nano, etc.)\n- Python 3.8 or higher\n- Sqlite3\n- Docker\n- Docker Compose\n\n## Objective\n\n- Apply my skills to create a simple frontend app using html, css, js and bootstrap framework\n- Apply my skills to create a simple backend using flask framework\n- Apply my skills to consume API use AJAX\n- Using Dockerfile to create a custome images for flask app\n- Compose service using Docker Compose\n- Create a scheduling job using crontab\n\n## Folder Structure\n\n```\n.\n├── app (main package for flask)\n│   ├── auth.py (API endpoints for auth)\n│   ├── config.py (config for database and jwt token)\n│   ├── __init__.py (initialization flask app)\n│   ├── models.py (contains table structures and relationships)\n│   ├── projects.py (API endpoints for projects)\n│   ├── static (contains the static file (css/js))\n│   │   └── js\n│   │       ├── script-index.js\n│   │       ├── script-login.js\n│   │       ├── script-project.js\n│   │       └── script-register.js\n│   ├── tasks.py (API endpoints for tasks)\n│   ├── templates (contains the html files)\n│   │   ├── auth\n│   │   │   ├── base.html\n│   │   │   ├── login.html\n│   │   │   └── register.html\n│   │   ├── base.html\n│   │   ├── index.html\n│   │   └── project.html\n│   └── views.py (route for rendering templates)\n├── docker-compose.yml (deploy flask and postgres services)\n├── Dockerfile (create a flask custom images)\n├── images (list images for documentation)\n│   ├── login-page.png\n│   ├── project-add.png\n│   ├── project-delete.png\n│   ├── project-edit.png\n│   ├── projects-list.png\n│   ├── registration-page.png\n│   ├── task-add.png\n│   ├── task-delete.png\n│   ├── task-edit.png\n│   ├── tasks-filter.png\n│   └── tasks-list.png\n├── README.md (documentation file for github)\n├── requirements.txt (list third party packages used by flask app)\n├── run.py (python file for running flask app)\n└── script (contains script for backup, copy and restore file from container)\n    ├── backup.sh\n    ├── copy.sh\n    └── restore.sh\n```\n\n## Features\n\n#### Registration Page\n\n![Registration Page](images/registration-page.png?raw=true \"Registration Page\")\n\n#### Login Page\n\n![Login Page](images/login-page.png?raw=true \"Login Page\")\n\n#### Project Page\n\n- List of projects\n  ![List of project](images/projects-list.png?raw=true \"List of project\")\n- Added new project\n  ![Added new project](images/project-add.png?raw=true \"Added new project\")\n- Edit project\n  ![Edit Project](images/project-edit.png?raw=true \"Edit Project\")\n- Delete project\n  ![Delete Project](images/project-delete.png?raw=true \"Delete Project\")\n\n#### Todo Page (Home)\n\n- List of tasks\n  ![List of tasks](images/tasks-list.png?raw=true \"List of tasks\")\n- Tasks filtered by selected project\n  ![Tasks filtered by selected project](images/tasks-filter.png?raw=true \"Tasks filtered by selected project\")\n- Added new task\n  ![Added new task](images/task-add.png?raw=true \"Added new task\")\n- Edit task\n  ![Edit task](images/task-edit.png?raw=true \"Edit task\")\n- Delete task\n  ![Delete task](images/task-delete.png?raw=true \"Delete task\")\n\n## Setup Project\n\n- Clone this repository\n\n```\n# clone using ssh\ngit clone git@github.com:thujuli/todo-flask.git\n\n#clone using https\ngit clone https://github.com/thujuli/todo-flask.git\n```\n\n- Change directory to this repository\n\n```\ncd todo-flask\n```\n\n## Running Project\n\n##### Without Container\n\n- Create virtual environment\n\n```\npython -m venv .venv\n```\n\n- Use the virtual environment\n\n```\nsource .venv/bin/activate\n```\n\n- Install third party packages from requirements.txt\n\n```\npip install -r requirements.txt\n```\n\n- Run this project\n\n```\npython run.py\n```\n\n##### With Docker Compose\n\n- Run docker compose\n\n```\ndocker compose up -d\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthujuli%2Ftodo-flask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthujuli%2Ftodo-flask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthujuli%2Ftodo-flask/lists"}