Initial commit: Fabled Android app
Flutter Android client for FabledAssistant with: - Session-cookie auth via persistent cookie jar (Dio + cookie_jar) - OAuth/SSO login via in-app WebView (flutter_inappwebview) - Notes: list, detail (markdown render), create/edit - Tasks: list with status tabs, create/edit with priority - Chat: SSE streaming bubbles, conversation management - Quick Capture FAB for rapid note/task creation - Settings screen (change server URL, logout) - Android home screen widget → opens chat - Riverpod state management, go_router navigation Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Fabled — Android App
|
||||
|
||||
Native Android client for [FabledAssistant](https://github.com/yourusername/fabledassistant), a self-hosted AI productivity assistant.
|
||||
|
||||
## Features
|
||||
|
||||
- **Notes** — create, edit, and browse markdown notes
|
||||
- **Tasks** — manage tasks with status (To Do / In Progress / Done) and priority
|
||||
- **Chat** — streaming AI conversations with real-time SSE response display
|
||||
- **Quick Capture** — FAB shortcut to create a note or task from anywhere
|
||||
- **OAuth / SSO** — authenticates via your server's configured OIDC provider; local username/password login also supported if enabled on the server
|
||||
- **Session persistence** — stays logged in across app restarts via a persistent cookie jar
|
||||
- **Home screen widget** — tap to open the chat screen directly from the Android launcher
|
||||
|
||||
## Requirements
|
||||
|
||||
- A running [FabledAssistant](https://github.com/yourusername/fabledassistant) server (self-hosted)
|
||||
- Android 5.0+ (API 21)
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Flutter 3.x SDK
|
||||
- Android Studio (for Android SDK and emulator)
|
||||
- JDK 17
|
||||
|
||||
### Setup
|
||||
|
||||
```bash
|
||||
flutter pub get
|
||||
flutter run
|
||||
```
|
||||
|
||||
On first launch, enter your FabledAssistant server URL (e.g. `https://fabled.example.com`) and sign in.
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
lib/
|
||||
├── main.dart # Entry point; resolves async deps before runApp
|
||||
├── app.dart # GoRouter + auth redirect guards + shell nav
|
||||
├── core/
|
||||
│ ├── constants.dart # Route name constants
|
||||
│ └── exceptions.dart # AppException hierarchy
|
||||
├── data/
|
||||
│ ├── api/ # Dio HTTP layer (one class per resource)
|
||||
│ ├── models/ # Plain Dart models with fromJson/toJson
|
||||
│ └── repositories/ # Thin wrappers over API classes
|
||||
└── providers/ # Riverpod providers (state + dependency wiring)
|
||||
screens/ # Flutter UI screens
|
||||
```
|
||||
|
||||
**Key packages:** `flutter_riverpod`, `go_router`, `dio` + `cookie_jar`, `flutter_inappwebview`, `flutter_markdown`
|
||||
|
||||
## Building a Release APK
|
||||
|
||||
```bash
|
||||
flutter build apk --release
|
||||
```
|
||||
|
||||
The signed APK will be at `build/app/outputs/flutter-apk/app-release.apk`.
|
||||
Reference in New Issue
Block a user