{"id":24576763,"url":"https://github.com/aoiorio/volcano","last_synced_at":"2026-01-08T01:44:03.157Z","repository":{"id":254472509,"uuid":"808907453","full_name":"aoiorio/Volcano","owner":"aoiorio","description":"This is a repository of TODO application called Volcano. It's using VolcanoAPI","archived":false,"fork":false,"pushed_at":"2024-09-17T05:57:05.000Z","size":107968,"stargazers_count":2,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-09-17T13:55:58.024Z","etag":null,"topics":["aws","aws-lambda","dart","flutter","todoapp","todolist","volcano-with-todo"],"latest_commit_sha":null,"homepage":"https://apps.apple.com/jp/app/volcano-with-todo/id6657991782","language":"Dart","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/aoiorio.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}},"created_at":"2024-06-01T06:03:12.000Z","updated_at":"2024-09-17T05:57:09.000Z","dependencies_parsed_at":"2024-09-12T12:36:49.254Z","dependency_job_id":null,"html_url":"https://github.com/aoiorio/Volcano","commit_stats":null,"previous_names":["aoiorio/volcano"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aoiorio%2FVolcano","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aoiorio%2FVolcano/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aoiorio%2FVolcano/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aoiorio%2FVolcano/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aoiorio","download_url":"https://codeload.github.com/aoiorio/Volcano/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235361691,"owners_count":18977705,"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":["aws","aws-lambda","dart","flutter","todoapp","todolist","volcano-with-todo"],"created_at":"2025-01-23T22:50:52.691Z","updated_at":"2025-10-05T04:31:14.523Z","avatar_url":"https://github.com/aoiorio.png","language":"Dart","funding_links":["https://www.buymeacoffee.com/aoiorio"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"readme_assets/volcano-logo-github.png\" width=500\u003e\n    \u003cbr\u003e\n    \u003ca href=\"https://apps.apple.com/jp/app/volcano-with-todo/id6657991782\"\u003e\n        \u003cimg src=\"readme_assets/download-on-the-app-store.png\" width=150\u003e\n    \u003c/a\u003e\n    \u003cbr\u003e\n    \u003cbr\u003e\n    \u003ca href=\"https://github.com/aoiorio/Volcano/releases/tag/v1.1.0\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Volcano_version-1.1.0-white\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/aoiorio/VolcanoAPI\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Volcano_API_version-1.0.0-yellow\"\u003e\n    \u003c/a\u003e\n    \u003cimg src=\"https://github.com/aoiorio/Volcano/actions/workflows/flutter_lint.yaml/badge.svg\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/commit-activity/m/aoiorio/Volcano\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/aoiorio/Volcano\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Flutter-3.19.6-74737B?logo=flutter\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Dart-3.3.4-BABBC8?logo=dart\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/architecture-onion_architecture-d9d9d9\"\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n## ```🌋 {\"Contents\"}```\n\n### [```{1: \"🫣 Overview\"}```](#1--overview-1)\n\n### [```{2: \"🍽️ Methods\"}```](#2-️-methods-1)\n\n### [```{3: \"🫐 Thoughts\"}```](#3--thoughts-1)\n\n\n### [🍣 \"Japanese\"](https://github.com/aoiorio/Volcano/blob/main/README_jp.md)\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\n# ```{1: \"🫣 Overview\"}```\n\n\u003cbr\u003e\n\n\u003cimg src=\"readme_assets/volcano-app-store-screenshots.png\" style=\"border-radius: 20px\"\u003e\n\n\u003cbr\u003e\n\n## ```🌭 \"What is Volcano\"```\n\n**Volcano** is a simple TODO app that can recognize your voices and convert them to texts as a **TODO**.\nYou can tell your TODO to Volcano like you're speaking with someone.\n\n\u003cbr\u003e\n\n## ```🧈 \"Why\"```\n\nI usually write down my TODOs on my note every single day.\n\u003cbr\u003e\nBut I perceived that it's pain in the neck and I will definitely forget something what I'm going to do today.\n\nSo I came up with an application idea to manage my TODOs with more comfortable way.\n\nI thought recognizing my voice can be a powerful feature to remember what I was planning to do.\n\nThat's the reason of why Volcano was created.\n\n\u003cbr\u003e\n\n## ```🐓 \"Persona\"```\n\u003cimg src=\"readme_assets/volcano-persona.png\" style=\"border-radius: 20px\"\u003e\n\n\n\u003cbr\u003e\n\n## ```🍈 \"Features \u0026 Durations\"```\n\n\u003cbr\u003e\n\n- 📁 \"TODO\"\n\n    - **Voice Recognizing Feature \u0026 Add TODO From Voice Feature** - 2024/06/12 - 06/28\n\n    - **Add TODO From Text Feature** - 2024/06/12 - 06/28\n\n    - **Playing Voice Feature** - 2024/06/28 - 07/6\n\n    - **Mark as accomplished Feature** - 2024/06/28 - 07/6\n\n    - **Delete TODO Feature** - 2024/07/7 - 07/14\n\n    - **Edit TODO Feature** - 2024/07/7 - 07/14\n\n    - **Showing TODO With Each Type Feature** - 2024/06/28 - 07/6\n\n    - **Showing Today's TODO Feature** - 2024/07/3 - 07/8\n\n    - **Showing Month's TODO Feature** - 2024/06/28 - 07/6\n\n    - **Sending Notification every morning Feature (new)** - 2024/08/27 - 08/29\n\n\u003cbr\u003e\n\n- 🥕 \"User\"\n\n    - **Sign In Feature** - 2024/06/02 - 06/11\n\n    - **Sign Up Feature** - 2024/06/02 - 06/11\n\n    - **Sign Out Feature** - 2024/07/14 - 07/22\n\n    - **Deleting User Feature** - 2024/07/14 - 07/22\n\n    - **Edit Username Feature** - 2024/07/14 - 07/22\n\n### 💻 Overall: 2024/05/19 - 2024/08/26 (100 days)\n\n\u003cbr\u003e\n\n## ```👑 \"Images\"```\n\u003cimg src=\"readme_assets/page-images.png\"\u003e\n\n\u003cbr\u003e\n\n## ```🫨 \"Links\"```\n- \"🦀 Volcano API\": [Volcano API](https://github.com/aoiorio/VolcanoAPI)\n- \"🪡 Slides\": [Volcano Slides](https://docs.google.com/presentation/d/1eIEV2Hm08teWd2m_5D9OY7se3-NyqIaro5_hdHCcKiI/edit?usp=sharing)\n- \"🧳 Requirements Definition Slides\": [Volcano Requirements Definition Slides](https://docs.google.com/presentation/d/1VScbl4NEXO8QbhK5rt-C63ebLQKySBvkVg6RB1wOrgI/edit?usp=sharing)\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n# ```{2: \"🍽️ Methods\"}```\n\n\u003cbr\u003e\n\n## ```📺 \"Technologies\"```\n\n### 🪟 \"Front-End\"\n\u003cbr\u003e\n\n\u003cimg src=\"https://img.shields.io/badge/Dart-3.19.6-d9d9d9?logo=flutter\"\u003e \u003cimg src=\"https://img.shields.io/badge/Dart-3.3.4-d9d9d9?logo=dart\"\u003e \u003cimg src=\"https://img.shields.io/badge/architecture-onion_architecture-d9d9d9\"\u003e\n\n### 🐘 \"Back-End\"\n\u003cimg src=\"https://img.shields.io/badge/Python-3.9-blue?logo=python\"\u003e \u003cimg src=\"https://img.shields.io/badge/FastAPI-0.99.0-blue?logo=fastapi\"\u003e \u003cimg src=\"https://img.shields.io/badge/architecture-onion_architecture-d9d9d9\"\u003e\n\n### 🌯 \"Infrastructure\"\n\u003cimg src=\"https://img.shields.io/badge/AWS_Lambda-white?logo=awslambda\"\u003e \u003cimg src=\"https://img.shields.io/badge/Amazon_API_Gateway-white?logo=amazonapigateway\"\u003e\n\n### 🫑 \"Design\"\n\u003ca href=\"https://www.figma.com/design/mdtvg3qX7BxmcpDqgEFeJM/Volcano?node-id=0-1\u0026t=jY2GYAAmbcv06Y3E-1\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Figma-gray?logo=figma\"\u003e\n\u003c/a\u003e\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003cdetails\u003e\u003csummary\u003e\"📂 Folder Structure\"\u003c/summary\u003e\n\n## ```\"📂 Folder Structure\"```\n```dart\n└── 📁lib\n    └── 📁core\n        └── errors.dart // for writing original error type (e.g. BackEndError)\n    └── 📁domain // for creating the base\n        └── 📁entity\n        └── 📁repository\n        └── 📁usecase\n    └── 📁gen // for storing generated assets by using fluttergen\n    └── 📁infrastructure // for materializing the methods of repository from domain\n        └── 📁datasource // for creating methods of getting data from API Endpoints\n            └── 📁auth\n            └── 📁todo\n            └── 📁type_color_code\n            └── 📁user\n        └── 📁dto // for specializing the type of data\n        └── 📁model // for the types that users input\n            └── 📁auth\n            └── 📁todo\n            └── 📁user\n        └── 📁repository // for using datasource to materialize reposiotry methods of domain \n    └── 📁presentation // for creating UI\n        └── 📁component\n            └── 📁global\n            └── 📁modal\n            └── 📁sign_in\n            └── 📁sign_up\n            └── 📁todo\n        └── 📁importer\n            └── volcano_page_importer.dart\n        └── 📁page\n            └── 📁auth\n            └── 📁dialogs\n            └── 📁todo_details\n            └── 📁tutorial\n            └── 📁volcano\n        └── 📁provider // for managing data by using riverpod\n            └── 📁back\n                └── 📁auth\n                └── 📁todo\n                └── 📁type_color_code\n                └── 📁user\n                └── global_back_providers.dart\n            └── 📁front\n                └── 📁auth\n                └── 📁notification\n                └── 📁todo\n                └── 📁tutorial\n            └── 📁global\n        └── 📁routes\n            └── 📁routes_model\n            └── routes.dart\n        └── 📁supporter\n            └── notification_random_message.dart\n        └── 📁theme\n            └── theme.dart\n    └── 📁usecase // for giving data to presentation layer with repository methods\n    └── main.dart\n```\n\n\u003c/details\u003e\n\n\n\u003cbr\u003e\n\n## ```🐊 \"Flutter Dependencies\"```\n\n- 🏆 \"State Management\"\n    - [flutter_riverpod](https://pub.dev/packages/flutter_riverpod)\n    - [flutter_hooks](https://pub.dev/packages/flutter_hooks) (for useEffect and useState method)\n    - [hooks_riverpod](https://pub.dev/packages/hooks_riverpod)\n    - [riverpod_annotation](https://pub.dev/packages/riverpod_annotation)\n\n\u003cbr\u003e\n\n- 🐙 \"Connecting To The API Endpoints\"\n    - [retrofit](https://pub.dev/packages/retrofit)\n    - [dio](https://pub.dev/packages/dio)\n    - [http](https://pub.dev/packages/http)\n    - [fpdart](https://pub.dev/packages/fpdart) (for using Either as a type)\n\n\u003cbr\u003e\n\n- 🌎 \"Implementing Authentication Feature\"\n    - [shared_preferences](https://pub.dev/packages/shared_preferences) (for storing JWT token)\n\n\u003cbr\u003e\n\n- 🦁 \"Creating Voice To TODO Feature\"\n    - [speech_to_text](https://pub.dev/packages/speech_to_text) (for recognizing voice)\n    - [record](https://pub.dev/packages/record) (for recording voice)\n    - [audio_waveforms](https://pub.dev/packages/audio_waveforms) (for displaying audio waves while users are recording)\n    - [just_audio](https://pub.dev/packages/just_audio) (for playing audio from URL)\n\n\u003cbr\u003e\n\n- 🎧 \"Implementing Notification Feature\"\n    - [flutter_local_notifications](https://pub.dev/packages/flutter_local_notifications) (for send notification at fixed time everyday)\n    - [flutter_app_badger](https://pub.dev/packages/flutter_app_badger) (for removing badge from the app icon)\n\n\u003cbr\u003e\n\n- 🚌 \"Transition\"\n    - [go_router](https://pub.dev/packages/go_router)\n    - [page_transition](https://pub.dev/packages/page_transition) (for making smooth transaction)\n\n\u003cbr\u003e\n\n- 🎲 \"Creating UI\"\n    - [shimmer](https://pub.dev/packages/shimmer) (for providing great UX by using skelton effects)\n    - [percent_indicator](https://pub.dev/packages/percent_indicator) (for displaying percentage from number for TODO goals)\n    - [smooth_page_indicator](https://pub.dev/packages/smooth_page_indicator) (for creating dots under TODO goals cards)\n    - [gap](https://pub.dev/packages/gap) (for making some gaps between widgets)\n    - [flutter_spinkit](https://pub.dev/packages/flutter_spinkit) (for displaying hourglass when Volcano is loading)\n    - [fluttertoast](https://pub.dev/packages/fluttertoast) (for displaying whether it's successful or not)\n    - [modal_bottom_sheet](https://pub.dev/packages/modal_bottom_sheet) (for making UserModal)\n\n\u003cbr\u003e\n\n- 🐗 \"Others\"\n    - [flutter_gen](https://pub.dev/packages/flutter_gen) (for controlling images and fonts)\n    - [flutter_svg](https://pub.dev/packages/flutter_svg) (for importing svg)\n    - [url_launcher](https://pub.dev/packages/url_launcher) (for launching privacy policy and terms of service docs)\n    - [flutter_native_timezone](https://pub.dev/packages/flutter_native_timezone) (for setting local timezone)\n    - [pedantic_mono](https://pub.dev/packages/pedantic_mono) (for analyzing my codes)\n    - [flutter_lints](https://pub.dev/packages/flutter_lints)\n\n**And more! If you want to check all of them, please go to my [pubspec.yaml](https://github.com/aoiorio/Volcano/blob/main/pubspec.yaml#L30-L82)**\n\n\u003cbr\u003e\n\n\n## ```📸 \"Method's Pictures\"```\n\u003cbr\u003e\n\n| \"As an User\"| \"As a Developer\"|\n|----|----|\n|\u003cimg src=\"readme_assets/method-picture-user.png\" width=600\u003e|\u003cimg src=\"readme_assets/method-picture-me.png\" width=600\u003e|\n\n\u003cbr\u003e\n\n## ```🧠 \"ERD\"```\n\u003cdiv align=\"center\"\u003e\n\u003cimg src=\"readme_assets/volcano-erd.png\" width=600\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n# ```{3: \"🫐 Thoughts\"}```\n\n\u003cbr\u003e\n\n## ```💎 \"My Favorites\"```\n\u003cbr\u003e\n\n###  1. 🐠 **Saving Hex Color Code In Database**\n- Reason\n    - I wanted to create a great app to recognize types directly through my eyes\n\n- Difficult Points\n    - Converting color codes to Flutter's color codes\n    - Generating RBG with range for color I like\n\n### 2. 🙃 Displaying Today's TODOs\n- Reason\n    - When I open Volcano in the morning, I can see what I have to do today and achieve it without forgetting something\n\n- Difficult Points\n    - I was torn between splitting the API endpoints of getting Today's TODO and Month's TODO or not (Finally I decided to combine them together)\n\n### 3. 🗂️ Using Onion Architecture\n- Reason\n    - I usually write spaghetti codes so I was craving for writing clean and updatable codes by myself\n\n- Difficult Points\n    - I've started to learn about Onion Architecture without any knowledge of it. So I struggled with how I create folder structure\n\n\u003cbr\u003e\n\n## ```🤠 \"What I've got\"```\n\u003cbr\u003e\n\n### \"I felt like I was working with my teammates even I've developed this by my own\"\n- I used architecture like I was creating an app with someone\n- When I merge my PR to a branch, I always send \"LGTM\" photo on my issue or PR pages and it seemed like I was reviewed from my boss\n- I also tried to separate URLs of Amazon API Gateway such as prod and dev like the actual projects do in companies\n\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n\u003ca href=\"https://www.buymeacoffee.com/aoiorio\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e\n\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n```python\n{\n    \"status_code\": 500,\n    \"message\": \"Thank you.\"\n}\n```\n\n\u003cbr\u003e\n\n\u003cbr\u003e\n\n \u003ca href=\"https://apps.apple.com/jp/app/volcano-with-todo/id6657991782\"\u003e\n    \u003cdiv align=center\u003e\n        \u003cimg src=\"readme_assets/fish-with-download-button.PNG\" width=400\u003e\n    \u003c/div\u003e\n\n \u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faoiorio%2Fvolcano","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faoiorio%2Fvolcano","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faoiorio%2Fvolcano/lists"}