Quizzify - Play unlimited quizzes with your friends for freeπŸ”₯.

Overview

Quizzify

Quizzify is an app in which we can play unlimited quizzes with our friends for free. Gain some more general knowledge while having fun with friends.

Video Introduction πŸ“Ή

This is a small introduction video about Quizzify.

Youtube

Blog ✍

To know more about how I build this project, read my article on https://vaibhav2002.hashnode.dev/quizzify-play-unlimited-quizzes-with-your-friends-for-free

Application Install

You can Install and test latest Quizzify app from below πŸ‘‡

Quizzify

Setup

  • Clone the repository on your machine.
  • Create project in Firebase, enable authentication (email and Google Auth) and download google-services.json and paste in the app folder.
  • Sign up hasura, connect database and do the following:

Open secrets.xml and google web client url for Firebase google auth

">

<string name="web_client_id">string>

Open GraphQLSecrets.kt in util package and add your Hasura credentials

//Add your hasura url here
const val HASURA_URL = "" 

//Add your hasura websocket url here (same as hasura url but with wss in place of https)
const val HASURA_WEB_SOCKET_URL = ""

//Add your hasura secret key here
const val SECRET_KEY = ""

About

It uses Firebase and Hasura as its backend. It uses Firebase for email based auth and Google auth and Hasura as GraphQL Api to access the database.

  • Fully functionable.
  • Clean and Simple Material UI.
  • Best and Clean Code Quality following Modern Android Development.

App Features

  • Onboardng - Quizzify has a beautiful user onboarding process.
  • User Authentication - Supports email based as well as Google authentication
  • Home - Home screen shows the top 5 popular community quizzes, option to start an Instant quiz and to join an exisiting quiz game using invite code.
  • Communtiy - Shows list of all community made quizzes with option to search and filter based on category. It also allows user to create a new community quiz.
  • Create Quiz - Users can create quizzes and contribute to the Quizzify community.
  • Favourites - It list all the quizzes the user has marked as favourite.
  • Profile - Shows user's profile.
  • About - Shows information about the app like its version number and more.
  • Quiz Detail - Shows details of the quiz select and option to start game with friends as well as solo.
  • Game Screen - Screen where user plays the quiz in real-time with their friends

Insights into the app πŸ”Ž

Quizzify - slides.gif

Quizzify has a sleek, modern looking minimalistic UI which makes it easy for people of every age group to use. πŸ”₯

Untitled design.gif

Quizzify has a easy and simple user onboarding process. 😁

Untitled design (1).gif

Quizzify uses Firebase for authentication. It supports email-based authentication as well as Google authentication with upcoming support for Facebook auth.

Untitled design (2).gif

Select whatever quiz you want to play and have fun time with your friends and gain some more general knowledge while playing.

Untitled design (3).gif

Play quizzes in realtime with friends with live rank and score tracking and enjoy a simple and easy game experience.

Untitled design (4).gif

You can even create quizzes of your own and play with friends. So go on, create quizzes of your own and contribute to the Quizzify community.

πŸ“Έ Screenshots

Technical details

  • Quizzify uses Firebase for user authentication, it supports email based authentication and Google authentication
  • Quizzify uses Hasura Cloud's PostgreSQL as it's primary database.
  • Quizzify uses Hasura's GraphQL API to access the database and is much easier to work with compared to a REST interface.
  • Quizzify has full offline support, it uses Android's ROOM database for caching all data offline.
  • Quizzify is made using Kotlin and following Modern Android Development practices.
  • Quizzify uses Kotlin Coroutines and Flow to handle all asynchronous tasks.
  • Quizzify uses all Jetpack libraries and follows MVVM architecture. It also has a G.O.A.T rating in Android's M.A.D scorecard.
  • Quizzify's code follows all the best practices and software development principles like SOLID which make it a very good learning resource for beginners as well as for people looking to improve thier software design skills.
  • Quizzify's code is properly linted using Ktlint.

summary.png

Built With πŸ› 

  • Kotlin - First class and official programming language for Android development.
  • Coroutines - For asynchronous and more..
  • Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.
  • StateFlow - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
  • SharedFlow - A SharedFlow is a highly-configurable generalization of StateFlow.
  • Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.
    • ViewModel - Stores UI-related data that isn't destroyed on UI changes.
    • ViewBinding - Generates a binding class for each XML layout file present in that module and allows you to more easily write code that interacts with views.
    • DataBinding - Binds data directly into XML layouts
    • Room - Room is an android library which is an ORM which wraps android's native SQLite database
    • DataStore - Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers.
  • Dependency Injection -
    • Hilt-Dagger - Standard library to incorporate Dagger dependency injection into an Android application.
    • Hilt-ViewModel - DI for injecting ViewModel.
  • Backend
    • Firebase
      • Firebase Auth - To support email based authentication and Google authentication
    • Hasura - Blazing fast API performance, that’s remarkably easy to scale
  • GSON - A modern JSON library for Kotlin and Java.
  • Apollo Kotlin - A strongly-typed, caching GraphQL client for the JVM, Android, and Kotlin multiplatform.
  • Timber - A simple logging library for android.
  • Retrofit - A type-safe HTTP client for Android and Java.
  • GSON Converter - A Converter which uses Moshi for serialization to and from JSON.
  • Coil - An image loading library for Android backed by Kotlin Coroutines.
  • Material Components for Android - Modular and customizable Material Design UI components for Android.

Package Structure

dev.vaibhav.quizzify    # Root Package
.
β”œβ”€β”€ data                # For data handling.
|   β”œβ”€β”€ local           # Room DB, and its related classes
|   β”œβ”€β”€ remote          # Firebase, Hasura and their datasource implementation
β”‚   β”œβ”€β”€ model           # Model data classes and mapper classes, both remote and local entities
β”‚   └── repo            # Single source of data.
|
β”œβ”€β”€ di                  # Dependency Injection             
β”‚   └── module          # DI Modules
|
β”œβ”€β”€ ui                  # UI/View layer
|   β”œβ”€β”€ adapters        # All Adapters, viewholder and diffUtils for recyclerViews
|   β”œβ”€β”€ screens         # All App Screens 
|   └── usecases        # Use-case classes
|
└── utils               # Utility Classes / Kotlin extensions

Architecture

This app uses MVVM (Model View View-Model) architecture.


If you like my projects and want to support me to build more cool open source projects

Contact

If you need any help, you can connect with me.

Visit:- Vaibhav Jaiswal

You might also like...
Binding your extras more easier, more simpler for your Android project

Ktan Ktan make your intent / arguments more easier and readable. And most important, will help you bind all extras for your activity / fragment. And a

Simple view which allow you to customise your pizza's toppings and size as per your choice.
Simple view which allow you to customise your pizza's toppings and size as per your choice.

TwistedPizzaToppingsView Overview Simple view which allows options to customize your pizza toppings and size as per your choice. Features Android 12 s

Browse your memories without any interruptions with this photo and video gallery
Browse your memories without any interruptions with this photo and video gallery

Simple Gallery Simple Gallery Pro is a highly customizable lightweight gallery loved by millions of people for its great user experience. Organize and

This is a Ktor project to build your own Url shortener
This is a Ktor project to build your own Url shortener

Ktor URL Shortner This project is a implementation for creating Short URL using Ktor + Kotlin + MongoDB Usage It contains two routes if you want to im

A forkable starter for building your own recipes and deploying them on the Moderne SaaS

Rewrite recipe starter This repository serves as a template for building your own recipe JARs and publishing them to a repository where they can be ap

Add screenshots to your Android tests
Add screenshots to your Android tests

Testify β€” Android Screenshot Testing Add screenshots to your Android tests Expand your test coverage by including the View-layer. Testify allows you t

Simple Kotlin application that displays the currently available network interfaces on your machine

Network-Interface-Checker Simple Kotlin application that displays the currently available network interfaces on your machine. An executable jar can be

This repository is a simple humidity and temperature dashboard to present data from sensors on your phone
This repository is a simple humidity and temperature dashboard to present data from sensors on your phone

ChilliBook This repository is a simple humidity and temperature dashboard to present data from sensors on your phone. It uses Bluetooth LE and an ESP3

Releases(v1.0.0)
Owner
Vaibhav Jaiswal
Software Engineer Intern - Android @Pratilipi Passionate Android Developer . Competitive programmer and Ui/UX designer.
Vaibhav Jaiswal
A media player, currently only for Android, that allows you to play songs in background for free

Just Listen A music player currently only for android. It is using Audius public APIs to display and get the playlists/songs. Available on google play

null 68 Dec 27, 2022
push note is a free Android app that you can keep your notes in the notification bar in seconds.

push note - notification notes push note is a free Android app that you can keep your notes in the notification bar in seconds. Features ?? Super quic

Cafer Mert Ceyhan 56 Dec 10, 2022
Anxiety free news reader for Android - developed using Kotlin

Android River is a modern Android 2.2 news app. It's now version 1.15. Android River has the following features: Read RSS 1.0, RSS 2.0 and ATOM 1.0. C

Dody Gunawinata 319 Nov 10, 2022
Free and open source manga reader for Android.

Build Stable Weekly Preview Contribute Support Server Tachiyomi Tachiyomi is a free and open source manga reader for Android 5.0 and above. Features F

Tachiyomi 20.2k Dec 30, 2022
Free and open source Android app to manage qBittorrent remotely.

qBitController qBitController is a free and open source app for managing qBittorrent remotely. Please note that qBitController is in alpha version. Us

Bartu Γ–zen 12 Dec 25, 2022
Kotatsu is a free and open source manga reader for Android platform

Kotatsu is a free and open source manga reader for Android platform. Supports a lot of online catalogues on different languages with filters and search, offline reading from local storage, favourites, bookmarks, new chapters notifications and more features.

null 7 Dec 19, 2022
Easy app for managing your files without ads, respecting your privacy & security

Simple File Manager Can also be used for browsing root files and SD card content. You can easily rename, copy, move, delete and share anything you wis

Simple Mobile Tools 1.2k Dec 29, 2022
To help to promote your android app by prompting users to rate your app in a bottom Sheet.

RateBottomSheet This an Android library to help to promote your Android App by prompting users to rate your app in the Google Play Store with a materi

Farham Hosseini 5 Jul 8, 2022
TakeNotes, taking care of your tasks and your health

Take Notes - Para tornar sua rotina mais SaudΓ‘vel TakeNotes, cuidando de suas tarefas e de sua saΓΊde Sobre β€’ Funcionalidades β€’ Layout β€’ Como executar

null 0 Dec 7, 2021