{"id":13591790,"url":"https://github.com/owntracks/frontend","last_synced_at":"2025-04-08T17:32:36.091Z","repository":{"id":37617324,"uuid":"173205128","full_name":"owntracks/frontend","owner":"owntracks","description":"🌍 Web interface for OwnTracks built with Vue.js","archived":false,"fork":false,"pushed_at":"2025-02-02T22:49:24.000Z","size":11960,"stargazers_count":428,"open_issues_count":20,"forks_count":60,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-04-04T14:41:56.505Z","etag":null,"topics":["frontend","javascript","owntracks","owntracks-frontend","owntracks-recorder","owntracks-ui","vue","vuejs"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/owntracks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"liberapay":"owntracks.org"}},"created_at":"2019-02-28T23:51:17.000Z","updated_at":"2025-04-03T07:22:01.000Z","dependencies_parsed_at":"2024-01-14T03:59:03.095Z","dependency_job_id":"e4656245-2e2a-431c-a1fc-85b14d96a0db","html_url":"https://github.com/owntracks/frontend","commit_stats":null,"previous_names":[],"tags_count":35,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owntracks%2Ffrontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owntracks%2Ffrontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owntracks%2Ffrontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owntracks%2Ffrontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/owntracks","download_url":"https://codeload.github.com/owntracks/frontend/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247892762,"owners_count":21013776,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["frontend","javascript","owntracks","owntracks-frontend","owntracks-recorder","owntracks-ui","vue","vuejs"],"created_at":"2024-08-01T16:01:02.079Z","updated_at":"2025-04-08T17:32:31.069Z","avatar_url":"https://github.com/owntracks.png","language":"JavaScript","funding_links":["https://liberapay.com/owntracks.org"],"categories":["JavaScript"],"sub_categories":[],"readme":"# OwnTracks Frontend\n\n![Version](https://img.shields.io/github/package-json/v/owntracks/frontend)\n[![Docker Pulls](https://img.shields.io/docker/pulls/owntracks/frontend)](https://hub.docker.com/r/owntracks/frontend)\n[![Build](https://github.com/owntracks/frontend/workflows/Build/badge.svg)](https://github.com/owntracks/frontend/actions?query=workflow%3ABuild+branch%3Amain)\n[![Tests](https://github.com/owntracks/frontend/workflows/Tests/badge.svg)](https://github.com/owntracks/frontend/actions?query=workflow%3ATests+branch%3Amain)\n[![Lint](https://github.com/owntracks/frontend/workflows/Lint/badge.svg)](https://github.com/owntracks/frontend/actions?query=workflow%3ALint+branch%3Amain)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![License](https://img.shields.io/github/license/owntracks/frontend?color=d63e97)](https://github.com/owntracks/frontend/blob/main/LICENSE)\n\n![Screenshot](https://raw.githubusercontent.com/owntracks/frontend/main/docs/images/screenshot.png)\n\n## Introduction\n\nThis is a web interface for [OwnTracks](https://github.com/owntracks/recorder) built as\na Vue.js single page application. The recorder itself already ships with some basic web\npages, this is a more advanced interface with more functionality, all in one place.\n\n![Map features](https://raw.githubusercontent.com/owntracks/frontend/main/docs/images/map-features.png)\n\n## Features\n\n- Last known (i.e. live) locations:\n  - Accuracy visualization (circle)\n  - Device friendly name and icon\n  - Detailed information (if available): time, latitude, longitude, height, battery,\n    speed and regions\n- Location history (data points, line or both)\n- Location heatmap\n- Quickly fit all shown objects on the map into view\n- Display data in a specific date and time range\n- Filter by user or specific device\n- Calculation of distance travelled\n- Highly customisable\n\n## Installation\n\n### Docker\n\nA pre-built Docker image is available on Docker Hub as [`owntracks/frontend`](https://hub.docker.com/r/owntracks/frontend).\n\nYou can start a container directly via `docker run`:\n\n```console\n$ docker run -d -p 80:80 -e SERVER_HOST=otrecorder-host -e SERVER_PORT=8083 owntracks/frontend\n```\n\nOr you can use `docker-compose` (if you also run the OwnTracks Recorder with the default\ncompose config, and the service is named `otrecorder`):\n\n```yaml\nversion: \"3\"\n\nservices:\n  owntracks-frontend:\n    image: owntracks/frontend\n    ports:\n      - 80:80\n    volumes:\n      - ./path/to/custom/config.js:/usr/share/nginx/html/config/config.js\n    environment:\n      - SERVER_HOST=otrecorder\n      - SERVER_PORT=8083\n    restart: unless-stopped\n```\n\nTo change the port on which the nginx server will listen on, set the\n`LISTEN_PORT` enviroment variable - default is 80.\n\nTo build the image from source replace `image:` with:\n\n```yaml\nbuild:\n  context: ./owntracks-frontend\n  dockerfile: docker/Dockerfile\n```\n\n(assuming you have this repository cloned to `owntracks-frontend` in the same\ndirectory as `docker-compose.yml`)\n\n### Manually\n\n- Run `npm install` to install dependencies\n- Run `npm run build` to compile and minify for production\n- Copy the content of the `dist/` directory to your webroot\n\n## Configuration\n\nIt's possible to get started without any configuration change whatsoever, assuming your\nOwnTracks API is reachable at the root of the same host as the frontend.\n\nCopy [`public/config/config.example.js`](public/config/config.example.js) to\n`public/config/config.js` and make changes as you wish.\n\nSee [`docs/config.md`](docs/config.md) for all available options.\n\n## Development\n\n- Run `npm install` to install dependencies\n- Run `npm run dev` to compile for development and start the hot-reload server\n- Run `npm run lint:js` to lint JavaScript/Vue files\n- Run `npm run lint:md` to lint Markdown files\n- Run `npm run lint:scss` to lint SCSS files\n- Run `npm run format:js` to format JavaScript/Vue files\n- Run `npm run format:md` to format Markdown files\n- Run `npm run format:scss` to format SCSS files\n- Run `npm test` to run unit tests\n\n### CORS-Proxy\n\nYou can use the [`corsProxy.js`](scripts/corsProxy.js) script to use your production\ninstance of OwnTracks for development without making changes to its CORS-Headers:\n\n```console\n$ npm run cors-proxy\n```\n\nIf you have [basic authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication#Basic_authentication_scheme)\nenabled, create a `.env` file with your credentials:\n\n```text\nOT_BASIC_AUTH_USERNAME=user\nOT_BASIC_AUTH_PASSWORD='P@$$w0rd'\n```\n\nThen run:\n\n```console\n$ env $(cat .env | xargs) npm run cors-proxy\n```\n\nThe default host and port it binds to is `0.0.0.0:8888`. Change using the `OT_PROXY_HOST`\nand `OT_PROXY_PORT` environment variables.\n\nFinally update `api.baseUrl` in your config to `\"http://0.0.0.0:8888/https://owntracks.example.com\"`.\n\n### I18n\n\nThis project uses [Vue I18n](https://kazupon.github.io/vue-i18n/). To see missing and\nunused i18n entries, run:\n\n```console\n$ npm run i18n:report\n```\n\nTo add a new locale, copy `en-US.json` to `\u003clocale\u003e.json` in [`src/locales`](src/locales)\nand start translating the individual strings. Make sure to [mention the new locale to the docs](docs/config.md#locale)!\n\nFor a specific example see commit [`b2edda4`](https://github.com/owntracks/frontend/commit/b2edda410f16633aa6fd9cd4e5250f2031536c7d)\nwhere German translations were added.\n\n## Contributing\n\nPlease feel free to open an issue and discuss your ideas and report bugs. If you think\nyou can help out with something, open a PR!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowntracks%2Ffrontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowntracks%2Ffrontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowntracks%2Ffrontend/lists"}