GeoSentinel: a Flask dashboard that puts live movement on a globe
**GeoSentinel** is a geospatial monitoring platform that tracks global movement in real time. It aggregates ship and flight routes, live coordinates, and geodata into a unified system, providing clear geographic and geopolitical awareness for analysis, visualization, and decision-making.
At a glance
- What is it?
- GeoSentinel is a locally run Python application that maps real-time flight data, vessel tracking, satellites and traffic camera feeds onto an interactive globe, with an AI assistant for automated tracking, a search layer for OSINT work and a local LLM through Ollama. It is a single Flask app with a wide dependency list, API keys edited into templates, and a data folder you have to download yourself.
- Who is it for?
- GeoSentinel fits an analyst who wants a single local page showing live movement, news and geodata side by side, and who is willing to supply API keys and a local model, since the project is an all in one application rather than a library you embed.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 50 days ago.
- What is it written in?
- Mainly HTML, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
One Flask app rather than a set of services
GeoSentinel is a geospatial monitoring platform that tracks global movement in real time. It aggregates ship and flight routes, live coordinates and geodata into a unified system, and the stated purpose is to provide geographic and geopolitical awareness for analysis, visualisation and decision-making.
The implementation is a single Python application rather than a distributed system, and the repository layout shows that clearly. app.py is the entry point, app-exe.py is a variant of it, news_config.py holds the news feed configuration, verify_search.py is a helper, and the templates/ directory holds the HTML, with earth.html being the large one that carries the map. There are two standalone pages, news.html and wifi-search.html, and a docs/ directory with the guides for the AI assistant and the search options.
The web stack is Flask with Flask-SocketIO, which is how the live updates reach the browser rather than the page polling. The endpoints the README lists are the whole interface, and they are on localhost.
python app.pyThat is the run step, and the three URLs afterwards are the Earth view at /earth, the news dashboard at /news, and a WiFi and Bluetooth location dashboard at /map-w. The README also notes an official website, a blog with updates and insights, video tutorials, and a related project for social media OSINT called SocioSential, which is a separate repository by the same author.
The project is not archived, the last push was on 2026-09-03, and there is a single tagged release, GeoSentinel for Windows 11 from 2026-02-27, which tells you the packaging is aimed at a specific desktop rather than a server.
The live layers, and the keys they need
The feature list is a catalogue of live data sources, and reading it tells you what the globe actually shows.
There is real-time flight data, live vessel tracking, and satellite tracking. There are live CCTV traffic camera feeds over the globe, live news feeds, and geopolitical news with sentiment analysis. There is market data for commodities and cryptocurrencies, translation services, and access to GeoJSON data and surveillance grid tiles. The Earth view itself is described as an interactive global map with real-time tracking, advanced search by hex, flight, vessel or coordinates, activity logging and user tracking, responsive design and real-time data visualisation.
The map is not free. The configuration section lists the API keys and where each one goes, and the detail is unusually specific about line numbers, which tells you how large the template has become and how manual the setup is.
const tomtomApiKey = 'YOUR_TOMTOM_API_KEY';The TomTom Maps API key goes in templates/earth.html at around line 1850, with a second empty constant of the same name for the global map traffic layers, a Mapbox access token at line 2426 for the 3D globe, a weather API key at line 2491 for OpenWeatherMap data inside the popups, and another TomTom constant at line 2501. Other API keys, the README says, are needed across app.py.
That is four separate edits in one file and a set of keys scattered through the Python, which is the operational reality of this project. It is also the thing to watch when you deploy it, because a key pasted into a template is a key that ends up in a git repository the moment someone commits the file.
The geodata folder is not in the repository
One instruction in the README sits above the installation guide and is easy to skim past. You are told to download the geodata folder and move it to the root directory, and there is a download link to a Proton Drive URL.
The consequences of that are worth spelling out. The repository does not contain the geodata, so a fresh clone is not a working application. The download is from a personal file host rather than from the project's own release infrastructure, which means there is no version marker and no checksum to verify the archive against, so the integrity of the data you load is a matter of trusting that link. And the folder is large enough that it is clearly not suited to a git repository, which is the normal reason for shipping it separately.
There is a related detail in the configuration that has security implications. The repository includes a .env file at the top level. A committed environment file is where secrets leak from, because the file is exactly the place people put API keys, and the README's own instructions point at several other places where keys are pasted in. If you fork this project, the first thing to do is look at what is in that .env, replace anything real with your own values, and make sure your version of the file is not committed.
The licence is also a custom one, in a LICENSE.md file, and GitHub cannot classify it, so the permissions for reuse and redistribution are whatever that file says rather than a standard open source grant.
Installing it is a clone, a pip install and a run
The installation guide is laid out in four steps, and the first one offers two routes. Clone the repository directly, or fork it and clone your own copy.
git clone https://github.com/h9zdev/GeoSentinel.gitgit clone https://github.com/<your-username>/GeoSentinel.gitThen move into the project directory and install the dependencies.
cd GeoSentinel
pip install -r requirements.txtA virtual environment is marked optional but recommended, and the README gives both the Unix and the Windows activation lines.
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # WindowsThen run the application and open the endpoints on 127.0.0.1:8000, the Earth view, the news dashboard and the WiFi and Bluetooth location dashboard. The README badges say Python 3.8 or newer and Linux tested, so the Python floor is low but the tested platform is narrow.
The fork route is the interesting one for anyone planning to build on this. Forking gives you a copy you control, which is the sensible way to add your own keys, your own data and your own deployment, and it is the only way to keep your key edits out of the upstream project.
The dependency list is a description of the feature set
The requirements file has thirty entries, and reading it is a faster way to understand the project than the feature list.
The web and plumbing layer is Flask, Flask-SocketIO, Werkzeug, requests, requests-oauthlib, websockets, ujson, python-dotenv and beautifulsoup4. The data layer adds feedparser for the news feeds, pandas, numpy, rasterio for the geospatial rasters, and duckduckgo-search for the web search.
The intelligence layer is where it gets heavy. ultralytics is the YOLO package, so the aerial segmentation runs a real object detection model locally, sentence-transformers is there for embeddings, chromadb is the vector store, ollama is the local LLM client, and opencv-python-headless with Pillow handle the image analysis that extracts object and GPS metadata.
The privacy and messaging layer has pysocks and stem, the Tor controller library, which is what makes the.onion search work, plus twilio, phonenumbers, SpeechRecognition, gTTS and pydub for the voice and messaging features, and pyotp and qrcode for the two factor handling.
Two practical observations follow. The first is that this is a heavy install, because ultralytics and sentence-transformers pull in the machine learning stack whether or not you use the AI features. The second is that the design intent is local processing, since ollama and the headless OpenCV build point at a laptop that does the work itself rather than sending images and text to a hosted service.
The AI and search layer, and the documentation behind it
Two guides in docs/ describe the parts of the platform that are more than a map.
GeoSential AI is the assistant, documented in docs/geosential_ai.md, and described as an intelligent assistant for automated real-time tracking of flights and vessels with integrated OSINT. The Earth view integrates it, and the integration is the interesting part, because a map you have to watch and a map that tells you what to watch are different tools. A local Ollama model is what runs it, so the tracking reasoning happens on your machine.
The second guide, docs/search_options.md, covers the search and dark web side, with the OSINT instructions. The feature list describes a dark web search that is anonymous searching across multiple .onion engines via the Tor integration, and an advanced web scraper that does multi-engine OSINT search with Google dorking for social media platforms such as Twitter, Reddit and Instagram.
Those two features are where the ethical and practical questions live, and they deserve a straight answer rather than a description. A dorking search across social platforms and a .onion search engine are reconnaissance tools: they do not break anything, but they do let you look for a person across platforms using search syntax that the platforms' own search boxes limit. In most jurisdictions that is legal, in some it is not, and the terms of the services involved usually prohibit it. The dark web search, where the index is deliberately unmoderated and frequently illegal, carries a different risk again, because linking to what you find is a step further than searching.
The practical note about configuration applies here as much as to the map. The Tor integration and the search features are the parts of this application most likely to be used in ways that need care, and both are the parts that are easiest to enable by accident.
Editorial conclusion
GeoSentinel fits an analyst who wants a single local page showing live movement, news and geodata side by side, and who is willing to supply API keys and a local model, since the project is an all in one application rather than a library you embed. It does not fit a deployment where the map, the AI and the search features must run without sending queries to third party services, and it does not fit a team that needs a supported data pipeline, because the upstream feeds are not documented in the repository. Verify three things before you rely on it: the contents of the .env file that ships in the repository, since a committed environment file is where keys leak from, the keys you edit into templates/earth.html and app.py, which are four separate placeholders at the line numbers the README lists, and the geodata folder, which is not in the repository and has to be downloaded and moved to the root directory before the map has anything to show.
Frequently asked questions
How do I run GeoSentinel locally?
Clone the repository or fork it, move into the project directory, install the dependencies with pip install -r requirements.txt, optionally create a virtual environment, and run python app.py. The endpoints are the Earth view at https://127.0.0.1:8000/earth, the news dashboard at /news and the WiFi and Bluetooth location dashboard at /map-w. You also need the geodata folder downloaded separately and moved to the root directory.
Which API keys does GeoSentinel need?
The TomTom Maps API key goes in templates/earth.html at around line 1850, with a second empty TomTom constant for the global map traffic layers, a Mapbox access token at line 2426 for the 3D globe, an OpenWeatherMap key at line 2491 for the data in the popups, and another TomTom constant at line 2501. Other API keys are needed across app.py.
What is GeoSential AI?
It is the assistant inside GeoSentinel, documented in docs/geosential_ai.md, described as an intelligent assistant for automated real-time tracking of flights and vessels with integrated OSINT. It runs against a local Ollama model, so the tracking logic is processed on your own machine.
What does the GeoSentinel dependency list tell me about running it?
It is a heavy install. The list includes ultralytics for the YOLO based aerial segmentation, sentence-transformers for embeddings, chromadb as the vector store, ollama for the local LLM, opencv-python-headless and Pillow for image analysis, plus stem and pysocks for the Tor integration, and the scientific stack with numpy, pandas and rasterio. The project badges say Python 3.8 or newer and Linux tested.
What licence is GeoSentinel released under?
A custom licence in LICENSE.md that GitHub cannot classify, so it is not one of the standard open source licences and the file is the place to check the terms before you reuse the code. The repository also ships a .env file, so check what it contains and replace anything real with your own values before you commit your fork.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/h9zdev-geosentinel)Was this useful?