DocuBox

DocuBox is a cloud based file storing app where you can securely store and access your documents from anywhere around the world!

This project is developed by Team 404 for Hashnode x Linode hackathon. This team comprises of Ishant and Vaibhav.

Blog ✍

To know more about how I build this project, read my article on https://ishantchauhan.hashnode.dev/docubox-securely-store-access-and-share-your-files-on-cloud

Application Install

You can Install and test latest DocuBox app from below 👇

DocuBox

How to use this app

To know how to use this app read this or watch this video

Setup

  • Clone the repository on your machine.
  • Clone the backend code and set it up by following its README.
  • After setting up the backend, do the following:

Open Secrets.kt in util package and add your backend Base URL

//Add your base url here
const val BASE_URL = "http://[your server url]/api/"

About

It uses a nodejs backend which is deployed on an ubuntu server running on Linode.

  • Fully functionable.
  • Clean and Simple Material UI.
  • Best and Clean Code Quality following Modern Android Development, SOLID Principles and much more.

App Features

  • User Authentication – Supports email based authentication
  • Saving Files – You can upload your files to DocuBox’s cloud storage and access it anywhere.
  • File Encryption – Files stored on DocuBox is secure and encrypted, so your data is securely stored.
  • Sharing File Access – You can share view access of your files to other users.
  • File Management – You can create multiple folders to organize your storage just as you want it.
  • File Download – You can even download your files and save them locally for offline access.
  • Enhanced File Search – Super fast file searching which can search files instantly.

Insights into the app 🔎

📸 Screenshots

Technical details

  • DocuBox uses custom NodeJS Server running on Linode as its backend.
  • DocuBox uses Retrofit to make all REST API calls to the NodeJS backend.
  • DocuBox is made using Kotlin and following Modern Android Development practices.
  • DocuBox uses Kotlin Coroutines and Flow to handle all asynchronous tasks.
  • DocuBox uses all Jetpack libraries and follows MVVM architecture. It also has a G.O.A.T rating in Android’s M.A.D scorecard.
  • DocuBox’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.
  • DocuBox’s code is properly linted using Ktlint.

summary.jpg

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
    • 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.
  • GSON – A modern JSON library for Kotlin and Java.
  • 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

com.docubox             # Root Package
.
├── data                # For data handling.
|   ├── local           # Local Datasource and classes
|   ├── remote          # Remote datasources and API Service
│   ├── model           # Model data classes and mapper classes, both remote and local entities
│   └── repo            # Single source of data.
|
├── service             # Foreground Service to upload File to server
|
├── di                  # Dependency Injection             
│   └── module          # DI Modules
|
├── ui                  # UI/View layer
|   ├── adapters        # Adapter, ViewHolder and DiffUtil
|   └── screens         # All App Screens 
|
└── 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

Attribution

The project uses backend which is deployed on Linode for the Hashnode X Linode Hackathon.


Contact

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

Visit:- Vaibhav Jaiswal

GitHub

View Github