offspot / overview

Offspot-wide issues and documentation
GNU General Public License v3.0
5 stars 0 forks source link

Hotspot Companion App #3

Open Popolechien opened 8 months ago

Popolechien commented 8 months ago

⬇️

rgaudin commented 7 months ago

Main Objective

A Mobile App to synchronize data between a running Hotspot and an Internet-reachable Kiwix Service.

A Kiwix Hotspot is a raspberry-pi device that's only connected to a power source. It runs our software stack to create a WiFi Hotspot that provides access to embedded content via Kiwix-serve and other tools.

We want to be able to collect arbitrary data from Hotspots to a Cloud service (usage metrics at the moment) and also be able to send back data from the Cloud service to the Hotspots.

Hotspots are deployed to replace Internet connectivity where it's missing or expensive. Most of them are offline, always.

Mobile phones are easy to find in most places and it's reasonable to assume that an Hotspot Admin would have access to one.

We thus want to develop a mobile App that serves as an asynchronous proxy between multiple Hotspots and a Cloud service.

The phone will connect to the Hotspot WiFi network and exchange data with the Hotspot. The phone will connect to the Internet via WiFi or mobile data and exchange data with the Online service. These two phases will repeat over and over and we do not know which one will happen first (user might first connect to Online service or first connect to one or many Hotspot). Time and physical location between the various connections is varying (could be minutes to days or months, could be all in the same place or in various locations).

Important

This is a high-level Project Description. This will be turned into actionable tickets once we have validated a proposal and been attributed a GSoC student.

Feel free to question all choices if you think there is a better/cheaper/more-efficient way to do. If you do though, justify yourself so it's criytal clear that you respect the general requirements (main objective) and that your alternative is beneficial. Keep in mind that while this will be developped during a GSoC, we will have to maintain it for a long time so maintainability is key.

Unclear proposals will be discarded. We need to be sure you've understood the requirement.

Target Users

App will be used solely by Hotspot Managers: a Hotspot manager is a person responsible for one or multiple Kiwix Hotspot deployment.

The manager hold the Admin credentials to said Hotspot(s). Admin credentials are a username and password that are required to access admin functions of the Hotspot(s). Each Hotspot could have different credentials, even if they are all managed by the same Admin. Admin however uses usually the same credentials on all their Hotspot.

Admin has access to a mobile device (Android or iOS). Admin has temporary access to either an Internet connection on this mobile device (Wifi or mobile data) or to the Hotspot Wifi.

User Workflow

Initially

Wants to extract data from a Hotspot

➡️ at this point, communication with Hotspot is over

Wants to upload data to Cloud

➡️ at this point, communication with Cloud is over.

Features & Principles

Techno

Mobile App Framework

We've identified Flutter as good candidate:

Note that Flutter generate an XCode project and builds with it so a macOS machine is required to build the iOS app. We don't require candidates to have a macOS (you'll test with android version then) but please confirm in your proposal that you have access to an android or iOS device for tests.

Data transfer

We believe that transferring data via multiple, small HTTP requests would be a good choice:

Scope of Work

The GSoC project is limited to the mobile App. The expected final deliverables is a repository containing:

Your proposal must include a mockup of the App's User Interface.

You will be provided with the API for both Hotspot and Cloud Service (probably similar) soon (end of March).

AyushGupta11442 commented 7 months ago

hello @rgaudin @kelson42 @benoit74 @Popolechien

My name is Ayush Gupta, and I am currently pursuing a Bachelor of Technology degree from SRM University. I bring with me a strong background in Flutter development and Dart, with nearly three years of experience. Additionally, I am proficient in React, JavaScript, and have knowledge of machine learning concepts. Given my expertise and enthusiasm for this project, I am eager to contribute and make a meaningful impact. If you have any specific requirements or tasks in mind, I would be grateful for the opportunity to discuss them further.

Popolechien commented 7 months ago

Hi @AyushGupta11442 as you can see the project isn't entirely scoped yet. I'd suggest you poke around the repo (start with good first issues here and on /kiwix or /openzim as we won't consider project proposals from people who haven't submitted a few PRs beforehand.

aryanA101a commented 7 months ago

Gets an internet connection (at any future point in time and location)

Do we have to bridge the internet connection of the mobile device to the raspberry pi to facilitate internet to other connected devices?

Requests online credentials and metadata for profiles that have not been synchronized.

Please provide some context on this point. What are profiles here and for what they are used?

rgaudin commented 7 months ago

Do we have to bridge the internet connection of the mobile device to the raspberry pi to facilitate internet to other connected devices?

No. The app will just connect to the Pi via HTTP on the Hotspot WiFi

Please provide some context on this point. What are profiles here and for what they are used?

The App will allow one person to Sync data to/from multiple Pi with the Online service. It's not clear at this stage if the App user will have a single set of credentials and be able to attach to multiple Pi for instance. We need a way to make sure that:

rgaudin commented 6 months ago

All, thank you for your comments ; I've updated the project description. It should now be somewhat clear. We'll add the API by the end of the month so you know exactly what you'll be dealing with but it's gonna be simple: list packages, download them, mark them downloaded, etc.

aryanA101a commented 6 months ago

What's the need to store Hostpot credentials in the user profile?

rgaudin commented 6 months ago

What's the need to store Hostpot credentials in the user profile?

No User profile is mentioned. We want to create a Profile (naming might change) for each Hotspot the user has access to. Because hotspot API require credentials (username, password), storing them on the phone means it will be typed only once and then remembered

aryanA101a commented 6 months ago

What's the need to store Hostpot credentials in the user profile?

No User profile is mentioned. We want to create a Profile (naming might change) for each Hotspot the user has access to. Because hotspot API require credentials (username, password), storing them on the phone means it will be typed only once and then remembered

From Hostpot credentials I inferred the ssid and password of the wifi ap. Okay, so you meant existing admin credentials to the hotspot.

rgaudin commented 6 months ago

We don't want to manage the WiFi connection from the App. They will connect to the network first then use the app.

We want the app to be as dumb and limited as possible ; to reduce maintenance and because an app in the wild is harder to update.

aryanA101a commented 6 months ago

List of its Data Packages (with size) available on Hotspot

Whats the scope of the data packages we are looking at? Location wise? Is it limited to the data in the /data/contents/zims.

List of Data Packages on phone that can be sent to this Hotspot either data for this hotspot or for any Hotspot

I think this requires an asyncrounous .zim file specific search on the internal storage of the phone plus caching of results.

rgaudin commented 6 months ago

@aryanA101a please read the description carefully. You should not care at all about how stuff are stored on the Pi. Your app will talk to an HTTP API to get a list of items and you'll retrieve content for those items through this API.

I think this requires an asyncrounous .zim file specific search on the internal storage of the phone plus caching of results.

I don't understand this sentence. The app won't be looking at stuff on the phone outside its working directory.

benoit74 commented 6 months ago

I've also updated the first comment descriptions with:

aryanA101a commented 6 months ago

@aryanA101a please read the description carefully. You should not care at all about how stuff are stored on the Pi. Your app will talk to an HTTP API to get a list of items and you'll retrieve content for those items through this API.

I think this requires an asyncrounous .zim file specific search on the internal storage of the phone plus caching of results.

I don't understand this sentence. The app won't be looking at stuff on the phone outside its working directory.

I assumed an extended scope when looking at the packages on the phone, that's why I was trying to clarify.

Anirban-Majumder commented 6 months ago

Hello @rgaudin @kelson42 @benoit74 @Popolechien Just to clarify, considering the way the hotspot is build, which type of API—SOAP or REST—will the app talk to?

rgaudin commented 6 months ago

HTTP REST

aryanA101a commented 6 months ago

Is unit testing in the scope of this project?

rgaudin commented 6 months ago

Up to you

technosrijan commented 2 months ago

@rgaudin Sir, I wanted some clarification regarding whether a GSoC candidate has been selected for this in 2024, as I checked their list of contributors website and couldn't find this project over there.

kelson42 commented 2 months ago

@technosrijan I confirm there is no GSoC student working on this issue currently.