Gbama MutualBoost · CLIENT GUIDE · LARAVEL + FLUTTER + OPERATIONS

Deploy and operate your MutualBoost platform end to end.

In-depth CLIENT documentation: prerequisites, hosting, activation, member management, Flutter, OneSignal/FCM/APNs, payments, monitoring, signed updates and recovery.

Documentation edition: October 18, 2026 · comprehensive guide28 practical chapters

Are you a mutual organization administrator?

Follow this guide using the access supplied by your publisher. The license covers your installation; members then sign in with their usual accounts.

Download the client guide (PDF) PDF for this release · your administrator can update the online version.

28 chapter(s) shown

Understand both distributions

Keep the publisher authority separate from each mutual organization installation.

PUBLISHER: GBAMA CODES only

The PUBLISHER distribution issues licenses, handles Envato purchases, maintains the installation portfolio and signs software releases. Install it in its own Laravel instance such as licences.mondomaine.com, with private keys outside the public directory.

CLIENT: each mutual organization

Each mutual organization has its own Laravel installation (mondomaine.com), database and configuration. Web and Flutter share that backend; the software license applies to the installation, not to each member.

Distinguish cumulative sources from full projects

The supplied ZIPs contain application sources to merge into a complete Laravel project. They omit the locked skeleton (artisan, composer.json, composer.lock); Flutter lib/ is not a standalone Android/iOS project. Do not run Composer in a directory without composer.json.

Separate environments

Use separate production, staging and development domains, databases, backups and credentials. Never connect a test app to real payment processing or copy a PUBLISHER private key into a CLIENT installation.

Pre-installation checklist

Prevent missing Composer files, permissions failures and incomplete deployments.

Check the project skeleton

Enter the directory containing artisan AND composer.json AND composer.lock. With only a cumulative application archive, stop and obtain the original complete Laravel project.

Example to adapt
cd /home/UTILISATEUR/mondomaine.com
pwd
for f in artisan composer.json composer.lock bootstrap/app.php; do test -f "$f" && echo "OK $f" || echo "ABSENT $f"; done
php -v; composer --version

Validate PHP compatibility

Laravel 13 requires PHP 8.3 or a higher version supported by locked packages. Check the extensions actually used: pdo_mysql, cURL, DOM, Fileinfo, OpenSSL, Sodium, ZIP, Mbstring and XML. Composer and Artisan should run under the same PHP runtime.

Example to adapt
php -m | grep -Ei "pdo|curl|dom|fileinfo|openssl|sodium|zip|mbstring"
composer check-platform-reqs --no-dev

Validate document root and permissions

Set the HTTPS domain document root to /home/USERNAME/mondomaine.com/public. Verify TLS, typical permissions 755 for public directories and 644 for public files; storage and bootstrap/cache must be writable by PHP.

Example to adapt
namei -l /home/UTILISATEUR/mondomaine.com/public/.htaccess
ls -ld public storage bootstrap/cache

Record deployment decisions

Before merging files, record the source version, CLIENT/PUBLISHER role, canonical domain, hosting provider, private backup location, and actually enabled payment/notification providers.

Before you start

Identify the right delivery and prepare a working environment.

Separate installation from updates

A new installation requires a complete Laravel project with artisan, composer.json, composer.lock and public/, plus a complete Flutter project with pubspec.yaml, android/ and ios/. A cumulative update or a lib-only archive must be merged into the original project; it cannot replace missing project structure.

Prepare your access

Have an HTTPS domain, hosting file and terminal access, a dedicated database and the complete source projects ready. Get the Laravel server running before connecting the mobile application. For a licensed installation, also obtain the authority URL, public key and activation key from the publisher.

Choose a test environment

Start with a separate subdomain and database. For an existing installation, go directly to Updates and backups.

Technical requirements

Check the server and local tools before installing dependencies.

Laravel server

Laravel 13 requires PHP 8.3 or later. composer.lock and composer check-platform-reqs determine the exact requirements of your delivery. Check cURL, DOM/XML, Fileinfo, Mbstring, OpenSSL and PDO with the appropriate database driver. The licensing module also requires PHP Sodium.

Example to adapt
php -v
php -m
composer --version

Flutter workstation

Install a Flutter SDK compatible with the constraints in pubspec.yaml, Git and Android development tools. For iOS, use a Mac with Xcode. Keep the project’s pubspec.lock and Gradle files rather than choosing arbitrary versions.

Example to adapt
flutter --version
flutter doctor -v

Install the Laravel server

This workflow is exclusively for a first installation with an empty database.

1. Check complete project and install Composer

First open the original complete Laravel project, locally or on the server. Cumulative MutualBoost CLIENT/PUBLISHER archives do not include composer.json, composer.lock or artisan: merge them into the complete project. Check those three files BEFORE running Composer. Dependencies may be installed locally using matching PHP, but vendor built on macOS or Windows may not work on a Linux server; prefer running Composer on o2switch or in a compatible Linux environment. Use the same PHP runtime for Composer and Artisan.

Example to adapt
cd /home/UTILISATEUR/mondomaine.com
pwd
for f in artisan composer.json composer.lock bootstrap/app.php; do test -f "$f" || { echo "STOP: missing $f"; exit 1; }; done
php -v
composer install --no-dev --prefer-dist --optimize-autoloader
composer check-platform-reqs --no-dev
Keep in mind

If Composer says "could not find a composer.json file", you are in the wrong directory or have only a partial release. Do not run composer init or composer update: obtain the original complete Laravel project. Checking files locally does not create missing source files.

2. Configure the environment

Create .env from the supplied example only when no .env file already exists. Enter your domain and a new database. The following example contains placeholders, not credentials from your server.

Example to adapt
APP_ENV=production
APP_DEBUG=false
APP_URL=https://mondomaine.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mutualboost
DB_USERNAME=database_user
DB_PASSWORD="REPLACE_WITH_YOUR_PASSWORD"

3. Generate the key and create the tables

For this new installation only, generate APP_KEY once, check the database connection and run the migrations. Preserve this key during updates.

Example to adapt
php artisan key:generate
php artisan migrate --force
php artisan migrate:status
Keep in mind

On an existing server, do not regenerate APP_KEY or run commands that recreate the tables.

4. Initialize the supplied data

On a new database, the supplied DatabaseSeeder initializes settings and demonstration data. It refuses an already populated database. Run this step only if you want that initialization.

Example to adapt
php artisan db:seed --class=DatabaseSeeder --force
Keep in mind

Initialization creates fictional accounts and data. This is not an update procedure.

5. Configure the web root and files

Point the domain at the project’s public/ directory. Give the PHP process write access to storage/ and bootstrap/cache/. If public/storage is absent, create the intended link. If a real directory already exists there, preserve it and its files.

Example to adapt
if [ ! -e public/storage ] && [ ! -L public/storage ]; then
  php artisan storage:link
fi

6. Open the platform and secure the account

Open /login. In the current delivery, the seeder writes the initial credentials to storage/app/mutualboost-demo-identifiants.txt outside the public directory. Read that private file only on your server. Then update the administrator’s contact details and password and configure your organization’s identity.

Example to adapt
php artisan config:clear
php artisan view:cache

Database, migrations and initialization

Set up MySQL without deleting an existing installation.

New database with dedicated credentials

Create a MySQL database and least-privilege account. Keep credentials in .env outside public/ and never reuse another customer’s database.

Example to adapt
APP_ENV=production
APP_DEBUG=false
APP_URL=https://mondomaine.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mutualboost_prod
DB_USERNAME=utilisateur_db
DB_PASSWORD="REMPLACER_SECRET"

Composer and initial bootstrap

Install dependencies from composer.lock and validate Laravel startup. If package:discover fails, inspect bootstrap/app.php and bootstrap/cache instead of immediately running composer update.

Example to adapt
composer install --no-dev --prefer-dist --optimize-autoloader
composer check-platform-reqs --no-dev
php artisan about

Consolidated migrations and history

On an empty database, run migrate --force and inspect migrate:status. On an existing database, back up first: never use migrate:fresh, db:wipe or manually edit the migrations table. Historical migrations may have been archived after consolidation.

Example to adapt
php artisan migrate:status
php artisan migrate --force
php artisan migrate:status

Seeders: use the correct workflow

DatabaseSeeder initializes pages, settings and demo content on a new installation. It may reject populated databases; do not force it in production. DemoMutualSeeder expects setup by DatabaseSeeder and may require Faker to be installed.

Example to adapt
php artisan db:seed --class=DatabaseSeeder --force
Keep in mind

Do not run DemoMutualSeeder by itself and never publish demo accounts on a real mutual organization.

APP_KEY encryption key

Generate APP_KEY once for a brand-new installation. It protects encrypted data; regenerating it on a live installation can make existing encrypted records unreadable.

Example to adapt
php artisan key:generate  # NOUVELLE INSTALLATION UNIQUEMENT

HTTPS hosting, storage and cron

Document root, files, scheduling and monitoring.

Public directory and storage link

Serve public/index.php. If public/storage does not exist, use php artisan storage:link; if a real directory already contains files there, do not delete it without checking and backing up.

Example to adapt
cd /home/UTILISATEUR/mondomaine.com
if [ ! -e public/storage ] && [ ! -L public/storage ]; then php artisan storage:link; fi

Laravel cron: one entry per installation

Create ONE cron job in cPanel or crontab invoking schedule:run every minute with the installation PHP. schedule:list lists planned tasks but does not prove that system cron is installed.

Example to adapt
* * * * * cd /home/UTILISATEUR/mondomaine.com && /CHEMIN/PHP artisan schedule:run >> /home/UTILISATEUR/logs/mutualboost-scheduler.log 2>&1

Review scheduled jobs

Check contribution reminders, debt generation, payment reconciliation, contract expiry, automated notifications, license refresh and daily release checks. Read the exact schedule from schedule:list on the installed server.

Example to adapt
php artisan schedule:list
crontab -l | grep -F mondomaine.com
php artisan licenses:diagnose --online  # CLIENT

Queues and mail: environment-dependent

If QUEUE_CONNECTION is database/redis, provide a supervised worker or a hosting-compatible execution method. If using sync, no async worker runs; account for notification and response-time impact.

Example to adapt
php artisan queue:failed
php artisan queue:work --once
Keep in mind

Run persistent queue workers only if your host and configuration support them.

HTTPS, backups and logs

Enable TLS, HTTP→HTTPS redirects, APP_DEBUG=false, private logs and database+file backups. Periodically restore on staging. Never expose .env, storage/app/private, logs or SQL dumps.

Administrators, permissions and first login

Initial accounts, security, roles and public journeys.

Provision an authorized administrator

The /login page must remain usable before license activation so the real administrator can reach /admin/license. DefaultAdminSeeder can create an initial account on demo installations only; rotate its password and disable test access before production.

Example to adapt
php artisan db:seed --class=DefaultAdminSeeder --force
Keep in mind

Never publish default login credentials on a public documentation page.

Roles and capabilities

Create named roles (secretary, treasurer, manager) and grant only required capabilities. Reserve licensing, payment credentials, updates and role management for authorized personnel.

Smart public navigation

Under Administration → Website and app → Login/Registration/Donation buttons, configure public actions. The navigation adapts to Guest, Member or Administrator; registration also respects the enrollment policy and license restrictions.

Disable demo accounts

Keep fictional mutual accounts limited to isolated environments. Verify permissions, absence of real financial actions in demo mode, and secure sign-out via POST/CSRF.

Activate your installation license

Your mutual organization uses the client role. The publisher supplies the authority connection details.

1. Receive the correct project and license information

Your installation combines the complete Laravel project, compatible cumulative updates and, if you use the mobile app, the complete Flutter project. Obtain the authority’s final HTTPS URL, public key and your internal license key or CodeCanyon purchase code from the publisher. A cumulative archive does not replace missing project structure.

Keep in mind

Client means your organization’s platform. Its members then use your website and app; each member does not activate a separate software license.

2. Configure the client role only

In your organization’s Laravel .env file, set your domain and the public connection details supplied by the publisher. The example does not identify an existing authority. Clear the configuration cache after editing.

In the client .env file
APP_URL=https://mondomaine.com
MUTUALBOOST_LICENSE_ROLE=client
MUTUALBOOST_LICENSE_SERVER_URL=https://licences.mondomaine.com
MUTUALBOOST_LICENSE_PUBLIC_KEY="PUBLIC_KEY_SUPPLIED_BY_PUBLISHER"
MUTUALBOOST_LICENSE_REQUIRED=true
Keep in mind

After saving .env, run php artisan config:clear in the Laravel project terminal. The Envato author token and private signing key stay with the publisher; neither is required on your server or in Flutter.

3. Enter the key in administration

Sign in at /admin/license: Administration → Platform license. Choose Internal MutualBoost license for a key issued by the publisher, or CodeCanyon / Envato for a purchase code. Enter it, select Activate license and check the domain and Active license status. Member accounts and ADMIN-DEMO cannot activate a license.

Keep in mind

The purchase code is available with the license certificate in your Envato downloads. Your Envato account password is not requested.

4. Check renewal and service continuity

Keep the Laravel cron configured on your hosting. The server verifies the signed certificate locally during navigation and attempts renewal when it reaches 24 hours. A temporary outage leaves an unexpired certificate usable for up to seven days, within any internal license expiry. Use Verify now after resolving the issue.

Example to adapt
php artisan schedule:list
php artisan licenses:refresh --force
Keep in mind

The end of Envato support is shown separately from usage rights. This module does not convert the support date into a license expiry.

5. Transfer the platform to another domain

Before moving, open Transfer or replace license at /admin/license, confirm deactivation, then activate the new server with its canonical domain. Keep the private identity for a normal update on the same domain. Ask the publisher to release the installation if the old server is unavailable.

Keep in mind

Do not clone an activated installation to operate another platform. Capacity depends on the license; a CodeCanyon purchase is managed with one active installation per end product.

6. Understand a restriction and contact support

An outdated certificate, an internal expiry or a suspension can pause new website and API writes with HTTP 423. Viewing, account recovery, administrator license access and callbacks for previously initiated payments remain available. Give the publisher the domain, displayed message and issue time, without publishing your full key, .env or passwords.

Keep in mind

Reading this guide does not configure a real license authority or activate an Envato purchase. Obtain connection details from your publisher.

Internal licenses, Envato and CLIENT activation

Understand duration, attestations and controls without blocking activation.

Activate directly in CLIENT Laravel

At /admin/license, an authorized administrator enters an internal license key or Envato purchase code. The server contacts the HTTPS authority, pins its public key on first trusted use and validates the signed certificate. Never enter the signing private key into CLIENT settings.

Example to adapt
APP_URL=https://mondomaine.com
MUTUALBOOST_LICENSE_SERVER_URL=https://licences.mondomaine.com
MUTUALBOOST_LICENSE_ROLE=client

Understand license durations

An internal license without an end date is perpetual; Envato use rights are distinct from support. The technical certificate is time-limited (up to seven days) and refreshed periodically: the certificate refresh date is not the commercial license expiry.

Diagnose without disclosing secrets

Check the APP_URL domain, published fingerprint, pinned public key, certificate and installation identity. A fingerprint is not the complete public key. Never delete client.json or authority.json to force activation.

Example to adapt
php artisan config:clear
php artisan licenses:diagnose --online
php artisan licenses:refresh

Suspension and migration

Suspension/revocation is managed at the authority and does not erase historical operations. For an actual domain change, prepare backups and use the installation release/transfer flow rather than silently copying a certificate to a different server.

Signed software update center

Check, back up, deploy and restore without browser-driven code execution.

Bootstrap the updater once

Bootstrap the updater by trusted file transfer, not by an updater that is not yet installed. Check Sodium and ZIP. The updates public key differs from the license key and must be pinned as MUTUALBOOST_UPDATES_PUBLIC_KEY on CLIENT.

Example to adapt
php -m | grep -Ei "sodium|zip"
php artisan route:list --path=admin/updates

Check before download

The /admin/updates screen shows version and updates. updates:check compares signed manifests. An active CLIENT can download through updates:download; Ed25519 signature, target distribution and SHA-256 are checked before copying.

Example to adapt
php artisan updates:check
php artisan updates:download  # CLIENT

Deploy from SSH with a backup

File deployment is started only with version-specific SSH confirmation. Back up DB and files. For releases with migrations, provide a SQL backup path, run migrate --force, check records and finalize with updates:complete.

Example to adapt
php artisan updates:apply VERSION --confirm=VERSION --db-backup=/home/UTILISATEUR/sauvegardes/mondomaine-avant.sql
php artisan migrate --force  # SI RELEASE AVEC MIGRATIONS
php artisan updates:complete --confirm=VERSION  # SI MAINTENANCE EN ATTENTE

Recovery and rollback limits

If deployed code fails, use updates:rollback --confirm=VERSION and validate service. Source rollback does NOT restore changed tables or Composer dependencies. Restore a tested database backup separately when SQL must be reverted.

Example to adapt
php artisan updates:rollback --confirm=VERSION
php artisan optimize:clear

Scheduled checks, never unattended code installs

updates:check runs daily from routes/console.php. Cron must not call updates:apply or accept arbitrary browser-uploaded code ZIPs. Keep a release log with version, publisher, notes, hashes and restoration status.

Hosting and scheduled tasks

Prepare the domain, scheduler and background processing when needed.

cPanel and o2switch

Select compatible PHP versions for both the domain and the terminal. Set the document root to public/, enable HTTPS and create the database and its user with appropriate access. Replace php with the full PHP executable path when your hosting requires it.

Laravel scheduler

Add one cron entry running every minute and replace both paths in the example. Use schedule:list to check that the delivery’s tasks are actually registered. These include payment reconciliation, contract expiry and reminders.

Example to adapt
* * * * * cd /path/to/mutualboost && /path/to/php artisan schedule:run >> storage/logs/scheduler.log 2>&1
Keep in mind

Check with php artisan schedule:list. The project’s timezone determines scheduled execution times.

Background queues

If your configuration uses an asynchronous queue, arrange a supervised queue:work process managed by your hosting provider. A synchronous configuration does not require that process. Check the delivery’s queue configuration before enabling it.

OneSignal: Android and iOS notifications

OneSignal app, FCM, APNs, Laravel-side secrets and Flutter delivery.

Create a OneSignal application

Create a OneSignal app for the organization. Under Settings → Keys & IDs, obtain the App ID (UUID, safe to use in SDK setup) and REST API Key (SECRET, server-side only). Use distinct staging and production credentials.

Configure Android and FCM

In Firebase Console, configure the Android project with the exact app package ID, enable FCM and link the required service credentials in OneSignal. Add google-services.json only according to the project’s native integration; never embed a server secret inside Flutter.

Configure Apple Push Notification service

In Apple Developer, use the correct Bundle ID, enable Push Notifications and provide OneSignal with an APNs key or certificate according to its instructions. Enable the required Xcode Push Notifications and Background Modes/Remote notifications capabilities and test on a physical iPhone.

Configure Laravel and protect the REST API Key

In Administration → General settings → API / Notifications, set onesignal_app_id and onesignal_rest_api_key and enable onesignal_enabled only after validation. Laravel rejects placeholder credentials; an empty secret field must not overwrite the saved key. Never expose the REST key in public HTML or Flutter APIs.

Initialize the Flutter SDK and user identity

Keep the onesignal_flutter dependency from pubspec.yaml, initialize the SDK with the non-secret App ID, request permission contextually and link the signed-in user to the external ID expected by Laravel. Disassociate the identity on sign-out according to the installed SDK API.

Example to adapt
// Schéma d’intégration : adapter à la version onesignal_flutter du projet
// OneSignal.initialize("APP_ID_UUID");
// OneSignal.login("IDENTIFIANT_UTILISATEUR_LARAVEL");

Test each notification route

Test on two devices: permission, subscription token, direct notification, targeted user, contribution reminder, deep link and sign-out. The supplied Laravel controllers still include legacy OneSignal calls (api/v1 + include_external_user_ids); validate compatibility with the current OneSignal API before claiming push is production-ready.

Example to adapt
php artisan schedule:list
php artisan notify:automated --help

Respect preferences and privacy

Publish a privacy notice and obtain the relevant consents. Do not put medical diagnoses or sensitive financial data in lock-screen notification text. Validate app-store privacy declarations.

SMTP email, SMS and message templates

Configure actual providers, sender identities and business events.

Email: working SMTP

In General settings → API, set smtp_host, smtp_port, smtp_username, smtp_password, smtp_encryption, smtp_from_address and smtp_from_name. Hosting must allow outbound connectivity. Configure SPF/DKIM/DMARC with the mail provider and send a test message.

SMS: select a provider

The provider selector includes Twilio, Infobip, Orange SMS API or a custom gateway. Set sms_provider, sms_api_key, sms_api_secret and sms_sender_id according to the provider contract; test authorized delivery before enabling bulk reminders.

Customize business notification events

Per event (welcome, payment, approval, rejection, new_dependent, death_notice, reminder), enable notify_*_email, notify_*_sms and notify_*_push. Customize subject and message bodies and test a real event with a test account.

Monitor failures

Inspect Laravel logs, failed queue jobs, provider quotas, authentication failures and HTTP errors. Never copy REST API keys into shared diagnostic reports.

Payments: enablement and reconciliation

Configure payment processors without confusing branding with API authentication.

Select available integrations

The code includes settings for Wave, CinetPay, TouchPay, PayPal and Flutterwave; some workflows also include FedaPay, Jeko and Stripe settings. Enable only payment services actually integrated, contracted and tested.

Configure server-side credentials

Under General settings → Payments, enter provider credentials: Wave API key/signing secret; CinetPay Site ID/API key/secret; TouchPay agency/authentication; PayPal Client ID/secret/environment; Flutterwave secret. Public logos, labels and order do not replace technical credentials.

Returns, webhooks and duplicate payments

Configure return, cancel and webhook URLs according to the actual routes and provider dashboard. Server-side verify signature/reference, amount, currency, status and idempotency; never treat a browser redirect as proof of payment.

Run full sandbox tests

Test approved, failed, canceled and delayed payments, repeated callbacks, network loss and payments:reconcile-pending reconciliation. Review logs without exposing card details, secrets or health records.

Example to adapt
php artisan payments:reconcile-pending --help
php artisan schedule:list

Install and connect Flutter

Start when the HTTPS server and its APIs are available.

1. Open the complete project

Open the directory containing pubspec.yaml. Merge lib updates into that project. Install dependencies and review diagnostics before building.

Example to adapt
flutter pub get
flutter analyze

2. Enter your organization’s server

In the verified Flutter source, lib/services/api_service.dart defines baseUrl and storageUrl. Replace both addresses with your server URLs. Keep /api for the API and /storage/ for public files. Another version may centralize these values elsewhere; locate their definitions.

Example to adapt
static const String baseUrl = 'https://mondomaine.com/api';
static const String storageUrl = 'https://mondomaine.com/storage/';
Keep in mind

Flutter connects to your client platform. Do not replace baseUrl with the license authority URL.

3. Configure the application identity

Check the display name, icons, Android application ID and iOS Bundle Identifier in the supplied native projects. Use your own identifiers for a new app. Keep the identifiers of an app that is already published.

4. Test on a device

Detect your device or emulator and launch the application. Check the home page, authentication, media, languages and contribution history using test data.

Example to adapt
flutter devices
flutter run
Keep in mind

The device must be able to reach your HTTPS domain. localhost on a phone refers to that phone, not your computer.

Flutter: complete project, API and identity

Connect Dart sources to Laravel while preserving style variants.

Get the complete mobile project

Start from the complete Flutter repository containing pubspec.yaml, pubspec.lock, lib/, android/, ios/ and assets. A cumulative lib/ ZIP cannot build binaries alone; back up and merge lib/ into the original project.

Configure your backend URLs

Use the compilation defines supported by this MutualBoost build; never keep a hard-coded demo URL. API and media URLs must point to the same HTTPS CLIENT instance.

Example to adapt
flutter pub get
flutter run --dart-define=MUTUALBOOST_API_BASE_URL=https://mondomaine.com/api --dart-define=MUTUALBOOST_STORAGE_URL=https://mondomaine.com/storage/

Shared login, roles and licensing

Authentication tokens, roles and permissions come from Laravel. Activation at /admin/license enables both site and app according to access rights. Flutter must display license states without bundling private keys or bypassing Laravel verification.

Five styles and status messages

Preserve five design models and dynamic colors. The status-message ticker appears directly below each AppBar, scrolls horizontally, treats each line as one message and vanishes if none is provided. Background/text colors depend on the member state and come from Laravel.

Test end-to-end integration

On Android and iPhone, test login, allowed registration, member screens, roles, inactive/active license, notifications, media, sandbox payments, translations and style switching. Run flutter analyze after each merge.

Example to adapt
flutter doctor -v
flutter analyze
flutter test

Build and publish Android

Prepare production signing before distributing the application.

Signing and configuration

Configure your signing key in the Android project using the official Flutter procedure. Keep a private backup of the key and its passwords. Also check the application version, permissions and notification configuration.

Generate distribution files

Use the AAB for Google Play publication and the APK for direct distribution testing. Typical output directories are build/app/outputs/bundle/release/ and build/app/outputs/flutter-apk/. Test the release build before publishing.

Example to adapt
flutter build appbundle --release
flutter build apk --release
Keep in mind

Building does not automatically publish the app. Upload the AAB to your own Google Play Console account and complete the store listing.

Build and publish iOS

Prepare iOS distribution on macOS using the supplied Xcode project.

Prepare Xcode and signing

Open ios/Runner.xcworkspace when the workspace is available. Select your Apple team, the correct Bundle Identifier and signing profiles. If the project uses CocoaPods and dependencies require it, run pod install from ios/. An Apple Developer account is required for App Store distribution.

Create a distribution archive

Generate the signed archive and check the build/ios/ output. Test through TestFlight before submitting for review.

Example to adapt
flutter build ipa --release
Keep in mind

Your certificate, profiles and Apple account configuration are still required. This command alone does not guarantee App Store approval.

Android/iOS publishing and privacy

Prepare release builds, signing, stores and versioning.

Android and Play Console

Verify applicationId/package, versionCode/versionName, keystore, Firebase/FCM configuration, permissions and app icons. Build a signed AAB, distribute in internal testing first, and validate deep links, notifications and any purchases/payments.

Example to adapt
flutter build appbundle --release --dart-define=MUTUALBOOST_API_BASE_URL=https://mondomaine.com/api --dart-define=MUTUALBOOST_STORAGE_URL=https://mondomaine.com/storage/

iOS and App Store Connect

On macOS, set Bundle Identifier, Apple team, signing, APNs and required capabilities. Build for iOS/TestFlight, validate notifications on a real device, and complete metadata, support and privacy policy before submission.

Example to adapt
flutter build ipa --release --dart-define=MUTUALBOOST_API_BASE_URL=https://mondomaine.com/api --dart-define=MUTUALBOOST_STORAGE_URL=https://mondomaine.com/storage/

Separate Laravel updates and mobile binaries

The authority signs and delivers Laravel code updates, not binaries distributed through stores. Publish every Flutter binary version through Google Play/App Store; the PHP updater does not remotely patch native apps.

Universal links and privacy

Configure assetlinks.json and apple-app-site-association with your real domain and app identity if deep links are supported. Update platform privacy declarations, permissions and consents related to OneSignal, Firebase and third-party services.

Mutual settings and daily operations

Contributions, products, expenses, roles, members and cases.

Organization identity and settings

After activation, configure contact details, WhatsApp, phone, address, hours, enrollment rules, waiting periods, penalties, contribution dates and public messages in CLIENT administration.

Manage members and dependents

Review dynamic registration, profile, member, insured-person and dependent forms. Configure required documents, approvals and permissions; test a member account from submission through approval.

Treasury, debt and expenses

Contributions, payments, loans, products, requests, budgets and expenses depend on roles, payment status and organization rules. Reconcile totals before publishing reports. Scheduled commands may generate debts or expire contracts.

Private documents and compliance

Protect supporting documents and dynamic document exports: sensitive downloads must enforce authorization, not rely on public URLs. Define retention periods, deletion requests and encrypted backups.

Offers, donations and status banner

Enable the Donation button only if the organization wants it. Configure offers and their presentation, then set status messages for guest, paid-up, overdue and pending users with text/background colors; an empty message list hides the ticker in Flutter.

Themes, languages and showcase content

Keep five styles, translations and Web/mobile content consistent.

Select an active style

The Studio and appearance screens support five responsive themes. Configure palette, imagery, components and display rules; validate desktop, tablet and mobile. Keep the commercial showcase distinct from the fictional mutual demo.

Languages and dynamic content

The language module supports activation, ordering, UI strings and content translations. Test at least French/English and every enabled language, plus RTL layouts when Arabic is used. Untranslated content may fall back to defaults; verify those fallbacks visually.

Public showcase and SEO

Configure services, benefits, FAQs, SEO, actual screenshots and Google Play/App Store links. Screenshots should reflect shipped capabilities; avoid temporary URLs and real personal data in the demo.

Navigation and public pages

Verify Login, Registration and Donation buttons, custom HTTPS links, legal pages and license state screens. The public showcase may remain readable while license verification is required, without allowing restricted business writes.

Configure the website and application

Settings published from Laravel drive the interfaces supported by your delivery.

Start from one of the five templates

Under Administration → Start from a template, prepare the identity, contacts and pages, then save the private preview. Review it before publishing. Publication activates the live portal and disables public Web and mobile demonstrations.

Choose the right studio

Under Website and application, use Appearance and styles for the visual identity, Web page studio for website pages, Flutter page studio for native pages and Home and member widgets for supported placements. Select the published style and the correct page before saving.

Configure languages

Enable languages in Languages and translations. Content translations lets you adapt editorial text, articles and business labels. Check the website and application in every enabled language. The organization’s legal name remains its own identity.

Organize registration and permissions

Under Administration → Registration and payment, choose the form layout, steps, single or multiple products and payment requirements before approval. Use Roles and capabilities and Assign roles to grant access, then check the result with an account holding that role.

Payments, notifications and downloads

Connect external services through the backend settings.

Configure payments

Open Contributions and treasury → Payment gateways and the payment settings used by your workflow. Enter merchant accounts, environment and provider notification URLs. Customize gateway names, logos and ordering. Verify a payment and its server confirmation before launch.

Example to adapt
php artisan route:list --path=payment
Keep in mind

A successful return page alone does not confirm receipt of funds. Merchant secrets stay on the server.

Configure email, SMS and Push notifications

Under Administration → Email, SMS and notifications, configure the services actually used. Check templates and recipients with a test account. For OneSignal, also configure the native Android and iOS capabilities and settings required by your delivery.

Display store links

Under Website and application → Application downloads, save the official HTTPS Google Play and App Store links. Each button appears when its valid link is present. For the published portal, also enable the Application and downloads section in the platform project.

Updates and backups

This workflow preserves an existing installation and its data.

Before every update

Back up the database, uploaded files, .env and the deployed source version. Store backups outside the public directory. Check restoration in a separate environment and read the delivery instructions.

Install the update

Merge the delivery files into the complete project while keeping .env, APP_KEY and uploads. Run the installer specified in its instructions. If composer.lock changes, reinstall locked dependencies. Apply migrations only when the update requires them. Do not rerun initialization seeders.

Check and reopen

Clear the relevant caches, compile views and verify authentication, permissions, payments and documents. Restart asynchronous workers after their code changes. For Flutter, merge compatible sources, test and build a new native release when client code changes.

Example to adapt
php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan view:cache

Plan rollback

Keep the previous version’s files. Coordinate database restoration with transactions and payments recorded since the backup. Do not overwrite recent operations with an older database without reconciliation.

Security, logging and backups

Limit access, protect secrets and validate restores.

Protect credentials

Keep .env, APP_KEY, license signing private keys, update signing keys, API keys and DB credentials outside public/. Restrict SSH permissions and enable provider MFA when available. Redact secrets in support requests.

3-2-1 backups and restore tests

Back up the DB, uploads, storage/app/private, .env and certificates/keys regularly. Keep an off-server encrypted copy and check integrity. Perform at least one restore to staging.

Audit dependencies and logs

Check composer audit, package versions, Laravel logs and failed jobs. Composer upgrades changing composer.lock must be tested outside the application ZIP updater. Do not deploy unvalidated dependencies.

Example to adapt
composer audit
php artisan about
php artisan queue:failed
php artisan migrate:status

Verify permissions and access policies

Test read/write access for guests, members, managers and administrators, including suspended-license states. Server-verified payment confirmations and administrator access to licensing may remain available according to the implemented policy.

Troubleshooting and incident response

Reproducible and safe diagnostics without wiping data.

Composer cannot find composer.json

The current directory is not the complete Laravel project. Locate composer.json, artisan and bootstrap/app.php, then cd to the correct folder. Do not create a fake composer.json to bypass the error.

Example to adapt
pwd
find . -maxdepth 3 -name composer.json -print
ls -l artisan composer.lock bootstrap/app.php

403: unreadable .htaccess

Use namei -l to inspect directory traversal, ownership, the domain’s public document root and Apache host logs. Never apply chmod 777 recursively.

Example to adapt
namei -l /home/UTILISATEUR/mondomaine.com/public/.htaccess
ls -la public/.htaccess

License refused / invalid certificate

Check canonical APP_URL, HTTPS authority reachability, pinned public key, fingerprint and installation status using licenses:diagnose. Never rotate signing keys as a quick fix.

Example to adapt
php artisan licenses:diagnose --online
php artisan licenses:refresh

OneSignal is not delivering

Check real App ID, Laravel API secret, FCM/APNs settings, device permission, subscription, External ID and HTTP logs. Validate the legacy api/v1 calls in this code before going live.

Interrupted update / schema mismatch

On failure, retain private update journal, SQL dump and prior sources. Do not exit maintenance if migrations remain pending; validate and then explicitly complete or restore.

Example to adapt
php artisan migrate:status
php artisan updates:rollback --confirm=VERSION

App: inconsistent screens

Check dart-defines, domain-scoped caches, actual compiled lib/ version, five styles and API-reported status. Use flutter clean only when necessary; do not delete pubspec.lock without a diagnosis.

Quick troubleshooting

Start with the symptom and check the relevant points.

Composer manifest missing (composer.json)

On o2switch, run cd ~/mondomaine.com, pwd, then find . -maxdepth 3 -name composer.json -print. If none appears, you have an incomplete release rather than a complete Laravel project. Restore the original artisan, composer.json, composer.lock, bootstrap/ and public/ files. Never run composer init or migrate:fresh to bypass this; installing Composer locally cannot recreate missing source files.

Example to adapt
pwd
find . -maxdepth 3 -name composer.json -print

HTTP 500 or a blank page

Inspect storage/logs/laravel.log on the server. Check PHP, extensions, directory write access and database connectivity. Keep APP_DEBUG=false in production. Do not publish complete logs or .env contents.

A page, stylesheet, script or image returns 404

Check the domain’s public/ document root, file presence and filename case. Uploaded images must match the configured storage. Preserve an existing public/storage directory and repair the affected path after backup. Deliveries may include VERIFIER_ASSETS_VITRINE.sh and VERIFIER_VUES_COMPILEES.php for diagnostics.

Database errors or a refused seeder

Check .env database settings and migrate:status. DatabaseSeeder refusing a populated database protects the installation; use the update workflow. Do not delete data to bypass that refusal.

A style, widget or store button is missing

Check the published style, page or placement, block activation and translations. Reload the application settings. For store buttons, save a valid official URL and enable the matching portal section.

Flutter, Gradle or iOS build errors

Inspect flutter doctor -v and the first relevant error. Check SDK and JDK compatibility with the supplied Gradle files; on iOS, check signing and native dependencies. Do not replace version numbers arbitrarily.

The app cannot reach the server

Check baseUrl, the /api suffix, HTTPS, device connectivity and API availability. HTTP 401 generally indicates authentication is needed; HTTP 403 may reflect account permissions. Do not bypass these controls.

LARAVEL + FLUTTER

Official references

Additional technical references. Verify commands and paths against your installed distribution. Never paste credentials into this public documentation.

MANUEL ADMINISTRATEUR · V47

Every menu, submenu and its purpose

Reference generated from the Laravel administration menu. Some items depend on permissions, licensing or configuration and require deployment testing.

Pilotage1 items

Tableau de bord

Consulter les indicateurs de pilotage, les activités récentes et les alertes disponibles.

Required permissions : reports.view

Membres et dossiers6 items

Adhésions

Examiner les demandes d’adhésion, vérifier les pièces et traiter les dossiers.

Required permissions : users.view

Membres principaux

Consulter, rechercher et gérer les membres principaux selon les droits accordés.

Required permissions : users.view

Assurés rattachés

Rattacher et gérer les personnes assurées liées aux membres.

Required permissions : assures.view

Ayants droit

Gérer les ayants droit et leurs liens avec les dossiers.

Required permissions : beneficiaries.view

Formulaires dynamiques

Concevoir les formulaires adaptés aux parcours de la mutuelle.

Required permissions : settings.manage

Champs personnalisés

Ajouter les informations personnalisées nécessaires aux dossiers.

Required permissions : settings.manage

Cotisations et trésorerie12 items

Tontines et cycles

Ouvrir la rubrique « Tontines et cycles » et gérer ses éléments selon les permissions du compte.

Required permissions : tontines.view · tontines.manage · tontines.review

Cotisations et dettes

Suivre les cotisations, échéances, soldes et retards.

Required permissions : contributions.view

Vue d’ensemble

Visualiser une synthèse de la trésorerie et des opérations.

Required permissions : treasury.view

Subsection / tab : module=overview

Dépenses

Enregistrer, consulter et organiser les dépenses.

Required permissions : expenses.view · expenses.view_own

Subsection / tab : module=expenses

Alertes des dépenses

Examiner les alertes et anomalies de dépenses.

Required permissions : expenses.view · expenses.view_own

Comptes et caisse

Administrer les comptes de caisse et leurs soldes.

Required permissions : treasury.view

Subsection / tab : module=accounts

Mouvements de trésorerie

Consulter les entrées et sorties de trésorerie.

Required permissions : treasury.view

Subsection / tab : module=movements

Budgets

Préparer et suivre les budgets.

Required permissions : budgets.view

Subsection / tab : module=budgets

Encaissements à rapprocher

Vérifier les encaissements en attente de rapprochement.

Required permissions : treasury.reconcile

Subsection / tab : module=contributions

Rapprochements

Associer les opérations aux écritures attendues.

Required permissions : treasury.reconcile

Subsection / tab : module=reconciliations

Configuration des paiements

Configurer les paramètres d’encaissement.

Required permissions : settings.manage

Subsection / tab : module=payment-settings

Passerelles de paiement

Configurer les prestataires de paiement pris en charge.

Required permissions : settings.manage

Subsection / tab : tab=payments
Produits et prestations2 items

Catalogue produits

Présenter les offres et services accessibles aux membres.

Required permissions : offers.view

Contrats et garanties

Gérer les contrats, les garanties et les rattachements aux produits.

Required permissions : offers.view

Communication6 items

Messages et assistance

Lire et traiter les demandes et conversations.

Required permissions : chat.view

Campagnes Push

Ouvrir la rubrique « Campagnes Push » et gérer ses éléments selon les permissions du compte.

Required permissions : notifications.view

Média et articles

Publier les articles, annonces et actualités.

Required permissions : articles.view

Catégories des articles

Ouvrir la rubrique « Catégories des articles » et gérer ses éléments selon les permissions du compte.

Required permissions : articles.view

Nécrologie

Ouvrir la rubrique « Nécrologie » et gérer ses éléments selon les permissions du compte.

Required permissions : necrologie.view

Notifications par événement

Ouvrir la rubrique « Notifications par événement » et gérer ses éléments selon les permissions du compte.

Required permissions : settings.manage

Subsection / tab : tab=templates
Studio de l’organisation5 items

Studio de l’organisation

Ouvrir la rubrique « Studio de l’organisation » et gérer ses éléments selon les permissions du compte.

Required permissions : settings.manage · appearance.view · appearance.customize

Installer une démo métier

Ouvrir la rubrique « Installer une démo métier » et gérer ses éléments selon les permissions du compte.

Required permissions : settings.manage

Médiathèque

Ouvrir la rubrique « Médiathèque » et gérer ses éléments selon les permissions du compte.

Required permissions : appearance.customize · settings.manage

Langues et traductions

Activer les langues prises en charge.

Required permissions : settings.manage

Photos privées des profils

Ouvrir la rubrique « Photos privées des profils » et gérer ses éléments selon les permissions du compte.

Required permissions : users.view

Administration11 items

Licence de la plateforme

Consulter et administrer la licence via le web uniquement.

Required permissions : settings.manage

Centre de mises à jour

Ouvrir la rubrique « Centre de mises à jour » et gérer ses éléments selon les permissions du compte.

Required permissions : settings.manage

Rôles et capacités

Créer et organiser les rôles et capacités.

Required permissions : roles.view · roles.assign

Subsection / tab : module=roles

Affectation des rôles

Ouvrir la rubrique « Affectation des rôles » et gérer ses éléments selon les permissions du compte.

Required permissions : roles.assign

Subsection / tab : module=users

Journal des actions

Ouvrir la rubrique « Journal des actions » et gérer ses éléments selon les permissions du compte.

Required permissions : reports.audit

Subsection / tab : module=audit

Règles de gestion

Définir les règles métier disponibles.

Required permissions : settings.manage

Subsection / tab : tab=business

Email, SMS et notifications

Ouvrir la rubrique « Email, SMS et notifications » et gérer ses éléments selon les permissions du compte.

Required permissions : settings.manage

Subsection / tab : tab=apis

Paramètres de l’application

Ajuster les paramètres généraux Flutter.

Required permissions : settings.manage

Subsection / tab : tab=identity_theme

Inscription et paiement

Régler les parcours d’inscription et de paiement.

Required permissions : settings.manage

Subsection / tab : tab=registration_ui

Messages d’état Flutter

Configurer les messages d’état visibles dans Flutter.

Required permissions : settings.manage

Sauvegardes et exports

Ouvrir la rubrique « Sauvegardes et exports » et gérer ses éléments selon les permissions du compte.

Required permissions : reports.export

Aide et documentation1 items

Manuel d’utilisation

Consulter le manuel intégré de l’administration.

Required permissions : Session-based access

Gbama MutualBoost × GBAMA CODES

Support for your deployment

Pricing and license terms available upon request

MutualBoost

A digital presence worthy of your mutual

A website, member space and app united under your identity.

A consistent website and app

Present your services and support your members.

Discover MutualBoost ↗
A consistent website and app
1 / 3
MutualBoost

An experience you control

Built-in tools to keep your pages evolving.

Explore the possibilities
Configurable pages

Configurable pages

Enable blocks, reorder sections and adapt the copy.

A consistent identity

A consistent identity

Five styles for the website, member space and app.

Content under your control

Content under your control

Manage media and translations from the studios.

MutualBoost

Plans for your needs

Compare services and review the terms of each plan.

View plans

STANDARD PROTECTION PLAN

A sample configuration illustrating automated monthly contribution collection through Mobile Money.

Explore ↗

CONNECTED ELITE PACKAGE

A premium offer demonstrating advanced late-fee management and the inclusion of multiple beneficiaries.

Explore ↗

SOLIDARITY FUND

A demonstration of the system's ability to launch one-off funding appeals following a death notice.

Explore ↗
MutualBoost

A journey in three steps

Move at your own pace with the information you need.

Prepare my membership
01 · Choose a plan

01 · Choose a plan

Compare services and read the plan terms.

Explore ↗
02 · Prepare your application

02 · Prepare your application

Provide the information requested during registration.

Explore ↗
03 · Access your services

03 · Access your services

After signing in, review your account and available services.

Explore ↗
MutualBoost

News from your mutual

The latest information published by our team.

All news

The mobile advantage: instant financial management

Mutual association governance is entering a new era. Your custom Gbama MutualBoost application lets every member pay their contributions in seconds through its…

Explore ↗

Digitalising mutual associations: an end to manual records and unpaid contributions

Managing contributions manually is a major financial risk for modern mutual associations. With MutualBoost technology, automation takes over to keep your funds…

Explore ↗

Maximising engagement with push notifications

Having a native application on your members’ phones is the ultimate communication tool for an executive board. Effective reminders and alerts No more costly te…

Explore ↗
MutualBoost

Your questions, useful answers

Practical guidance for your first steps.

Read the FAQ
How do I join?

Explore the plans, review their terms, then complete the registration form.

Where can I find my contributions?

Sign in and open My contributions to review your status and history.

How do I get help?

Read the frequently asked questions or use the contacts published by your mutual.

MutualBoost

Build your member journey

Bring your content, services and identity together.

The Web and Flutter studios configure the available blocks for each style.

Explore registration ↗