Totem is a space for guided group introspection. This Flutter app is the official open-source mobile client for the Totem platform. It connects people through structured group sessions and authentic conversations, powered by a thoughtfully crafted UI and backend.
This client targets both iOS and Android, using Flutter and Riverpod for a fast, modern, and scalable development experience.
Make sure you have Flutter installed and configured.
git clone https://github.com/totem-technologies/totem_app.git
flutter config --enable-swift-package-manager
cd totem_app
flutter pub get
make githooks # Install git hooks for code formattingNote
You must setup firebase locally.
flutterfire configure to generate firebase_options.dart and add your own Firebase config files (google-services.json, GoogleService-Info.plist) locally. These files are not committed to the repo. Learn more
For development:
flutter run -d android # Android
flutter run -d ios # iOS
flutter run -d chrome --web-browser-flag "--disable-web-security" --wasm # Web (temporary testing)If testing on an iOS device, ensure you're using macOS and have Xcode installed.
You can use the --flavor option to build for staging or production (default).
On android, When reattaching, use:
adb logcat "*:S" flutter:V
flutter attachor
flutter run --use-application-binary=build\app\outputs\apk\debug\app-debug.apkRun all tests:
flutter testComing soon: Widget tests and CI-integrated integration tests.
To test deep linking, you can use the following commands:
For Android:
adb shell 'am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d "https://totem.org/spaces/event/doa689fvb"' org.totem.appFor iOS:
xcrun simctl openurl booted "https://totem.org/spaces/event/doa689fvb"To run the app with a local server, you can set the TOTEM_API_URL environment variable at the .env file in the root directory of the project. This allows you to connect to a local instance of the Totem API.
API_URL="http://localhost:8000/"
MOBILE_API_URL="http://localhost:8000/"lib/
├── api/ # API clients & models (generated with Retrofit)
├── auth/ # Auth flow: login, profile setup, state
├── core/ # Config, theme, services, errors
├── features/ # Feature modules (spaces, profile, video_sessions, etc.)
├── navigation/ # Centralized routing and guards
├── shared/ # Reusable widgets
└── main.dart # Entry point, app root
Notifications are handled using Firebase Cloud Messaging (FCM). In the notification data, one may include a path key to specify the route to navigate to when the user taps on the notification. Check all the available routes here.
The release process is automated via a Dart script that handles versioning, tagging, and pushing to the repository.
Before creating a release, ensure:
- You are on the
mainbranch - Your working tree is clean (no uncommitted changes)
- Your local
mainbranch is up-to-date withorigin/main
Run the release command:
make releaseThe script will:
- Display the current version from
pubspec.yaml - Suggest a default version (increments patch and build number)
- Prompt you to enter a new version
Join the Totem movement at totem.org. To discuss development or get involved, feel free to open an issue or pull request.