{"id":28219832,"url":"https://github.com/phoffer/weather","last_synced_at":"2025-06-11T09:31:08.255Z","repository":{"id":254310122,"uuid":"846124779","full_name":"phoffer/weather","owner":"phoffer","description":"Demo app using free APIs to get weather forecasts","archived":false,"fork":false,"pushed_at":"2024-11-19T09:38:38.000Z","size":87,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-18T03:12:10.158Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/phoffer.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-22T15:22:37.000Z","updated_at":"2024-08-30T23:49:03.000Z","dependencies_parsed_at":"2024-08-22T18:35:33.713Z","dependency_job_id":"f1f3e918-86ca-4618-b1e3-1f343cefdc9d","html_url":"https://github.com/phoffer/weather","commit_stats":null,"previous_names":["phoffer/weather"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoffer%2Fweather","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoffer%2Fweather/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoffer%2Fweather/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoffer%2Fweather/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phoffer","download_url":"https://codeload.github.com/phoffer/weather/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phoffer%2Fweather/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259238751,"owners_count":22826793,"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":[],"created_at":"2025-05-18T03:11:37.104Z","updated_at":"2025-06-11T09:31:08.237Z","avatar_url":"https://github.com/phoffer.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# README\n\nThis is an app to demo getting a weather forecast from an address (or otherwise geocodable string).\n\n## Setup\n\nThe only system dependencies are Ruby, Node, and Yarn. This app does not include a data store of any kind. The setup instructions are for `asdf` users; for others, see the versions required in `.tool-versions`.\n\n```bash\ngit clone git@github.com:phoffer/weather.git\ncd weather\nasdf install\nbundle install\nyarn install\n```\n\n## Running the app\n\nAfter having the dependencies installed, run the app with `bin/dev`.\n\n## Architecture\n\nThere are 3 main modules that handle the business logic.\n\n1. Geocoder\n1. Weather\n1. Meteorologist\n\n### Geocoder\n\nGeocoder is responsible for taking an address and performing geocoding via the Nominatim service from OpenStreetMap. It will return latitude, longitude, and zip code for a given search. If there is not a result, it will raise an error.\n\n### Weather\n\nWeather accepts latitude and longitude, and will request a weather forecast from the Open-Meteo service. This will return the current weather conditions (temperature and precipitation), and also those conditions for the next 7 days. If there is an issue performing this request, it will raise an error.\n\n### Meteoroligst\n\nMeteorologist is responsible for the primary action of gathering weather conditions for a given address. It accepts an address, utilizes `Geocoder` and `Weather` to geocode and get the weather information, and it also handles the caching of weather forecasts by zip code.\n\n## Shortcomings\n\n### External requests\n\nThere is some incongruence between our desires for caching, and our techniques for geocoding and requesting weather. Mainly, that we want to cache weather by zip code, but we do not necessarily require zip code in the search. We accept any geocodable input. Due to this, we must perform a geocode for each request in the current design. After finding the zip code, we are then able to check cache for a weather forecast.\n\nThis means the scalability of this current design is rather low, and it would take either a UX redesign (request weather by zip code only) or backend changes (creating our own geographic dataset) to improve.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoffer%2Fweather","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphoffer%2Fweather","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphoffer%2Fweather/lists"}