# inksidedigitalteknologi/royaltree architecture

> Architecture diagram of the GitHub repository inksidedigitalteknologi/royaltree, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/inksidedigitalteknologi/royaltree
- Repository: https://github.com/inksidedigitalteknologi/royaltree

## Overview

Royaltree is an Android rewards and affiliate app: users sign in, earn RTP through check-ins, missions, ads, games, and steps, then manage referrals, balances, and withdrawals. The Android app combines screen navigation with local Room-backed domain state and API access; the backend exposes account and rewards operations backed by Firestore. README content only describes running the Android project, so product capabilities are inferred from the source tree and sampled API/backend excerpts. Some screen-to-data wiring is not shown and is intentionally omitted.

Main entry points: [`app/src/main/java/com/inkside/digital/data/repository/AffiliateRepository.kt`](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/repository/AffiliateRepository.kt) (Rewards repository), [`backend/server.js`](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/server.js) (HTTP server), [`app/src/main/java/com/inkside/digital/data/network/ApiClient.kt`](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/network/ApiClient.kt) (API client), [`app/src/main/java/com/inkside/digital/data/ads/AdManager.kt`](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/ads/AdManager.kt) (Ad rewards)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Android app"]
  node_activity["App entry<br/>[MainActivity.kt]"]
  node_authui["Sign-in flow"]
end

subgraph group_earn["Rewards features"]
  node_home["Rewards screens<br/>[HomeScreen.kt]"]
  node_missions["Missions<br/>[MissionsScreen.kt]"]
  node_checkin["Daily check-in"]
  node_steps["Step rewards"]
  node_games["Game rewards<br/>[GameRoomScreen.kt]"]
  node_ads["Ad rewards<br/>[AdManager.kt]"]
  node_affiliate["Affiliate features<br/>[CampaignsScreen.kt]"]
  node_wallet["History and withdrawals"]
  node_analytics["Analytics<br/>[AnalyticsScreen.kt]"]
end

subgraph group_data["Data services"]
  node_authmanager["Firebase auth<br/>[AuthManager.kt]"]
  node_authrepo["Account sync<br/>[AuthRepository.kt]"]
  node_affrepo["Rewards repository"]
  node_dao["Room access<br/>[AppDao.kt]"]
  node_room[("Local database<br/>[AppDatabase.kt]")]
  node_sensor["Step sensor"]
  node_api["API client<br/>[ApiClient.kt]"]
  node_service["API contract"]
end

subgraph group_backend["Backend"]
  node_backend["HTTP server<br/>[server.js]"]
  node_authroute["Auth endpoints<br/>[auth.js]"]
  node_dailyroute["Check-in endpoints<br/>[daily.js]"]
  node_adroute["Ad endpoints<br/>[ads.js]"]
  node_adminroute["Admin endpoints<br/>[admin.js]"]
  node_firestore[("Firestore<br/>[firebase.js]")]
end

node_user(("App user"))
node_firebase{{"Firebase Auth"}}
node_admob{{"AdMob"}}

node_user -->|"opens app"| node_activity
node_activity -->|"shows auth"| node_authui
node_authui -->|"signs in"| node_authmanager
node_authmanager -->|"authenticates"| node_firebase
node_authrepo -->|"syncs account"| node_api
node_api -->|"uses API"| node_service
node_service -->|"HTTP requests"| node_backend
node_backend -->|"reads and writes"| node_firestore
node_ads -.->|"loads and shows"| node_admob
node_ads -->|"submits reward"| node_api
node_steps -->|"reads steps"| node_sensor
node_affrepo -->|"queries and updates"| node_dao
node_dao -->|"reads and writes"| node_room
node_affrepo -->|"requests data"| node_api
node_missions -->|"claims rewards"| node_affrepo
node_checkin -->|"claims check-in"| node_affrepo
node_games -->|"manages game"| node_affrepo
node_wallet -->|"manages balance"| node_affrepo
node_affiliate -->|"manages campaigns"| node_affrepo
node_analytics -->|"loads summaries"| node_api
node_backend -.->|"dispatches auth"| node_authroute
node_backend -.->|"dispatches check-in"| node_dailyroute
node_backend -.->|"dispatches ads"| node_adroute
node_backend -.->|"dispatches admin"| node_adminroute

click node_activity "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/MainActivity.kt"
click node_authui "https://github.com/inksidedigitalteknologi/royaltree/tree/main/app/src/main/java/com/inkside/digital/ui/screens/auth"
click node_home "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/HomeScreen.kt"
click node_missions "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/MissionsScreen.kt"
click node_checkin "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/DailyCheckInScreen.kt"
click node_steps "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/StepCounterScreen.kt"
click node_games "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/GameRoomScreen.kt"
click node_ads "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/ads/AdManager.kt"
click node_affiliate "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/CampaignsScreen.kt"
click node_wallet "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/WithdrawalScreen.kt"
click node_analytics "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/AnalyticsScreen.kt"
click node_authmanager "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/auth/AuthManager.kt"
click node_authrepo "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/auth/AuthRepository.kt"
click node_affrepo "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/repository/AffiliateRepository.kt"
click node_dao "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/dao/AppDao.kt"
click node_room "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/database/AppDatabase.kt"
click node_sensor "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/sensor/StepSensorHelper.kt"
click node_api "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/network/ApiClient.kt"
click node_service "https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/network/RoyaltreeApiService.kt"
click node_backend "https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/server.js"
click node_authroute "https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/auth.js"
click node_dailyroute "https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/daily.js"
click node_adroute "https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/ads.js"
click node_adminroute "https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/admin.js"
click node_firestore "https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/config/firebase.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_activity,node_authui,node_user toneBlue
class node_home,node_missions,node_checkin,node_steps,node_games,node_ads,node_affiliate,node_wallet,node_analytics toneAmber
class node_authmanager,node_authrepo,node_affrepo,node_dao,node_room,node_sensor,node_api,node_service toneMint
class node_backend,node_authroute,node_dailyroute,node_adroute,node_adminroute,node_firestore toneRose
class node_firebase,node_admob toneIndigo
```

## Components

### Android app

- [App entry](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/MainActivity.kt): `app/src/main/java/com/inkside/digital/MainActivity.kt`
- [Sign-in flow](https://github.com/inksidedigitalteknologi/royaltree/tree/main/app/src/main/java/com/inkside/digital/ui/screens/auth): `app/src/main/java/com/inkside/digital/ui/screens/auth`

### Rewards features

- [Rewards screens](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/HomeScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/HomeScreen.kt`
- [Missions](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/MissionsScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/MissionsScreen.kt`
- [Daily check-in](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/DailyCheckInScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/DailyCheckInScreen.kt`
- [Step rewards](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/StepCounterScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/StepCounterScreen.kt`
- [Game rewards](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/GameRoomScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/GameRoomScreen.kt`
- [Ad rewards](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/ads/AdManager.kt): `app/src/main/java/com/inkside/digital/data/ads/AdManager.kt`
- [Affiliate features](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/CampaignsScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/CampaignsScreen.kt`
- [History and withdrawals](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/WithdrawalScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/WithdrawalScreen.kt`
- [Analytics](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/ui/screens/AnalyticsScreen.kt): `app/src/main/java/com/inkside/digital/ui/screens/AnalyticsScreen.kt`

### Data services

- [Firebase auth](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/auth/AuthManager.kt): `app/src/main/java/com/inkside/digital/data/auth/AuthManager.kt`
- [Account sync](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/auth/AuthRepository.kt): `app/src/main/java/com/inkside/digital/data/auth/AuthRepository.kt`
- [Rewards repository](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/repository/AffiliateRepository.kt): `app/src/main/java/com/inkside/digital/data/repository/AffiliateRepository.kt`
- [Room access](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/dao/AppDao.kt): `app/src/main/java/com/inkside/digital/data/dao/AppDao.kt`
- [Local database](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/database/AppDatabase.kt): `app/src/main/java/com/inkside/digital/data/database/AppDatabase.kt`
- [Step sensor](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/sensor/StepSensorHelper.kt): `app/src/main/java/com/inkside/digital/sensor/StepSensorHelper.kt`
- [API client](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/network/ApiClient.kt): `app/src/main/java/com/inkside/digital/data/network/ApiClient.kt`
- [API contract](https://github.com/inksidedigitalteknologi/royaltree/blob/main/app/src/main/java/com/inkside/digital/data/network/RoyaltreeApiService.kt): `app/src/main/java/com/inkside/digital/data/network/RoyaltreeApiService.kt`

### Backend

- [HTTP server](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/server.js): `backend/server.js`
- [Auth endpoints](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/auth.js): `backend/routes/auth.js`
- [Check-in endpoints](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/daily.js): `backend/routes/daily.js`
- [Ad endpoints](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/ads.js): `backend/routes/ads.js`
- [Admin endpoints](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/routes/admin.js): `backend/routes/admin.js`
- [Firestore](https://github.com/inksidedigitalteknologi/royaltree/blob/main/backend/config/firebase.js): `backend/config/firebase.js`

### Other components

- **App user**
- **Firebase Auth**
- **AdMob**

## Connections

- App user → App entry: opens app
- App entry → Sign-in flow: shows auth
- Sign-in flow → Firebase auth: signs in
- Firebase auth → Firebase Auth: authenticates
- Account sync → API client: syncs account
- API client → API contract: uses API
- API contract → HTTP server: HTTP requests
- HTTP server → Firestore: reads and writes
- Ad rewards → AdMob: loads and shows
- Ad rewards → API client: submits reward
- Step rewards → Step sensor: reads steps
- Rewards repository → Room access: queries and updates
- Room access → Local database: reads and writes
- Rewards repository → API client: requests data
- Missions → Rewards repository: claims rewards
- Daily check-in → Rewards repository: claims check-in
- Game rewards → Rewards repository: manages game
- History and withdrawals → Rewards repository: manages balance
- Affiliate features → Rewards repository: manages campaigns
- Analytics → API client: loads summaries
- HTTP server → Auth endpoints: dispatches auth
- HTTP server → Check-in endpoints: dispatches check-in
- HTTP server → Ad endpoints: dispatches ads
- HTTP server → Admin endpoints: dispatches admin
