costco-watch: ntfy alert when a Costco tire is back in stock

This commit is contained in:
2026-08-12 07:33:32 -07:00
parent c5a5e9c353
commit bdace45cd6
5 changed files with 181 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
{
"$schema": "../app-info-schema.json",
"name": "Costco Stock Watch",
"id": "costco-watch",
"available": true,
"port": 8592,
"exposable": false,
"dynamic_config": true,
"no_gui": true,
"tipi_version": 1,
"version": "1.0.0",
"categories": [
"automation",
"utilities"
],
"description": "Polls a Costco tire product page on an interval and pushes an ntfy alert the moment it flips from out-of-stock to in-stock. Points at the costco-tire cloudflared proxy, which needs a Cloudflare Transform Rule attaching browser-like request headers - Costco stalls non-browser header sets.",
"short_desc": "Alerts when a Costco tire is back in stock",
"author": "alexz",
"source": "https://git.alexzaw.dev/alexz/costco-watch",
"form_fields": [
{
"type": "text",
"label": "Product URL",
"env_variable": "TARGET_URL",
"required": true,
"default": "https://costco-tire.alexzaw.dev/SearchResultsByItemOrPart?ItemNo=1273727",
"hint": "Full product page URL to watch, via the costco-tire proxy"
},
{
"type": "text",
"label": "Item Label",
"env_variable": "ITEM_LABEL",
"required": false,
"default": "Michelin Primacy Tour A/S 235/45R18",
"hint": "Friendly name used in the notification text"
},
{
"type": "text",
"label": "ntfy Topic",
"env_variable": "NTFY_TOPIC",
"required": true,
"hint": "Topic to publish to, e.g. costco-tire. Subscribe to it in the ntfy app."
},
{
"type": "text",
"label": "ntfy URL",
"env_variable": "NTFY_URL",
"required": false,
"default": "https://ntfy.alexzaw.dev",
"hint": "ntfy server base URL"
},
{
"type": "password",
"label": "ntfy Token",
"env_variable": "NTFY_TOKEN",
"required": false,
"hint": "Only needed if the topic requires auth. Leave blank for an open topic."
},
{
"type": "text",
"label": "Check Interval (minutes)",
"env_variable": "INTERVAL_MINUTES",
"required": false,
"default": "60",
"hint": "Keep at 60 or more - this is a courtesy check, not a scraper"
},
{
"type": "random",
"label": "API Key",
"env_variable": "API_KEY",
"required": true,
"min": 24,
"encoding": "hex",
"hint": "Guards /status and /check. Auto-generated."
}
],
"supported_architectures": [
"amd64"
],
"created_at": 1754995000000,
"updated_at": 1754995000000,
"deprecated": false,
"min_tipi_version": "4.5.0"
}