Skip to content

Draft: not yet reviewed by a clinician

Use this page to prepare questions for your care team. It does not replace their advice. Your own targets and doses come from your nephrologist, diabetes team and renal dietitian.

Network allowlist

The running app makes no outbound request until you switch a feature on. Every outbound call is HTTPS, made by the server (never by the phone), through a transport that checks addresses before connecting; API keys travel in headers, never in URLs (network allowlist; design note 01).

The phone talks only to your server: the app loads nothing from a CDN, and the handbook at /learn is built offline and loads nothing from the internet either, no fonts, no scripts, no images (design note 08).

What the running app may reach

Host Port Needed when Default
api.nal.usda.gov 443 a USDA key is set (shared or a person's own) (USDA) off
world.openfoodfacts.org 443 barcode lookups are on (Open Food Facts) off
api.openai.com 443 AI with the openai preset off
openrouter.ai 443 AI with the openrouter preset off
inference-api.nousresearch.com 443 AI with the nous_portal preset off
your AI host, e.g. ollama:11434 or litellm.lan:4000 its port a local Ollama, Hermes, a LiteLLM proxy or other compatible server (AI_PROVIDER or AI_CLOUD_PROVIDER), listed in AI_PRIVATE_HOSTS off
your speech-to-text host (STT_BASE_URL), e.g. stt:8000 its port the Ask microphone is on and a person agreed; one recording goes there to become text. Same address rules as an AI host; a local container needs no internet at all off
api.pwnedpasswords.com 443 PASSWORD_BREACH_CHECK=true off

Not needed: images.openfoodfacts.org (the app shows no product images), telemetry, update checks or analytics (there are none). DNS is needed for any host above (design note 03; design note 04).

Private addresses and AI

Shared AI providers may reach private, loopback or link-local addresses only when listed in the env-only AI_PRIVATE_HOSTS (for example ollama:11434,192.168.1.10:8643). Each resolved address is checked and pinned, and redirects are not followed. People's own AI addresses (if you allow them) must be public HTTPS on port 443. The AI client ignores HTTP(S)_PROXY; set AI_HTTP_PROXY if AI must go through a proxy (design note 04).

How to enforce it

  • Kubernetes: deploy/k8s/networkpolicy.yaml allows DNS and HTTPS to public addresses only (private, CGNAT, link-local and loopback excluded, so cloud metadata and the API server are blocked). With Cilium, cilium-networkpolicy.example.yaml narrows it to the exact host names above. A NetworkPolicy only works if your network plugin enforces it; on Talos, switch it on in Flannel first (Kubernetes: Network Policies; Kubernetes).
  • Rootless Podman or Docker: there is no simple per-container egress allowlist. Use a host firewall or your router if you need one. The optional Ollama overlay puts Ollama on an internal network with no route out at all (operator security guide).

The host that pulls or builds the image

For Hosts
Pulling the image ghcr.io, pkg-containers.githubusercontent.com
Verifying it ghcr.io, api.github.com, and Sigstore's tuf-repo-cdn.sigstore.dev, rekor.sigstore.dev, fulcio.sigstore.dev
Building it yourself cgr.dev (and its blob storage), pypi.org, files.pythonhosted.org; Docker Hub hosts only for the Debian fallback or the Caddy image
Caddy certificates acme-v02.api.letsencrypt.org and your DNS provider's API (for Cloudflare api.cloudflare.com)

The handbook is built inside the image build from hash-locked packages on pypi.org; serving it needs nothing (Building the handbook). The repository's network allowlist also lists CI and development hosts.

If something goes wrong

  • USDA request failed: the server cannot reach api.nal.usda.gov:443. Check egress rules. USDA API key was rejected means a wrong key.
  • Barcode lookups time out: allow world.openfoodfacts.org:443.
  • A local AI server is refused: add its host:port to AI_PRIVATE_HOSTS, and on Kubernetes add an egress rule for its address.
  • More: Troubleshooting.

Sources

Not yet reviewed by a clinician. Facts and sources last checked 2026-10-06.