{"id":48676450,"url":"https://vitto4.github.io/hifumi/","last_synced_at":"2026-04-26T11:00:28.696Z","repository":{"id":272152831,"uuid":"915642749","full_name":"vitto4/hifumi","owner":"vitto4","description":"A flashcards companion app tailored for Minna no Nihongo Shokyū I \u0026 II textbooks.","archived":false,"fork":false,"pushed_at":"2026-03-28T14:43:04.000Z","size":22758,"stargazers_count":13,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-23T13:29:27.444Z","etag":null,"topics":["android","flashcards","flutter","flutter-apps","japanese-language","japanese-study","language-learning","minna-no-nihongo","webapp"],"latest_commit_sha":null,"homepage":"https://vitto4.github.io/hifumi/","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vitto4.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-12T12:24:50.000Z","updated_at":"2026-03-28T14:11:43.000Z","dependencies_parsed_at":"2025-08-20T14:45:00.630Z","dependency_job_id":null,"html_url":"https://github.com/vitto4/hifumi","commit_stats":null,"previous_names":["vitto4/hifumi"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/vitto4/hifumi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitto4%2Fhifumi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitto4%2Fhifumi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitto4%2Fhifumi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitto4%2Fhifumi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vitto4","download_url":"https://codeload.github.com/vitto4/hifumi/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vitto4%2Fhifumi/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32294591,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["android","flashcards","flutter","flutter-apps","japanese-language","japanese-study","language-learning","minna-no-nihongo","webapp"],"created_at":"2026-04-10T16:00:37.875Z","updated_at":"2026-04-26T11:00:28.690Z","avatar_url":"https://github.com/vitto4.png","language":"Dart","funding_links":[],"categories":["Vocabulary"],"sub_categories":["Other textbooks"],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg alt=\"hifumi\" src=\"./assets/logo.svg?raw=true\" width=\"350px\" height=\"auto\"\u003e\n  \u003c/picture\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://flutter.dev/\"\u003e\n    \u003cimg alt=\"Flutter\" src=\"https://img.shields.io/badge/Flutter-%232968d0.svg?logo=Flutter\u0026logoColor=white\u0026style=flat-square\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vitto4/hifumi/blob/main/LICENSE\"\u003e\n    \u003cimg alt=\"MPL-2.0\" src=\"https://img.shields.io/github/license/vitto4/hifumi?style=flat-square\"\n  /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vitto4/hifumi/releases\"\u003e\n    \u003cimg alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/vitto4/hifumi?style=flat-square\"\n  /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eA flashcards companion app tailored for \u003ccode\u003eMinna no Nihongo Shokyū Ⅰ \u0026 Ⅱ\u003c/code\u003e textbooks.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003csup\u003e❄\u0026#xFE0E;\u003c/sup\u003e\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\u003cimg src=\"web/images/showcase.png\" alt=\"Description of image\" style=\"width: 93%;\"\u003e\u003c/picture\u003e\n\u003c/div\u003e\n\n## 🧭 Table of contents\n\n1. [Overview](#-overview)\n2. [Installation](#-installation)\n3. [Development](#️-development)\n4. [Notes](#-notes)\n5. [Contributing](#-contributing)\n\n## ☁ Overview\n\nGot a vocab test looming in your Japanese class ? Feeling overwhelmed by the mountain of words in your `Minna no Nihongo` lessons and not sure where to start ? \u003cbr\u003e\nWorry no more, _there's an app for that_ !\n\nThis readme mostly discusses technical stuff 🧙‍♂️ \u003cbr\u003e\nShould you simply wish to give the app a whirl, your journey awaits beneath –\n\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://vitto4.github.io/hifumi\"\u003e\u003ckbd\u003e ⥼\u003cb\u003e Web version \u003c/b\u003e⥽ \u003c/kbd\u003e\u003c/a\u003e\u003cpicture\u003e\u003cimg width=\"10%\" height=\"0px\"\u003e\u003c/picture\u003e\u003ca href=\"https://github.com/vitto4/hifumi/releases\"\u003e\u003ckbd\u003e ⥼\u003cb\u003e Android version \u003c/b\u003e⥽ \u003c/kbd\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003csup\u003e\u003cins\u003eNote\u003c/ins\u003e – You may also use the web version on Android.\u003c/sup\u003e\u003c/p\u003e\n\n\n\u003cbr\u003e\n\n\n**hifumi** was meant to be a replacement for [*Minna no Flashcards*](https://play.google.com/store/apps/details?id=com.factory201.minnanoflashcards \"now pulled from the Play Store\"), reworked with the whole **fifty lessons** of the [`Minna no Nihongo Shokyū`](https://www.3anet.co.jp/np/en/list.html?af=1\u0026g=7-12-33\u0026s=1 \"みんなの日本語 初級 Ⅰ \u0026 Ⅱ\") books. \u003cbr\u003e\nAnd well, that is what it ended up being, but an overengineered one for sure !\n\nIt also packs additional quality of life features, such as being able to create custom lists of words to study (called _decks_), opening [Jisho.org](https://jisho.org) with the click of a button, and more !\n\n\n## 📦 Installation\n\n#### Web\n\nThe [web app](https://vitto4.github.io/hifumi) requires no particular installation.\n\nA prebuilt version is also offered in the [releases](https://github.com/vitto4/hifumi/releases). It can be used locally by running something like `python3 -m http.server` in the root of the folder.\n\n#### Android\n\n1. Head over to the [releases](https://github.com/vitto4/hifumi/releases) page.\n2. Grab the right `apk` for you phone's CPU architecture. If unsure, get the `arm64-v8a` version, this corresponds to what most smartphones run on nowadays.\n3. Install it like you would with any other `apk` file. Opening it from your device's file manager usually does the trick.\n\n#### iOS \u0026 Others\n\nAt the moment, only precompiled binaries for _Android_ and _Web_ are offered. Therefore, the **Web** version should be used on all other platforms. If you'd like to see a platform added, you're welcome to open an issue :)\n\n## 🛠️ Development\n\nInterested in modifying the source or building the app yourself ?\n\nYou will need a working copy of the **Dart SDK** and **Flutter SDK**, with `Web` and `Android` development set up. If you're new to this don't worry, it is pretty straightforward to set up, check out [Install | Flutter](https://docs.flutter.dev/get-started/install).\n\n1. Clone the repository : `git clone --recurse-submodules https://github.com/vitto4/hifumi.git \u0026\u0026 cd hifumi`\n2. Get dependencies : `flutter pub get`\n3. You are now ready to `flutter run` 🎉\n\nIf you end up modifying an icon, you may also need to `flutter pub run flutter_launcher_icons`.\n\n#### 🏗️ Build \u0026 Release\n\nFor the detailed build process, take a look at the build workflows in [`.github/build-*.yml`](./.github/workflows/). \u003cbr\u003e\n**tl;dr** your usual flutter business, except a few [things](./lib/entities/app_info.dart#L18-L20) are overwritten here and there.\n\nAs for the **Pages**, it is more of a rolling release and may be deployed whenever from the main branch.\n\n#### 📅 Wishlist\n\nA couple of things I may get to someday\n\n- [ ] For the `Web` release, compile to Wasm once compatibility spans all browsers (see [Wasm | Flutter](https://docs.flutter.dev/platform-integration/web/wasm#learn-more-about-browser-compatibility)).\n- [ ] Make use of [macros](https://dart.dev/language/macros) to write the _version number_ and _commit hash_ to `app_info.dart` at compile time, instead of relying on external tools in the build workflows.\n- [ ] Include a dark theme.\n- [ ] Look into adding iOS as a build target (would need sideloading support first though).\n\n#### 🧱 Structure\n\nI might have got a little carried away when deciding on filenames and folders, so here's a much-needed file structure overview ! \u003cbr\u003e\nThe result should resemble a somewhat frankensteined [folder by feature](https://www.hungrimind.com/articles/folder-structure-for-large-projects#folder-by-feature) arrangement.\n\n\u003cdiv align=\"center\"\u003e\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003eShow structure\u003c/code\u003e\u003c/summary\u003e\n  \u003cdiv align=\"left\"\u003e\n\n  ```\n  .\n  lib/\n  ├── abstractions/         # Mix of abstractions on concepts and building blocks for the rest of the code, as well as data classes.\n  │                         # Abstractions on APIs/packages are instead located in `services/`.\n  │\n  ├── pages/                # Pages of the app and related widgets.\n  │\n  ├── services/             # Utility services for the app, including interfacing with the dataset, data storage, layout management, and more.\n  │\n  ├── widgets/              # Shared widgets.\n  │    │\n  │    ├── archipelago/     # Home for island-style widgets, including containers, buttons, segmented selectors, etc.\n  │    │\n  │    ├── overlays/\n  │    │\n  │    ├── seasoning/       # Catch-all for miscellaneous widgets sprinkled throughout the app.\n  │    │                    # Their purpose is purely to make the app look better, hence `seasoning`s.\n  │    │\n  │    └── *.dart           # Various widgets that didn't fit in categories described above.\n  │\n  └── main.dart\n  ```\n\n  \u003c/div\u003e\n\u003c/details\u003e\n\u003c/div\u003e\n\n## 🔖 Notes\n\n- I have come to the realisation that UI/UX design is very much not easy (ᴗ.ᴗ). Thus, I've « borrowed » the design language from a suspiciously intimidating owl. \u003cbr\u003e\n  \u003e Dear Duo, \u003cbr\u003e\n  \u003e Please don't come for me, I did my lesson today, and if the borrowing isn't fine I'll happily comply ! \u003cbr\u003e\n  \u003e Thankies :3\n\n  (fancy reaching out ? claim your [Free OSINT Technique™](https://cheatsheet.haax.fr/open-source-intelligence-osint/platforms-hunting/github/#finding-user-e-mail))\n- The *dataset* from which all words are sourced lives on GitHub as a separate project : [`MinnaNoDS`](https://github.com/vitto4/MinnaNoDS).\n- Some of the files are prefixed with `@`.\n  I wanted them grouped together. It may not be pretty, but it works c: \u003cbr\u003e\n  Looking back, I believe these could have been categorised as *models* or *data classes*.\n- To save on asset size, fonts have been subsetted.\n  - \u003cins\u003eNoto Serif Japanese\u003c/ins\u003e to `あ`\n  - \u003cins\u003eNew Tegomin\u003c/ins\u003e to `あ字言葉準備中.`\n  - \u003cins\u003eNoto Sans Japanese\u003c/ins\u003e to whatever [`noto_sans_JP`](./fonts/tools/fonts_subsetting.py#L66) ends up being.\n\n  See also [`fonts_subsetting.py`](./fonts/tools/fonts_subsetting.py) and [`fonts-subsetting.yml`](./.github/workflows/fonts-subsetting.yml).\n- Among the widgets are some that are just asking to be reused standalone in another app ! This includes [`swipeable.dart`](./lib/widgets/swipeable.dart) and [`island_container.dart`](./lib/widgets/archipelago/island_container.dart). If these sound like they could be useful for your project, be sure to take a look !\n\n## 🧩 Contributing\n\nYou're very welcome to pitch in ! \u003cbr\u003e\nThat being said, as I'm still pretty new to everything flutter and app development, the code can be a bit all over the place ; so proceed at your own risk (:\n\nAlso I probably won't devote much time to this project in the near future, so please bear with me if I'm slow on the reply ^-^\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/vitto4.github.io%2Fhifumi%2F","html_url":"https://awesome.ecosyste.ms/projects/vitto4.github.io%2Fhifumi%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/vitto4.github.io%2Fhifumi%2F/lists"}