• v0.2.0 dd5cd3d770

    watchcraft v0.2.0
    Some checks failed
    Release / release (release) Failing after 2m48s
    Stable

    aureus released this 2026-05-21 05:53:58 +00:00 | 1 commits to main since this release

    What's new

    TV shows now appear in the feed

    Two bugs conspired to make TV shows invisible. The rate queue used a single
    LIMIT 30 query sorted by vote average — high-rated movies consumed all 30
    slots. TV shows now get their own top-30 pool, so both types are always
    represented.

    Redesigned feed layout

    The Movies / TV Shows tabs have moved to the top of the page. Each tab now
    owns a complete experience: a For You strip of in-library recommendations
    followed by the Discover feed. Previously For You was a single mixed strip
    above a tabbed Discover section.

    Rating fixes

    • "Haven't seen it" (★×0) no longer blocks recommendations. A skip vote
      was being treated as a preference signal and evicting items from the scored
      pool. It no longer does.
    • Watched-but-unrated items return to the rate queue after playback. Items
      played in Jellyfin are now cleared of their skip flag on history sync, so
      they surface for rating.
    • Watched items are no longer hidden from the rate queue entirely. Excluding
      all watch history meant watched TV shows could never be rated, making TV
      recommendations structurally impossible.

    Structured logging

    All application layers (feed, rec engine, Jellyfin sync, Seerr, cron jobs,
    routes) now emit structured JSON logs via pino, with module and
    request-scoped fields. Log level is controlled by the LOG_LEVEL env var.

    Leaner Docker image

    The runtime image no longer depends on tsx. TypeScript is compiled to
    plain JS in a multi-stage build; the final image runs node dist/src/app.js
    directly, cutting image size and removing a dev dependency from the attack
    surface.

    Downloads