Skip to main content

Features

This page covers the member-facing features of the Association App: Profile, Events, Payments, Notifications, and supporting content features.


Authentication

Screens

ScreenRouteDescription
SplashSplashChecks token validity; routes to Home or Onboarding
OnboardingOnboardingFirst-launch walkthrough (shown once)
LoginLoginEmail + password login
Forgot PasswordForgotPasswordSends reset email
Sign-Up RequestSignUpRequestMembers request an account from the admin
RegisterRegister(code)Completes registration via invitation code
Set PasswordSetPassword(token, email, firstName, lastName)Set initial password after invitation
InvitationInvitation(code)Processes deep-linked invitation URLs

Flow

App launch
├── Token valid → Home
└── No token / expired
├── Onboarding (first launch)
└── Login
├── Success → fetch user + branding → Home
└── New member → deep link → Register / SetPassword

Organisation selection

After login, members who belong to multiple organisations see the Organisation Selection screen (OrganizationSelection) to pick their active context. Single-org members are routed directly to Home.


Profile

Screens: ProfileScreen, EditProfileScreen, AccountSettingsScreen, ChangePasswordScreen, UpdateEmailScreen, AboutScreen, LegalPageDetailScreen, ContactUsScreen

What members can do

ActionScreen
View profile (name, email, organisation role)Profile
Update display name, phone, addressEdit Profile
Change passwordChange Password
Update email addressUpdate Email
View app version and build infoAbout
Read Terms of Service / Privacy PolicyLegal Page Detail
Send a message to the associationContact Us
Log outAccount Settings
Delete accountAccount Settings

Edit Profile

The form uses React Hook Form–style validation within Compose:

  • First name and Last name — required, max 50 chars
  • Phone — optional, validated format
  • Address — optional multi-line field
  • Profile photo upload (handled by ProfileRepository)

Changes are sent to the backend via PATCH /api/v1/profile and the local user state is updated in the ViewModel on success.

Account Settings

Provides access to destructive actions (log out, delete account) with confirmation dialogs. On logout, all KVault keys are cleared and the user is routed to the Login screen.


Events

Screens: EventsScreen, EventDetailScreen

Route: Bottom nav → Events tab → EventDetail(eventId)

Events list

The events list displays upcoming events in a calendar view grouped by date. Members can filter by:

  • All events
  • Upcoming (future events only)
  • My registrations

Each event card shows: cover image, title, date/time, location type (in-person / virtual), and registration status.

Event detail

The event detail screen shows full event information:

FieldDescription
Title & descriptionRich text rendered from HTML
Date & timeStart/end with timezone
LocationVenue name + address, or virtual meeting link
CapacityMax attendees (if set)
PricingFree / Paid — base price, member price, early-bird price
Registration statusOpen / Closed / Pending approval / Attending

RSVP & Registration

Members can respond to an event with one of three intents:

ResponseEventResponseType
AttendingATTENDING
InterestedINTERESTED
Not attendingNOT_INTERESTED

If the event requires admin approval, the member's status shows as Pending until an admin approves or rejects it.

For paid events, tapping RSVP initiates the payment flow (see Payments below).

Event types supported

Field valueMeaning
IN_PERSONPhysical venue
VIRTUALOnline meeting link
HYBRIDBoth in-person and virtual

Payments

Payments are tied to paid event registrations. There is no standalone payments screen — the payment flow is triggered from the Event Detail screen when a member taps RSVP on a paid event.

Payment flow

Event Detail → RSVP → Paid event detected

Payment summary (event title, price tier, currency)

Member confirms → backend creates registration + invoice

Invoice sent to member's email

Payment recorded by admin in Admin UI (manual reconciliation)

Pricing tiers

Events can offer up to three prices:

TierFieldWhen applied
StandardbasePriceDefault for all members
Member pricememberPriceFor members in good standing
Early birdearlyBirdPriceUntil an early-bird cut-off date

The backend determines which price applies based on the member's status and registration date.

Invoice notifications

When an invoice is created, a push notification of type PAYMENT_INVOICE_CREATED is sent. The notification links directly to the event detail or a payment reference email.

info

In-app payment processing (credit card, bank transfer) is handled by the backend's payment gateway integration. The mobile app displays pricing and initiates registration; it does not process card details directly.


Notifications

Screen: NotificationsScreen

Route: Bottom nav → Notifications tab

Push notification setup

PlatformChannel
AndroidFirebase Cloud Messaging (FCM)
iOSApple Push Notification service (APNs) via Firebase

On first launch, the app requests notification permission using Moko Permissions (shows a native permission dialog). If granted, the FCM/APNs token is synced to the backend so the server can deliver targeted notifications.

The token is refreshed automatically and re-synced on each login.

In-app notification list

The notifications screen fetches all notifications for the authenticated member. Each item shows:

  • Title and message body
  • Priority badge (High / Normal / Low)
  • Timestamp
  • Deep link action (tap to navigate to the related resource)

Notification types

CategoryTypes
MembershipMEMBERSHIP_EXPIRY_REMINDER, MEMBERSHIP_RENEWED, MEMBERSHIP_APPROVED, MEMBERSHIP_SUSPENDED, MEMBERSHIP_CANCELLED
EventsEVENT_REMINDER, EVENT_REGISTRATION_CONFIRMED, EVENT_REGISTRATION_APPROVED, EVENT_REGISTRATION_REJECTED, EVENT_UPDATED, EVENT_CANCELLED
PaymentsPAYMENT_INVOICE_CREATED, PAYMENT_OVERDUE, PAYMENT_RECEIVED
ContentNEWS_PUBLISHED, DOCUMENT_ADDED, COMMENT_RECEIVED
SystemSYSTEM_ANNOUNCEMENT, SYSTEM_MAINTENANCE

Notification priorities

PriorityBehaviour
HIGHDelivered immediately; shown in Android heads-up; iOS critical alert
NORMALStandard delivery
LOWBatched and delivered when convenient

Deep linking from notifications

Tapping a push notification opens the app and navigates to the relevant screen:

Notification typeDestination
Event reminder / updateEventDetail(eventId)
News publishedNewsDetail(slug)
Document addedDocumentsBrowser
Membership / paymentAccountSettings or external payment link

News

Screens: NewsScreen, NewsDetailScreen

Route: Bottom nav → News tab → NewsDetail(slug)

Members browse organisation news articles. The list is sorted by publish date (newest first). The detail screen renders the full article body as rich text (HTML from the backend).


Documents

Screens: DocumentsScreen, DocumentsBrowserScreen, GovernanceScreen, GuidanceScreen, PdfViewerScreen

Route: Home → Documents section → PdfViewer(id, title)

Members can access and read organisation documents. PDFs are rendered in-app using the pdfmp-compose PDF viewer library. Documents are organised into categories:

  • Documents — general repository
  • Governance — constitutional and policy documents
  • Guidance — how-to guides and reference material

Members Directory

Screen: MembersScreen

Route: Home → Members

Displays the association's member directory. Each entry shows the member's name and any publicly visible profile details. The directory is filtered to the member's active organisation.