CoinWatch is an Android cryptocurrency app providing real-time coin prices, price histories, and market data.
The app is built using the latest Android architecture components - resulting in a scalable, modularised and testable app.
Get a list of real-time prices and price changes of the top cryptocurrencies
Analyse coins in detail with animated price history graphs and market stats data
Search through thousands of cryptocurrencies by name or symbol
Create a personalized list of favourite cryptocurrencies
Kotlin
Jetpack Compose
Retrofit
Coil
OkHttp
Coroutines
Flow
Hilt
ViewModel
Timber logging
Room
Material Design 3
Static code analysis using Ktlint
CoinWatch features an extensive test suite, using the following:
JUnit for local tests
Jetpack Compose testing APIs for instrumented tests
Truth for assertions
MockK for mocks
The design of CoinWatch follows a few key principles:
Unidirectional Data Flow (UDF) - State flows in one direction, and events that modify the data flow in the opposite direction.
Single Source of Truth (SSOT) - The SSOT is the owner of data, and only the SSOT can modify or mutate it.
Drive UI from immutable data models - App data is contained within persistent data models and drives UI components.
A high-level overview of the app's architecture is displayed below. The architecture follows Google's official architecture guidance.
Contributions to the project are welcome and highly encouraged! To get started, please check out the contributing guidelines.
Do you have ideas to improve the app or a query for the developer?
Please get in touch via email - [email protected]
Coin data provided by CoinRanking API
Empty state images provided by unDraw
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.