Wine-Tracker | Home Assistant App (Add-on)

Hej, I built the Wine Tracker: GitHub - xenofex7/ha-wine-tracker

I used to track my wines on Vivino, but they moved to a subscription model a while ago. After that I used the Notes app for a long time, but was never really happy with it.
Home Assistant is always running anyway - so it’s a perfect fit to have it right there. That’s why I made this App (Add-on).

If you’re interested and want to contribute, give feedback, or help build it further → feel free to join in!

This looks cool, Domain also have a standalone docker version?

there’s no standalone docker version at the moment, but if there’s interest, I’d be happy to look into it :slight_smile:

I would be interested:)

Hej @keen4e

Great news → Wine Tracker v1.5.0 now ships as a standalone Docker image! No Home Assistant required.

Getting started is simple:

services:
  wine-tracker:
    image: ghcr.io/xenofex7/wine-tracker:latest
    ports:
      - "5050:5050"
    volumes:
      - wine-data:/data
    environment:
      - AUTH_ENABLED=true
      - USERS=admin:changeme
      - SECRET_KEY=change-this-to-a-random-string
      - LANGUAGE=en
      - CURRENCY=EUR
    restart: unless-stopped

volumes:
  wine-data:

Then just docker-compose up -d and open http://localhost:5050.

It took a while to get here, but the Docker version includes user authentication, readonly roles, and all the same features (AI label recognition, Vivino search, statistics). Multi-arch images (amd64 + arm64) are available on GHCR.

Full setup guide with all options: README → Docker Standalone

If you run into any issues, don’t hesitate to reach out - happy to help!

Great … will test

I tried but no matter what I enter as credentials I always get “Invalid username or password”. Also if I use the example docker file 1:1 it dies not work!?

Hej keen4e - sorry you’re running into this

I haven’t been able to reproduce this on my end, so I’d need a bit more info to track it down:

  1. Container logs → can you run docker logs wine-tracker (or whatever your container name is) and share the output? Especially anything around the time you try to log in.
  2. Browser console → when you get the “Invalid username or password” error, can you open the browser dev tools (F12 → Console tab) and check if there are any errors there?
  3. Docker Compose config → could you share your docker-compose.yml (with passwords redacted)? Just want to make sure the environment variables are set correctly.
  4. How are you logging in? → are you using the credentials you set in TRACKER_ADMIN_USER / TRACKER_ADMIN_PASS in your compose file?

That should help me figure out what’s going on…

Here’s my docker-compose setup for comparison:

services:
  wine-tracker:
    image: ghcr.io/xenofex7/wine-tracker:latest
    # To build locally instead, comment out 'image' and uncomment:
    # build:
    #   context: ..
    #   dockerfile: docker/Dockerfile
    ports:
      - "5050:5050"
    volumes:
      - .:/data
    environment:
      #  Authentication 
      - AUTH_ENABLED=true
      # Format: user:password (admin) or user:password:readonly (read-only)
      - USERS=admiral:bDJoAWV1XYzr7SXn1MrdClobU
      - SECRET_KEY=F4C494B0-9373-40F4-A74D-FC7F39BEA3FC

      #  General 
      # Currency: CHF, EUR, USD, GBP, CAD, AUD
      - CURRENCY=CHF
      # Language: de, en, fr, it, es, pt, nl
      - LANGUAGE=de

      #  AI Provider (optional � pick ONE) 
      # Provider: none, anthropic, openai, openrouter, ollama
      - AI_PROVIDER=anthropic

      # Anthropic (Claude):
      - ANTHROPIC_API_KEY=sk-ant-api03-0dJ....88onnwAA
      - ANTHROPIC_MODEL=claude-opus-4-6

      # OpenAI (GPT):
      # - OPENAI_API_KEY=sk-...
      # - OPENAI_MODEL=gpt-5.2

      # OpenRouter (multi-provider):
      # - OPENROUTER_API_KEY=sk-or-...
      # - OPENROUTER_MODEL=anthropic/claude-opus-4.6

      # Ollama (local, no API key needed):
      # - OLLAMA_HOST=http://host.docker.internal:11434
      # - OLLAMA_MODEL=llava

    restart: unless-stopped

volumes:
  wine-data:

works now - was not aware about the Format of user and password. THANKS will not migrate my Wine stock :slight_smile:

How to integrate this now with homeassistant as it runs on http I can not embedd as iFrame?

I’m getting this error on openai:
openai.BadRequestError: Error code: 400 - {'error': {'message': "Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.", 'type': 'invalid_request_error', 'param': 'max_tokens', 'code': 'unsupported_parameter'}}

Claude works - and I must say I reeeeaaaalllyyy love this! Migrated all my wine stock today. Thanks a lot for this!

Hej keen4e - glad it’s working now!

iFrame integration: The HTTP vs HTTPS issue is a common one. A few options:

  1. If HA runs on HTTP too (local network) → it should work directly with a Webpage Card pointing to http://:5050

  2. If HA uses HTTPS → you’ll hit mixed content blocking. Solutions:

Reverse proxy (recommended): Add Wine Tracker behind the same reverse proxy as HA (e.g., Nginx Proxy Manager, Traefik, Caddy) so it also runs on HTTPS

Use the Add-on version instead: If you’re running HAOS, the Add-on integrates natively via Ingress — no iframe needed, no port/SSL headaches

  1. Regarding the OpenAI error: That’s a known issue with newer OpenAI models requiring max_completion_tokens instead of max_tokens. I’ll push a fix for that → thanks for reporting!

Which setup are you running → HAOS or Docker-based HA?

Really nice. Worked flawlessly as a HA App.

Maybe add a list view option? Just text of Title and Vintage? Easier to see more wines on the phone.

edit: I see list view is on your roadmap. Looking forward to watching this progress!

Hej @jaaem

Thanks for the kind words and great timing with the suggestion!
I just released v1.7.0 yesterday, and implemented exactly what you asked for:

4 cellar view modes are now available in Settings:

  • Cards → the classic view (default)
  • List → compact single-line rows showing title, vintage, region, grape & drink window → perfect for phones
  • Grid → image-first square tiles for visual browsing
  • Table → fully sortable columns (click any header), with persistent sort direction
    The table view is responsive too → on smaller screens it progressively hides columns so it stays usable on mobile.

Would love to hear how it works for you :slight_smile:

Worked perfectly. I updated as soon as got home assistant notification and switched to list view. I only have a few wines loaded, but will start adding more. The ingress into home assistant works great!

Awesome, glad it works well for you!

If you’re adding more wines, definitely try the AI label recognition (just snap a photo of the label). It pulls in most of the details automatically, saves a lot of manual typing.

Let me know if you run into anything or have more feature ideas, always happy to hear feedback!

Will do. The Vivino search worked fine for me. I do have a openrouter account to try it with, but have not yet.

Really nice work. I might post on r/selfhosted . They are pretty nasty there if used any AI, but it might give you some more exposure.

Thanks! Definitely give the AI recognition a try → cost is really minimal:

Provider Model Cost / Label
OpenAI GPT-4o-mini ~$0.001
Anthropic Claude Haiku ~$0.002
Ollama Local models Free

Analyzing 100 wines ≈ $0.10 with GPT-4o-mini. Full breakdown in the README

And r/selfhosted would be great! The AI part is completely optional – works fine without it. With Ollama it’s even fully local, zero cloud. If you post it, let me know – happy to answer questions! :slight_smile:

The docker version…

Ah sorry! Stupid me :smiley:
I actually switched to the Docker version myself. The main reason was to use it as a standalone web app on iPhone.
I still have it embedded in Home Assistant via an ‘iframe’ card, so I get the best of both worlds - quick access on the phone AND integrated in my HA dashboard :slight_smile:
Have a good day!