diff --git a/README.md b/README.md index d6ff839..656afd5 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,21 @@ # Conduit +

+ Platforms + + Latest Release + + + Downloads + +

+
Get it on Google Play - Download on the App Store + Download on the App Store

@@ -13,12 +23,43 @@

- Screenshot 1 - +

Conduit is an open-source, cross-platform mobile application for Open-WebUI, providing a native mobile experience for interacting with your self-hosted AI infrastructure. +## Table of Contents + +- [Features](#features) +- [Screenshots](#screenshots) +- [Requirements](#requirements) +- [Quickstart](#quickstart) +- [Installation](#installation) +- [Building for Release](#building-for-release) +- [Configuration](#configuration) +- [Localization (i18n)](#localization-i18n) +- [Compatibility](#compatibility) +- [Docs](#docs) +- [Architecture](#architecture) +- [Troubleshooting](#troubleshooting) +- [Security & Privacy](#security--privacy) +- [Contributing](#contributing) +- [License](#license) +- [Support](#support) + +## Quickstart + +```bash +git clone https://github.com/cogwheel0/conduit && cd conduit +flutter pub get +flutter pub run build_runner build --delete-conflicting-outputs +flutter run -d ios # or: -d android +``` + ## Features ### Core Features @@ -33,16 +74,13 @@ Conduit is an open-source, cross-platform mobile application for Open-WebUI, pro - **File Uploads**: Support for images and documents (RAG) - **Multi-modal Support**: Work with vision models - **Secure Storage**: Credentials stored securely using platform keychains +- **Folder Management**: Organize conversations into folders; create, rename, move, and delete ## Screenshots -

- Screenshot 2 - Screenshot 3 - Screenshot 4 - Screenshot 5 - Screenshot 6 -

+| | | | | +| --- | --- | --- | --- | +| Screenshot 2 | Screenshot 3 | Screenshot 4 | Screenshot 5 | ## Requirements @@ -110,67 +148,20 @@ The app will request permissions for: ## Localization (i18n) -- Supported locales: `en`, `de`, `fr`, `it`. -- Uses Flutter's `gen_l10n` with ARB files and the `intl` package for date/number formatting. +See the dedicated documentation: [docs/localization.md](docs/localization.md) -### Install & Generate +## Compatibility -- Install packages: - - `flutter_localizations` (Flutter SDK) - - `intl: ^0.20.2` -- Files are under `lib/l10n/*.arb`. The template is `app_en.arb`. -- Generate localizations: - - `flutter gen-l10n` - - or run a full build: `flutter pub get && flutter gen-l10n` +| Conduit App | Open‑WebUI | Notes | +| --- | --- | --- | +| 1.x | 0.3.x+ | Uses OpenAPI schema at `assets/openapi.json` | -### Usage Examples +## Docs -- Basic text: - - `Text(AppLocalizations.of(context)!.appTitle)` -- With placeholder: - - `Text(AppLocalizations.of(context)!.dynamicContentWithPlaceholder('Alex'))` -- Pluralization: - - `Text(AppLocalizations.of(context)!.itemsCount(3))` -- Date/time formatting: - - `final dateText = DateFormat.yMMMMEEEEd(Localizations.localeOf(context).toString()).format(DateTime.now());` - - `Text(dateText)` -- Number formatting: - - `final price = NumberFormat.currency(locale: Localizations.localeOf(context).toString(), symbol: '€').format(1234.56);` - - `Text(price)` - -### Add a New Language - -- Create a new ARB file in `lib/l10n/`, e.g. `app_es.arb`. -- Copy keys from `app_en.arb` and provide translated values. -- Ensure placeholders and plural rules match the template. -- Add the locale to `supportedLocales` in `MaterialApp` (see `lib/main.dart`). -- Regenerate: `flutter gen-l10n`. - -### Best Practices - -- Key naming: use lowerCamelCase (e.g., `loginButton`, `errorMessage`). -- Include `@` metadata with `description` for context and `placeholders` with examples. -- Prefer ICU plural/select syntax in ARB for quantities and genders. -- Avoid concatenating strings at runtime; use placeholders in ARB. - -### In‑App Locale Switching - -- Open the Profile page → Settings tile → choose `System`, `English`, `Deutsch`, `Français`, or `Italiano`. -- Selection persists across app launches. - -### Troubleshooting - -- Build fails with ARB placeholder errors: - - Ensure every placeholder has an example string and correct type. -- Missing translation at runtime: - - Flutter falls back to English; search for hard‑coded strings and replace with `AppLocalizations`. -- iOS strings not changing: - - Restart the app after changing system language or use the in‑app language selector. - -### References - -- Flutter localization: https://docs.flutter.dev/ui/accessibility-and-localization/internationalization -- Intl package: https://pub.dev/packages/intl +- Localization: `docs/localization.md` +- Architecture (planned): `docs/architecture.md` +- Theming (planned): `docs/theming.md` +- Release Process (planned): `docs/release.md` ## Architecture @@ -203,12 +194,32 @@ lib/ Contributions are welcome! Please feel free to submit a Pull Request. +Developer workflow: + +```bash +flutter analyze +flutter pub run build_runner build --delete-conflicting-outputs +# flutter test # add when tests are available +``` + 1. Fork the project 2. Create your feature branch (`git checkout -b feature/AmazingFeature`) 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) 4. Push to the branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request +## Troubleshooting + +- iOS: ensure recent Xcode, run `cd ios && pod install`, set signing team in Xcode if building on device. +- Android: minSdk 23+, ensure correct Java and Gradle; if builds fail, try `flutter clean`. +- Codegen conflicts: `flutter pub run build_runner build --delete-conflicting-outputs`. + +## Security & Privacy + +- Credentials are stored using platform secure storage (Keychain/Keystore). +- No analytics or telemetry are collected. +- Network calls are only made to your configured Open‑WebUI server. + ## License This project is licensed under the GPL3 License - see the LICENSE file for details. diff --git a/docs/localization.md b/docs/localization.md new file mode 100644 index 0000000..2107a74 --- /dev/null +++ b/docs/localization.md @@ -0,0 +1,65 @@ +## Localization (i18n) + +- Supported locales: `en`, `de`, `fr`, `it`. +- Uses Flutter's `gen_l10n` with ARB files and the `intl` package for date/number formatting. + +### Install & Generate + +- Install packages: + - `flutter_localizations` (Flutter SDK) + - `intl: ^0.20.2` +- Files are under `lib/l10n/*.arb`. The template is `app_en.arb`. +- Generate localizations: + - `flutter gen-l10n` + - or run a full build: `flutter pub get && flutter gen-l10n` + +### Usage Examples + +- Basic text: + - `Text(AppLocalizations.of(context)!.appTitle)` +- With placeholder: + - `Text(AppLocalizations.of(context)!.dynamicContentWithPlaceholder('Alex'))` +- Pluralization: + - `Text(AppLocalizations.of(context)!.itemsCount(3))` +- Date/time formatting: + - `final dateText = DateFormat.yMMMMEEEEd(Localizations.localeOf(context).toString()).format(DateTime.now());` + - `Text(dateText)` +- Number formatting: + - `final price = NumberFormat.currency(locale: Localizations.localeOf(context).toString(), symbol: '€').format(1234.56);` + - `Text(price)` + +### Add a New Language + +- Create a new ARB file in `lib/l10n/`, e.g. `app_es.arb`. +- Copy keys from `app_en.arb` and provide translated values. +- Ensure placeholders and plural rules match the template. +- Add the locale to `supportedLocales` in `MaterialApp` (see `lib/main.dart`). +- Regenerate: `flutter gen-l10n`. + +### Best Practices + +- Key naming: use lowerCamelCase (e.g., `loginButton`, `errorMessage`). +- Include `@` metadata with `description` for context and `placeholders` with examples. +- Prefer ICU plural/select syntax for quantities and genders. +- Avoid concatenating strings at runtime; use placeholders in ARB. + +### In‑App Locale Switching + +- Open the Profile page → Settings tile → choose `System`, `English`, `Deutsch`, `Français`, or `Italiano`. +- Selection persists across app launches. + +### Troubleshooting + +- Build fails with ARB placeholder errors: + - Ensure every placeholder has an example string and correct type. +- Missing translation at runtime: + - Flutter falls back to English; search for hard‑coded strings and replace with `AppLocalizations`. +- iOS strings not changing: + - Restart the app after changing system language or use the in‑app language selector. + +### References + +- Flutter localization: https://docs.flutter.dev/ui/accessibility-and-localization/internationalization +- Intl package: https://pub.dev/packages/intl + + diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png index 1f7e857..0dbf0b7 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png index 5331fe3..ee8af58 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png index b2b11fd..68f1afe 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png index 5d43ada..60944bc 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png index 7f5390d..4401e5e 100644 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png and b/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png differ diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png deleted file mode 100644 index fa4b509..0000000 Binary files a/fastlane/metadata/android/en-US/images/phoneScreenshots/6.png and /dev/null differ diff --git a/fastlane/metadata/android/en-US/videos/conduit-demo.mp4 b/fastlane/metadata/android/en-US/videos/conduit-demo.mp4 new file mode 100644 index 0000000..de09b88 Binary files /dev/null and b/fastlane/metadata/android/en-US/videos/conduit-demo.mp4 differ