docs: enhance README with new badges, quickstart instructions, and improved structure for better navigation

This commit is contained in:
cogwheel0
2025-08-26 18:30:39 +05:30
parent 87492227a8
commit 8ee4c0e78e
9 changed files with 143 additions and 67 deletions

145
README.md
View File

@@ -1,11 +1,21 @@
# Conduit # Conduit
<p align="center">
<img src="https://img.shields.io/badge/Platforms-iOS%20%7C%20Android-00BFA5" alt="Platforms" />
<a href="https://github.com/cogwheel0/conduit/releases">
<img src="https://img.shields.io/github/v/release/cogwheel0/conduit?display_name=tag&color=8A2BE2" alt="Latest Release" />
</a>
<a href="https://github.com/cogwheel0/conduit/releases">
<img src="https://img.shields.io/github/downloads/cogwheel0/conduit/total?label=Downloads&color=0A84FF" alt="Downloads" />
</a>
</p>
<div align="center"> <div align="center">
<a href="https://groups.google.com/g/conduit"> <a href="https://groups.google.com/g/conduit">
<img src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" alt="Get it on Google Play" style="height:80px; vertical-align:middle;"/> <img src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" alt="Get it on Google Play" style="height:80px; vertical-align:middle;"/>
</a> </a>
<a href="https://apps.apple.com/us/app/conduit-open-webui-client/id6749840287"> <a href="https://apps.apple.com/us/app/conduit-open-webui-client/id6749840287">
<img src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg" alt="Download on the App Store" style="height:56px; vertical-align:middle;"/> <img src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg" alt="Download on the App Store" style="height:54px; vertical-align:middle;"/>
</a> </a>
<br><br> <br><br>
</div> </div>
@@ -13,12 +23,43 @@
<br> <br>
<p align="center"> <p align="center">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" alt="Screenshot 1" width="250" /> <video src="fastlane/metadata/android/en-US/videos/conduit-demo.mp4"
controls
poster="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png"
width="300">
</video>
</p> </p>
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. 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 ## Features
### Core 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) - **File Uploads**: Support for images and documents (RAG)
- **Multi-modal Support**: Work with vision models - **Multi-modal Support**: Work with vision models
- **Secure Storage**: Credentials stored securely using platform keychains - **Secure Storage**: Credentials stored securely using platform keychains
- **Folder Management**: Organize conversations into folders; create, rename, move, and delete
## Screenshots ## Screenshots
<p align="center"> | | | | |
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" alt="Screenshot 2" width="200" /> | --- | --- | --- | --- |
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/3.png" alt="Screenshot 3" width="200" /> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" alt="Screenshot 2" width="200" /> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/3.png" alt="Screenshot 3" width="200" /> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" alt="Screenshot 4" width="200" /> | <img src="fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" alt="Screenshot 5" width="200" /> |
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/4.png" alt="Screenshot 4" width="200" />
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/5.png" alt="Screenshot 5" width="200" />
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/6.png" alt="Screenshot 6" width="200" />
</p>
## Requirements ## Requirements
@@ -110,67 +148,20 @@ The app will request permissions for:
## Localization (i18n) ## Localization (i18n)
- Supported locales: `en`, `de`, `fr`, `it`. See the dedicated documentation: [docs/localization.md](docs/localization.md)
- Uses Flutter's `gen_l10n` with ARB files and the `intl` package for date/number formatting.
### Install & Generate ## Compatibility
- Install packages: | Conduit App | OpenWebUI | Notes |
- `flutter_localizations` (Flutter SDK) | --- | --- | --- |
- `intl: ^0.20.2` | 1.x | 0.3.x+ | Uses OpenAPI schema at `assets/openapi.json` |
- 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 ## Docs
- Basic text: - Localization: `docs/localization.md`
- `Text(AppLocalizations.of(context)!.appTitle)` - Architecture (planned): `docs/architecture.md`
- With placeholder: - Theming (planned): `docs/theming.md`
- `Text(AppLocalizations.of(context)!.dynamicContentWithPlaceholder('Alex'))` - Release Process (planned): `docs/release.md`
- 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.
### InApp 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 hardcoded strings and replace with `AppLocalizations`.
- iOS strings not changing:
- Restart the app after changing system language or use the inapp language selector.
### References
- Flutter localization: https://docs.flutter.dev/ui/accessibility-and-localization/internationalization
- Intl package: https://pub.dev/packages/intl
## Architecture ## Architecture
@@ -203,12 +194,32 @@ lib/
Contributions are welcome! Please feel free to submit a Pull Request. 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 1. Fork the project
2. Create your feature branch (`git checkout -b feature/AmazingFeature`) 2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`) 3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the branch (`git push origin feature/AmazingFeature`) 4. Push to the branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request 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 OpenWebUI server.
## License ## License
This project is licensed under the GPL3 License - see the LICENSE file for details. This project is licensed under the GPL3 License - see the LICENSE file for details.

65
docs/localization.md Normal file
View File

@@ -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.
### InApp 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 hardcoded strings and replace with `AppLocalizations`.
- iOS strings not changing:
- Restart the app after changing system language or use the inapp language selector.
### References
- Flutter localization: https://docs.flutter.dev/ui/accessibility-and-localization/internationalization
- Intl package: https://pub.dev/packages/intl

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

After

Width:  |  Height:  |  Size: 705 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 KiB

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 293 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 568 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB