{"id":19632261,"url":"https://github.com/eoconline/rangertrak","last_synced_at":"2026-06-09T13:31:52.376Z","repository":{"id":37237533,"uuid":"457487348","full_name":"EOCOnline/rangertrak","owner":"EOCOnline","description":"Track \u0026 map search \u0026 rescue members reporting via radio, without reliable cell or internet access","archived":false,"fork":false,"pushed_at":"2025-02-18T22:09:50.000Z","size":121099,"stargazers_count":1,"open_issues_count":37,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-26T21:15:15.705Z","etag":null,"topics":["acs","ares","arrl","cert","eoc-online","fema-s22","google-maps","ham-radio","leafletjs","maps","pwa"],"latest_commit_sha":null,"homepage":"https://RangerTrak.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EOCOnline.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-02-09T18:49:05.000Z","updated_at":"2024-12-15T00:18:01.000Z","dependencies_parsed_at":"2023-02-19T00:45:45.472Z","dependency_job_id":"5775bde9-ef4c-4f0b-87e5-48cd0d532181","html_url":"https://github.com/EOCOnline/rangertrak","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/EOCOnline/rangertrak","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EOCOnline%2Frangertrak","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EOCOnline%2Frangertrak/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EOCOnline%2Frangertrak/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EOCOnline%2Frangertrak/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EOCOnline","download_url":"https://codeload.github.com/EOCOnline/rangertrak/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EOCOnline%2Frangertrak/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34110011,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acs","ares","arrl","cert","eoc-online","fema-s22","google-maps","ham-radio","leafletjs","maps","pwa"],"created_at":"2024-11-11T12:13:25.084Z","updated_at":"2026-06-09T13:31:52.356Z","avatar_url":"https://github.com/EOCOnline.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌲 RangerTrak™ 📡\n\n[![SWUbanner](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://vshymanskyy.github.io/StandWithUkraine)\n\nThe RangerTrak™ application aids tracking \u0026 mapping CERT, ACS, wildland firefighters \u0026 other teams, 'rangers' \u0026 individuals roaming around, who are only reliably connected via HAM radio or other non-data supporting means. Teams or individuals can radio in their locations - in a variety of formats, and be centrally tracked. A single log of reports, locations, events and time is created for documentation and analysis. Most critically search area coverage can be determined and teams/individuals that have NOT reported in can be monitored.\n\nThis [Progressive Web Application](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps), or [PWA](https://en.wikipedia.org/wiki/Progressive_web_app), will largely run even if there is inconsistent, limited, or no cell, internet or data access at the command post.  It runs entirely in a device's browser, allowing operation on most any simple, modern, basic web brower in the field. Rangers can radio in their locations - using a variety of location codes, and be centrally tracked.\n\nVerbally transmitting \u0026 transcribing latitude \u0026 longitude coordinates can be very error prone and slow. Instead RangerTrak also permits other ways to report locations: by Street Address, Google PlusCodes, and perhaps What3Words. See \u003chttps://en.wikipedia.org/wiki/Open_Location_Code#Other_geocode_systems\u003e for a list.\n\n## 👥 For Users\n\nTo use and see what this application does, simply browse to \u003chttps://Rangertrak.org\u003e. Additional guidence follows,\n\n### ✨ Features\n\n- Open Source: *free* to use \u0026 available to enhance!\n- Progressive Web App (PWA) this should be able to function (in the future, possibly with some degredation) even if the person using this at the command post has no or intermittent access to the Internet or cell system.\n- Periodic reports can include an editable status field and include easily searched notes which can include mission specific, custom keywords.\n- Tracks mission numbers and names, plus Operational Periods.\n- Versions after 0.0.10 are generated with Angular \u0026 written in enterprise level Typescript, so will run on most modern web browsers, regardless of device/form factor.\n- Supports recording locations as: lat/long (in Decimal Degrees, Degrees Minutes and Seconds, and Degrees and Decimal Minutes), or What3Words, Google +Codes, or physical Street Addresses. Location support may factor in bounding zones or proximity to a locality.\n- Lists of reports and rangers can be saved to a CSV (comma seperated value) file for display, documentation and after action analysis - readible by any spreadsheet programs.\n- Easy entry via auto-lookup of Ham Radio teams or individuals by tactical callsign.\n- Field report statuses can be edited: name \u0026 color, future: icon/markers.\n- View locations on Google and Leaflet/ESRI maps. (Google has yet to support offline/disconnected mapping, but is working on it for the future.) Maps also have overview/locator maps.\n- Rangers can report in as individuals or teams: both are easily edited/sorted/filtered and then only that subset may be exported or displayed on maps.\n- Source code documentation uses [https://compodoc.app/guides/jsdoc-tags.html]Compodoc\n- Source code is evergreen: current with latest libraries (as of fall 2022)\n\n### 🗺️ Future Roadmap\n\n- This project is moving to using [milestones](https://github.com/EOCOnline/rangertrak/milestones) to show what is being worked on next. Dates are super approximate!\n- Also see the [Issues page](https://github.com/EOCOnline/rangertrak/issues) for what we're working on in terms of bug fixes. Feel free to add your comments to them.\n- To work with out flaws! In particular one often has to refresh some pages to get them to display - especially the Leaflet Maps page - or screen.\n- Issues should be moving from a spreadsheet to [the standard GitHub Issues Page](https://github.com/EOCOnline/rangertrak/issues)\n- Enhance map markers to better highlight paths, teams, statuses.\n- Reload data from local files.\n- Allow loading of additional map layers (e.g., an image of trails, local features)\n  perhaps with \u003chttps://github.com/publiclab/Leaflet.DistortableImage\u003e\n- improved docs: screenshots and architectural diagrams.\n- consider \u003chttps://github.com/EventEmitter2/EventEmitter2\u003e for multi-threaded msgs with service workers.\n- consider adding heatmaps, or \u003chttps://github.com/eurostat/gridviz\u003e\n- Optionally publish field reports to a server if Internet access allows: for display at a central EOC or even by participants out in the field with data or cell coverage.\n\n### 🌐 Items (still) requiring online access\n\n- BLOCKING: Removed hardcoded Google API key from the secrets.json file. Either create your own from the secrets template,\n  or await my changes to SettingsService::Constructor() \u0026/or GmapComponent::Loader\n- GeoCoding an address\n- All maps (for now)\n- 3Word functionality (for now)\n\n### 🚀 To Run\n\nSimply visit \u003chttps://www.RangerTrak.org\u003e and follow the Workflow below:\n\n1. Enter Mission info on the[Mission Settings Screen](./non-dist-imgs/MissionSettings.png \"Mission Settings Screen\") once, then\n2. Enter/edit participating rangers on the [Rangers Page](https://www.RangerTrak.org/rangers \"Rangers Page\") as needed, then\n3. Repeatedly enter reports on the [Home (Entry) Screen](https://www.RangerTrak.org/ \"Home (Entry) Screen\")\n\nMoving to a different browser, or device will provide a 'fresh' RangerTrak environment. RangerTrak’s machinations are all local to each brand of browser (Firefox won’t know what you did with Chrome or Edge), so that gives you a way to experiment.\n\nAll data is private: only stored locally in your browser's Local Storage.\n\n### 📸 Screenshots \u0026 Typical Workflow\n\nSo you get an idea of how it looks/works here's a typical workflow. (Click images for larger versions.)\n\n#### Mission Settings Screen: Start here\n\n**WARNING: Before doing the following** Be sure you have backed up and downloaded any previous mission data, via the Export Buttons on the [Field Reports Page](https://www.RangerTrak.org/reports) and [Rangers Page](https://www.RangerTrak.org/rangers) Screens.\n\n![Mission Settings Screen](./non-dist-imgs/MissionSettings.png \"Mission Settings Screen\")\n\nAt the start of every mission and Op Period, come to this screen and enter mission and operational period parameters and the default location to simplify location entry for each field report. Some mapping parameters can also be adjusted. Field Report statuses can be edited as desired. The background incidentally shows RangerTrak being tested in a real-world exercise.\n\n#### Rangers Screen\n\n**Secondly,** at the start of an Operational Period, come to this screen to enter/edit/record rangers participating. Afterwards this displays Rangers participating in the exercise. This can refer to individuals and/or teams as desired. Rangers can be edited as needed, and optionally exported to a CSV spreadsheet.\n![Rangers Screen](./non-dist-imgs/Rangers.png \"Rangers Screen\")\n\nOnce those initial two steps are complete (i.e., the two screens above), **users will just primarily use the Entry Screen, below, for most of the rest of the exercise or incident.**\n\n#### Home (Entry) Screen\n\nMost users will spend most of their time entering field reports from this 'home' or entry screen. It allows a 'scribe' to record 'Field Reporrts', i.e., ranger's locations and status reports.\n\n1. Start by enter any letters of a tactical call sign in the Who field. The app filters rangers with those letters for ready selection.\n2. Next, enter a location in any of the labeled formats. Derived addresses will then be displayed and mapped for your confirmation.\n3. When defaults to the current time. Edit it if the report was previoulsy recieved.\n4. What records the report status or nature, defaulting to \"normal\". You can enter freeform notes as desired too, possibly entering custom, unique incident specific keywords. Those can be filtered/searched for on the Field Reports Screen if desired.\n5. Submit your report. (Mistakes can generally be edited later on in the Field Reports Screen.) Once submitted a confirmation is briefly displayed and the form is automatically reset.\n6. The Reset button clears the form of all current data, so the scribe can start over with a clean field report.\n\n![Home (Entry) Screen](./non-dist-imgs/Entry.png \"Home (Entry) Screen\")\n\n#### Google Maps Screen\n\nThis displays Field Reports that have been entered, and optionally a filtered subset of reports.\n![Google Maps Screen](./non-dist-imgs/GoogleMaps.png \"Google Maps Screen\")\n\n#### Leaflet Maps Screen\n\nThis displays Field Reports that have been entered, and optionally a filtered subset of reports.\n![Leaflet Maps Screen](./non-dist-imgs/LeafletMaps.png \"Leaflet Maps Screen\")\n\n#### Field Reports Screen\n\nThe next screen displays Field Reports that have been entered, in a table or grid format, with the ability to filter, sort, and search reports on any field. Filtered reports can be mapped or exported to a CSV spreadsheet for documentation or later analysis.\n![Field Reports Screen](./non-dist-imgs/FieldReports.png \"Field Reports Screen\")\n\n#### About Screen\n\nThis provides a bit more explaination about the application, its purpose, technologies used, how to report issues, and license model.\n![About Screen](./non-dist-imgs/About.png \"About Screen\")\n\n#### Logs Screen\n\nThis screen is primarily used for debugging and reporting issues. It can also serve as a partial audit trail of actions taken during the mission.\n![Logs Screen](./non-dist-imgs/Logs.png \"Logs Screen\")\n\n\n### 🧹 To Reset/Clear all Data\n\n1. Browse to \u003chttps://www.RangerTrak.org\u003e\n2. Go to [Settings Page](https://www.RangerTrak.org/settings) and under Advanced at the very bottom, click on “Reset Settings”, then edit the fields as desired.\n3. Go to the [Rangers Page](https://www.RangerTrak.org/rangers), then under Advanced at the bottom, click on “Delete Rangers” which should load the default ranger teams. (This will change in the future. Its convenient for testing though. You can rename Teams by clicking on the name. For ANY changes: under Advanced, remember to click “Save Rangers” to preserve changes!\n4. Go to the [Field Reports Page](https://www.RangerTrak.org/reports), then under Advanced at the bottom , click on “Delete ALL Field Reports from local storage” – if there are any! (You may enter new reports or use the mint colored block below to “Add some ## of Fake Reports” which auto generates some reports to experiment with.)\n\n### 📲 Installation\n\nAt the upper right of every screen, or additinoally on the [Settings Page](https://www.RangerTrak.org/settings), You will have the option to \"Install\" the application, which just streamlines access with a shortcut. The application takes minimal space and doesn't consume resources in the background. You can uninstall it like any other app.\n\n## 💻 For Developers Interested in Modifying or Contributing to the Project\n\n- **NEW:** Check out [.vscode/SETUP.md](.vscode/SETUP.md) for a complete VS Code workspace setup guide\n- Also see [contributing.md](contributing.md) for contribution guidelines\n\n### ⚡ Quick Start for Developers\n\n1. Fork `Github.com/eocOnline/Rangertrak` to your own repository\n2. Install [Node.js](https://nodejs.org/) (v18 or higher)\n3. Clone and setup:\n   ```bash\n   git clone https://github.com/YOUR_USERNAME/rangertrak.git\n   cd rangertrak\n   npm install\n   ng serve -o\n   ```\n4. Open in VS Code and install recommended extensions when prompted\n\nFor detailed setup instructions, environment configuration, and troubleshooting, see [.vscode/SETUP.md](.vscode/SETUP.md).\n\n- or Run `ng serve` for a dev server. Navigate to \u003chttp://localhost:4200/\u003e. The app will automatically reload if you change any of the source files.\n\n#### For production release\n\n`ng build --configuration production`\nto serve it:\n`ng s -c production -o`\nold: `http-server dist/rangertrak`\n\n#### Run App-shell\n\n- `ng run rangertrak:app-shell:development` or `ng run rangertrak:app-shell:production` - currently fails.\n- Then browse to `./dist/rangertrak/index.html`\n- see \u003chttps://angular.io/guide/app-shell\u003e for details\n\n### 🧪 Running unit tests\n\n- Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).\n- None currently!\n\n### 🎭 Running end-to-end tests\n\nRun `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.\n\n- None currently!\n- Plans to move to Puppeter, per https://blog.angular.io/introducing-puppeteer-schematics-test-your-angular-apps-with-ease-dea6947f6299\n\n### 📚 To update documentation\n\n`npm run compodoc` to regenerate the doc.\n`compodoc -s` to serve/view the doc at \u003chttp://127.0.0.1:8080/\u003e\nSee \u003chttps://compodoc.app/guides/usage.html\u003e and \u003chttps://compodoc.app/\u003e for details\n\n### 🔖 To update RangerTrak version number\n\nRun `npm run release` per \u003chttps://www.npmjs.com/package/standard-version\u003e\n\nThis updates bumps the version number in package.JSON \u0026 ChangeLog.md by an increment (\u0026 deletes package-lock.json?)\n\nThen run `git push --follow-tags origin main` to publish to Github as a new release\n\nStage any changes (or add '--allow-empty' to the following), then\n`git commit -m \"Release-As: 0.11.40\"`\nSome details in service/settings.service.ts \u0026 app.component.ts\n\u003chttps://github.com/googleapis/release-please#how-do-i-change-the-version-number\u003e\n\nTo verify, also check/update package.json \u0026 package-lock.json\n\n### 📦 To update 3rd party libraries\n\nFollow this sequence to update your development environment:\n\n#### 1. Check current versions (optional)\n```bash\nnode -v\nnpm -v\ntsc --version\nnpm outdated\n```\n\n#### 2. Update Node.js and global tools\n\n**Note:** Global npm installations on Windows require running PowerShell or Command Prompt as Administrator.\n\n```bash\n# Update npm to latest version (requires Admin on Windows)\nnpm install npm@latest -g\n\n# Update TypeScript globally (requires Admin on Windows)\nnpm install -g typescript\n\n# Update TypeScript type files (requires Admin on Windows)\nnpm install -g typings\n\n# Update Angular CLI globally (requires Admin on Windows)\nnpm install -g @angular/cli@latest\n\n# (Optional) Update Chocolatey packages - requires Admin permissions\nchoco upgrade all\n```\n\n**If you get permission errors on Windows:**\n- Right-click PowerShell or Command Prompt and select \"Run as Administrator\"\n- Or use a package manager like Chocolatey to update Node.js/npm: `choco upgrade nodejs`\n\n#### 3. Update Angular and project dependencies\n```bash\n# Check for available Angular updates\nnpx ng update\n\n# Update Angular core packages (add --force if needed for peer dependency warnings)\ny\n\n\n# Check for all package updates\nnpx npm-check-updates -u\n\n# Install all updated dependencies\nnpm install\n```\n\n#### 4. Alternative: Use legacy peer dependency resolution (if needed)\n```bash\nnpm install --save --legacy-peer-deps\n```\n\n#### 5. Optional: Use Yarn as package manager\n```bash\nnpm i yarn -g\nyarn install\n```\n\n**Additional Resources:**\n- Check \u003chttps://update.angular.io/\u003e for Angular-specific migration guides and required code changes between versions\n- Use `npm outdated` to see which packages have newer versions available\n\n### 🚢 To Deploy\n\nDeploying via Google Firebase got WAY too complex with Google's recent security upgrades.\n\nNow I just FTP it to \u003chttps://RangerTrak.org\u003e\n\nOLD:\n`ng deploy`\n`ng add @angular/fire`\nFrom Angular Projects, 2nd ed. pg 119\nSee angular.json and firebase.json\n\n### 🏗️ Architecture\n\nSee [ARCHITECTURE.md](ARCHITECTURE.md) for the updated visual architectural diagram.\n\n```mermaid\nclassDiagram\n    direction TB\n\n    namespace Core {\n        class AppComponent\n        class AppRoutingModule\n    }\n\n    namespace Features {\n        class EntryComponent\n        class FieldReportsComponent\n        class RangersComponent\n        class LmapComponent\n        class GmapComponent\n        class SettingsComponent\n        class LogComponent\n        class AboutComponent\n    }\n\n    namespace Shared {\n        class HeaderComponent\n        class AlertsComponent\n    }\n\n    namespace Services {\n        class FieldReportService\n        class RangerService\n        class SettingsService\n        class LogService\n        class ClockService\n        class InstallableService\n        class GoogleGeocode\n    }\n\n    AppComponent --\u003e AppRoutingModule : Uses\n    AppRoutingModule --\u003e EntryComponent : Route\n    AppRoutingModule --\u003e FieldReportsComponent : Route\n    AppRoutingModule --\u003e RangersComponent : Route\n    AppRoutingModule --\u003e LmapComponent : Route\n    AppRoutingModule --\u003e GmapComponent : Route\n    AppRoutingModule --\u003e SettingsComponent : Route\n    AppRoutingModule --\u003e LogComponent : Route\n    AppRoutingModule ..\u003e AboutComponent : Lazy Route\n\n    EntryComponent ..\u003e FieldReportService\n    EntryComponent ..\u003e RangerService\n    EntryComponent ..\u003e SettingsService\n    EntryComponent ..\u003e LogService\n\n    FieldReportsComponent ..\u003e FieldReportService\n    FieldReportsComponent ..\u003e SettingsService\n    FieldReportsComponent ..\u003e LogService\n\n    RangersComponent ..\u003e RangerService\n    RangersComponent ..\u003e SettingsService\n    RangersComponent ..\u003e LogService\n\n    LmapComponent ..\u003e FieldReportService\n    LmapComponent ..\u003e SettingsService\n    LmapComponent ..\u003e LogService\n\n    GmapComponent ..\u003e FieldReportService\n    GmapComponent ..\u003e SettingsService\n    GmapComponent ..\u003e LogService\n    GmapComponent ..\u003e GoogleGeocode\n\n    SettingsComponent ..\u003e SettingsService\n    SettingsComponent ..\u003e LogService\n\n    LogComponent ..\u003e LogService\n    LogComponent ..\u003e SettingsService\n\n    HeaderComponent ..\u003e SettingsService\n    HeaderComponent ..\u003e ClockService\n```\n\n### 🆘 Further help\n\nTo get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.\n\n## 🌐 eoc.online\n\n\u003chttps://eoc.online\u003e provides free tools for Emergency Operations Centers and local CERT/VOAD/Citizen Corps groups. For more information check out \u003chttps://eoc.online\u003e. We'd LOVE to get your reports of use and suggestions for enhancement. To report issues please visit \u003chttps://github.com/EOCOnline/rangertrak/issues\u003e.\n\n©2022 eoc.online, under the MIT License\n\n![MIT License](./non-dist-imgs/MIT_License.png)\n\n### 🗣️ Public Feedback \u0026 Contribution\n\nWe encourage your feedback and contributions to this repository. Content suggestions and discussions (specific to RangerTrak) can be communicated in the following ways:\n\n- GitHub “issues.” Each issue is a conversation about specific project work initiated by a member of the public.\n- GitHub \"discussions\". Each discussion is a project communication forum. Discussions are not specific to elements of work like a pull request. We encourage you to browse and join in on discussions or start a new conversation by creating a new discussion.\n- Direct changes and line edits to the content may be submitted through a \"pull request\" by clicking \"Edit this page\" on any site page in the repository. You do not need to install any software to suggest a change. You can use GitHub's in-browser editor to edit files and submit a pull request for your changes to be merged into the document. Directions on how to submit a pull request can be found on GitHub.\n- Send your content suggestions or proposed revisions to the RangerTrak team via email to RangerTeam@eoc.online.\n\n### 💬 Testimonials\n\n---\n\u003e \"*(We) all agreed that this is a WOW program with high value added to SAR.  I really hope you continue to refine it!*\"\n\n— Michael Meyer, KB7MTM, [Vashon ACS](https://vashonbeprepared.org/en-us/Partners/ACS)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoconline%2Frangertrak","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feoconline%2Frangertrak","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoconline%2Frangertrak/lists"}