GithubHelp home page GithubHelp logo

kasem-sm / slimekt Goto Github PK

View Code? Open in Web Editor NEW
594.0 8.0 51.0 27.95 MB

An article sharing platform where you can personalize, subscribe to your favorite topics, get daily-read reminders, etc. App built using Kotlin, Dagger Hilt, Room Database, Coroutines, Flow, AndroidX Glance, WorkManager, Coil etc.

Home Page: https://kasem-sm.github.io/SlimeKT

License: Apache License 2.0

Kotlin 99.99% Shell 0.01% Procfile 0.01%
android-app mvvm-architecture ktor-client room-database modularization jetpack-compose kotlin hacktoberfest hacktoberfest2022

slimekt's Introduction

Header Image

Slime Build (Android) Slime Build (API)

GitHub stars GitHub watchers

Android Weekly Google Dev Library

Disclaimer

This is an over-engineered project.

Introduction πŸ™‹β€β™‚οΈ

An article sharing platform where you can personalize, subscribe to your favorite topics, get daily-read reminders, explore new authors, and share your articles. App built using Kotlin, Dagger Hilt, Room Database, Coroutines, Flow, AndroidX Glance, WorkManager, Coil etc.

Documentation πŸ“š

Documentation

We have prepared a detailed guide on every feature, API route, and project structure. Please visit here to know more about the same. Additionally, every major folder, such as /api and /features, contains short documentation in the Github repository itself.

Repository overview πŸ“‚

SlimeKT has its backend built with Ktor. The folder /api consists of our backend deployed at Railway. SlimeKT Android application resides inside of the /app folder.

App Architecture Diagram

It follows the recommended app architecture as stated in official Android documentation

App Architecture

Sample, Screenshots and Demo πŸ“±

Slime APK

Screenshot Board 1

Screenshot Board 2

For more screenshots and screen-recording demo, please visit our documentation.

What's next ✨

SlimeKT is a Work In Progress project and there are several features/ideas which are yet to be implemented. You can help us on our journey by contributing your skills. Please checkout our Contribution Guide for more.

Tech stack / Miscellaneous Features πŸš€

  • Kotlin, Jetpack Compose, Work Manager, Glance API, Material You, Coroutines, Flow, Accompanist, Ktor, Room Database, Coil, Dagger Hilt, Mockk etc.
  • Compose Destinations: Annotation processing library for type-safe Jetpack Compose navigation with no boilerplate.
  • Observer Pattern: Data from the cache would be shown while new data is fetched from the server. Newly retrieved data gets updated immediately on the screen.
  • WorkManager: App uses WorkManager API to update user's subscriptions and to fetch Daily Read articles.
  • AndroidX Glance: Daily Read Widget with the power of Jetpack Compose.
  • Material You: On Android 12 and above, you can have custom theme based on your device wallpaper.

Please visit the documentation of this project for detailed information.

Project Setup Guide βš’

Android App

You need to have Android Studio Bumblebee or Dolphin to set up this project locally. After downloading all the requirements, please import the project into Android Studio, build the project, and click Run.

Backend (API)

You need to have IntelliJ IDEA and MongoDB Compass installed. After downloading all the requirements, please import the /api module into IntelliJ IDEA, build the project and click the Run icon beside main function in Application.kt file.

Test Cases (Android app)

Current Testing status - https://kasem-sm.github.io/SlimeKT/tests/status/

Contribution Guide and Contributors πŸ‘·β€β™‚οΈ

There are no special rules for contributing your expertise and making the open-source community more powerful. Just don't forget to file an issue or start a discussion so that I may not be surprised when you create a pull request. Running spotlessApply before creating a pull request would be cherry on the cake.

Medium Articles related to this project πŸ–‹

  1. SlimeKT - Kotlin Powered open source project. (Android app with Ktor backend)
  2. Android’s IME Actions: Don’t ignore them. Read here
  3. Create Animated PlaceHolder for your Jetpack Compose text fields Read here
  4. When Jetpack's Glance met his fellow worker, WorkManager Read Here

More articles by kasem-sm on Medium.

Find this project useful? πŸ’–

Support it by starring this repository. Join our Stargazers team!

Contact πŸ€™

Direct Messages on My Twitter are always open. If you have any questions related to SlimeKT or Android development, ping me anytime!

Credits πŸ’Ž

  • Tivi by chrisbanes - A divine project for me to explore. I refer to this project as Gold πŸ₯‡.
  • Gabor Varadi - He is always willing to answer my questions. A great man and a blessing to the Android community (AKA, the SavedStateHandle preacher).
  • Doris Liu and Manuel Vivo - They always help review my code snippets and add their value to them.
  • Hadi - Assisted me in improving the modularized structure of this project.
  • Marcel - His suggestions helped me to improve the Glance widget.

License

Copyright 2022 Kasem S.M

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

    http://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.

slimekt's People

Contributors

esafirm avatar indyfromoz avatar kasem-sm avatar nirmaljeffrey avatar rvenky125 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

slimekt's Issues

Project structure Improvements.

  1. Move all common reusable .gradle files into gradle/ folder, thereby cleaning root dir.
  2. rename worker modules to more explicit names such as daily-read-worker
  3. remove unnecessary plugins

When the user re-log's in and fetches the topics that are in Explore section, filter the actual topics from the API and move the rest to subscription section.

Study

Any topics that are not subscribed by the user will be displayed in explore section.

Imagine a scenario where the user log's out
and therefore all the topics that are subscribed
will be pushed into explore section.

The user then log's in,
goes to the Explore section and tries to fetch his explore topics (unsubscribed topics),

our API call will do the work and get the unsubscribed topics
but remember that all topics were moved into Explore section when the user previously signed out, so we will have to filter the actual Explore topics of API from the cache explore topics and move the rest to the subscription section. (as topics that aren't subscribed are in explore section and vice versa)

List of problems!

  • I would suggest avoid using the name of project on classes.

  • Singleton CoroutineScope is a wrong pattern because every async operation needs to have a scope to define when they will be canceled. Check here

  • As we chatted, the interfaces in the data module should moved out to a new module, let's name it data-api, so other modules that needs it could inject the interfaces. Also as I noticed the interfaces of implementation in data module actually are on wrong modules! For instance, the implementation of ArticleDao interface will be generated in the data module so this interface must be beside other Dao interfaces in the so called data-api module.

  • It's hard to understand why you have core module and also common-ui and features/authentication/common-ui modules!

Hope it helps.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.