Self-contained Fedora 44 / KDE Plasma learning app. No network, no LLM, no server.
Progress, quiz scores, and starred cheat-sheet items persist in localStorage (survives
inside the Capacitor WebView). The terminal "explain output" reads the authored command
database; "Explain this error" matches your paste against a curated Fedora-44 knowledge base.
Live version: https://LebaneseZorro.github.io/fedora-master/
- iPhone / any browser: open https://LebaneseZorro.github.io/fedora-master/ — it's an installable PWA. On iOS use Safari's Share > Add to Home Screen; after the first load it works fully offline.
- Android APK: grab the APK from the latest release — or build it yourself below.
- Node.js 20+ (you already have it)
- Java: no separate JDK install — the build uses Android Studio's bundled JDK. If Gradle
complains about the JDK version, add
org.gradle.java.home=/opt/android-studio/jbrtoandroid/gradle.properties(adjust the path to where Android Studio is installed). - Android Studio (Flatpak:
flatpak install flathub com.google.AndroidStudio, or the tarball). On first launch it installs the Android SDK + platform-tools. PointANDROID_HOMEat the SDK (usually~/Android/Sdk) in your shell rc.
npm install # deps
npm run build # -> dist/ (static web bundle)
npx cap add android # first time only: creates ./android native project
npm run sync # build + copy dist/ into the android project
npm run open:android # opens Android Studio on ./androidIn Android Studio: Build > Build Bundle(s)/APK(s) > Build APK(s), then locate the
app-debug.apk. Copy it to the Z Fold and install (enable "install unknown apps" for your
file manager). Done — it runs fully offline.
Once the SDK env vars are set you can skip the IDE:
npm run sync
cd android && ./gradlew assembleDebug
# APK at android/app/build/outputs/apk/debug/app-debug.apk
adb install -r android/app/build/outputs/apk/debug/app-debug.apk # if phone plugged in w/ USB debugging- App icon: replace the generated icons under
android/app/src/main/res/mipmap-*, or use@capacitor/assets(npx @capacitor/assets generate --android) from a single 1024×1024 PNG inassets/. - Signed release APK (for a stable install that updates cleanly):
keytool -genkey -v -keystore fm.keystore -alias fm -keyalg RSA -keysize 2048 -validity 10000 cd android && ./gradlew assembleRelease # after wiring signingConfig in app/build.gradle
- Z Fold note: the layout is responsive — the sidebar collapses to a ☰ menu on the
narrow outer screen and expands on the inner display.
viewport-fit=cover+ safe-area insets keep content off the camera cutout. Fold/unfold just re-flows.
Everything lives in src/App.jsx:
CMDS— command database (also feeds terminal "explain output")SHORTCUTS— Plasma shortcutsMODULES— the six learning modulesQUIZZES— per-module questionsERRORS— the error-explainer knowledge base (add{id, w, re:[...], summary, cause, fix:[...], prevention, angle}entries; higherwwins ties) Rebuild + sync after edits.