{"id":16736837,"url":"https://github.com/hursey013/above-cville","last_synced_at":"2025-07-14T16:05:50.507Z","repository":{"id":56568877,"uuid":"303486729","full_name":"hursey013/above-cville","owner":"hursey013","description":"What's flying over the City of Charlottesville, Virginia?","archived":false,"fork":false,"pushed_at":"2021-07-10T18:31:07.000Z","size":360,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-10T13:06:21.205Z","etag":null,"topics":["ads-b","firebase","firebase-realtime-database","firebase-storage","twitter-api","twitter-bot"],"latest_commit_sha":null,"homepage":"https://twitter.com/abovecville","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hursey013.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-12T19:01:28.000Z","updated_at":"2024-03-30T19:15:47.000Z","dependencies_parsed_at":"2022-08-15T21:10:17.217Z","dependency_job_id":null,"html_url":"https://github.com/hursey013/above-cville","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hursey013/above-cville","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hursey013%2Fabove-cville","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hursey013%2Fabove-cville/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hursey013%2Fabove-cville/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hursey013%2Fabove-cville/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hursey013","download_url":"https://codeload.github.com/hursey013/above-cville/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hursey013%2Fabove-cville/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265314314,"owners_count":23745243,"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":["ads-b","firebase","firebase-realtime-database","firebase-storage","twitter-api","twitter-bot"],"created_at":"2024-10-13T00:23:45.973Z","updated_at":"2025-07-14T16:05:50.480Z","avatar_url":"https://github.com/hursey013.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# above-cville\n\n\u003e What's flying over the City of Charlottesville, Virginia?\n\n## Introduction\n\nTwitter bot which uses the [ADS-B Exchange](https://www.adsbexchange.com/) API to spot aircraft within a 2.5nm radius of the City of Charlottesville, VA ([38.0375, -78.4863](https://goo.gl/maps/sySAUH9KeKCYCrtG9)). Timestamps for each spotting are persisted to a Firebase Realtime Database.\n\n## Initial setup\n\n### Clone this repo\n\n- Clone or download this repo and open the `above-cville` directory.\n\n### Create a Firebase project\n\n- Create a Firebase Project using the [Firebase Developer Console](https://console.firebase.google.com)\n- Install [Firebase CLI Tools](https://github.com/firebase/firebase-tools) if you have not already, and log in with `firebase login`.\n- Configure the bot to use your project using `firebase use --add` and select your project.\n\n### Install dependencies and add environment variables\n\n- Install dependencies by running: `npm install`\n- Provide the following environment variables in your .env file:\n\n  ```\n  ADSBX_KEY=\"api-key-here\"\n\n  FIREBASE_PROJECT_ID=\"my-app\"\n  FIREBASE_PRIVATE_KEY=\"private-key-here\"\n  FIREBASE_CLIENT_EMAIL=\"firebase-adminsdk@my-app.iam.gserviceaccount.com\"\n  DB_URL=\"https://my-app.firebaseio.com\"\n\n  TWITTER_ACCESS_TOKEN=\"access-token-here\"\n  TWITTER_ACCESS_TOKEN_SECRET=\"access-token-secret-here\"\n  TWITTER_CONSUMER_KEY=\"consumer-key-here\"\n  TWITTER_CONSUMER_SECRET=\"consumer-secret-here\"\n  ```\n\n  Further reading:\n\n  - [Setting up a Firebase project and service account](https://firebase.google.com/docs/admin/setup)\n  - [Twitter API credentials](https://developer.twitter.com/)\n  - [Accessing Data Collected by ADS-B Exchange](https://www.adsbexchange.com/data/)\n  - [Airport-Data.com API Documents](https://www.airport-data.com/api/doc.php)\n\n### Update configuration\n\nThere are a number of variables which can be customized by modifying `config.js`\n\n- `actionPhrases` - short phrases to add to the beginning of the tweet\n- `refreshSeconds` - how often to call the ADS-B endpoint\n- `cooldownMinutes` - amount of time that should pass before spotting the same aircraft\n- `maximumAlt` - filter out aircraft above this altitude\n- `abbreviations` - abbreviations that should be kept uppercase\n- `articles` - exceptions where a plane type should be an `An` instead of an `A` and vice versa\n- `airport.dataUrl` - URL for thumbnail endpoint\n- `adsbx.url` - URL for ADS-B endpoint\n- `adsbx.lat` - latitude value used for geolocation\n- `adsbx.lon` - longitude value used for geolocation\n- `adsbx.radius` - radius for search in nautical miles\n\n### Download databases\n\n`above-cville` relies on two static JSON files for aircraft types (`storage/aircrafts.json`) and operators (`storage/operators.json`) data. These files are regularly updated and can be downloaded from https://github.com/Mictronics/readsb-protobuf/tree/dev/webapp/src/db manually or through a cron job.\n\n## Usage\n\nTo start the bot, run the following in the project directory:\n\n```\nnpm start\n```\n\nTo run the included unit tests:\n\n```\nnpm test\n```\n\n## Inspiration\n\n- [AboveTustin](https://github.com/kevinabrandon/AboveTustin) - ADS-B Twitter Bot. Uses dump1090-mutability to track airplanes and then tweets whenever an airplane flies overhead.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhursey013%2Fabove-cville","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhursey013%2Fabove-cville","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhursey013%2Fabove-cville/lists"}