mobile bluesky app made with flutter lazurite.stormlightlabs.org/
mobile bluesky flutter
3
fork

Configure Feed

Select the types of activity you want to include in your feed.

at ft/monetization 113 lines 5.3 kB view raw view rendered
1<!-- markdownlint-disable MD041 --> 2 3![Lazurite Hero](./docs/images/hero.png) 4 5Lazurite is a cross-platform Bluesky client built with Flutter and Dart using Material You (M3) design. 6 7## Features 8 9### Home Feed & Composer 10 11| Home Feed | Composer | Profile | 12| --------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | 13| ![Home Feed](./docs/images/home-feed.png) | ![Compose Screenshot](https://placehold.co/400x800/4CAF50/FFFFFF?text=Compose+Screenshot) | ![Profile](./docs/images/profile.png) | 14| View your personal timeline with support for threads and media. | Create new posts with rich text and media attachments. Supports replies and quoting. | View detailed actor profiles, including their feed and metadata. | 15 16### Search & Profile 17 18| Search | About | DevTools | 19| ----------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------- | 20| ![Search Results](./docs/images/search.png) | ![About](./docs/images/about.png) | ![DevTools](./docs/images/dev-tools.png) | 21| Discover people and posts across the Bluesky network. | About (showing Rose Pine Moon theme) | Built-in logs and developer utilities for exploring the AT Protocol (Rose Pine Dawn). | 22 23### Offline Support & Drafts 24 25Local-only drafts and caching powered by Drift (SQLite). 26 27- **Drafts:** Save posts locally and publish later. 28- **Search History:** Persisted local search history. 29- **Saved Feeds:** Manage and pin your favorite feeds. 30 31## Architecture 32 33### Stack 34 35- **Framework:** Flutter (M3) 36- **State Management:** `flutter_bloc` 37- **Database:** Drift (SQLite) 38- **Networking:** Dio + `atproto`/`bluesky` packages 39- **Navigation:** `go_router` 40- **Data Serialization:** `freezed` + `json_serializable` 41 42### Directory Structure 43 44The project follows a feature-first architecture layered with a core module: 45 46- `lib/core/`: Shared infrastructure, database, router, and themes. 47- `lib/features/`: Feature-specific logic (Auth, Feed, Search, Profile, etc.). 48 - `<feature>/bloc/`: Business logic components. 49 - `<feature>/presentation/`: UI screens and widgets. 50 - `<feature>/data/`: (Optional) Feature-specific repositories or models. 51 52### Data Flow 53 54- **Network:** Authenticated requests are routed through user PDS; public reads use the public AppView. 55- **Database:** Drift manages local persistence for accounts, cached profiles/posts, settings, and drafts. 56 57### Routing 58 59Lazurite uses `StatefulShellRoute` for persistent bottom navigation. 60 61| Path | Description | 62| ----------- | ------------------------------ | 63| `/login` | Authentication gateway | 64| `/` | Home Feed tab | 65| `/search` | Search tab | 66| `/profile` | Current user profile tab | 67| `/settings` | Global settings | 68| `/compose` | Root-level modal for new posts | 69 70## Local Development 71 72Use `just` for common tasks: 73 74- `just format` - Runs `dart format` 75- `just lint` - Proxies `flutter analyze` 76- `just test` - Executes the `flutter test` suite 77- `just gen` - Triggers `build_runner` for code generation 78- `just check` - Runs format, lint, and tests in sequence 79 80For a quick start: 81 82```sh 83flutter pub get 84just gen 85flutter run 86``` 87 88## Database Schema 89 90Powered by **Drift**, the following tables are currently implemented: 91 92| Table | Purpose | 93| ----------------- | ---------------------------------------------------------------- | 94| `accounts` | Local storage for session and auth tokens (DID, handle, service) | 95| `cached_profiles` | Cached profile metadata to reduce network calls | 96| `cached_posts` | Cached post content for offline viewing | 97| `saved_feeds` | Locally Managed feed preferences | 98| `search_history` | Persistent query history | 99| `drafts` | Offline-first post drafting with media support | 100| `settings` | Key-value application configuration | 101 102## References 103 104- [Bluesky API Documentation](https://docs.bsky.app/) 105- [AT Protocol Specification](https://atproto.com/) 106- [Flutter Documentation](https://flutter.dev/docs) 107 108## Credits 109 110- Typography inspiration from [Anisota](https://anisota.net/) by [Dame.is](https://dame.is). 111- Custom theming inspired by [Witchsky](https://witchsky.app/). 112- DevTools (AT Protocol Explorer) inspiration from [pdsls](https://pds.ls/) 113- AT URI links pass through [aturi.to](https://aturi.to/)