Skip to content

Repository files navigation

Galta (كامل)

A bilingual (Arabic RTL / English LTR) AAC — augmentative and alternative communication — app. It gives a non-verbal or bed-bound person a grid of large, colorful phrase buttons ("I want to eat", "I'm in pain", "Call the nurse") that speak out loud when tapped, and gives caregivers a Manage tab to organize categories, phrases, and voices.

Features

  • Speak tab — category chips + a grid of large phrase buttons. Each phrase plays a bundled preset voice, a caregiver recording, or device text-to-speech.
  • Manage tab — create/edit categories (icon, color, bilingual names) and phrases (bilingual labels, per-language voice), toggle any of them on/off, and reset presets back to their original content.
  • Fully bilingual — every string, layout, and text field adapts to Arabic (RTL) and English (LTR). Switching language restarts the app to flip the native layout direction.
  • Offline-first — all content and recordings live on the device (zustand + AsyncStorage). No account, no network needed.

Stack

Expo SDK 57 · React Native 0.86 · React 19.2 · TypeScript (strict) · expo-router · zustand · i18next · jest-expo · Maestro (e2e)

Requirements: Node 22+, Xcode 26.4+ (iOS), Android SDK 36 / JDK 17 (Android).

Development

npm install
npm run ios      # build + launch on the iOS simulator
npm run android  # build + launch on an Android device/emulator
npm start        # Metro only (attach an installed dev build)

Quality gates

Run before every commit:

npm run guardme

That chains guardme:clean-code (ESLint + tsc --noEmit), the jest suite (npm test, tests in src/__tests__/), and guardme:docs (scripts/verify_docs.py).

End-to-end flows (require a booted iOS simulator or connected Android device with the app installed and Metro running):

maestro test e2e/galta-smoke.yaml         # bilingual smoke: EN → AR → EN
maestro test e2e/galta-design-check.yaml  # design/RTL visual checkpoints

Project layout

src/
  app/            expo-router routes (index = Speak, manage = Manage)
  audio/          playback, recording, preset-audio manifest
  components/     UI (ui/app-button, themed-text, speak/, manage/)
  constants/      theme tokens (colors, radii, shadows) + fonts/typography
  hooks/          use-rtl, use-typography, use-language-font, use-theme
  i18n/           en.ts / ar.ts string catalogs + language switching
  lib/            rtl statics, app reload
  store/          zustand store, types, preset seed data
assets/audio/     bundled preset voices (ar/en), generated by
                  scripts/generate-preset-audio.sh
e2e/              Maestro flows

Design-system rules and agent conventions live in AGENTS.md.

Release

Android tester APK (debug-signed, standalone JS bundle):

cd android && ./gradlew assembleRelease
# → android/app/build/outputs/apk/release/app-release.apk

EAS build profiles for store distribution are configured in eas.json.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages