Repository navigation
Plan Web Pwa
Source of truth: this wiki page.
For next week (2026-10-04).
For next week, also add a plan for a github pages PWA with webstorage to save sessions in cache, this will be useful to get ios people to check it out.
There is no iOS build. A web build that installs as an app, a PWA, lets iPhone users try Fluenough from Safari, with progress kept on the phone.
-
Build and publish.
- A workflow,
.github/workflows/pages.yml, runs on every push tomain:flutter create . --platforms=web(as CI already does for Android), thenflutter build web --release --base-href /fluenough/. - It publishes
build/webto GitHub Pages, athttps://aaronified.github.io/fluenough/. -
web/is generated likeandroid/, so it is not committed (AGENTS.md rule 4). Atools/brand_web.pysets the manifest's name, colours and icons, astools/brand_android.pydoes for Android.
- A workflow,
-
Installable (the PWA part).
-
web/manifest.json: name, short name,display: standalone, theme colour, and icons at 192 and 512 px, with a maskable one. - Flutter's service worker caches the app and the bundled decks, so it opens offline after the first visit.
- iOS installs it from Safari's Share menu, "Add to Home Screen". The app should say how, once, on iOS Safari.
-
-
Sessions saved in the browser's storage.
- Progress is a drift database (ADR-0005). drift runs on the web on SQLite compiled to WebAssembly, stored in the browser's origin-private file system where there is one, and in IndexedDB where not.
-
drift_fluttertakesDriftWebOptionsnamingsqlite3.wasmanddrift_worker.js, which the workflow copies intoweb/. - The review log, settings and profiles then persist like on Android.
- Settings stored outside drift need the same check.
-
What the web cannot do, and what to do instead.
Feature On the web Speech flutter_ttsuses the browser's Web Speech API, which Safari has. Its voices differ from Android's, so the Voices page must show what the browser offers.Speaking drill speech_to_textworks in Chrome and only partly in Safari. Where it can't hear, the drill says so, as it does for a phone without a recogniser.Phone volume flutter_volume_controllerhas no web support, and its code readsdart:io'sPlatform, which throws on the web.SystemVolumeMonitormust not start on the web (kIsWeb).Updates The OTA update check and installer are Android-only. On the web, the service worker brings the new version. Deck import and log export file_pickerworks on the web: downloads and uploads instead of the file system.Bug reports Mail links work. Screenshots in reports need checking. -
Storage that lasts on iOS.
- Safari may clear a website's storage after seven days without a visit,
unless the site is added to the Home Screen. The app should ask for
persistent storage (
navigator.storage.persist()) where the browser allows it, and suggest installing it. - It should also point to Settings > Export log as the backup.
- Safari may clear a website's storage after seven days without a visit,
unless the site is added to the Home Screen. The app should ask for
persistent storage (
- The URL: the default
aaronified.github.io/fluenough/or a custom domain. - (Settled by ADR-0037: it downloads decks like the app.) Whether the web build carries every language's decks, about the size of the APK's, or loads them as they are chosen.
- Whether the web app may check for updates itself, or only through the service worker.
About 4–6 hours, most of it the drift web setup and checking each plugin in Safari and Chrome. Confidence: low, until the web build is tried. No iPhone is available here, so the owner or a tester has to try it on one.
See also: Roadmap · Plans-Index · Home
1. Learner guides
- Learner Guide
- Getting Started
- Today and Daily Lessons
- Drills and Skills
- Courses and Paths
- Proficiency Levels
- Scripts and Readings
- Readings ISO 15919
- Speaking and Listening
- Progress and Stats
- Profiles and Settings
- Backup and Restore
- Reporting a Problem
2. Deck building guides
- Deck Building Guide
- Deck Format
- Romanising Indic Languages
- Deck Licences and Quoted Books
- Deck Tools
3. Review guides
4. Translation guide
5. Building on iOS
6. Roadmap
7. Sources and attributions
8. Contribution and agentic coding