How the pieces fit together
The client, backend, and deployment stack form a single pipeline: developers work in Android Studio and Jetpack Compose, commit changes through GitHub, and deploy services to AWS. Players interact with a polished mobile client while the backend keeps campaign state synchronized in real time.
The system follows an MVVM architecture, where each technology supports a specific layer of the application. The View layer is built with Kotlin and Jetpack Compose, allowing the interface to update automatically as the app’s state changes. The ViewModel acts as the bridge between the interface and the data layer, managing user actions, card interactions, campaign state, and multiplayer updates. The Model layer is supported by Room, which stores local card, deck, and campaign data so the app can remain fast and partially offline-capable. Real-time communication is handled through a Python WebSocket backend, which sends gameplay updates between connected players. AWS provides the deployment infrastructure for that backend, with services such as EC2 supporting server executions. Together, these technologies allow the app to keep the user interface, local data, and multiplayer game state synchronized cleanly through the MVVM flow.