/garmin/fetch?start_date=<date>&end_date=<date>: Fetches activities and stores them in postgres
/nutrition/day: Accepts a JSON payload for logging a daily food log
/tanita/scrape: Scrapes the last day from MyTanita/tanita/ingest-csv: Downloads and ingests the complete CSV from MyTanita
-
/workouts/exercises/added: Webhook for when an exercises is added -
/workouts/exercises/changed: Webhook for when an exercises is changed -
/workouts/exercises/deleted: Webhook for when an exercises is deleted -
/workouts/workouts/added: Webhook for when a workout is added -
/workouts/workouts/changed: Webhook for when a workout is changed -
/workouts/workouts/deleted: Webhook for when a workout is deleted -
/workouts/sync: Load all workouts and reingests to Postgres
App to manage finance forecast
Filtered M3U playlists for Dispatcharr. Rules live in iptv/rules.yaml.
GET /iptv/playlists— list configured playlistsGET /iptv/upstream/status— cache/config status (no upstream fetch)GET /iptv/upstream/probe— test upstream with GET (first 3 lines)GET /iptv/live.m3u— filtered live playlistGET /iptv/movies.m3u— filtered movies playlistGET /iptv/series.m3u— filtered series playlistGET /iptv/events.m3u— filtered sports / PPV / event streamsGET /iptv/fifa.m3u— FIFA World Cup and FIFA+ channelsGET /iptv/{name}.m3u?refresh=true— bypass upstream cacheGET /iptv/{name}.m3u?include_stats=true— addX-IPTV-*count headersPOST /iptv/cache/invalidate— clear upstream cache
Env vars:
IPTV_UPSTREAM_URL— provider M3U URL (required in cluster; provisioned viaiptv-envsecret)IPTV_FETCH_BACKEND—curl(default) orrequests; curl matches manual pod testsIPTV_USER_AGENT— optional upstream User-AgentIPTV_CONNECT_TIMEOUT_SECONDS— upstream connect timeout (default30)IPTV_READ_TIMEOUT_SECONDS— full playlist download timeout (default600)IPTV_RAW_CACHE_PATH— where the raw upstream playlist is cached (default/tmp/iptv-upstream.m3u)IPTV_CACHE_TTL_SECONDS— upstream cache TTL (default3600)IPTV_RULES_PATH— optional override for rules fileIPTV_FETCH_TIMEOUT_SECONDS— upstream fetch timeout (default300)
Edit iptv/rules.yaml under the playlist's rules list. Rules are first-match-wins.
VOD playlists gate on Xtream URL shape first (/movie/, /series/); live and events exclude VOD URLs. Country filtering uses group-title after that.
- name: my new rule
action: exclude # or include
field: group # group, name, or url
pattern: '(?i)PLUTO'Redeploy (or restart pod) after rule changes unless rules are mounted from a ConfigMap.
cd homelab-api
cp .env.local.example .env.local # set POSTGRES_CON (+ IPTV_UPSTREAM_URL for /iptv)
./scripts/local-dev-scriptInside a running pod (copy current code, run on 8001):
kubectl cp iptv homelab-api-XXXX:/app/iptv
kubectl cp main.py homelab-api-XXXX:/app/main.py
uvicorn main:app --host 0.0.0.0 --port 8001Port-forward: kubectl port-forward pod/homelab-api-XXXX 8001:8001