├── .gitignore ├── .travis.yml ├── App ├── aipc.pickle ├── app.py ├── config.py ├── query_retreive.py └── retreiveData.py ├── LICENSE ├── README.md ├── assets ├── 1.png ├── 2.png ├── 3.png ├── back1.jpg ├── helpoff1.gif ├── helpoff1.mp4 ├── helpoff2.gif └── helpoff3.gif ├── css ├── main.css └── style.css ├── index.html ├── logo.png └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | cache: pip 3 | python: 4 | - 3.6 5 | matrix: 6 | allow_failures: 7 | - python: nightly 8 | - python: pypy3 9 | install: 10 | #- pip install -r requirements.txt 11 | - pip install flake8 # pytest # add another testing frameworks later 12 | before_script: 13 | # stop the build if there are Python syntax errors or undefined names 14 | - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics 15 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 16 | - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 17 | script: 18 | - true # pytest --capture=sys # add other tests here 19 | notifications: 20 | on_success: change 21 | on_failure: change # `always` will be the setting once code changes slow down 22 | -------------------------------------------------------------------------------- /App/aipc.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/App/aipc.pickle -------------------------------------------------------------------------------- /App/app.py: -------------------------------------------------------------------------------- 1 | # TODO : Clean var ; rem cache 2 | import query_retreive as qr 3 | import retreiveData as rd 4 | import time,pickle 5 | from flask import Flask, jsonify,request 6 | 7 | app = Flask(__name__) 8 | 9 | ''' 10 | 11 | ADD TEMPLATE : 12 | 13 | ''' 14 | 15 | @app.route('/',methods=["GET"]) 16 | def query(): 17 | previous = "" 18 | file = open("./aipc.pickle","rb") 19 | placename = pickle.load(file) 20 | file.close() 21 | while(1): 22 | ans,number = qr.response() 23 | number = str(number)[2:] 24 | if(ans != previous): 25 | temp = qr.get_context(ans) 26 | flag = -1 27 | if temp[-1]==0: 28 | qr.sendSMS(number,temp[0]) 29 | print("SENT :",temp[0]) 30 | print("*"*80) 31 | response = [number,temp[0]] 32 | flag = 0 33 | else: 34 | flag = temp[-1] 35 | response = temp[:-1] 36 | if flag == 2: 37 | data = rd.google_directions(response[0],response[1],response[2]) 38 | qr.sendSMS(number,data) 39 | print("SENT :",data) 40 | print("*"*80) 41 | elif flag == 3: 42 | data = rd.process_detail(response[0]) 43 | qr.sendSMS(number,"ADDRESS: \n"+data) 44 | print("SENT :",data) 45 | print("*"*80) 46 | elif flag: 47 | pincode = response[0] 48 | query = response[1] 49 | contact = number 50 | # pin code conv . 51 | data = rd.retreive_area(placename[str(pincode)],query) 52 | if len(data) == 1: 53 | qr.sendSMS(number,data) 54 | print("SENT :",data) 55 | print("*"*80) 56 | elif data != None: 57 | if data[1]!=None: 58 | data = data[0]+"\n"+data[1]+"\n"+data[2] 59 | else: 60 | data = data[0]+"\n"+data[2] 61 | print("SENT :",data) 62 | print("*"*80) 63 | qr.sendSMS(number,data) 64 | print("Message Sent : app.py") 65 | previous = ans 66 | time.sleep(5) 67 | 68 | if __name__ == "__main__": 69 | app.run(debug=True,port=8080) 70 | -------------------------------------------------------------------------------- /App/config.py: -------------------------------------------------------------------------------- 1 | YOUR_API_KEY = "" # Enter your API Key here. 2 | 3 | -------------------------------------------------------------------------------- /App/query_retreive.py: -------------------------------------------------------------------------------- 1 | import urllib.request 2 | import urllib.parse 3 | import codecs 4 | import json,re 5 | import apiai 6 | 7 | Access_token = "" # Enter your Access Token here 8 | client=apiai.ApiAI(Access_token) 9 | 10 | def get_context(message): 11 | req=client.text_request() 12 | req.lang="de" 13 | req.session_id="" 14 | req.query=message 15 | response=json.loads(req.getresponse().read().decode('utf-8')) 16 | responseStatus = response['status']['code'] 17 | if responseStatus==200 : 18 | text = response['result']['fulfillment']['speech'] 19 | else: 20 | text="No Match Found" 21 | result=response["result"] 22 | param=result["parameters"] 23 | if len(param.keys())==0: 24 | return [text,0] 25 | if "number" in param.keys(): 26 | pin=param["number"] 27 | if "tof" in param.keys(): 28 | tof=param["tof"] 29 | if "type" in param.keys(): 30 | typ=param["type"] 31 | if typ=="routes": 32 | message=message.split("\n") 33 | if(len(message)>3): 34 | mod=message[3] 35 | else: 36 | mod='transit' 37 | return [message[1],message[2],mod,2] 38 | elif typ=="detail": 39 | message=message.split('\n')[1:] 40 | print(("*"*30)+" DETAILED LOCATION " + "*"*30) 41 | message = ",".join(message) 42 | print("RECEIVED : ",message) 43 | return [message,3] 44 | elif typ=="nearby": 45 | return [pin,tof,typ,1] 46 | 47 | def getInboxes(apikey): 48 | data = urllib.parse.urlencode({'apikey': apikey}) 49 | data = data.encode('utf-8') 50 | request = urllib.request.Request("https://api.textlocal.in/get_inboxes/?") 51 | f = urllib.request.urlopen(request, data) 52 | fr = f.read() 53 | return(fr) 54 | 55 | 56 | def getMessages(apikey, inboxID): 57 | data = urllib.parse.urlencode({'apikey': apikey, 'inbox_id' : inboxID}) 58 | data = data.encode('utf-8') 59 | request = urllib.request.Request("https://api.textlocal.in/get_messages/?") 60 | f = urllib.request.urlopen(request, data) 61 | fr = f.read() 62 | return(fr) 63 | 64 | def sendSMS(number, message): 65 | apikey = '' # Enter your API Key here 66 | data = urllib.parse.urlencode({'apikey': apikey, 'numbers': number, 67 | 'message' : message}) 68 | data = data.encode('utf-8') 69 | request = urllib.request.Request("https://api.textlocal.in/send/?") 70 | f = urllib.request.urlopen(request, data[:min(len(data),740)]) 71 | fr = f.read() 72 | print("MESSAGE SENT") 73 | 74 | def response(): 75 | resp = getMessages('lY0QfNF6OU8-treTNMuE2I05MdjqKZK0yHDlhsjIX2', '10') 76 | ans = json.loads(resp.decode('ASCII')) 77 | x = ans["messages"][-1]["message"][6:] 78 | y = ans["messages"][-1]["number"] 79 | return x,y 80 | 81 | -------------------------------------------------------------------------------- /App/retreiveData.py: -------------------------------------------------------------------------------- 1 | from googleplaces import GooglePlaces, types, lang 2 | import sys 3 | from config import * 4 | import googlemaps,re 5 | from datetime import datetime 6 | 7 | 8 | YOUR_API_KEY = "" # Enter your API Key 9 | 10 | google_places = GooglePlaces(YOUR_API_KEY) 11 | 12 | type_map = { 13 | "HOSPITAL":types.TYPE_HOSPITAL, 14 | "CHEMIST":types.TYPE_PHARMACY, 15 | "POLICE":types.TYPE_POLICE, 16 | "TRAIN":types.TYPE_TRAIN_STATION, 17 | "TAXI":types.TYPE_TAXI_STAND, 18 | "GAS":types.TYPE_GAS_STATION, 19 | "ATM":types.TYPE_ATM 20 | } 21 | 22 | ''' 23 | # TEXT_SEARCH 24 | query_result = google_places.text_search(query="Restaurant in Dahisar",location="Mumbai,India",radius=2000) 25 | ''' 26 | def process_detail(key): 27 | # AUTOCOMPLETE 28 | query_result = google_places.autocomplete(input=key,location="India",radius=200) 29 | if len(query_result.predictions): 30 | pred = query_result.predictions[0] 31 | addr = pred.description 32 | return addr 33 | 34 | 35 | # print(dir(types)) 36 | # NEARBY AREA SEARCH 37 | 38 | def google_directions(ori, dest, mo): 39 | message = [] 40 | gmaps = googlemaps.Client(key='') # Enter your Key here. 41 | now = datetime.now() 42 | directions_result = None 43 | try: 44 | directions_result = gmaps.directions(origin=ori, destination=dest,mode=mo, departure_time = now) 45 | except: 46 | print("A network error occurred; please try again") 47 | 48 | if directions_result == None: 49 | print("An error occurred; please check your inputs and try again") 50 | message.append("Start from: " + directions_result[0]['legs'][0]['start_address']) 51 | message.append("End at: " + directions_result[0]['legs'][0]['end_address']) 52 | message.append("Duration: " + directions_result[0]['legs'][0]['duration']['text']) 53 | message.append("Distance: " + directions_result[0]['legs'][0]['distance']['text']) 54 | 55 | regex = re.compile('<[^>]*>') 56 | style_regex = re.compile('<[^>]*(style)[^>]*>') 57 | for each in directions_result[0]['legs'][0]['steps']: 58 | instr = re.sub(style_regex, '; ', each['html_instructions']) 59 | instr = re.sub(regex, '', instr) 60 | message.append(instr) 61 | return '\n'.join(message) 62 | 63 | 64 | def retreive_area(loc,key): 65 | print("Retreiving data") 66 | query_result = google_places.nearby_search(location=loc, keyword=key, radius=2000, types=[type_map[key]]) 67 | places_data = [] # name,number,addr 68 | for place in query_result.places: 69 | # print(place.place_id) 70 | x = place.get_details() 71 | places_data.append([place.name,place.local_phone_number,place.vicinity]) 72 | if len(places_data): 73 | return places_data[0] 74 | 75 | if __name__ == "__main__": 76 | retreive_area(loc="Dahisar ,Mumbai",key="POLICE") 77 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Nishchith K 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | HelpOff-logo 4 |

5 | 6 |

providing help via offline system

7 | 8 |
9 | 10 | [![Build Status](https://travis-ci.org/team-anything/HelpOff.svg?branch=master)](https://travis-ci.org/team-anything/HelpOff) 11 | [![Website cv.lbesson.qc.to](https://img.shields.io/website-up-down-green-red/http/cv.lbesson.qc.to.svg)](https://github.com/inishchith/HelpOff/tree/master) 12 | [![made-with-python](https://img.shields.io/badge/Made%20with-Python-1f425f.svg)](https://www.python.org/) 13 | 14 |
15 | 16 | ------------------------------------------ 17 | 18 | >Any information can be easily found by using `Google`, but `32%` of our population don't have `Smartphone` and also there are many people having smartphone but no internet access round the clock due to which people suffer a lot for finding basic needs especially when travelling to a particularplace. We've built a `SMS based offline system` where the user can get the required information in few basic steps by simple sending a message. 19 | 20 | 21 |
22 | ❝ Internet is great but survival without Internet is the key. ❞ - cheetAh 23 |
24 | 25 | 26 | ------------------------------------------ 27 | ### Features 28 | 29 |
30 | 31 | 32 | 33 | 34 |
35 | 36 | #### Find Nearby : 37 | - `Hospitals` 38 | - `Medical Stores` 39 | - `Gas Stations` 40 | - `Police Stations` 41 | - `Railway Stations` 42 | - `Taxi Stands` 43 | 44 | user just provides the pin code followed by type of service: 45 | 46 | ``` 47 | 400708 48 | nearby gas station 49 | ``` 50 | returns 51 | ``` 52 | Bharat Petroleum Airoli Service Centre 53 | BPCL Petrol Pump, Plot No. 33, 54 | Sector 5, Airoli, Sector 5, 55 | Airoli, Navi Mumbai, Maharashtra 400708 56 | ``` 57 | #### Route 58 | In case a user wants to go to a particular location the system will provide information with proper guidance with various possible modes selected by the user(eg walking, train, etc) 59 | Just Provide short address of starting address and destination address followed by mode of transport and you'll be shown the best way 60 | ``` 61 | show routes from 62 | sec10 Airoli 63 | Somaiya VidyaVihar 64 | driving 65 | ``` 66 | returns 67 | ``` 68 | Start:Sector 10 Rd, Sector 10, 69 | Airoli, Navi Mumbai, 70 | Maharashtra 400708 71 | End:Somaiya Vidyavihar, 72 | Group of Somaiya Institutions, 73 | Vidyanagar, Vidya Vihar East, 74 | Vidyavihar, Mumbai, 75 | Maharashtra 400077 76 | estimated time:22 mins 77 | Get on Eastern Express Hwy/Mumbai - Agra National Hwy in Mulund East, Mumbai from Mulund - Airoli Rd 78 | Follow Eastern Express Hwy/Mumbai - Agra National Hwy to Kamraj Nagar Rd in Nalanda Nagar 79 | Take Olmstead Ave/Vidayabhavan Marg, 90 Feet Rd/Barrister Nath Pai Rd, Ghatkopar - Mahul Rd and Rd Number 7 to Sarvoday Buddh Vihar Marg in ONGC Colony 80 | ``` 81 | #### Complete Address 82 | Many Times in daily life what happens is we know only the name of establishment and city but not any other details.If the establishment is not considerably popular it becomes an uphill task to find the real location in such a case a single line saying complete address followed by how muchever address you are aware of will return the complete address of the best possible match so you can reach you location easily 83 | 84 | ``` 85 | detailed address 86 | sheffield apartments 87 | dahisar 88 | ``` 89 | returns 90 | ``` 91 | Sheffield CHS 92 | C.S.Road, Anand Nagar 93 | Dahisar East, Mumbai, 94 | Maharashtra 400068 95 | ``` 96 | ------------------------------------------ 97 | ### Add-Ons 98 | 99 | - [ ] Offline booking of cabs ( OLA / Uber ) 100 | - [ ] Provide generalized search options 101 | - [ ] Book emergency service lines 102 | - [ ] Create Distress messages 103 | - [ ] Add More 104 | 105 | ------------------------------------------ 106 | 107 | ### Problems-Overcome 108 | 109 | - [ ] Bringing help offline. 110 | - [ ] Natural Language Processing ability by courtesy of diagflow. 111 | - [ ] Providing facility for feature phone user. 112 | - [ ] Providing facility at bare minimum cost of sending SMS. 113 | 114 | ------------------------------------------ 115 | 116 | ### Problems Yet to Overcome 117 | 118 | - [ ] Better Way to input the location. 119 | - [ ] Provide better and smoother interface. 120 | - [ ] Build a better UI based offline app like M-Indicator although sacrificing feature phones. 121 | 122 | ------------------------------------------ 123 | 124 | ### Installation 125 | 126 | * Install dependencies 127 | ```sh 128 | $ pip3 install -r requirements.txt 129 | ``` 130 | 131 | * Edit [config.py](https://github.com/inishchith/HelpOff/blob/master/App/config.py) 132 | 133 | ------------------------------------------ 134 | ### Contributing 135 | 136 | We're are open to `enhancements` & `bug-fixes` :smile: Also do have a look [here](./CONTRIBUTING.md) 137 | 138 | ### Note 139 | 140 | - This project was done under `12 hours` 141 | - This project isn't live / deployed yet , but you can try it locally by having your own credentials for each of the mentioned service locally . ( please * watch * the repository in order to know if this thing is deployed in future ) 142 | 143 | 144 | ------------------------------------------ 145 | ### Contributors 146 | 147 | - [@nurdtechie98](https://github.com/nurdtechie98) 148 | - [@shivam98](https://github.com/shivam1708) 149 | - [@inishchith](https://github.com/inishchith) 150 | 151 | ------------------------------------------ 152 | ### Recognition 153 | 154 | - This repository / project was a part of **[@Hack-n-code Hackathon]('') 2018** where it got recognized as the **best ideation**. 155 | - Featured on [ProductHunt](https://www.producthunt.com/posts/help-offline) 156 | -------------------------------------------------------------------------------- /assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/1.png -------------------------------------------------------------------------------- /assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/2.png -------------------------------------------------------------------------------- /assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/3.png -------------------------------------------------------------------------------- /assets/back1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/back1.jpg -------------------------------------------------------------------------------- /assets/helpoff1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/helpoff1.gif -------------------------------------------------------------------------------- /assets/helpoff1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/helpoff1.mp4 -------------------------------------------------------------------------------- /assets/helpoff2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/helpoff2.gif -------------------------------------------------------------------------------- /assets/helpoff3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/assets/helpoff3.gif -------------------------------------------------------------------------------- /css/main.css: -------------------------------------------------------------------------------- 1 | .carousel-fade { 2 | .carousel-inner { 3 | .item { 4 | transition-property: opacity; 5 | } 6 | 7 | .item, 8 | .active.left, 9 | .active.right { 10 | opacity: 0; 11 | } 12 | 13 | .active, 14 | .next.left, 15 | .prev.right { 16 | opacity: 1; 17 | } 18 | 19 | .next, 20 | .prev, 21 | .active.left, 22 | .active.right { 23 | left: 0; 24 | transform: translate3d(0, 0, 0); 25 | } 26 | } 27 | 28 | .carousel-control { 29 | z-index: 2; 30 | } 31 | } 32 | 33 | 34 | .carousel, 35 | .carousel-inner, 36 | .carousel-inner .item { 37 | height: 100%; 38 | } 39 | 40 | .item:nth-child(1) { 41 | background: #74C390; 42 | } 43 | 44 | .item:nth-child(2) { 45 | background: #51BCE8; 46 | } 47 | 48 | .item:nth-child(3) { 49 | background: #E46653; 50 | } 51 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | *, 3 | *::after, 4 | *::before { 5 | margin: 0; 6 | padding: 0; 7 | box-sizing: inherit; } 8 | 9 | :root { 10 | --color-primary: #f57f17; 11 | --color-white: #fff; 12 | --color-white-dark: #ddd; 13 | --color-black: #222; 14 | background-color: var(--color-white); 15 | color: var(--color-black); } 16 | 17 | html { 18 | font-size: 62.5%; } 19 | 20 | body { 21 | box-sizing: border-box; 22 | overflow-x: hidden; } 23 | 24 | a { 25 | text-decoration: none; } 26 | 27 | body { 28 | font-size: 1.6rem; 29 | font-family: "Lato"; } 30 | 31 | .navbar { 32 | z-index: 10; 33 | background-color: var(--color-white); 34 | position: fixed; 35 | width: 100vw; 36 | height: 5rem; 37 | top: 0; 38 | box-shadow: 0 0.5rem 0 0 var(--color-primary); } 39 | .navbar__left { 40 | position: absolute; 41 | top: 50%; 42 | left: 1rem; 43 | transform: translateY(-50%); } 44 | .navbar__center { 45 | display: flex; 46 | align-items: center; 47 | position: absolute; 48 | left: 50%; 49 | top: 50%; 50 | transform: translate(-50%, -50%); } 51 | .navbar__logo { 52 | height: 4rem; 53 | width: auto; 54 | border-radius: 100%; } 55 | .navbar__logoname { 56 | font-weight: bold; 57 | margin-left: 1rem; 58 | font-family: 'Sofia', cursive; 59 | font-size: 3rem; 60 | color: var(--color-primary); 61 | display: inline-block; 62 | cursor: default; } 63 | .navbar__right { 64 | position: absolute; 65 | top: 50%; 66 | right: 1rem; 67 | transform: translate(0, -50%); } 68 | .navbar__items { 69 | list-style-type: none; } 70 | .navbar__item { 71 | color: var(--color-black); 72 | cursor: pointer; 73 | font-size: 1.8rem; 74 | border: 1px solid var(--color-primary); 75 | display: inline-block; 76 | padding: 1rem; 77 | transition: .2s all linear; } 78 | .navbar__item a { 79 | color: var(--color-black); } 80 | .navbar__item:hover { 81 | background-color: var(--color-primary); } 82 | .navbar__item:hover a { 83 | color: var(--color-white); } 84 | 85 | .sidebar { 86 | position: fixed; 87 | top: 5.5rem; 88 | left: -15rem; 89 | width: 15rem; 90 | background-color: #222; 91 | height: 100%; 92 | box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.2); 93 | transition: all .8s; 94 | z-index: 2; } 95 | .sidebar__items { 96 | list-style: none; } 97 | .sidebar__item { 98 | font-size: 1.6rem; 99 | text-align: center; 100 | cursor: pointer; 101 | padding: 1.6rem; 102 | transition: box-shadow .5s; } 103 | .sidebar__item a { 104 | color: #fff; } 105 | .sidebar__item:hover { 106 | box-shadow: inset -1.5rem 0 0 0 var(--color-primary); } 107 | .sidebar__item:hover a { 108 | color: var(--color-primary); } 109 | .sidebar__toggle { 110 | z-index: 2; 111 | position: fixed; 112 | top: 5.5rem; 113 | left: .5rem; 114 | cursor: pointer; 115 | user-select: none; 116 | font-size: 3rem; 117 | transition: all .8s; } 118 | .sidebar__toggle:hover { 119 | color: var(--color-primary); } 120 | 121 | #sidebar-toggle:checked ~ .sidebar { 122 | left: 0; } 123 | 124 | #sidebar-toggle:checked ~ .sidebar__toggle { 125 | left: 15.5rem; } 126 | 127 | #sidebar-toggle:checked ~ .news { 128 | left: 15rem; } 129 | 130 | #time { 131 | font-weight: bold; } 132 | 133 | .news { 134 | position: absolute; 135 | top: 5rem; 136 | left: 0; 137 | width: 100vw; 138 | height: calc(100vh - 5rem); 139 | transition: all .8s; } 140 | 141 | .result { 142 | display: flex; 143 | justify-content: flex-start; 144 | align-items: start; 145 | flex-wrap: wrap; 146 | padding: .5rem; 147 | width: 70vw; 148 | position: absolute; 149 | top: 20%; 150 | left: 50%; 151 | transform: translate(-50%, 0); 152 | transition: all .8s; } 153 | 154 | .searchbar { 155 | position: absolute; 156 | width: 33%; } 157 | .searchbar--center { 158 | top: 50%; 159 | left: 50%; 160 | transform: translate(-50%, -50%); } 161 | .searchbar--top { 162 | left: 50%; 163 | top: 10%; 164 | transform: translate(-50%, -50%); } 165 | .searchbar__logoname { 166 | width: 100%; 167 | font-weight: bold; 168 | margin-left: 1rem; 169 | font-family: 'Sofia', cursive; 170 | font-size: 5rem; 171 | color: var(--color-primary); 172 | text-align: center; 173 | cursor: default; 174 | margin-bottom: 1rem; } 175 | .searchbar__query { 176 | border: 0px; 177 | width: 100%; 178 | padding: .5rem; 179 | height: 3rem; 180 | border-radius: 2px; 181 | outline: 2px solid var(--color-primary); 182 | outline-offset: 0px; 183 | float: left; 184 | box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); 185 | transition: all .8s; } 186 | .searchbar__query:focus { 187 | box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.3); } 188 | .searchbar__query:focus ~ button { 189 | box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.3); } 190 | .searchbar__submit { 191 | border: 0px; 192 | position: absolute; 193 | color: var(--color-white); 194 | font-size: 2rem; 195 | text-align: center; 196 | height: 3rem; 197 | width: 3rem; 198 | background-color: var(--color-primary); 199 | outline: 2px solid var(--color-primary); 200 | cursor: pointer; 201 | box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); 202 | transition: all .8s; } 203 | 204 | .resultcard { 205 | min-height: 325px; 206 | width: 30%; 207 | margin: 1.5%; 208 | background-color: var(--color-white-dark); 209 | position: relative; 210 | transition: all .3s; 211 | cursor: pointer; 212 | border-radius: 5px; 213 | box-shadow: 0 0 0.5rem 0 rgba(0, 0, 0, 0.5); } 214 | .resultcard:hover { 215 | transform: translateY(-3px); 216 | box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.3); } 217 | .resultcard:active { 218 | transform: translateY(-1px); 219 | box-shadow: 0 0.5rem 2rem rgba(0, 0, 0, 0.3); } 220 | .resultcard__img { 221 | width: 90%; 222 | height: 150px; 223 | display: inline-block; 224 | margin: 1rem 5%; } 225 | .resultcard__heading { 226 | padding: 1rem 2rem; 227 | font-size: 2rem; } 228 | .resultcard__sht { 229 | padding: 0rem 2rem; } 230 | .resultcard__source { 231 | padding: 0 2rem; 232 | text-align: right; } 233 | .resultcard__price { 234 | padding: 0 2rem; 235 | text-align: right; } 236 | 237 | .active { 238 | color: var(--color-primary); } 239 | 240 | .summarycard { 241 | width: 100%; 242 | margin-left: 1%; 243 | margin-right: 1%; 244 | background-color: var(--color-white-dark); 245 | display: none; 246 | position: relative; 247 | justify-content: space-evenly; 248 | align-items: center; 249 | border-radius: 5px; 250 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.2); } 251 | .summarycard::after { 252 | content: ""; 253 | position: absolute; 254 | bottom: 100%; 255 | left: 50%; 256 | border-width: 1.8rem; 257 | border-style: solid; 258 | border-color: transparent transparent var(--color-primary) transparent; } 259 | .summarycard:nth-child(3n+1)::after { 260 | left: 50%; } 261 | .summarycard:nth-child(3n+2)::after { 262 | left: 15%; } 263 | .summarycard:nth-child(3n+3)::after { 264 | left: 85%; } 265 | .summarycard__left { 266 | flex-basis: 40%; 267 | position: relative; 268 | padding: 10px; 269 | text-align: center; } 270 | .summarycard__left img { 271 | width: 100%; 272 | height: auto; } 273 | .summarycard__right { 274 | flex-basis: 60%; 275 | padding: 10px; } 276 | .summarycard__heading { 277 | padding-bottom: 1rem; 278 | font-size: 2rem; } 279 | .summarycard__summary { 280 | line-height: 2.4rem; 281 | font-size: 1.8rem; 282 | margin-bottom: 1rem; } 283 | .summarycard__source { 284 | text-align: right; 285 | padding: 2rem; } 286 | .summarycard__time { 287 | margin-bottom: .5rem; } 288 | .summarycard__time span { 289 | font-weight: 900; 290 | color: var(--color-primary); } 291 | .summarycard__location { 292 | margin-bottom: .5rem; } 293 | .summarycard__location span { 294 | font-weight: 900; 295 | color: var(--color-primary); } 296 | 297 | .is-open { 298 | display: flex; 299 | border-top: 0.5rem solid var(--color-primary); } 300 | 301 | .subscribe { 302 | width: 250px; 303 | position: absolute; 304 | top: 50%; 305 | left: 50%; 306 | transform: translate(-50%, -50%); } 307 | .subscribe__container { 308 | position: absolute; 309 | left: 0; 310 | width: 50vw; 311 | height: 100%; 312 | border-right: 2px solid var(--color-primary); } 313 | .subscribe__index { 314 | position: absolute; 315 | right: 0; 316 | width: 50vw; 317 | max-height: 100%; 318 | overflow: auto; } 319 | .subscribe__table { 320 | width: 100%; } 321 | .subscribe__table table { 322 | margin: 0 auto; 323 | text-align: center; 324 | border-collapse: collapse; 325 | border: 1px solid var(--color-black); } 326 | .subscribe__table tbody:nth-child(odd) { 327 | background: rgba(246, 106, 106, 0.2); } 328 | .subscribe__table th, .subscribe__table td { 329 | padding: 10px 30px; } 330 | .subscribe__table th { 331 | border-bottom: 1px solid var(--color-black); } 332 | 333 | #subscribe__input { 334 | border: 0px; 335 | width: 100%; 336 | padding: .5rem; 337 | height: 3rem; 338 | border-radius: 2px; 339 | outline: 2px solid var(--color-primary); 340 | outline-offset: 0px; 341 | float: left; 342 | box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); 343 | transition: all .8s; } 344 | #subscribe__input:focus { 345 | box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.3); } 346 | #subscribe__input:focus ~ button { 347 | box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.3); } 348 | 349 | #submit { 350 | border: 0px; 351 | position: absolute; 352 | color: var(--color-white); 353 | font-size: 2rem; 354 | text-align: center; 355 | height: 3rem; 356 | width: 3rem; 357 | background-color: var(--color-primary); 358 | outline: 2px solid var(--color-primary); 359 | cursor: pointer; 360 | box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.2); 361 | transition: all .8s; } 362 | 363 | .subscribe__name { 364 | margin-top: 1rem; 365 | padding-bottom: .5rem; 366 | border-bottom: 1px solid var(--color-primary); } 367 | 368 | .subscribe__name:first-child { 369 | padding-top: 3rem; } 370 | 371 | .subscribe__name::before { 372 | content: "► "; 373 | color: var(--color-primary); } 374 | 375 | .close { 376 | position: absolute; 377 | right: 0; 378 | margin-left: 1rem; 379 | background-color: #c9302c; 380 | padding-left: 3px; 381 | padding-right: 3px; 382 | padding-bottom: 1px; 383 | cursor: pointer; 384 | border-radius: 50%; } 385 | 386 | .feature { 387 | padding: 1rem; } 388 | .feature__float { 389 | background-color: var(--color-white); 390 | font-size: 2.5rem; 391 | width: 50px; 392 | position: fixed; 393 | bottom: 2rem; 394 | right: 2rem; 395 | box-shadow: 0 0 3px 0 rgba(0, 0, 0, 0.5); 396 | text-align: center; 397 | border-radius: 100%; 398 | transition: .3s all linear; } 399 | .feature__float:hover { 400 | transform: translateY(-3px); 401 | box-shadow: 0 1rem 1.5rem 0 rgba(0, 0, 0, 0.3); } 402 | .feature__float:hover .feature__floatitem a { 403 | color: var(--color-primary); } 404 | .feature__floatitem { 405 | cursor: pointer; 406 | width: 50px; 407 | text-align: center; 408 | display: inline-block; 409 | font-size: 2.5rem; 410 | padding: 1rem; 411 | border-radius: 5px; } 412 | .feature__floatitem a { 413 | transform: .3s all linear; 414 | color: var(--color-black); } 415 | .feature__list { 416 | list-style-type: none; 417 | text-align: center; } 418 | .feature__list--right { 419 | text-align: right; } 420 | .feature__item { 421 | cursor: pointer; 422 | width: 50px; 423 | text-align: center; 424 | display: inline-block; 425 | font-size: 2.5rem; 426 | padding: 1rem; 427 | border: 1px solid var(--color-primary); 428 | border-radius: 5px; 429 | transition: .3s all linear; 430 | margin: 1rem 0; } 431 | .feature__item a { 432 | color: var(--color-black); 433 | transform: .3s all linear; } 434 | .feature__item:hover { 435 | background-color: var(--color-primary); 436 | transform: translateY(-3px); 437 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.2); } 438 | .feature__item:hover a { 439 | color: var(--color-white); } 440 | .feature__item:hover a .fa { 441 | color: var(--color-white); } 442 | 443 | .fa-check-circle { 444 | color: forestgreen; } 445 | 446 | .fa-bookmark { 447 | color: orange; } 448 | 449 | .fa-facebook { 450 | color: #3b5998; } 451 | 452 | .fa-twitter { 453 | color: #00aced; } 454 | 455 | .fa-times-circle { 456 | color: firebrick; } 457 | 458 | .summary { 459 | background-color: var(--color-white-dark); 460 | position: absolute; 461 | margin: 5rem 0; 462 | top: 50%; 463 | left: 50%; 464 | transform: translate(-50%, -50%); 465 | max-width: 75vw; 466 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.2); 467 | padding: 2rem; 468 | border: 2px solid var(--color-primary); } 469 | .summary__image { 470 | width: 80%; 471 | height: auto; 472 | margin: 1rem 10%; } 473 | .summary__sum { 474 | line-height: 2.4rem; } 475 | 476 | .nightmode { 477 | position: fixed; 478 | top: 7rem; 479 | right: 2rem; 480 | z-index: 101; } 481 | 482 | .switch { 483 | position: relative; 484 | display: inline-block; 485 | width: 60px; 486 | height: 34px; } 487 | 488 | .switch input { 489 | display: none; } 490 | 491 | .slider { 492 | position: absolute; 493 | cursor: pointer; 494 | top: 0; 495 | left: 0; 496 | right: 0; 497 | bottom: 0; 498 | background-color: #ccc; 499 | -webkit-transition: .4s; 500 | transition: .4s; } 501 | 502 | .slider:before { 503 | position: absolute; 504 | content: ""; 505 | height: 26px; 506 | width: 26px; 507 | left: 4px; 508 | bottom: 4px; 509 | background-color: white; 510 | -webkit-transition: .4s; 511 | transition: .4s; } 512 | 513 | input:checked + .slider { 514 | background-color: var(--color-primary); } 515 | 516 | input:focus + .slider { 517 | box-shadow: 0 0 1px var(--color-primary); } 518 | 519 | input:checked + .slider:before { 520 | -webkit-transform: translateX(26px); 521 | -ms-transform: translateX(26px); 522 | transform: translateX(26px); } 523 | 524 | /* Rounded sliders */ 525 | .slider.round { 526 | border-radius: 34px; } 527 | 528 | .slider.round:before { 529 | border-radius: 50%; } 530 | 531 | .calendar { 532 | width: 800px; 533 | height: 600px; 534 | margin: 2rem auto; 535 | box-shadow: 0 0.5rem 1rem 0 rgba(0, 0, 0, 0.5); } 536 | 537 | .thankyou { 538 | display: inline-block; 539 | position: absolute; 540 | top: 50%; 541 | left: 50%; 542 | transform: translate(-50%, -50%); } 543 | 544 | .createEvent { 545 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.2); 546 | border-radius: 5px; 547 | width: 800px; 548 | margin: 2rem auto; 549 | border: 2px solid var(--color-primary); 550 | padding: 2rem; } 551 | .createEvent h2 { 552 | text-align: center; } 553 | .createEvent__group { 554 | padding: 2rem; 555 | display: inline-block; 556 | width: 515px; 557 | margin: 0 140px; 558 | transition: all .3s linear; } 559 | .createEvent__group label { 560 | color: var(--color-primary); 561 | display: inline-block; 562 | margin-bottom: .5rem; 563 | transition: all .3s linear; } 564 | .createEvent__group input { 565 | transition: all .3s linear; 566 | width: 475px; 567 | padding: .5rem; 568 | font-size: 1.6rem; 569 | height: 2.5rem; 570 | border-radius: 2px; 571 | background-color: var(--color-white); 572 | color: var(--color-black); 573 | border: 1px solid var(--color-primary); } 574 | .createEvent__group input[type="datetime-local"] { 575 | width: 200px; } 576 | .createEvent__group input:focus { 577 | outline: 2px solid var(--color-black); 578 | color: var(--color-black); } 579 | .createEvent__group textarea { 580 | transition: all .3s linear; 581 | padding: .5rem; 582 | font-size: 2rem; 583 | border-radius: 2px; 584 | background-color: var(--color-white); 585 | color: var(--color-black); 586 | border: 1px solid var(--color-primary); } 587 | .createEvent__group textarea:focus { 588 | font-size: 2rem; 589 | outline: 2px solid var(--color-black); 590 | color: var(--color-black); } 591 | .createEvent__group--active { 592 | background-color: var(--color-primary); 593 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.4); 594 | transform: translateY(-5px); } 595 | .createEvent__group--active label { 596 | color: #fff; } 597 | .createEvent__group .createEvent__submit { 598 | height: 4.5rem; 599 | color: var(--color-black); 600 | cursor: pointer; 601 | font-size: 1.8rem; 602 | border: 1px solid var(--color-primary); 603 | display: inline-block; 604 | padding: 1rem; 605 | transition: .2s all linear; 606 | color: var(--color-black); } 607 | .createEvent__group .createEvent__submit:hover { 608 | border: 1px solid var(--color-primary); 609 | background-color: var(--color-primary); 610 | color: var(--color-white); } 611 | 612 | .profileCard { 613 | width: 800px; 614 | margin: 1rem auto; 615 | background-color: var(--color-white-dark); 616 | display: flex; 617 | position: relative; 618 | justify-content: space-evenly; 619 | align-items: center; 620 | border-radius: 5px; 621 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.2); } 622 | .profileCard__left { 623 | flex-basis: 40%; 624 | position: relative; 625 | padding: 10px; 626 | text-align: center; } 627 | .profileCard__left img { 628 | width: 100%; 629 | height: auto; } 630 | .profileCard__right { 631 | flex-basis: 60%; 632 | padding: 10px; } 633 | .profileCard__name { 634 | padding: 5px; } 635 | .profileCard__name span { 636 | font-weight: 900; } 637 | .profileCard__number { 638 | padding: 5px; } 639 | .profileCard__number span { 640 | font-weight: 900; } 641 | .profileCard__email { 642 | padding: 5px; } 643 | .profileCard__email span { 644 | font-weight: 900; } 645 | .profileCard__head { 646 | font-weight: 900; 647 | font-size: 2rem; 648 | text-align: center; 649 | text-decoration: underline; 650 | margin-bottom: 2rem; } 651 | 652 | .alert { 653 | background-color: var(--color-white-dark); 654 | width: 700px; 655 | margin: 1rem auto; 656 | padding: 1rem; 657 | border-radius: 5px; 658 | box-shadow: 0 0.5rem 1rem 0 rgba(0, 0, 0, 0.3); 659 | transition: all .3s linear; } 660 | .alert:hover { 661 | transform: translateY(-3px); 662 | box-shadow: 0 1rem 2rem 0 rgba(0, 0, 0, 0.5); } 663 | .alert__company { 664 | font-size: 2.5rem; 665 | font-weight: 900; } 666 | .alert__spots { 667 | text-align: right; 668 | font-size: 2rem; } 669 | .alert__spots span { 670 | color: forestgreen; } 671 | .alert__position { 672 | font-size: 2rem; } 673 | .alert__descr { 674 | font-size: 1.6rem; 675 | margin: 2rem; } 676 | .alert__descr span { 677 | color: firebrick; } 678 | .alert__date { 679 | font-size: 2rem; } 680 | .alert__site { 681 | font-size: 2rem; 682 | font-weight: 900; } 683 | 684 | .canvasContent { 685 | width: 700px; 686 | height: 500px; 687 | margin: 2rem auto; } 688 | 689 | .canvasContent1 { 690 | width: 700px; 691 | height: 500px; 692 | margin: 2rem auto; } 693 | 694 | .container { 695 | position: relative; 696 | width: 100%; 697 | } 698 | 699 | .container img { 700 | width: 100%; 701 | height: auto; 702 | } 703 | 704 | .container .btn { 705 | position: absolute; 706 | top: 40%; 707 | left: 50%; 708 | transform: translate(-50%, -50%); 709 | -ms-transform: translate(-50%, -50%); 710 | background-color: var(--color-primary); 711 | color: white; 712 | font-weight: bold; 713 | font-size: 24px; 714 | padding: 24px 24px; 715 | border: none; 716 | cursor: pointer; 717 | border-radius: 15px; 718 | text-align: center; 719 | } 720 | 721 | .container .btn:hover { 722 | background-color: white; 723 | color:var(--color-primary); 724 | } 725 | 726 | .main-my-about 727 | { 728 | 729 | } 730 | 731 | .about-head 732 | { 733 | padding: 10px; 734 | margin-top:20px; 735 | margin-left: 15px; 736 | margin-right: 15px; 737 | background-color: var(--color-primary); 738 | text-align: center; 739 | font-size: 50px; 740 | font-weight: bold; 741 | font-family: 'Sofia'; 742 | color:white; 743 | } 744 | 745 | .my-about 746 | { 747 | padding-top:30px; 748 | padding-left: 100px; 749 | padding-right: 100px; 750 | text-align: center; 751 | font-size:25px; 752 | font-family:'Sofia'; 753 | color:var(--color-primary); 754 | } 755 | 756 | .my-info 757 | { 758 | font-family:'Sofia'; 759 | font-size:25px; 760 | padding-left:60px; 761 | padding-right: 60px; 762 | padding-top:280px; 763 | } 764 | 765 | 766 | .my-info-1 767 | { 768 | font-family:'Sofia'; 769 | font-size:25px; 770 | padding-left:60px; 771 | padding-right: 60px; 772 | padding-top:280px; 773 | color:var(--color-primary); 774 | } 775 | 776 | #footer { 777 | position: relative; 778 | padding-top: 30px; 779 | padding-bottom: 30px; 780 | background-color: #1C1D21 781 | } 782 | 783 | .footer-logo { 784 | text-align: center; 785 | margin-bottom: 40px; 786 | } 787 | 788 | .footer-logo>a>img { 789 | max-height: 80px; 790 | } 791 | .footer-follow { 792 | text-align: center; 793 | margin-bottom: 20px; 794 | } 795 | .footer-follow li { 796 | display: inline-block; 797 | margin-right: 10px; 798 | margin-bottom: 13px; 799 | } 800 | 801 | .footer-follow li a { 802 | display: inline-block; 803 | width: 50px; 804 | height: 50px; 805 | line-height: 50px; 806 | text-align: center; 807 | border-radius: 3px; 808 | background-color:var(--color-primary); 809 | color:#FFF; 810 | } 811 | 812 | .footer-copyright p { 813 | text-align: center; 814 | font-size: 14px; 815 | text-transform: uppercase; 816 | margin: 0; 817 | color:#868F9B; 818 | } 819 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | {% load staticfiles %} 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Base 17 | 18 | 19 | 33 | 34 | 35 |
36 |
37 |
38 | 39 | 40 |
41 |
42 |
43 | 44 |
45 |
46 | About 47 |
48 |
49 | An Offline SMS based service providing nearby address and numbers based on location, also provide routes to them if needed. Further Features involve providing complete address from keyword. Also basic search features thus bringing internet offline in time of need. 50 | Any information can be easily found by using Google, but 32% of our population don't have Smartphone and also there are many people having smartphone but no internet access round the clock due to which people suffer a lot for finding basic needs especially when travelling to a particularplace. We've built a SMS based offline system where the user can get the required information in few basic steps by simple sending a message. 51 |
52 |
53 | 54 |
55 |
56 |
57 | 58 |
59 |
60 |

Talk to our interactive bot
Find nearby hospitals, gas stations, medical stores, railway stations, Taxi-stands, etc

61 |
62 |
63 |
64 | 65 |
66 |
67 |
68 |

Find Route From A to B in various modes like cycling,walking,driving or transit provided by the user.

69 |
70 |
71 | 72 |
73 |
74 |
75 | 76 |
77 |
78 |
79 | 80 |
81 |
82 |

Find Complete address in case you know only the half address and are unable to find the location.

83 |
84 |
85 |
86 | 87 | 88 | 89 | 124 | 125 | 126 | 127 | 128 | -------------------------------------------------------------------------------- /logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/team-anything/HelpOff/fba99254b2aad5b891d866a19932278eafcb7ce9/logo.png -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | python-google-places 2 | apiai 3 | googlemaps 4 | 5 | --------------------------------------------------------------------------------