About this project
Overview
Rybbit Mobile is a community‑maintained Flutter application that connects to a Rybbit analytics server. It provides a native mobile experience for viewing web analytics data with a focus on privacy and open‑source development.
Screenshots
The app includes screens for dashboard overview, analytics charts, session lists, site settings and more. Additional screenshots show country maps, page lists, and detailed session views.
Features
- Dashboard with real‑time visitor counts, organization filtering and time‑range picker.
- Time‑series charts for users, sessions, pageviews, bounce rate, duration and more.
- Detailed metrics: top pages, referrers, countries (with flags), devices, browsers, OS.
- Core Web Vitals monitoring (LCP, CLS, FCP, TTFB, INP) with color‑coded ratings and trend charts.
- Custom events overview, property breakdowns and outbound link tracking.
- Goal creation (path‑based and event‑based) and funnel visualization with conversion rates.
- Session list with country flag, browser info, entry page; session detail shows full event timeline and replay.
- JavaScript error tracking with occurrence counts and affected sessions.
- Site configuration (tracking toggles, excluded IPs/countries) and organization member management.
- Settings for dark/light/auto theme, language selection (11 languages), server URL and authentication method.
Supported Languages
English (en), Japanese (ja), Czech (cs), Korean (ko), German (de), Polish (pl), Spanish (es), Portuguese (pt), French (fr), Chinese (zh), Italian (it).
Getting Started
Prerequisites
- Flutter SDK 3.38+.
- Android SDK (API 21+) or Xcode for iOS (12+).
- Access to a running Rybbit instance.
Setup
1. Clone the repository.
2. Run `flutter pub get` to install dependencies.
3. Generate code with `flutter pub run build_runner build --delete-conflicting-outputs`.
4. Generate localization files using `flutter gen-l10n`.
5. Copy `.env.example` to `.env` and fill required variables.
6. Run the app with `flutter run --dart-define-from-file=.env` or build an APK/IPA similarly.
Authentication
Two methods are supported: email + password login and API‑key authentication. Enter the Rybbit server URL and credentials on the login screen.
Tech Stack
- Framework: Flutter 3.38+ / Dart 3.10+
- State Management: Riverpod
- Routing: go_router
- HTTP Client: Dio with cookie handling
- Local Storage: Hive and Flutter Secure Storage
- Charts: fl_chart
- Serialization: Freezed + json_serializable
- Localization: Flutter gen‑l10n (ARB files)
- Optional Error Tracking: Sentry (configured via `SENTRY_DSN`)
Architecture
The project follows a feature‑first modular layout:
lib/
core/ // configuration, network, routing, theme, storage, Sentry
features/ // each analytics feature (dashboard, sessions, performance, etc.)
l10n/ // translation ARB files
shared/ // common models, utils, reusable widgets
Each feature is organized into data (API), application (state) and presentation (UI) layers.
Development Commands
- Debug: `flutter run --dart-define-from-file=.env`
- Build APK: `flutter build apk --debug|--release --dart-define-from-file=.env`
- Code generation: `flutter pub run build_runner build --delete-conflicting-outputs`
- Regenerate translations: `flutter gen-l10n`
- Analyze: `flutter analyze`
- Test: `flutter test`
Adding a New Language
Create a new ARB file based on `app_en.arb`, translate all keys, add the locale code to the supported locales list in the app entry point, then run `flutter gen-l10n`.
Compatibility
- Android: API 21 (Lollipop) and newer.
- iOS: version 12.0 and newer.
- Backend: compatible with Rybbit v1.0 or later.
Contributing
Contributions are welcome. Fork the repository, create a feature branch, commit changes, push, and open a pull request. Follow the existing code style and run tests before submitting.
License
This is an unofficial community project. The underlying Rybbit platform is developed by the rybbit‑io organization. The app is released under the same license as the repository (see LICENSE file).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.