[Treflor] - Ultimate hikers guide (not-complete)
Tags: octograd2020, android, kotlin, githubsdp
Published: 2020-05-20 08:08:37

## A little story

When I was 1st year in the university, I went on a camping trip with my friends on a vacation. We were so excited about the journey. oops I forgot to tell where we went. so we went to the place called chariot path in Sri Lanka. It is a very beautiful place to go for a holiday camping. green plain, mist, cool environment, fresh air, hot coffee, no social connection due to low signal :heart: truly I cannot explain that feeling.

![Chariot Path](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/chariot-path_seetha-tear_gallery_7.jpeg)
![Chariot path2](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/unnamed.jpg)

When the night with full moon, that place will more lovely. look at the second picture. Did you see another mountain peak?? That is called Sri Padha (adam's peak - I don't like this name anyway) That mountain looks so lovely in the night with the full moon. We can have a lovely view of it from the viewpoint of the chariot path. look at the picture below

![Sri padha](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/fc88a8b7441278adc6f8a63984ea41ad.jpg)

Hah enough talking, I found my project idea from the chariot path for my 2nd-year group project. We faced this problem, to the top of the chariot path, only one of my mates knew the road. Because it is a jungle area and we had to find the path. So I thought to search on google. I had a very low signal strength on my mobile. however I did it. so here is what I found.

![Sri padha](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/Screenshot_2020-05-20%20Google%20Maps.png)

OMG, No path inside to the jungle :/ even by foot. So I kept that in my mind.  We had to build a project for the 2nd-year group project. I got a nice team. they are prabhani, choolaka and yashan. I proposed my idea to the team and the supervisor. they agreed with it and we started to work on it. we searched alternatives and did not found any good app for that support for Sri Lanka. There is the moment where treflor was born.

## What I'm building 

![Sri padha](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/Treflor%20Logo.png)

The ultimate hikers guide.
So this is how our app works. users can use our app by sign in or without sign in. unauthenticated users have limed features like view routes, guides, open a help ticket, view images like that. after sign-in users can start a journey using the treflor mobile by providing necessary data such as destination, origin(auto fetch available), a title a short story like that. mobile app track and cache user's GPS location even in background with permission of user. And also treflor show a path to the destination by using google direction API and other users previously collected routes. actually mobile app fetch the route and landmarks from the backend and persist it inside the mobile app for offline use. when the user is on the journey, the user can add images to his route paths, and add landmarks he/she found like waterfalls, ponds, caves like that. then the user is back to the home, he can modify images he/she added and the user can share his journey with others. then others can do things like view details, images, rate or follow that route that the previous user gone etc. this is a community-based application. so the community can report useless records and keep space clean. we were planed to design a mobile app, a web app using Vue and backend using node js

## How I built it
I build the NodeJS Rest API and treflor mobile app using android native developments. And I didn't participated to web frontend because I didn't interested in that 

For the **NodeJS** app I used the **ExpressJS framework** and **MongoDB** as the primary database. and as the storage I used **google cloud storage**. for authentication, we used local and google sign in to keep our users more comfortable. to handle that easily I used **passport js**. And I deployed it on **Heroku** and nothing much to tell about backend rather than logics and queries.

In the mobile app I used **native android development** and **jetpack libraries**. I chose language as **kotlin** because **kotlin + java** makes us powerful java right :love: I used **kotlin coroutine** for multi-threads on the mobile app. I designed the app in a **reactive style** using **Live Data** and **MVVM structure** using the **lifecycle library**. for the caching I used **room ORM** and **shared preferences**. And to handle network calls, I used **retrofit**. and there was a background service to track the user's GPS. I designed the tracking part offline as much as I can because users can have low signal situations.m.. I think there are no more things to tell.

![Sri padha](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/Screenshot_1589952158.png)
![Sri padha](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/Screenshot_1589952173.png)
![Sri padha](https://raw.githubusercontent.com/Treflor/mobile/master/screenshots/Screenshot_1589952271.png)


## Demo Link
 you can download [a build](https://github.com/Treflor/mobile/suites/699004639/artifacts/6707272) from here

## Link to Code
https://github.com/Treflor/mobile
https://github.com/Treflor/backend