{"id":15062438,"url":"https://github.com/jdvlpr/temperature-blanket-web-app","last_synced_at":"2026-01-16T10:53:42.354Z","repository":{"id":255494596,"uuid":"851457795","full_name":"jdvlpr/Temperature-Blanket-Web-App","owner":"jdvlpr","description":"🌤️ Weather Data + 🧶 Art! Get historical weather data, choose yarn colors, and visualize your crochet or knitting project.","archived":false,"fork":false,"pushed_at":"2025-03-27T09:58:01.000Z","size":36179,"stargazers_count":11,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T10:38:50.112Z","etag":null,"topics":["blanket","crafting","crochet","fiber-arts","knitting","temperature-blanket","weather","weather-data","yarn"],"latest_commit_sha":null,"homepage":"https://temperature-blanket.com","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jdvlpr.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"jdeveloper","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"lfx_crowdfunding":null,"polar":null,"buy_me_a_coffee":null,"thanks_dev":null,"custom":null}},"created_at":"2024-09-03T06:16:36.000Z","updated_at":"2025-03-27T09:58:04.000Z","dependencies_parsed_at":"2024-09-29T10:20:51.852Z","dependency_job_id":"924a7829-6470-4f50-a702-769834b1f8f3","html_url":"https://github.com/jdvlpr/Temperature-Blanket-Web-App","commit_stats":null,"previous_names":["jdvlpr/temperature-blanket-web-app"],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdvlpr%2FTemperature-Blanket-Web-App","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdvlpr%2FTemperature-Blanket-Web-App/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdvlpr%2FTemperature-Blanket-Web-App/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jdvlpr%2FTemperature-Blanket-Web-App/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jdvlpr","download_url":"https://codeload.github.com/jdvlpr/Temperature-Blanket-Web-App/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248225653,"owners_count":21068078,"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":["blanket","crafting","crochet","fiber-arts","knitting","temperature-blanket","weather","weather-data","yarn"],"created_at":"2024-09-24T23:36:09.658Z","updated_at":"2026-01-16T10:53:42.321Z","avatar_url":"https://github.com/jdvlpr.png","language":"Svelte","funding_links":["https://ko-fi.com/jdeveloper"],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"static/images/banner.png\" alt=\"Temperature Blanket Website Logo\" /\u003e\n\n### 🌤️ Weather Data + 🧶 Art!\n\nWebsite: **[temperature-blanket.com](https://temperature-blanket.com)**\n\nVisualize your city's historical climate data, create color gauges, and preview your pattern for your crochet or knitting temperature project. Save your project in your browser and as a URL, and download project information in PDF, CSV, and PNG files.\n\nBuilt with:\n\n- [Svelte 5 \u0026 Sveltekit 2](https://svelte.dev/)\n- [Skeleton 4](https://github.com/skeletonlabs/skeleton)\n- [Tailwind 4](https://github.com/tailwindlabs/tailwindcss)\n\n## 🚀 Getting Started\n\nTo run this site locally on your computer for development, [clone this repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) and create a `.env` file. Additionally, in order for certain features to work you'll need to register for some free API services.\n\n\u003e 💡 [Node.js](https://nodejs.org/en/download/package-manager) must be installed on your machine.\n\n1. Copy the [.env.example](.env.example) file to a new file named `.env` in the root directory of your project.\n\n2. For the location search features to work, [register for a free GeoNames username](http://www.geonames.org/login). You will then receive an email with a confirmation link and after you have confirmed the email you can enable your account for the webservice on [your account page](http://www.geonames.org/manageaccount). In your `.env` file, set `SECRET_GEONAMES_USERNAME` to your GeoNames username. The free plan gets 10,000 credits per month.\n\n3. For the Meteostat weather data features to work, [sign up for the free Meteostat Base plan through RapidAPI](https://rapidapi.com/meteostat/api/meteostat/pricing). In your `.env` file, set `SECRET_METEOSTAT_API_KEY` to your key from RapidAPI. The free Base plan gets 500 requests per month.\n\n## 🛠️ Developing\n\nInstall dependencies:\n\n```bash\npnpm install\n```\n\nStart a development server:\n\n```bash\npnpm dev\n```\n\n### ✅ Testing\n\nFirst build the app (to generate cloudflare \\_routes.json file)\n\n```bash\npnpm build\n```\n\nUnit tests (for functions)\n\n```bash\npnpm test:unit\n```\n\nIntegration tests (for the yarn colorway api route)\n\n```bash\npnpm test:integration\n```\n\nEnd-to-end tests (for pages and ui flows)\n\n```bash\npnpm test:e2e\n```\n\nRun all tests (unit, integration, and end-to-end)\n\n```bash\npnpm test\n```\n\n## 🙌 Acknowledgments\n\nThanks for the support and feedback from users like you!\n\nTemperature-blanket.com gets data from several APIs:\n\n- **[GeoNames](https://www.geonames.org/)** for location data\n\n- **[Open-Meteo](https://open-meteo.com)** for weather data\n\n- **[Meteostat](https://meteostat.net)** for weather data\n\n# 📚 Documentation \u0026 Notes\n\n### 🗄️ Database\n\nTemperature-blanket.com uses a backend database in the form of a headless Wordpress site on a separate domain to store user-created gallery pages.\n\n\u003cdetails\u003e\n\u003csummary\u003eView Details\u003c/summary\u003e\n\n\u003e ℹ️ The information below is intended for documentation only. You can test and develop this project locally without setting up your own backend database.\n\nHere are the steps for setting up the headless Wordpress site:\n\n- Install Wordpress on a separate domain.\n- I use the following plugins\n  - [EWWW Image Optimizer](https://wordpress.org/plugins/ewww-image-optimizer/) - To compress and optimize project preview images\n  - [Redirection](https://wordpress.org/plugins/redirection/) - To redirect the headless Wordpress home page to the temperature-blanket.com site, and to redirect project pages to their corresponding gallery pages on temperature-blanket.com.\n  - Temperature Blanket Custom Plugin - I created a Wordpress plugin which handles the necessary setup and allows for creation of project gallery pages through a custom REST endpoint. The source code for this plugin is not public, but if you are interested you can reach out to me.\n  - [Wordfence](https://wordpress.org/plugins/wordfence/) - For general site security\n  - [Wordpress Popular Posts](https://wordpress.org/plugins/wordpress-popular-posts/) - For tracking popular project gallery pages\n  - [WP-GraphQL](https://wordpress.org/plugins/wp-graphql/) - For interacting with the Wordpress backend\n- Add the following line to `wp-config.php`:\n\n```\ndefine('PROJECT_CREATION_AUTH_KEY', 'auth_key');\n```\n\n- In this project's `.env` file, `SECRET_WORDPRESS_PROJECT_CREATION_AUTH_KEY` should be the same `'auth_key'` value. Without the correct auth key, the Wordpress site won't accept POST requests for new project gallery pages.\n\n\u003e 💡 When developing locally, POST requests to create new temperature blanket project gallery pages will be rejected. This is normal, because you don't have the necessary authentication key.\n\n\u003c/details\u003e\n\n### 💾 Local Storage\n\nSettings and user preferences are stored in the browser's Local Storage.\n\n\u003cdetails\u003e\n\u003csummary\u003eView Details\u003c/summary\u003e\n\n| Key Name              | Description                                                | Default Value                                                                                                                                 | Possible Values                                                                          | Version Added\\* |\n| --------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------- |\n| preferences           | User preferences object                                    | `{ disableToastAnalytics: false, layout: 'list', seasons: [...DEFAULT_SEASONS], theme: { id: 'classic', mode: 'system',}, units: 'imperial'}` | [`LocalStatePreferencesType`](src/lib/state/persisted-state.svelte.ts)                   | 5.0.0           |\n| [/weather]units       | Units for the weather forecast page                        | `imperial`                                                                                                                                    | `imperial`, `metric`                                                                     | \u003c 3.28.3        |\n| [/weather]hour_format | Time format for the weather forecast page                  | `12`                                                                                                                                          | `12`, `24`                                                                               | \u003c 3.28.3        |\n| [/weather]locations   | Locations the user has added for the weather forecast page | `[]`                                                                                                                                          | array of [`Location`](src/lib/types/location-types.d.ts) objects                         | \u003c 3.28.3        |\n\n_\\*Items with a \u003c before the version means sometime before that version, I'm not sure exactly when because I wasn't keeping track before version 3.28.3._\n\n\u003c/details\u003e\n\n### 🗃️ IndexedDB Storage\n\nUser's saved projects are stored in the browser's IndexedDB.\n\n\u003cdetails\u003e\n\u003csummary\u003eView Details\u003c/summary\u003e\n\n| Key Name       | Description                                    | Default Value | Possible Values                                                                    | Version Added |\n| -------------- | ---------------------------------------------- | ------------- | ---------------------------------------------------------------------------------- | ------------- |\n| projects_index | An index of projects the user has saved        | `[]`          | array of [`LocalStorageProjectIndexItem`](src/lib/storage/projects.ts) objects     | 5.35.0        |\n| p_{id}         | An individual saved project                    | _not set_     | [`LocalStorageProject`](src/lib/storage/projects.ts) objects, keyed by project id | 5.35.0        |\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdvlpr%2Ftemperature-blanket-web-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjdvlpr%2Ftemperature-blanket-web-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjdvlpr%2Ftemperature-blanket-web-app/lists"}