Ctrl K
ComunidadGuías…

CHANGELOG.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Changelog

All notable user-visible changes to Hauser are documented here. The project uses
Semantic Versioning for its public release line.

## [0.50.0] - 2026-11-02

- Room: every device on the picture can be resized like a lamp. A shape button switches between ellipse and rectangle, whose four corners can be adjusted individually like window corners; the button moves to the left near the image edge. Web and iOS share the shape, and the tappable area follows it.

- Room: the hint about devices without a position no longer floats over the room editor; it stays in the view settings.


## [0.49.1] - 2026-10-29

- Installation: the baseline x86-64 image installs its native build tools without running unrelated dependency hooks.
- Media: player inputs can be selected from Home Assistant's source list. Saved radio streams and playlists use real media IDs and the correct playback parameters; demo presets no longer appear in live households. Presets and their music/playlist type are shared with the native app.
- Laundry setup: when translated state names do not match a sensor, the error shows the source's internal state values. The native app now applies an existing sensor through the current validate-and-confirm flow.
- Room: the stage view selector uses light text on its dark surface in the light theme, so “Full screen” and “All rooms” remain clearly readable and look selectable next to “Image control”.
- Room: “Fade lamps when switched off” can be disabled per room under Room image → Set up image → Devices & light zones. It is on by default; switching it off keeps the light glow and device controls intact. The native app shares the same setting.

- Image control on the wall panel: whoever lands there no longer gets stuck
  without the controls. A tap on an empty spot of the picture shows the placed
  devices together with the way back, a swipe in from the left edge brings the
  controls in, and the room still changes with a swipe anywhere else. In the
  locked mode, pressing and holding the picture explains right away how to
  unlock it ([#42](https://github.com/ralleur/hauser/issues/42)).

- Room on phones: hiding the controls now lets you operate devices directly
  where they are placed in the picture. Tap to control, press and hold for
  details, or double-tap an empty spot to show their zones and names briefly.

## [0.48.2] - 2026-10-25

- Room: the pale veil of a lamp that is off now stays on the lamp in the demo
  rooms. Its zone had reached well past the globe, the shade or the bedside
  lamp; demo visitors who still carry the old zones get the close ones once,
  places they set themselves stay.
- Room: tapping the lamp picture on the project page opens the demo straight
  in image control in the living room, where the lamps can really be tapped.
  `demo/#image` leads there; opening the demo normally afterwards starts with
  the usual view again.

## [0.48.1] - 2026-10-24

- Scenes: leaving the scene editor puts every lamp back the way it was, also
  when a Home Assistant light group sits next to its lamps in the room —
  before, the group switched a lamp back on that had been off. Adjusting one
  lamp no longer runs the whole scene again.
- Room: “Assign devices” is back in the room settings, next to the room image
  and the scenes; it is still also reachable under “Set up image”.

## [0.48.0] - 2026-10-24

- Room: on the wall panel, a lamp that is off now goes pale inside its light
  zone in the room picture, and its warm colour fades back as soon as it is
  switched on, from its tile or by tapping it in the picture.
- The live demo places its lamps on the lamps drawn in its room pictures, so
  the effect can be tried in the evening living room, bedroom, bathroom and
  kitchen.
- The project page shows it in moment 02 as a short, calm sequence of the
  living room lamps coming on; the guide mentions it under devices in the
  picture.

## [0.47.0] - 2026-10-23

- Room and exterior pictures: clear “Change image” and “Set up image” entries,
  with devices and light zones, windows and weather, and surfaces together in
  one editor. A missing device position is an optional configuration hint.
- The manual image workflow guides photo preparation, uploading the four
  variants and reviewing them before applying the set. The workspace keeps
  a dark, responsive surface with readable controls and simpler navigation.
- Reliability: a light tile uses its own Home Assistant entity when switching,
  even while its previous room assignment is being replaced.
- Maintenance: Stresshaus distinguishes intentional HA outages from failures
  and avoids stale iPad button queries and system keyboard controls.

## [0.46.1] - 2026-10-21

- Gate: Home Assistant no longer marks the Hauser app as experimental in its
  app store, and it no longer needs advanced mode to show up. The beta note
  stays in the app's documentation.
- Room: the project page shows the room picture as the switch. A new moment
  after the day-evening-off preview shows image control in the evening, with
  the lamps and blinds marked where they stand, and links to how it works.
- Energy on the phone: the project page shows the new energy screen next to
  the iOS living room, with the house at the top and solar, battery and grid
  below.
- The guide describes the three home-screen views, the room configuration
  that now holds the layout settings, and devices in the picture (light zones,
  points, tap and hold).

## [0.46.0] - 2026-10-19

- A glance: the lightbulb on a room only lights up for lamps. Smart plugs,
  configuration switches, open blinds and vacuums stay listed and
  controllable without lighting it, in existing homes too. A plug or relay
  that powers a lamp can be counted with **Counts for the room light
  indicator** in the device settings. Thanks to @ferlodavid (#32, #35).
- A glance: open doors and open windows are told apart. The overview, the
  phone notice, the ambient screen and the room cards say "1 window open",
  "1 door open" or both, based on the contact's Home Assistant device class
  (`door` and `garage_door` are doors). Thanks to @ferlodavid (#33, #36).
- A glance: when the add-on has a newer Hauser version waiting, a
  notification says so and where to update it. Hauser reads Home Assistant's
  own update entity for the add-on, so nothing is fetched from the internet.
  Dismissed, it stays away until the next version.
- Touch: blinds can be raised, stopped and lowered right on their tile. The
  blind's settings cycle through three tile views: large (one tile wide, two
  high, up and down stacked with stop beside them; the default), compact
  (the buttons replace name and state on a normal tile) and the previous
  tile without buttons. Only the buttons a blind supports are shown, and the
  direction it is moving in lights up. Suggested by @ferlodavid (#39).
- Touch: the temperature control can be switched. A button at the top right
  of the climate overlay and the thermostat detail cycles through a tick
  slider (default, as in the iOS app), plus and minus, and an upright tick
  slider like a lamp's brightness. The choice is kept per room.
- Room: the panel's room picker shows as many rooms on a page as look good,
  up to eight by default (two columns, up to four rows), so a home with eight
  rooms no longer has to page. The room configuration sets the upper limit per page
  (4 to 16); with more rooms per page the picker uses three or four columns.
  "Rooms per row" now belongs to the "All rooms" view. Suggested by
  @ferlodavid (#40).
- Gate: Hauser speaks Spanish (Spain, informal "tú"). The whole interface is
  translated, Spanish dates and numbers follow es-ES, and the language picker
  offers Español. Translation by @ferlodavid (#30, #31).
- Weakness with dignity: the library asks for the Jellyfin server address on
  its sign-in card when none is set yet. Before, it signed in against a
  built-in default and could not be set up from there.
- Hidden simulator: tapping the clock five times opens it again with a mouse
  or at a relaxed pace; only the pause between two taps counts now.
- A glance: the room temperature now shows on the room cards of the
  **All rooms** view and on the phone, not only in the panel's room picker,
  and it follows the room's **Show temperature** setting everywhere.
- Room: in **Assign lamps** the light zone shows its real size as a
  see-through area with a white dot at its centre. Handles at the corners
  stretch it into an ellipse of any width and height, and a handle on top
  rotates it, so the zone can follow a lampshade. The night glow on the room
  image takes the same shape.
- Room: **Assign lamps** is now **Assign devices**. Every device in the room
  can get a spot on the room image: lamps keep their light zone, everything
  else gets a point. Tapping a placed device on the room image does what
  tapping its tile does (switch, open or show the detail), holding it opens
  the detail, and a soft ring confirms the tap. A camera tapped on the image
  brings its picture to the front.
- Room: one configuration mode. Pressing and holding a room or the
  background opens the room configuration, which now also holds what the
  layout panel from the right used to: a pill next to the control surface
  drags its width, the view switch sits at the top centre, rooms per page,
  rooms per row and rows at once sit under the rooms, and auto-hide, the
  second control surface and reset are in the side column. Swiping left on
  the stage opens it as well.
- Room: a third view, **Image control**. Only the room image is shown; the
  control surface stays away outside configuration, and devices are used
  through their spots on the image. Swipe to change rooms; double-tap an
  empty spot to see the zones and names for a moment.
- Energy on the phone: the house now stands large and sharp at the top
  instead of lying pale behind the numbers. The power right now sits in the
  sky of the picture; below it, solar, battery and grid stand side by side,
  each marked by a small coloured line instead of an icon.
- Energy: a home battery can be assigned under Services → Energy (charge
  level, optionally its power, signed like the Home Assistant energy
  dashboard). The phone shows the charge level with a small battery and
  whether it is charging or discharging; the grid value accounts for it.
- Energy: consumers that were saved with only their entity ID (such as
  `sensor.strom_pi_power`) now show their Home Assistant name, or else a
  readable form of the ID, on the phone and the wall panel.
- The iOS app follows all of this with its next TestFlight build.

## [0.45.0] - 2026-10-15

- Room on the phone: an eye button hides the room controls so only the room
  image remains; tapping it again brings them back, as in the iOS app.
- Cameras that Home Assistant cannot reach (offline, battery cameras without
  an image) are answered as unavailable instead of being recorded as Hauser
  server errors, so the error book no longer fills up with them.

## [0.44.0] - 2026-10-14

- A glance: room notifications occupy a scrollable sidebar on the right and
  follow the room controls' automatic-hide delay. A visible count opens every
  current message in full, including those beyond the first two on phones.
  Opening notifications no longer dismisses them.
- The native iOS app receives Home Assistant's `hauser_` notifications and
  dismisses them at their source. Its notifications list also works with
  Apple Home states, observed doorbells and due reminders; notification links
  now open that list. Open windows remain until closed, and completing a
  reminder updates its source.
- Room: Music Assistant players are discovered through Home Assistant in web
  and native media screens, with current title/artist, playback controls,
  volume and starting a track, album, artist or station by name. Music
  library browsing and queue editing are not part of this first integration.
- The notification guide includes a call-monitor automation for the last
  caller display. Recipe integration remains a recorded suggestion.

## [0.43.5] - 2026-10-12

- Notification rules show the current Home Assistant entity name. Condition
  notifications disappear when none of the rule's enabled triggers still match;
  missing readings do not count as resolution, and finished laundry stays for
  acknowledgement. Existing rules receive the updated blueprints on startup.
- The native iOS notification-rule editor now sends the server's trigger
  format correctly, including numeric thresholds and zero-delay state rules.
- Image processing on older x86-64 hosts now has a native baseline fallback
  for CPUs that cannot run the WebAssembly SIMD fallback either. Modern hosts
  keep their existing image library.
- Room selection and device controls now scroll together on web panels and
  in the native iPad app, keeping lower switches reachable when room cards
  take up the available height. Vertical touch scrolling also works when
  starting on the web room selector.

## [0.43.4] - 2026-10-11

- Scenes now keep checking actual device states until every remaining target
  is confirmed together. Only devices that still differ receive another command;
  temporary read or connection failures no longer end the check. New controls
  and Undo take precedence. Available in the web app and the native iOS app.

## [0.43.3] - 2026-10-10

- Dignity when things fail: older Linux x86-64 hosts no longer lose the entire
  app when the native image library crashes with an illegal instruction. Hauser
  tests the library in a separate process and uses portable image processing
  if that test fails. The portable library now matches the current sharp version.

## [0.43.2] - 2026-10-08

- A camera whose stream keeps breaking no longer floods Home Assistant: Hauser
  waits half a minute before opening the stream again instead of retrying many
  times a second, each time with a fresh still image. Cameras also pause while
  the standby screen covers them, while the room controls are hidden and while
  the browser tab is in the background; a camera popup still plays over the
  standby screen. The native iOS app stops fetching camera stills under its
  standby screen as well.
- The image library behind room pictures is updated to close a reported
  security issue in one of its components.

## [0.43.1] - 2026-10-06

- Dimming an Apple Home light no longer keeps ramping after you let go: the
  brightness glides briefly and then goes straight to the value you chose, even
  when a lamp answers slowly. Same in the web panel and the native iOS app.

## [0.43.0] - 2026-10-06

- Moving to another Home Assistant no longer means starting over: Settings →
  Maintenance now downloads one backup file with rooms, devices, scenes,
  settings, notification rules, family data and room pictures, and restores it
  on any Hauser server. Credentials such as tokens and PINs stay out of the
  file. Restoring keeps the previous state as a backup on the server and
  restarts Hauser by itself. Available in the web panel and the native iOS app.

## [0.42.0] - 2026-10-05

- Room-picture settings now offer “Define objects” directly in the web and native
  iOS apps. View existing objects, change their type and outline, or add shapes
  freehand or with a rectangle and draggable corners.
- Object edits also work with the bundled room pictures and remain associated
  with the selected room and picture.

## [0.41.0] - 2026-10-05

- Room and touch: drag window corners to fit slanted panes; existing polygon
  markings keep their shape when edited. Available in web and native iOS.
- Room: uploaded pictures now receive a local overcast version alongside evening
  and night. Older pictures get missing overcast versions after updating, while
  supplied versions stay intact. Each derived version can be restored from day,
  without an AI account or provider call.

## [0.40.0] - 2026-10-04

### Changed

- Room-picture settings now separate choosing a first picture from managing
  an existing one. The current picture, its creation method, window marking
  and lighting variants are available directly in the room editor. You can
  change the method or choose another picture from the same overview.
- Uploaded and manually created pictures expose their supplied and derived
  variants. Replacing a variant preserves the creation method and window areas.
  The native iOS app includes the same workflow in build 106 and saves Home
  Assistant picture changes to the shared server.
- Reworked the README and wiki around setup choices, everyday use and the
  differences between the web and native apps.

### Fixed

- Drawing window areas on a phone no longer triggers a room swipe.
- Apple Home brightness changes through the web bridge ease through every
  dimming step, including with slow devices. A newer command cancels the
  previous transition without switching the light back on.

## [0.39.2] - 2026-10-03

### Fixed

- Light commands use a short 300 ms transition, including brightness changes
  from sliders, scenes and undo. Controls respond immediately while supported
  Home Assistant lights fade smoothly to the new setting. Also available in
  the native iOS app with build 103.

## [0.39.1] - 2026-10-03

### Fixed

- Room-photo uploads accept streamed requests without Content-Length, while
  retaining the 12 MiB limit and rejecting incomplete transfers. The image
  wizard now shows the specific upload error instead of a generic message.
- The optional Tailscale sign-in reminder appears once per tunnel process
  instead of repeating every few seconds, without exposing its login URL.

## [0.39.0] - 2026-10-03

### Added

- Camera popups: long-press a camera to enable an automatic fullscreen view,
  choose a motion, person-detection or doorbell trigger, and set a duration
  from 5 to 120 seconds. The previous screen returns automatically; the
  popup can also be closed manually. Settings apply to this device.

## [0.38.1] - 2026-10-03

### Fixed

- **Grace under failure:** room sensors keep their correct room after Home
  Assistant areas are renamed, including humidity and CO₂.
- A delayed failure from an earlier device command no longer rolls back a
  newer setting. Home Assistant timeouts while reading a response are reported
  as temporarily unavailable.
- Sensor dropdowns remain readable on glass surfaces. Room and energy sensor
  lists can be searched by name or entity ID.
- Updated development dependencies to address the reported vulnerabilities.

## [0.38.0] - 2026-10-02

### Added

- **Rain shows on the lock screen icon, and outside pictures get the
  weather too.** The weather line on the lock screen shows sun, clouds, rain
  or snow as it is outside instead of a fixed sun. A new room setting,
  “Weather across the whole image”, lets rain and snow fall over a garden or
  terrace picture instead of only inside drawn windows — on the panel and in
  the iOS app.
- **CO₂ next to temperature and humidity.** Room settings have a CO₂ switch;
  the room tile on the panel, the value strip on the phone and the iOS app
  then show the room's CO₂ sensor in ppm.
- **Glass light.** Under Appearance → Card style a third option keeps the
  glass look with fewer effects, for tablets where the full glass stutters.

### Fixed

- Fuel stations from the Tankerkönig integration no longer appear under
  “Windows and doors” — their “open” sensor describes opening hours, not a
  door. A station that was already listed disappears on its own.
- When a stored lock screen layout made the clock or week wider than the
  screen, arranging it left the element hanging over both edges. Elements now
  shrink a step until they fit, on the panel and in the iOS app.
- The central temperature control explains how to get the room list back
  when a single climate entity is selected.

## [0.37.2] - 2026-10-01

### Added

- **Hauser tells you when it updates older room images.** After an update,
  Hauser recalculates the evening and night versions of room photos uploaded
  before 0.33. While it works, the room-image sign turns in the header and a
  notification says so; when it is done, a notification names the rooms that
  now darken in the evening. The same message appears in the iOS app, and the
  App log records how long it took.

### Fixed

- **Older photos in the image library darken too.** Photos that sat only in
  the library, not assigned to a room, kept their bright evening versions and
  stayed bright when picked again later.

## [0.36.1] - 2026-09-30

### Fixed

- **The demo always shows the latest release.** Anyone who had opened the demo
  before could keep seeing an older version, because the new one waited for a
  confirmation the wall panel layout never offers. The demo now switches to the
  new version right away.

## [0.36.0] - 2026-09-30

### Added

- **A new area in Home Assistant becomes a room.** When a new light, switch,
  cover or vacuum shows up in an area Hauser has never seen, or a device on
  the panel moves there, Hauser adds the room on its own and puts the device
  in it, without running the setup again. The room starts without an image.
  An area whose room you removed in Hauser does not come back by itself.

## [0.35.1] - 2026-09-30

### Fixed

- **Room settings on the wall panel read calmly.** The column with the room's
  devices now stands on the same solid surface as the settings next to it, so
  the blueprint lines no longer run through names and values. Room image,
  scenes and lamps stay at the top while only the settings below them scroll,
  with room to breathe in between. Hints under these entries use Hauser's own
  typeface instead of a typewriter font.

## [0.35.0] - 2026-09-29

### Changed

- **Room settings sit right under "Assign lamps".** On the wall panel and the
  phone, heating, temperature, humidity, windows and motion are shown directly
  below the room image, scenes and lamps entries instead of behind a separate
  "Advanced" page — the same layout as the iOS app.

### Fixed

- **Own room photos from older versions darken in the evening.** Photos
  uploaded before 0.33 kept their bright daylight look at night, because the
  evening and night versions were copies of the day picture. Hauser now
  recalculates them once on start, so old and new photos follow the time of
  day alike.

## [0.34.3] - 2026-09-28

### Fixed

- **Energy sensors save while the Energy page is switched off.** Choosing
  producers and consumers under Settings → Services → Energy failed with
  "Could not be saved" as long as the Energy module was off — which it is on a
  new installation. The selection now saves, stays when you switch Energy off
  and comes back when you switch it on.

## [0.34.2] - 2026-09-28

### Fixed

- **Panel settings survive a browser restart.** Panel width, rooms per row and
  "return to use mode automatically" now come back from the server when a
  browser starts with empty storage; before, the first start wrote the
  defaults over the saved layout, and the return-to-use timer lived only in
  the browser ([#28](https://github.com/ralleur/hauser/issues/28)).

## [0.34.1] - 2026-09-28

### Fixed

- **Room settings stay readable on the blueprint.** When you configure a room
  on the wall panel, the control column and the settings next to it now sit on
  solid surfaces, so the blueprint lines no longer run through names and values.
- **Two texts follow the interface language.** The width under Settings →
  Control surfaces and the open-window note on the lock screen were still in
  German in every language.
- **The lock-screen editor's bar is readable in the light theme.** The bar
  with Reset and Done and the size menu now sit on paper with black ink in
  every theme; before, the light theme drew them light with white text.

## [0.34.0] - 2026-09-28

### Added

- **Arrange the lock screen.** A long press on the lock screen (in edit mode)
  or "Customize the lock screen" under Settings → Ambient & Standby dips the
  screen into blueprint blue. Drag the clock, the weather, the week band, the
  shopping list and the notes wherever you like; tap one and a small menu next
  to it makes it larger or smaller in five steps — the menu jumps to the other
  side when it would run out of the picture, and back when there is room again.
  Every element keeps its natural anchor (the week band hangs from the bottom,
  notes hang from the top), so it grows the way it always did when events or
  items are added. Done keeps it, Reset brings the familiar layout back; deep
  night still shows only the dimmed clock in the middle. Stored on the device,
  like the other standby switches. The iOS app does the same on the iPad.

## [0.33.0] - 2026-09-27

### Added

- **The room-image wizard asks one question at a time and draws for free.**
  Do you have a ChatGPT plan? Sign in and everything is drawn for you. Do you
  have a Cloudflare account? Enter its ID and a Workers AI token, and the
  wizard draws within Cloudflare's free daily allowance; evening and night are
  derived from the day picture. Otherwise you draw it yourself: a workbench
  per room shows for day, evening with lights, night without lights and
  overcast whether a picture is there, only derived or missing, hands you the
  wizard's wording for each version to paste into Gemini, ChatGPT or Bing
  together with the input picture, and takes the finished picture back.
  Below it, mark the windows by dragging rectangles — rain and snow are drawn
  only there. The same four ways as in the iOS app.

### Changed

- **Your own photo has a night now.** An uploaded photo gets evening and
  lights-off derived from it, darkened, instead of staying bright at night.
- Pictures you drew or uploaded yourself are no longer sent to the image
  provider during the night runs for the overcast variant or the surfaces.

## [0.32.0] - 2026-09-27

### Added

- **Hauser speaks Dutch.** Choose Nederlands under Settings → Appearance →
  Interface language; dates and times follow, and a Belgian device gets the
  Belgian format. The translation was contributed by
  [@pservais](https://github.com/pservais)
  ([#26](https://github.com/ralleur/hauser/issues/26)); the texts for today's
  energy balance, the Apple TV remote and the quick-action bar were added
  since and still wait for a native review. The iOS app follows.

- **The room image gets the panel to itself.** In the layout menu (long press
  on the free stage) the control surface can hide itself after a time without
  touch, from 5 seconds to 2 minutes; the next touch brings it back. "All
  rooms" shows as many rows at once as you set and scrolls the rest, like the
  phone, instead of squeezing many rooms into thin strips. Both also in the
  iOS app.
- **Room setup on the panel stands where you control the room.** The room
  selection, scenes and tiles sit exactly where they are in the control
  surface, with the minus at the corner, holding to reorder and the plus tile
  to add; room image, lamps and settings stand beside them. Tapping another
  room in the selection sets up that room.

### Fixed

- **A thermostat you add to a room becomes its climate.** A thermostat added
  to a room without one, for example a Versatile Thermostat, used to stay a
  plain device tile. It now drives the room's climate tile, target
  temperature and central climate control. Heat pumps and boilers stay
  devices, as in the setup.
- **One unreadable calendar entry no longer breaks the standby week.** An
  event whose start Home Assistant sends in a form no date can be read from
  is left out, also from the stored calendar, instead of stopping the week on
  the standby screen and the agenda.

## [0.31.0] - 2026-09-27

### Added

- **Errors write themselves down.** Hauser keeps an error log: when something
  fails on the server, in the browser or in the iOS app, it notes where and
  what kind of error it was, and repeats only raise a counter. Entity IDs,
  names, readings, addresses and keys are removed before anything is written.
  The log stays in your home; the question mark offers to include it and
  shows every line first. Nothing leaves on its own.

### Fixed

- **One odd device no longer freezes the rest.** When Home Assistant sent a
  state the panel could not read, the whole update stopped and every device
  after it kept its old state. That device now drops out alone and lands in
  the error log.
- **Feedback from the iOS app without a Hauser server** goes straight to the
  inbox instead of opening a GitHub form.

## [0.30.2] - 2026-09-27

### Fixed

- **Notification rules reach Home Assistant again in the Add-on.** Saving a
  rule ended with "The rules were saved, but Home Assistant did not apply
  them" and a note that a bundled blueprint was missing. The Add-on image
  ships the built app only, and the server looked for its blueprints next to
  the source tree; it now finds them in the built app. The laundry assistant
  installed its automation over the same path and is fixed with it (#25).

## [0.30.1] - 2026-09-26

### Changed

- **The project page reflects the current release.** It now names both ways
  to Hauser — the panel for Home Assistant and the iOS app for Apple Home or
  Home Assistant, with the public TestFlight link — and walks through what
  changed since its last update: configuring on the blueprint and the mode
  mark in the title bar, the day's energy balance and the sun arc, the phone's
  quick bar, room sheet and in-place configuration, the week lying open on the
  standby map, presence dots on room tiles and the one type family. Every
  screenshot was retaken from this release and from the current iOS build.

## [0.30.0] - 2026-09-26

### Added

- **Shops can be renamed.** Under Settings → Content → Shopping list, open a
  shop and change its name; the bound list and the category order stay. Name a
  shop after the list it shows, for example one "Groceries" instead of three
  supermarkets.

## [0.29.0] - 2026-09-26

### Changed

- **Ticking off on the phone holds.** A tick no longer bounces back when the
  list happens to refresh at the same moment, and the ring is larger so it is
  easier to hit in the shop; the whole row still takes the tap.
- **Done items stay under their shop for a day**, struck through, and a tap
  brings one back if a finger slipped. The separate "Done" group at the end of
  the page is gone.

### Documentation

- The wiki explains how a **Bring!** list becomes a shop through the Home
  Assistant integration, and how any automation can **send its own
  notification** to the panel with a `hauser_` notification id.

## [0.28.0] - 2026-09-25

### Changed

- **The week on the standby screen lies open on the map.** Seven columns with a
  fine line per day instead of a dark glass band; times and today stand in dark
  amber on the light ground and in the gold of the logo at night.
- **Configuring happens on the blueprint.** On the panel, room configuration now
  sits on a blueprint of the room instead of a dark veil, and moving the notes on
  the energy screen turns the house into a blueprint — as on the phone and in the
  iOS app.

## [0.27.0] - 2026-09-25

### Added

- **Room tiles show who is around.** A green dot appears on a room tile while
  a motion or presence sensor in that room reports someone, and fades away
  once the sensor goes idle. Rooms with a camera carry a quiet camera symbol
  in the top left corner. Both appear on the phone and in "All rooms".

## [0.26.1] - 2026-09-25

### Fixed

- **Notification rules save again.** Saving a new rule ended in "Saving failed"
  as soon as the list held more than the laundry rule, and the rules were
  lost whenever the App restarted. The server now accepts the full list and
  keeps it with the other household data (#25).
- **A birthday no longer stops Hauser.** A birthday in the calendar whose name
  contains letters such as "Ł" or an emoji stopped the server on that day.

## [0.26.0] - 2026-09-24

### Added

- **Hauser follows Home Assistant.** Move a device to another area in Home
  Assistant and it moves to that room in Hauser, without reloading. A light,
  switch, blind or vacuum added to Home Assistant from now on appears in the
  room of its area. A device placed or hidden by hand in Hauser stays where
  it is until its area changes in Home Assistant.

### Fixed

- **Room settings are stored for the whole household.** The chosen room
  sensors, the phone action, central climate and several settings of the iOS
  app were kept only on the device that set them. They are now saved centrally
  and shown the same everywhere
  ([#24](https://github.com/ralleur/hauser/issues/24)).

## [0.25.0] - 2026-09-24

### Changed

- **Rain shows on the standby screen.** The rain over the standby screen was
  so faint that it showed on no screenshot. Its streaks are now clearly
  visible and still quieter than the clock.

## [0.24.1] - 2026-09-24

### Fixed

- **A heat pump is no longer taken for a room's heating.** Setup used to put
  a heat pump or boiler found in a room on its tile, power button and flow
  temperature included. Setup now skips heating plants, and the room
  configuration has a “Show heating” switch to hide a heater that is already
  there.

## [0.24.0] - 2026-09-24

### Added

- **A moving blind stops with a tap.** While a blind, shutter or motorised
  door is opening or closing, tapping its tile stops it, like the switch on
  the wall. Blinds whose slats can only open and close get two tilt buttons
  in the device detail.

## [0.23.2] - 2026-09-24

### Fixed

- **A room's chosen sensor shows on every device.** The temperature and
  humidity sensor picked for a room was stored centrally, but other browsers
  kept showing their old choice until their site data was cleared. Every
  device now picks up the household's choice on start
  ([#24](https://github.com/ralleur/hauser/issues/24)).

## [0.23.1] - 2026-09-24

### Fixed

- **Remove a person from the reminders board.** The example residents could
  be renamed but never removed; the person dialog now has “Remove person”.
  Their reminders stay in the list and move to the shared ones; the last
  person stays, as in the iOS app. A pencil beside each name shows that a tap
  renames it. Reported in the simon42 forum.

## [0.23.0] - 2026-09-24

### Added

- **The TV gets its remote.** When Home Assistant places a remote beside a
  media player, as it does for an Apple TV, the device detail shows a
  direction pad with select in the middle and back, home and play below —
  as in the iOS app.
- **The phone greets on special days.** Birthdays, holidays and the first
  snow now show their line at the top of the phone's home, with the same
  confetti as the panel; the rooms move down instead of being covered.
- **Adding a device celebrates.** In the room configuration the plus springs
  into a gold check, six sparks fly up, and the device moves into the room.
- **Today's energy balance.** A second tap on “Today” lays the day's balance
  beside the energy wall: the share of your use that came from your own sun,
  the gap the grid filled, and two bars on one kWh axis — produced above,
  consumed below, the part used at home bridged in gold. A tap on a piece
  shows its paper note with share and whether it was measured or calculated.
  On the phone the balance sits directly under “Today”. It reads the daily
  meters Hauser knows or, without them, the meters of Home Assistant's energy
  dashboard since midnight — as in the iOS app.
- **The sun above the energy.** An arc between sunrise and sunset sits under
  the day's figures on the panel and beside the title on the phone: the path
  already walked drawn through, the one ahead dotted, flatter in winter; under
  clouds only a pale shimmer, at night the sun rests. Hauser asks the weather
  service it already uses for the times.
- **The house follows the weather.** When it is cloudy the energy screen
  shows the overcast version of the house (the placeholder brings its own, a
  house drawn by the assistant has one too), and rain and snow fall over the
  whole picture — as in the iOS app, and switched off with the weather on the
  stage.
- **The phone's quick bar is yours.** Its four fields are filled in “Adjust
  home” (swipe left on the rooms): all off, the central temperature over two
  fields or compact as a thermometer with the home average, and your own
  buttons. A button of your own runs its steps with one tap — scenes and
  devices from any room (toggle, on or off) and vacation mode — and a long
  press in edit mode opens its sheet with name, symbol and steps. The fixed
  vacation button is gone; a device you had placed on it becomes a button of
  your own, and a running vacation keeps its button so you can end it.
- **Cameras together.** When a room has several cameras, they sit side by
  side in one split view with fine seams; with an odd number the first takes
  the full width. The room configuration switches it off, and the iOS app
  reads the same switch.
- **Rename a room where you set it up.** A tap on the room's name (with the
  pencil) in the room configuration renames it for the whole household — on
  the panel, the phone and in the iOS app, which now uses the same way on a
  Home Assistant server instead of keeping the name on one device.
- **Cameras before or after the tiles.** A camera stands above the device
  tiles when it comes before the first tile in the room's order, otherwise
  below — as in the iOS app. On the panel you drag it in the device list; in
  the phone's room configuration an arrow on the camera card moves it.

## [0.22.1] - 2026-09-24

### Fixed

- **Energy totals appear.** Week, month and total now count the meters Home
  Assistant already knows from its energy dashboard: grid import and feed-in,
  solar and battery; house consumption is balanced the way the dashboard does
  it. Setup never recorded such meters, so “Total” stayed empty in every home
  and week and month were estimated from power sensors. Where no dashboard is
  set up, the note under “Total” now says what it needs.

### Changed

- **The mode switch in the title bar is the h signet.** In use mode the h
  stands alone; in edit mode the gold dot sits on it. Switching lets the dot
  spring in or pop away, and the new mode shows beside the h for two seconds.
  The h takes the colour of the date on the left, light over an image and dark
  on a plain surface, on the panel and in the iOS app.

## [0.22.0] - 2026-09-24

### Changed

- **Hauser writes in its own hand.** One type family now carries both voices:
  Alegreya Sans for everything you operate, Alegreya for the paper — the
  greeting in standby, notes, the calendar sheet and the energy figures. It
  replaces Inter and Instrument Serif on the panel, the phone, the iOS app, the
  project page and the docs. Figures stand upright and keep their width, so a
  clock or a slider value never jumps; every letter of the six languages is
  part of the font.
- **The wordmark “hauser” beside the h signet is drawn from the same family**
  and no longer depends on a font installed on the viewer's device.

### Fixed

- **A sensor tile keeps its value at full size.** A value whose box was a
  fraction of a pixel wider than a whole pixel counted as too long and shrank
  to the smallest size, for example “21 °C”.
- **The media screen stays up when a player vanishes for a moment.** While
  Home Assistant reloads an integration, the player shows as unavailable
  instead of taking the screen down; the climate stepper ignores a thermostat
  it cannot see.
- **The iOS app works with a Docker installation, too.** Adding devices to a
  room and camera pictures reached Home Assistant through Hauser only in the
  Home Assistant app setup; with Docker the iOS app could not assign a device
  and cameras stayed black. Hauser now uses the connection from setup for both.

## [0.21.5] - 2026-09-24

### Fixed

- **A room called “Constructor” no longer stops Hauser from starting.** The
  name became an internal ID that every JavaScript object already carries, and
  the start check failed with “The safe check failed”. Setup now gives such a
  room a safe ID, and the configuration check refuses reserved IDs.
- **Lists with two entries sharing one ID keep working.** A CalDAV list can
  hand out the same ID twice; the notes page, the standby screen and the phone
  then failed with “each_key_duplicate”. The second entry gets a counter, and
  ticking it off still reaches the right item — in the web app and the iOS app.
- **The scene editor survives a room without scenes**, and a device that
  disappears while its command is under way (Home Assistant reloads an
  integration) no longer takes its tile or detail down.
- **Turning on Media without any media player now says so** instead of just
  failing: “No media player found. Media can be turned on after ‘Reload rooms
  and devices’.”

### Added

- **Stress house, big round.** Every device type with every kind of broken
  data, forty more rooms, floods of events and list entries, every button and
  slider inside every device detail, scenes and room editing, a Home Assistant
  that restarts and drops devices, an empty house, an all-unavailable house and
  an imperial one — in the web app and the iOS app. The fixes above are what it
  found.

## [0.21.4] - 2026-09-24

### Fixed

- **A device detail opens even when Home Assistant lists an option twice.**
  A robot vacuum reporting its fan speeds as `quiet, quiet, max` took the whole
  view down with "each_key_duplicate"; modes, presets, sources and speeds are
  now listed once each.
- **The notes page survives a reminder with an unreadable due date.** A to-do
  item whose due value is not a date stopped the page with "Invalid time
  value"; such an item now simply shows no due date.
- **Energy settings save when a sensor also appears in a room.** Choosing the
  power sensor of a plug that is already shown in its room as a consumer was
  rejected as a duplicate and the save ended in an error. Energy only reads a
  sensor, so it may appear in a room as well; the same sensor twice within the
  energy selection is still refused.

### Added

- **Stress house.** Before each release the built app is set up against a
  simulated Home Assistant full of real-world pitfalls and clicked through
  end to end — every room, every tile with its detail, every tab and settings
  section, the standby screen and the phone layout. The three fixes above are
  its first findings.

## [0.21.3] - 2026-09-24

### Fixed

- **Home opens again when two devices share a name across domains.** Hauser
  named its device tiles after the entity ID without the domain, so
  `switch.hallway` and `light.hallway` (Home Assistant's "switch as light"
  helper) or `media_player.tv` and `remote.tv` got the same name. In one room
  the home screen then failed with "each_key_duplicate", and tapping one tile
  could switch or open the other device. The second device now keeps its full
  entity ID.

## [0.21.2] - 2026-09-23

### Fixed

- **A house picture from the assistant turns grey on cloudy days as a house.**
  The overcast version that follows every new picture set was drawn with the
  room recipe, so an exterior set could come back as a room. It now keeps the
  recipe of the job that created the set, and the nightly run and the manual
  button recognise the picture assigned to "Outside (energy)".

## [0.21.1] - 2026-09-23

### Fixed

- **The standby city map is generated again.** One of the two public map
  services Hauser asked no longer answers and held every attempt for a minute
  and a half; the other turns requests away for a few seconds when it is busy.
  Generation then always ended in “The map service is currently unreachable”,
  whatever location you chose. Hauser now asks the working service first, falls
  back to a second mirror, and tries once more after a short pause before it
  gives up (#22).

## [0.21.0] - 2026-09-20

### Added

- **On the phone, configuring a room happens where you control it.** Opened
  from the room sheet, the configuration no longer flies in: the room picture
  dissolves in place into its own blueprint — fine light drawing lines on
  blue, computed from the picture you already have, so it works with your own
  photos too. The room name, the scene bar, every device tile and the climate
  card stay exactly where they are when you operate them.
- **Arrange devices by moving their tiles.** Hold a tile for a moment and drag
  it to its new place; the others glide aside. A small minus on the corner
  takes a device out of the room, and a dashed tile after the last device
  opens the search with its category filters. The quick setup entries follow
  below the devices.
- **A scene can set a colour per lamp.** The scene editor now offers colour
  next to brightness and colour temperature, with the same swatches as the
  lamp detail; “White” hands the lamp back to its colour temperature. Only
  what a lamp can do is shown.
- **On the phone, a room's readings sit under its name.** Temperature,
  humidity and presence stand above the scenes instead of taking up device
  tiles — each only if the room measures it, and the presence circle glows
  green when someone is there. The climate controls live behind the
  temperature: a tap opens them, and a switch there puts the card back with
  the devices for rooms that want it.
- **On the phone, the energy page shows your house.** The picture from the
  wall panel lies pale behind the figures — your own house if you assigned
  one — and fades towards the bottom, so the curve and the consumer list stay
  calm.

### Fixed

- **The hint under “Generation” says which sensor is meant.** It is what your
  solar system produces right now, not the feed-in to the grid; Hauser derives
  feed-in and draw from generation and consumption itself.
- **The laundry notification can be set up on any installation.** Validating
  or saving the washer or dryer ended in “Laundry setup failed. Try again from
  a new preview.” wherever Hauser was opened under an address of its own —
  which is every add-on installation. The setup now accepts the address it is
  served from, like every other part of the settings (#21).
- **Saved energy sensors stay visible as saved.** After saving the selection
  under Services, the page went back to the old selection as soon as you left
  and returned, so it looked as if nothing had been saved. The selection now
  stays as you saved it, and the reload hint appears, because the energy page
  picks up new sensors on the next start.
- **A room you created yourself can pick its sensors.** Under “Advanced”, a
  room only offered sensors from the Home Assistant area with the same name —
  a hand-made room has none, so the list stayed empty or showed a single
  sensor. The temperature and humidity pickers now also list every other
  sensor in the home, and sensors and contacts you place in the room count as
  the room's own.

## [0.20.6] - 2026-09-20

### Changed

- **Removing a device from a room is an animation, not a jump cut.** The row
  puffs up for a moment, tips out of the list to the right and fades, and the
  rows below glide up into the gap once it is gone.

### Fixed

- **Dragging devices into order no longer shivers.** The row now hangs on the
  finger while its neighbours glide aside, and it changes places only after
  passing a quarter of the next row — before, the list swapped back and forth
  along the edges of the rows it was measuring against.
- **The bottom bar on the phone sits evenly.** The navigation pill kept less
  room above it than below, so on phones with a home indicator it looked
  pushed towards the quick actions. Both gaps now match on every device.

## [0.20.5] - 2026-09-18

### Fixed

- **A hand-written Compose file gets the picture wizard.** The image now sets
  the room-image boundary (`HMI_ROOM_IMAGE_AUTH_MODE=direct`) itself. A Compose
  file that does not copy the shipped environment answered
  `503 AUTH_BOUNDARY_MISSING` to every room-image request, so saving the
  OpenAI key and opening the wizard failed
  ([#19](https://github.com/ralleur/hauser/issues/19)).
- **The ambient texts stop asking for a model that is not there.** Hauser only
  calls a language model for the standby lines when `HMI_AMBIENT_HOST` or
  `HMI_AMBIENT_PORT` names one. Without it the route answers `204`, the lines
  come from the built-in generator as before, and the browser console no
  longer shows a `502` on every refresh
  ([#19](https://github.com/ralleur/hauser/issues/19)).
- **A fresh add-on install no longer hits a missing image.** The add-on
  manifest on `main` named the new version before its image was built, so for
  the first hour after a release the Supervisor failed with
  `manifest unknown` ([#20](https://github.com/ralleur/hauser/issues/20)).
  The release now publishes the image first and makes the version visible
  afterwards.

## [0.20.4] - 2026-09-17

### Added

- **The energy screen takes your own photo directly.** Long-press the picture
  in configure mode and choose "Choose custom image" — the photo becomes the
  house picture and lands in the library, just like a room picture. Until now
  the energy screen only offered the picture wizard or an image already in
  the library.

## [0.20.3] - 2026-09-17

### Fixed

- **A calendar with a recurring event opens again.** Every occurrence of a
  series carries the same identifier, and the calendar view stopped with
  "This view failed to build" as soon as a series had more than one date in
  view. Each occurrence now has its own identifier.

## [0.20.2] - 2026-09-16

### Changed

- **The project page now opens with both views of the home screen.** The hero
  shows real captures of the two home views — one room filling the panel, and
  all rooms as tiles — with the tile view after dark, where a room with a lamp
  on carries its lit picture and a room with every lamp out carries the dark
  one. A new section walks through the tile view by day and after dark, and
  every screenshot on the page was retaken from the current release.

### Added

- **Every release now shows up as a GitHub release**, with its changelog
  section as the notes. Watching this repository for releases tells you that a
  new version exists — until now only a tag was pushed, which notifies nobody.
  Home Assistant add-on installations were unaffected: the Supervisor has
  always shown the update inside Home Assistant.
- **A moving `latest` image tag** for Compose installations that would rather
  follow the newest release than a fixed number. Pre-releases are excluded, and
  `compose.yaml` keeps pinning an exact version by default.

### Fixed

- **A view that fails to open now says so.** Until now anything that went wrong
  while a view was being built left "Loading view." on screen forever, with the
  cause visible only in the browser console. The view now shows what went wrong
  and offers to try again, and the rest of the panel keeps working. Retry
  buttons in the shell follow the interface language again.
- **A damaged job no longer switches the picture wizard off for good.** One
  incoherent record kept the job store closed, and inside the add-on nobody can
  reach the folder to clear it, so the wizard answered 503 forever. The folder
  is now set aside once — nothing is repaired, nothing is deleted — and the
  store opens empty.
- **A well-metered house can save its energy selection again.** The server
  accepted at most 64 consumers, while the settings page pre-selects every
  power sensor Home Assistant reports — a home with more of them could never
  save the page. The limit is now 256, and going past it says so instead of
  failing silently.

## [0.20.1] - 2026-09-15

### Fixed

- **An all-day event fills one day again, not two.** Calendars that deliver a
  plain date — iCloud and CalDAV among them — were read as UTC, so a birthday
  stretched into the next morning and showed up as a multi-day bar.
- **Picking your own room picture now says when the device cannot do it.**
  Where the image library does not run, the upload said only that the picture
  could not be saved; it now names the reason, and the log records what really
  failed instead of a follow-up error.
- **Document storage can be set up from the panel.** Its PIN used to come from
  the Mac keychain only, so in the add-on the storage stayed locked forever.
  PIN, address and token now live together under Settings → Services.
- **Sheets on the phone come and go like app cards.** The room sheet, the More
  sheet and the room setup now slide out in the same time and curve they slide
  in, without fading; after a swipe the sheet continues from where your finger
  let go instead of jumping back up first.

## [0.20.0] - 2026-09-14

### Changed

- **The demo greets you with the standby screen.** The first visit in a
  browser tab opens on the clock over the street map, the way a panel rests
  on the wall; a tap wakes it. A reload in the same tab starts on Home. Real
  installations are unaffected, there the standby timer decides.
- **The demo's street map is Cologne**, five kilometres around the cathedral,
  drawn from OpenStreetMap data like a real household's map.
- **Wiki pictures of the mode mark** in the title bar are current again.

## [0.19.1] - 2026-09-14

### Fixed

- **The room goes dark again when the last lamp goes out.** Since blinds,
  switches and vacuums joined a room's device list, an open blind counted as
  "on" and kept the evening picture lit. Only lamps decide now.
- **Room pictures on the phone in the demo.** The demo build skipped the
  phone-sized picture variants, so the room tiles stayed empty.
- **Screenshots and wiki refreshed** for the glass card style, the question
  mark in the title bar and the phone's frosted-glass controls.

## [0.19.0] - 2026-09-14

### Changed

- **A new house on the Energy screen.** The bundled placeholder — shown
  wherever no exterior picture of your own is assigned, and in the demo — is
  now a modern two-storey family house with a solar roof, day and night, with
  the notes for solar, load and grid placed on it.

## [0.18.6] - 2026-09-14

### Changed

- **Home, Shopping list and Reminders are the phone's default bottom tabs.**
  Everything else waits under "More". A device with its own saved order
  keeps it.

## [0.18.5] - 2026-09-14

### Fixed

- **The active tab's highlight on the phone now encloses icon and label**
  completely; on Energy and Shopping list the icon used to peek out at the top.

## [0.18.4] - 2026-09-14

### Changed

- **The phone's off button is all symbol.** The power sign now nearly fills
  the button.
- **The "off" safety prompt is off by default.** New installations switch
  everything off without asking; the prompt with its cut-off time can be
  turned on under System → Interface & controls. A device that already had
  the prompt on keeps it.

### Fixed

- **Climate pill and "All quiet" sat in the middle of the panel's footer.**
  In the published build the footer's base stylesheet won over the panel
  layout, so the climate control and the security status crowded around the
  navigation instead of standing at the left and right edge; the workshop
  build had the stylesheets in the other order and did not show it. The panel
  footer rule now wins regardless of bundle order, and the status pill keeps
  its rounded glass shape.

## [0.18.3] - 2026-09-14

### Changed

- **The off button on the phone shows only its symbol.** The word below the
  power sign is gone; the button keeps its size and its spoken label.

## [0.18.2] - 2026-09-14

### Changed

- **Phone controls now match the panel's footer exactly.** Off, climate,
  holiday and the navigation pill carry the same dark frosted glass as the
  panel's pills, with light text, a faint bright edge and the same amber
  highlight behind the active tab — identical in light and dark mode, as on
  the panel. The calm taupe ground behind the room tiles stays.

## [0.18.1] - 2026-09-14

### Fixed

- **Stronger contrast on the phone controls.** Text and icons on the quick
  actions and the navigation pill are darker and more opaque, the frosted
  glass a little lighter and denser, and the active tab a deeper amber, so
  labels read clearly on the taupe ground. Dark mode gets the same lift.

## [0.18.0] - 2026-09-14

### Changed

- **A quieter phone home.** In the glass card style the room tiles now stand
  on a calm, warm taupe ground instead of the panel's relief: no waves or
  diagonals between the tiles, only a very soft shift of light across the
  bottom of the screen that stays put while you scroll. Off, climate, holiday
  and the navigation pill share one matte frosted glass — a lightly tinted
  warm grey with real blur, a faint bright edge and a soft shadow — with dark
  warm-anthracite text and icons; minus stays blue, plus and off red, the
  active tab amber. The two control rows sit a little closer to the tiles and
  are slightly more compact; every touch target stays at least 48 px. Dark
  mode gets the same material in its dark form. Panel and standard card style
  are unchanged.

## [0.17.1] - 2026-09-14

### Fixed

- **The phone navigation pill is frosted glass too.** In the glass card style
  it now carries the same dark pane as the quick actions and the panel's
  footer pills, on every phone screen, so it no longer stands out as a light
  bar under the dark glass above it.

## [0.17.0] - 2026-09-14

### Changed

- **The phone home stands on the same relief as "All rooms" on the panel.**
  In the glass card style the room tiles no longer sit on a flat surface: the
  quiet light or dark relief from the panel lies behind them, and the quick
  actions row — off, climate, holiday — becomes the same frosted glass as the
  panel's footer pills. The tiles scroll on behind it and shimmer through
  instead of vanishing into a solid band. Other phone screens are unchanged.

## [0.16.1] - 2026-09-14

### Fixed

- **Swiping down closes the room sheet on the phone again**, even when the
  room has so many devices that the list scrolls. As long as the list sits at
  the top, dragging down pulls the sheet away; further down, the same movement
  scrolls the list.

## [0.16.0] - 2026-09-14

### Added

- **Say something, right from the panel.** A question mark at the top right,
  next to the standby button, opens a small sheet: "Something is wrong" or
  "I would like …", a sentence, and an optional reply address. No GitHub
  account, no forum. The sheet shows what travels along — version, language,
  screen size, connection state — before you send. Messages go to a postbox
  that the maintainer empties regularly; the demo shows the sheet but sends
  nothing. Available in all six languages.

## [0.15.2] - 2026-09-13

### Added

- **Device groups.** Lights, fans, plugs and blinds that always act together
  can become one tile: the device detail has a group button at the top right
  instead of the close cross. Pick two or more devices of the same kind from
  any room; the group takes the place of the device it was created from, and
  every touch — on, brightness, colour, speed, position — goes to all members
  with the same value. The group can be edited or dissolved later; dissolving
  puts the original device back in its place. Groups live in Hauser only.

### Fixed

- **Lights that are on look on again.** In the glass card style, the icon
  chip of a light tile stayed grey on the phone room sheet and on the wall
  panel, and dimmed lights no longer showed their level. The chip now turns
  warm when the light is on and follows the brightness, and the same applies
  to the symbol and power button in the device detail.
- **The layout sliders on the wall panel move smoothly again.** Dragging the
  "Adjust size" or "Rooms per row" ladder in the layout menu no longer
  stalls: the swipe that closes the menu had been grabbing the finger.
- **Scene pills wrap instead of shrinking.** In the glass card style the
  scene pills used to squeeze and cut off names; now they fill the row and
  move to a second row when the control surface is too narrow, following its
  width like the device grid.

### Changed

- **The layout menu is a glass sheet.** In the glass card style the layout
  menu on the wall panel now uses the same frosted dark sheet as the other
  overlays, with its setting cards as light glass on top.
- **Hauser opens in the language of the device.** Without a stored choice the
  interface follows the browser or tablet language, and when none of the six
  languages fits it now shows English instead of German. The language picked
  in the settings — or during the setup wizard — still wins and is remembered
  on that device.

## [0.15.1] - 2026-09-12

### Fixed

- **Panel pages were empty in the published build.** In 0.15.0 the stage on
  the wall panel shrank to the height of the top bar, so every page showed
  only the background relief; the workshop build had the stylesheets in the
  other order and did not show it. The frame rule now wins regardless of
  bundle order.

## [0.15.0] - 2026-09-12

### Added

- **Standby: the calendar can stay off the lock screen.** A new switch
  under Appearance › Ambient & Standby, "Calendar in standby", removes the
  week strip from the bottom of the lock screen; the wall then shows only
  the clock, the weather and the notes. It stays on by default.

### Fixed

- **Room setup: adding a device.** Tapping into the search field now
  glides it to the top instead of jumping. Tapping a type filter such as
  "Light" works on the first tap; before, on the wall panel the list
  snapped back and the tap was lost.

### Changed

- **Navigation: the marker glides.** The small gold underline under the
  active tab is gone. A warm, translucent pill now sits behind the active
  tab and glides to the next one when you switch, with a light spring that
  overshoots a touch and settles; the icon of the active tab lifts slightly
  and takes the gold. Reduced-motion settings switch without movement.
- **Pages move with the bar.** Switching pages is no longer a plain
  crossfade. The new page comes in a short way from the side its tab sits
  on, slightly smaller, and settles; the old page eases out to the other
  side. Going back runs the other way. Reduced-motion settings switch
  without movement.
- **Home comes back without a white flash.** Returning to Home from
  another page shows the room picture from the first frame; before, the
  stage was briefly white while the picture was decoded again.
- **Touch: the lock screen opens instead of cutting.** A tap on the
  standby screen no longer jumps to the next frame. A soft ring runs out
  from the finger across the glass, the clock lifts a touch and blurs, the
  week strip and notes sink away, and the pane fades to reveal the room
  beneath — just under a second, only transform and opacity. Locking is the
  mirror image: the pane settles in, the clock comes into focus from a soft
  blur, the week strip and notes rise into place, and from the standby
  button the ring runs the other way, drawing in to the button. The idle
  timer settles the pane quietly without a ring. Reduced-motion settings
  skip all of it.
- **Phone shopping list: a quiet checklist.** The items carry the page now,
  the interface steps back: a smaller title, store names as compact
  headings with a small count beside them, items in regular weight, no
  dotted separators. Every row is 48 px tall and tappable in full, with an
  empty circle on the left that fills in the warm accent when you tap it;
  the item then moves to a "Done" group at the bottom, where the store
  stands small beside it and a tap brings it back. A short strip above the
  navigation offers "Undo" for five seconds after each check. The plus
  buttons are gone: each store ends in a muted "Add item" row that turns
  into the input on tap and stays open for the next item after Enter. The
  sync time sits small under the title; only an error stands out. Sort and
  refresh are two icons in the top right, the active sort state in amber.
- **Phone energy: the story behind the numbers.** The page opens with the
  power right now, large and in watts when it is small, with solar and grid
  draw or feed-in as two quiet lines beneath. The period control belongs to
  the history below it, one row "Today · Week · Month · Total" with the
  concrete range underneath, so it is clear that the live value stays
  untouched and that "Week" is the last calendar week. Today shows the load
  curve of the day as a warm area over 24 h and a comparison with yesterday
  up to the same time of day; the other periods show compact numbers. A
  "Top consumers" list with thin share bars replaces the two navigation
  buttons; "Show all" unfolds the rest. Several plugs are called "Measured
  devices", not a house load. The status sentence, the "grid flow" line
  and its orange dot are gone; only missing data gets a note.

## [0.14.0] - 2026-09-11

### Added

- **Home: All rooms at a glance.** The layout menu (long press on the free
  area) gains a "View" pill: "Full screen" is the familiar stage — one room
  picture, the room picker at the top of the control surface. "All rooms"
  drops the picture and shows every room as a tile, the same tiles as on the
  phone, with picture, name and light status. The room picker leaves the
  control surface, which now belongs entirely to scenes and devices and
  carries the room name as its heading; a tap on a tile brings that room into
  the control surface. "Rooms per row" sets the tile columns. In portrait the
  tiles take the upper band, the controls the full width below.
- **Home: swipe the control surface away.** A swipe to the left on the
  control surface lets it fly out of the picture, in "Full screen" and in
  "All rooms" alike. The stage then belongs entirely to the room picture or
  the tiles, which spread to the full width. The next touch anywhere brings
  the surface back; a tap on a tile also selects that room.
- **Phone home with many rooms.** The room grid scrolls again and fades
  softly behind the quick actions (off, climate, custom button), which stay
  put at the bottom; before, with many rooms the tiles ran underneath them.
  A swipe to the left on the grid pulls a side sheet in from the right,
  following the finger like the control surface on the panel; it holds
  rooms per row (1 to 3) and a switch to hide the quick actions, and a
  swipe to the right drags it out again. Both are per device, like the
  order of the bottom bar.
- **Blinds come along from setup.** Covers (blinds, shutters, awnings) are
  now a role of the household: the setup wizard hands them over into their
  rooms like lights and switches, the household config accepts several per
  room, and the command contract carries open, close, stop, position and
  tilt. Before, a cover only reached a room through "Add device". The cover
  sheet (open, stop, close, position ladder, tilt) is unchanged; the demo
  shows one in the living room.
- **Sensors pick their symbol.** A sensor without a symbol of its own gets
  one from what it reports: device class first, then unit, then words in
  its name or entity id, German and English. Battery, temperature,
  humidity, power, energy, voltage, current, CO₂, air quality, pressure,
  light, rain, wind, water, gas, signal, motion, door, window, smoke and
  more; the neutral gauge stays for everything else.

### Changed

- **Layout menu without ceremony.** The layout menu has no title and no
  "Apply" or "Cancel": every setting takes effect the moment it is set. It
  stays on the right and flies in from there, over everything instead of
  pushing anything aside, and leaves on a swipe to the right, a tap beside
  it or Escape. A swipe from right to left anywhere on the stage opens it,
  in "Full screen" and "All rooms" alike. "Reset to default" sits top
  right. The second control surface is added at the bottom and gets a fixed
  room of its own, chosen right there.
- **Climate is a tile.** In the control surface the thermostat shrinks to a
  tile the size of a device, showing target and current temperature and the
  mode as its symbol, with no controls of its own. A tap opens the familiar
  thermostat as a sheet: current, setpoint with minus and plus, modes. A long
  press opens the tile's settings: "Controls in the surface" brings the
  thermostat card back into the control surface, "Tile shows" picks target,
  current or both, and "Step size" sets 0.5° or 1° per tap.
- **Sensor tiles show the value.** A sensor added to a room shows only its
  reading on the tile, not its name. The device sheet has a switch "Name on
  the tile" for the cases where the name matters.
- **Room: the thermostat never wraps.** When the controls stay in the
  surface, the climate card is one light control surface at full card width:
  the current temperature sits as a line above the setpoint, the frame around
  the controls is gone, and the setpoint takes three fifths of the card at
  hero size, the modes the rest. At any control-surface width the card keeps
  its shape instead of breaking into two rows.
- **Gestures forgive a crooked finger.** A horizontal swipe no longer breaks
  off when the finger drifts, and it claims the touch before the browser
  starts to scroll. Pressed feedback on a tile waits a moment on touch, so
  starting a scroll on a tile no longer makes it pop.

## [0.13.0] - 2026-09-10

### Added

- **Raum: The device search offers the types a room can take.** A tap into the
  search field brings up pills — Light, Switch, Climate, Sensor, Media and the
  rest — each with the number of devices behind it. One pill lists that type
  without typing a word; the first thirty, with the remainder named below. As
  soon as a letter is typed the pills step aside and the name search takes over.
- **Telefon: The pairing card opens the app on the same device.** Whoever
  reached Hauser from their phone's browser cannot scan a QR code that sits on
  the same screen. The card now offers "Open in the app on this device" — the
  same link the code carries, as a handle. The wall panel does not show it.

### Changed

- **Raum: The stage fades softly from room to room.** The slow dissolve that
  used to happen only when the last light in a room went out now carries every
  room change, whatever time of day it is. Switching a light on inside a room
  stays instant — that is a switch, not evening light.
- **Einstellungen: New symbols for the picture assistant and the catalogue.**
  Both are drawn now instead of pixelled: no background, crisp at any size, and
  they follow the theme like the Hauser mark — light on dark, dark on light,
  with the spark and the sun staying gold.
- **Everywhere: No more scrollbars.** Hauser is swiped and scrolled, not dragged
  by a bar; with a mouse attached the system used to draw fixed bars through
  cards and glass surfaces. Scrolling is unchanged, only invisible.

### Fixed

- **Raum: The climate card no longer breaks into two rows when the column gets
  narrow.** The current temperature, its symbol and its label shrink instead, so
  the target temperature stays beside them.
- **Raum: The first tap on a suggestion in the device search arrives.** Leaving
  the search field gave back the room the sheet had borrowed for the keyboard
  and moved the section between press and release, so the tap landed beside its
  target.

## [0.12.1] - 2026-09-10

### Fixed

- **Raum: One damaged picture set no longer keeps the house from starting.**
  After an update across several versions, a set could lose its files while the
  phone derivations were being added, leaving its catalogue entry in the old
  shape. The store then refused the whole catalogue and the service never came
  up. A set that breaks the contract is now passed over — the room falls back to
  its default picture, the house starts, and the log names what was skipped. The
  contract itself stays closed: what is passed over is not served and not
  written back.
- **Raum: The overcast variant survives the derivation.** Adding the phone
  derivations replaced the set's directory and dropped the optional overcast
  picture, which costs its own model call. It is now carried across.

## [0.12.0] - 2026-09-09

### Added

- **Telefon: The quick action next to the temperature can carry any device.**
  A long press on the vacation button opens an editor: pick any switchable
  device and it sits behind the button from then on. Its icon is suggested from
  the device itself, unless you deliberately choose your own from the icon
  catalogue.
- **Telefon: The bottom bar can be arranged from the More menu.** Two groups —
  the four slots of the bar and everything else. Drag a category upwards past
  the heading to pin it below, or use plus and minus. "More" holds the last
  slot as long as something sits behind it.
- **Raum: The house hands its room pictures to devices without AVIF.**
  `GET /api/app/hero/:roomId/:variant?w=` returns the room's picture as JPEG in
  the requested width — the same picture the wall shows, for the watch.
- **Raum: The demo has a ceiling fan.** It hangs in the bedroom and shows the
  fan panel with speed, presets, oscillation and direction.

### Changed

- **Blick: The day theme stands on a warm ground.** The light surfaces move
  from a cool grey to a warm off-white, and cards, overlays and borders follow
  the same undertone so the surfaces no longer look patchy against each other.
  The night theme is untouched.

- **Telefon: The More menu shows every category, not only the hidden ones.**
  It carries a grip, a subtitle and one button that leads to arranging the bar.
  Whoever looks here should not have to know where something hangs first.

- **Telefon: A swipe down closes a room from anywhere in it.** The gesture used
  to hang on the sheet's head alone; it now works across the whole surface,
  and the room editor has it too. While the content is scrolled, the downward
  movement belongs to the list again.

- **Telefon: The device search lifts itself above the keyboard.** Tapping the
  search field in a room's device list moves it to the top of the panel, so the
  suggestions stand above the keyboard instead of behind it.

- **Telefon: Energy reads as a page.** Four periods sit in two rows with the
  active one marked, the switch between flow and consumption says in plain
  words where it leads, and the readings fill their row instead of standing
  narrow at the edge.

- **Telefon: The shopping list fits a phone again.** Title and tools shared one
  line and pushed the page sideways on a 390 pixel screen; they now wrap and the
  page can no longer be scrolled horizontally.

- **System: The settings list sits evenly again.** The hairline between two
  groups carried eight pixels of air that fell to one side, so the last entry of
  a group sat visibly too high and the first of the next too low.

- **System: Without a Hauser server, the settings only show what works.** On the
  Apple Home path there is no Home Assistant, Jellyfin, Paperless, family data
  or room picture assistant — those sections and entries now stay out of the
  list and out of the search instead of reaching into nothing.

- **System: The settings load one section at a time.** The screen used to bundle
  all fourteen sections into a single 416 KB chunk that the companion app could
  not load at all; it is now 17 KB plus the section you open.

- **Steuerung: The first tap after opening the app arrives.** Until the socket
  stood, every command was dropped — exactly the window the first grab falls
  into. Commands are now accepted and sent as soon as the connection is up.

- **Panel: The iPad's own status bar steps aside.** Hauser draws its own header
  with clock, date and connection, so the system clock no longer stands above
  it twice. It returns as soon as the view switches to the phone shell.

- **Blick: The project page shows the standby in six places.** Cologne, Paris,
  Barcelona, New York, Amsterdam and a Bavarian village take turns behind the
  clock, by day or by night, to show that the map is your own streets and that
  the radius picks itself. The room section switches the real screen through
  sun, rain, evening and lights off, controls included, and the two voices
  section shows the lamp and fan panels stepping through their states.

- **Blick: The project page says what Hauser is, in the first sentence.** The
  headline used to sit inside the picture frame and was cut off on phones, so
  the first screen showed a living room and not one word about the product.
  Headline, a plain description and the install facts now come before the
  picture, followed by three sober paragraphs: what it sits on, what it runs
  on, and who owns the data.

### Fixed

- **Blick: Rain and snow fill the whole screen.** The drifting layer began each
  pass with its lower edge on the top of the screen, so it only snowed in the
  upper part of the picture until the pass was nearly over — in standby as well
  as in the window of a room. The movement now runs downwards out of its
  resting position and covers the surface at every moment.

## [0.11.0] - 2026-09-07

### Added

- **Steuerung: Every device Home Assistant can control has its own second
  level.** Blinds and valves get open, stop and close plus position and tilt;
  vacuums start, pause, return to the dock and choose their suction; locks
  lock, unlock and open the door; humidifiers and water heaters carry their
  target and operating mode; lawn mowers mow, pause and dock; alarm panels arm
  and disarm, asking for a code only when the device requires one; numbers,
  selections and buttons can be set, chosen and pressed. Thermostats show
  every mode they report, along with fan, preset and swing, and their scale
  follows the device's own limits. As with the fan: what the device does not
  report does not appear.

## [0.10.1] - 2026-09-07

### Changed

- **Blick: The project page tells the story of the panel, not a feature list.**
  The first thing on it is the living room without any controls, moving
  through sun, rain on the window, evening and night; then the three moments
  the interface is judged by, the two voices of paper and instruments, and
  what happens when the house does not answer. Every screenshot was retaken
  from the current default pictures.
- **Raum: The demo home has solar on the roof.** The energy picture in the
  demo carries all three notes — solar, measured load and grid — with a day
  curve for generation and consumption, and the notes sit where they do not
  cross the roof.
- **Blick: The demo opens quietly.** No promotional card for the room-image
  wizard, no camera tile without a camera image, and the scribbled tips wait
  until you touch the screen for the first time.

## [0.10.0] - 2026-09-07

### Changed

- **The room tiles on the phone go dark with the room.** In the evening a tile
  now shows the unlit night picture whenever no light is on in that room, and
  the lit one as soon as a lamp burns — the same reading the large stage has
  always had, and the change fades in the same way: when the last light in a
  room goes out, its tile sinks slowly into the dark instead of flipping.
  The tiles still load the small phone-sized picture, so the darkened version
  costs no more to show than the lit one.

## [0.9.1] - 2026-09-07

### Added

- **Fans have their own control panel.** A fan no longer hides behind an
  on/off tile alone: press and hold it and the panel shows what the fan can
  actually do — speed as a tick scale in percent, the preset modes the device
  reports (normal, breeze, sleep, turbo, whatever it offers), oscillation on
  or off, and the direction of rotation. Only what Home Assistant reports as
  supported appears; a plain on/off fan keeps its plain panel.

### Changed

- **A running fan turns.** Its symbol rotates while the fan runs, on the tile
  and in its control panel, and the tempo follows the speed: full speed turns
  fast, the lowest step turns slowly, off stands still. Reduced motion keeps
  the symbol still.
- **A dimmed lamp looks dimmed.** The symbol of a dimmable lamp now carries
  its brightness in its colour, on the tile and in its control panel: full
  brightness glows in the full accent, a low step stays visibly muted, off
  remains grey. The step is readable at a glance, without a number.

### Fixed

- **Hauser starts on older processors again.** The image library ships
  prebuilt binaries that require an x86-64-v2 processor; on older hardware —
  and in virtual machines that present a generic CPU without SSE4.2 — loading
  them failed, and because the image library is loaded at startup the whole
  add-on refused to start instead of merely losing room images. A portable
  WebAssembly build now ships alongside and is used automatically when the
  fast one is rejected, and a failure to load images can no longer take the
  panel down with it. Thanks to @nadi1971 for the report (#18).

## [0.9.0] - 2026-09-07

Everything below arrived between 0.8.2 and this release. It is one update:
the energy screen became a picture of your own house, the calendar became a
sheet of paper, and several places stopped claiming things the house cannot
measure.

### Added

- **The energy screen can show your own house.** The image assistant and the
  image library now offer "Outside (energy)" as a target next to the rooms.
  An image set assigned there becomes the stage of the energy screen: the day
  version by day, the night version at night, fading between the two at dusk
  exactly like a room. The detection knows solar modules as a new kind of
  area, so the generation figure hangs on the real modules and the load figure
  on a window; the grid figure points to the edge, where the grid is. Without
  an assigned set the built-in picture stays.
- **The energy picture has a menu.** Press and hold its background in
  configure mode and a small sheet offers what belongs there: create your own
  house with the assistant, pick a picture from the library, move the notes,
  or jump straight to the sensor assignment in the settings.
- **The notes on the energy picture can be moved.** Every note and its pin
  can be dragged; "Done" keeps the arrangement, "Reset" returns to the
  built-in positions. Positions belong to the picture they were set on, so a
  new picture starts again from its template. A note can never end up outside
  the visible picture, under the tab bar or over the figures at the top left.
- **The workshop simulator knows the energy screen.** Sliders for generation
  and load, presets for noon, evening and grid draw, and the two special
  cases — a house without a generation sensor and a house without any sensor.

### Changed

- **Energy lives in the picture.** The column of tiles is gone. Live
  production, measured load and the grid sit as small paper notes in the
  picture, each pinned by a hairline to the thing it measures, while the free
  wall carries the day: the period's leading figure large in the paper voice,
  the rest small beneath it. The period chips stay; the flow diagram, the
  consumption card and the grid of figures are gone. What the house cannot
  measure gets no note.
- **True curves.** The day's line was an invented shape. It now comes from
  Home Assistant's five-minute statistics of the configured sensors, and it is
  simply absent until there is data. Last week, last month and total show real
  sums from the long-term statistics of the meters — produced, fed in and
  drawn only where a sensor exists.
- **A new built-in picture for the energy screen.** No longer a balcony over a
  specific city composed for a sidebar that no longer exists, but a generic
  house from the garden in Hauser's illustration style, day and night. It is
  also the demo picture.
- **The calendar is a sheet of paper, not a table.** Hairlines instead of a
  grid, small caps weekdays, a serif month and serif day numbers. The current
  week sits at the top in full size, the coming weeks follow a step quieter,
  and a week without appointments folds down to its numbers. Today is a small
  pinned slip instead of a blue box. All-day entries are paper notes; timed
  entries are ink, with the time in the colour of their calendar instead of a
  coloured edge. Every calendar gets its own paper colour, and a resident's
  own calendar wears the resident's colour from the pinboard. The "updated at"
  line and the refresh button are gone: the sheet refreshes on its own.
- **A clock never goes out.** When the household configuration is missing or
  the server stays silent, the panel no longer imitates a dashboard. It shows
  the time, the date and the coming days in the quiet standby style; the cause
  is one translated sentence at the bottom, next to a reload button.
- **Losing the connection no longer stacks a banner over the stage.** The room
  picture stays where it is and the controls dim as before. On the panel the
  title bar carries the cause and reconnects on tap; on the phone a small
  floating chip does the same without pushing the content down.
- **No dashes where the house has nothing to measure.** A figure only exists
  with a reading: without a value the field is gone, and without fields the
  section is gone — on the panel, on the phone, in the sensor tile and detail
  window, and for the media source.
- **The settings fit on one screen.** The sidebar lists nine areas without
  scrolling, separated by hairlines instead of five headings. Maintenance and
  diagnostics, the library override and the unfinished hotel mode are folded
  away: they appear when the hidden gesture reveals them (tap the logo three
  times) and the search finds them at any time.
- **The consent line in the image assistant names the purpose**, not a number
  of image calls. The number of provider calls still shows next to the button.
- **The ambient street map is on by default.** It still appears only once a
  location is set and the server has rendered the map, so nothing changes for
  installations without one; a second device no longer starts without the
  background. Turning it off is what gets stored now.

### Fixed

- **The calendar is there from the first minute.** On a freshly set-up panel
  the calendar tab and the standby week strip only appeared after the first
  five-minute refresh, because the first fetch ran before the connection to
  Home Assistant stood. Now every stale reading reloads the moment the
  connection is established.
- **A house photo stays a house.** Sending a photo of your house through the
  image assistant with "Outside (energy)" as the target produced a living
  room, because every prompt spoke of a room. The outside target now has its
  own recipe for all five passes.
- **A green dot that tells the truth.** The image assistant showed "Connected"
  as long as a credential file existed, even when the ChatGPT sign-in behind
  it had long expired. The status now asks whether the sign-in still carries;
  if it does not, the card says so and offers the sign-in right there. If the
  machine is simply offline, nothing is claimed either way.
- **The image assistant says why it stopped.** Every failure from the image
  provider read the same sentence. An expired sign-in, an exhausted quota and
  a refused photo need different next steps; each reason now has its own
  sentence, and it names what to do.
- **The image assistant keeps its target** while the pictures are generated,
  even if the dialog is closed in between.

## [0.8.2] - 2026-09-06

### Fixed

- **The room editor opens again.** Since 0.8.0 the build ships a shared chunk
  named `room-images-<hash>` next to the room-image assets, and the asset
  route claimed everything starting with that prefix, answering 404. The
  route now claims only the `/assets/room-images/` folder; bundle chunks are
  served statically.
- The startup self-check no longer logs a bogus "0 files missing" line when
  only the room-image job store failed to load.

## [0.8.1] - 2026-09-06

### Fixed

- **The App starts even when the room-image assistant's job store refuses to
  load.** A single inconsistent job record used to stop the whole server, so
  Home Assistant kept the App in an error state. The store stays fail-closed
  (nothing is repaired or deleted), but the house now starts without the
  assistant: its routes answer 503, `/api/health` reports
  `selfCheck.roomImageJobStore`, and the log names the offending job and the
  rule it breaks.

## [0.8.0] - 2026-09-06

### Added

- **The room picture follows the weather.** Each generated image set gains an
  overcast variant, so a room shows grey window light on a rainy day instead
  of the same golden afternoon. The room-image assistant asks a vision model
  once per image set for the surfaces it can see (windows, floor, seats,
  tables and more) and keeps them in the catalogue; rain and snow are drawn
  only inside the windows. Nothing runs in the browser at start or on a room
  change.
- **Weather in the standby screen.** Rain, snow and cloud pass quietly behind
  the clock and the notes. Switchable under Ambient & Standby.
- **Undo instead of confirm.** After "everything off", a scene or a climate
  change, a five-second toast offers Undo; the command goes out immediately.
  A switch that gets no echo from Home Assistant within a second pulses once.
- **Presence and person.** A motion detector from Window & Motion can wake the
  panel from standby; when every resident is away the standby goes dark; the
  first person home is greeted by name with their own notes first. Residents
  are mapped to Home Assistant persons, which are imported on first start.
  All off by default.
- **Ambient light.** A brightness sensor in the room or in the panel dims the
  interface continuously between two levels.
- **Hidden gestures.** Long-press the clock for a large date and seconds;
  tap the logo three times for a diagnostics view with frame rate, connection
  age, snapshot age and version.
- **Calendar moments.** Birthdays and selected fixed days from the family
  calendar show a quiet morning confetti and a line in the standby; the first
  snow of the season is noticed once. Fixed days are selectable in Settings.
- **Dusk in real time.** Around sunrise and sunset the room picture and the
  interface tones cross-fade over the sun's elevation instead of switching.
  Light cones come on quickly and fade out slowly; when the last lamp in a
  room goes out the picture dims into its unlit version.
- **New default room pictures** drawn from a real household, chosen by room
  name in every supported language.
- **Cameras stream live over HLS** as in Home Assistant, with still images as
  the fallback.
- **Shopping list sources.** Stores can be Home Assistant to-do lists (created
  from Hauser) or a Notion page.
- **Companion app pairing.** The System screen shows a one-time QR code; a
  paired phone gets its own device token. The app itself is a separate
  project and not part of this release.
- Standby can be switched off or given its own delay; the layout dialog uses
  the same tick scale as the light dimmer.

### Changed

- **The outdoor weather is your own.** The server reads the home location
  from Home Assistant and asks Open-Meteo itself; the interface no longer
  carries fixed city coordinates and the response contains no coordinates
  ([#15](https://github.com/ralleur/hauser/issues/15)).
- **The room-image assistant is quieter.** The room is chosen up front, the
  final screen is gone, progress is one plain sentence, and the notification
  centre tells you when drafts, the final set or the detected surfaces are
  ready. A spinning mark in the header shows the house is working.
- **Everything at once.** Weather, energy curves, camera stills and
  notification rules start from a snapshot; hero images decode in a worker
  and neighbouring rooms are preloaded on tap. Notes, reminders, shopping
  list and the library reappear instantly after a cold start; stale snapshots
  refresh when the app becomes visible or the network returns.
- **Phone: notifications flow with the content**, tab names match the panel,
  and the room-image onboarding card appears once per device.
- **English without German leftovers**; a lint keeps it that way.
- **Failure states explain themselves.** The minimal shell has a reload
  button and a one-line cause; the disconnected banner appears once, names the
  cause and offers a retry while climate and scenes stay locked.
- **Appearance modes** separate interface tone and dusk cleanly.
- **Every read route** of the API answers repeated requests with 304 via
  ETag; the server pre-computes the city map, phone variants and last week's
  energy statistics overnight and reports a self-check in its health payload.
- Screen and sheet transitions share one motion system with durations and
  curves from the design tokens.

### Fixed

- **Connecting no longer hangs forever.** A handshake that never completes,
  for example after a resume behind a proxy, now times out after 20 s and
  falls back to the normal reconnect cycle
  ([#15](https://github.com/ralleur/hauser/issues/15)).
- **The lamp-placement editor shows your own room picture** instead of the
  bundled illustration ([#16](https://github.com/ralleur/hauser/issues/16)).
- The unlit night picture is used as soon as no lamp in the room is on, not
  only when placed lamps are off; a room without known lamps stays lit.
- Room-image sets are no longer deleted when the server starts without an
  asset catalogue; published sets are kept and reported.
- Assigning an image set takes effect immediately; a mouse click opens a
  notification again; the falling temperature trend points down; the deep
  night dimming is opaque.

### Internal

- The server is split into modules under `app/server/` (room images, hotel
  mode, laundry, setup, configuration core, family data, notifications,
  ambient, songs, files). `server.mjs` keeps the request dispatcher and
  re-exports the public surface, so existing imports keep working.
- The HTTP API has an explicit contract (`app/server/api-contract.mjs`) with
  84 routes. A generated TypeScript table and a typed browser client are
  derived from it, and a test fails when a route literal in server or UI code
  drifts away from the contract.

## [0.7.0] - 2026-09-02

This release documents the work that shipped alongside 0.6.3 but was left out of
its notes, together with the changes made since.

### Added

- **Notifications you configure yourself, as categories with rules.** A new
  **Notifications** section under **Home** replaces the fixed set of messages
  with eight categories you fill yourself. A rule names an entity, the states
  that should trigger it, a delay before it counts and, where it fits, a
  threshold to stay above or below. Hauser is the configurator and the display,
  Home Assistant does the waiting and the triggering: every active rule becomes
  an automation built from one of three Hauser blueprints, and Hauser keeps that
  set in step when you save. Each category carries a colour for the border of
  its tiles, chosen from the palette so light and dark both hold up. A test
  send shows what a rule will look like, and the history comes from the Home
  Assistant logbook.
- **Window contacts and motion detectors are really connected now.** The status
  strip said "All quiet" no matter what the house was doing, because the values
  behind it were never filled. Windows and presence are read live from Home
  Assistant on every screen, and the strip has become a button that opens a
  list with one line per sensor, its room and its state. Rooms without an
  assigned sensor keep the strip as a display rather than offering a button
  with nowhere to go.
- **Choose which sensors count.** Detection no longer has the last word. A new
  section under **Home** shows one card per room and one switch per sensor.
  Everything found is on to begin with, so deselecting is the exception. A
  button returns a room to automatic assignment.
- **Choose what the energy page measures.** The energy card in
  **Connections · Services** now lists every power sensor Home Assistant
  reports: one source for generation, as many consumers as you want to tick,
  plus "Take all". Without a saved selection Hauser uses everything it found.
- **An operate mode that locks configuration away.** A button in the middle of
  the header switches between **Edit** and **Operate**. In operate mode the
  long-press routes into layout, the room device editor, the scene editor and
  the central climate control are closed, while every device stays fully
  operable, including a long press on a light. Someone who only wants to
  operate the panel cannot break anything. Under **Interface & operation** you
  can set how long the panel waits before falling back to operate mode on its
  own, and a PIN that protects leaving it. If a locked long-press is tried
  twice within thirty seconds, a line under the button explains the way back.
- **Central climate control from anywhere.** A long press on the reading area
  of the all-rooms pill opens the settings that decide what it controls, on the
  panel and on the phone, from any screen. The step buttons keep switching, so
  a longer press there does not open configuration.
- **Paperless is set up in the interface.** Address and API token used to live
  in environment variables and the keychain only. Both are now fields in
  **Connections · Services**, and the server picks them up on the next request
  instead of on the next restart. The PIN that locks the documents screen stays
  in the keychain, because it is not a service credential.
- **Sheets on the phone close by swiping down.** The room sheet and the more
  sheet arrive from the bottom and now leave the same way. Dragging the sheet
  header pulls the surface with your finger. Past a quarter of its height it
  closes, below that it springs back. The gesture sits on the header so it
  disturbs neither scrolling nor the sliders inside.
- **Home and Energy keep separate widths for their control areas.** The layout
  dialog now adjusts the area it was opened from and names it on the slider
  row. Existing installations inherit the energy width from the previous
  setting, so nothing shifts when you update.

### Changed

- **The bottom navigation on phones is a floating pill.** The full-width bar
  read as a foreign object below the room grid. It now floats above the
  content as a rounded, translucent pill that follows the rounded corners of
  the phone, and the active entry is marked by a soft highlight that glides
  along instead of a line under the label.
- **One climate pill for the panel and the phone.** The all-rooms control is
  the same component on both: two symmetric round buttons, one dominant target
  value, a quieter range label and the measured current value behind a fine
  divider. Blue and red now mark only the two directions. On the phone it
  shares a single row with the off and holiday actions, which became round
  buttons to fit.
- **Room tiles read as calm product cards.** The veil used to lie flat across
  the whole tile and dulled the picture without forming a clear zone. It now
  carries only the lower information area and is gone by about two thirds of
  the height. Both themes share the same, much weaker gradient, so the
  illustration keeps its depth in light mode too. Room name and status have
  their own hierarchy and a halo that keeps them legible on changing pictures.
  The crop is rendered at its target size, so the fine lines of the
  illustrations no longer step at high pixel density.
- **The media area is off by default.** It stays in the catalogue and is
  switched on under **Connections · Services**, where it is marked as
  experimental. Playback targets that were found during setup remain in the
  configuration, so they are there the moment you enable it.
- **The services page is arranged by module.** Home Assistant sits on top as
  the foundation, and below it one block per module: Home, Energy, Calendar,
  Notes, Media, Library and Documents. Each block carries the switch for its
  module and the setup of the service that fills it.
- **Long device names shrink instead of being cut off.** In the control panel a
  name that did not fit was truncated. It is now reduced in size until it fits
  the space the tile already grants it, which turns two clipped lines into
  three smaller complete ones without making the tile taller.
- **The song workshop was removed.** It did not come up in everyday use. The
  screen, its tab and its search entry are gone. Existing installations that
  still list it in their configuration start normally.

### Fixed

- **A switched-off module stayed in the bar until the next restart.** The
  switch wrote the configuration and the message asked you to restart.
  The module now disappears from the tab bar and the phone navigation
  immediately, and comes back complete when you switch it on again. The saved
  order of the phone entries is left untouched.
- **The camera tile stayed empty in the Home Assistant add-on.** The browser
  loaded the live image directly from the built-in Home Assistant address,
  which wall panels and phones without mDNS cannot reach. The image is passed
  through Hauser's own server now. For generic cameras, whose stream Home
  Assistant serves through ffmpeg, the stream ends without delivering a single
  frame; those tiles reload the still picture instead and retry after an error
  rather than staying blank.
- **A second test notification kept the old colour.** Without a Home Assistant
  connection the test tile is created locally, and an existing tile with the
  same id was ignored. It is replaced now, as Home Assistant does it.
- **The climate card broke out of a narrow sidebar.** The card now scales with
  the width of the sidebar, and the current-value line no longer wraps.

## [0.6.3] - 2026-09-02

### Added

- **Import a scene from Home Assistant.** If you already keep scenes in Home
  Assistant, you no longer have to rebuild them by hand. The scene editor now
  offers "From Home Assistant" next to "Add new scene": it lists your existing
  scenes, those belonging to the room first, and turns the one you pick into a
  Hauser scene with its devices and their brightness and colour temperature.
  Home Assistant does not hand out a scene's stored target states, so the scene
  is applied in the room once to read them back — the editor restores the
  previous state when you close it, as it does for any other change you preview
  there.
- **Rooms that only carry scenes are set up as rooms.** During setup, a Home
  Assistant area now becomes a Hauser room even when no device is assigned to
  it and only a scene points there — via the scene's own area or the areas of
  the devices it controls.

### Fixed

- **A panel flashed on the right before an overlay opened.** Long-pressing a
  room, a light or a scene briefly showed an empty dialog on the right edge
  while the overlay was still loading. The placeholder no longer draws
  anything.

## [0.6.2] - 2026-09-01

### Fixed

- **The Home Assistant add-on stayed on "Connecting…" even though it was
  connected.** Home Assistant may bundle several messages into a single packet,
  and the add-on's connection relay discarded such bundles because a bundle
  carries no message type of its own. The confirmation the app waits for to
  finish subscribing arrives in exactly such a bundle, so the app kept showing
  "Connecting…" while live values were already updating behind it. Bundles are
  now unpacked. This only affected the add-on; installations where the browser
  talks to Home Assistant directly were never impacted.

## [0.6.1] - 2026-09-01

### Added

- **A city map on the standby screen.** When the panel rests, Hauser can place a
  subtle street map of your surroundings behind the clock and notes. The place
  comes from Home Assistant, from the device's own location, from a place search
  ("Dortmund, Germany") or from coordinates you type. The map is rendered once on
  the server and stored as a small monochrome image; light and dark share the
  same file, and Deep Night shows no map at all. Setup offers it as an opt-out
  with an example picture, and it can be turned off at any time under
  **Appearance → Ambient & standby**.
- **Place search instead of coordinates.** Type a town and pick it from a list.
  The search runs on the server against OpenStreetMap's geocoder; what leaves the
  server is a search term, never your address.

### Changed

- **The app starts noticeably faster and reaches a usable state sooner.** When a
  validated configuration is already known, the real interface is mounted
  directly instead of a placeholder shell that is torn down again a moment later.
  Independent startup requests now run in parallel, and the Home Assistant
  connection no longer waits for unrelated configuration.
- **Room pictures on phones are about a fifth of their previous size.** Hauser
  now derives a phone-sized variant of every room image when the image enters the
  library, so a room tile shows its background in the first paint instead of
  decoding a multi-megabyte file. Existing libraries are migrated automatically
  on the first start after the update.
- **The offline cache shrank from roughly 17 MB to 3.5 MB**, which makes every
  service worker installation faster. Full-size room pictures are fetched when
  they are first shown and cached from then on.
- **A waiting update is offered, not forced.** Hauser no longer reloads itself
  while you are looking at it. A quiet hint appears and applies the update when
  you tap it; without a tap the running version keeps working. Wall panels still
  update on their own while idle.
- **Automatic appearance follows the time of day when Home Assistant has not
  reported a sun position yet**, instead of staying dark until it does.
- **Settings are easier to navigate.** "Appearance" and "Layout & controls" are
  now one section, **Interface & controls**. Hotel Mode and guest access moved
  into a new **Experimental** group at the end of the list.
- **Unfinished room edits survive leaving the section.** Renaming rooms,
  reordering them or adding devices and then switching to another settings
  section no longer discards the draft silently. A restored draft is marked as
  such and can be discarded deliberately.

### Fixed

- Reconnecting after the app returns from the background no longer waits for the
  next retry window; a connection that only looks alive is detected and replaced.
- Room tiles no longer decode a second set of images when Home Assistant data
  arrives shortly after start.

## [0.6.0] - 2026-08-31

### Changed

- **As a Home Assistant App, Hauser no longer asks for a Home Assistant address
  or a Long-Lived Access Token.** The App connects to Home Assistant Core over
  the internal Supervisor endpoints, and the browser reaches live state through
  a same-origin WebSocket on the Hauser server. The Supervisor token stays
  inside the server process and is never written to `/data`, handed to the
  browser or logged. Installations that previously stored a Long-Lived Access
  Token have it removed on the first start in App mode. Docker Compose keeps its
  existing setup wizard, address and token unchanged.
- **The setup wizard ends by showing the address phones and tablets use**, with
  a copy action and a QR code. The same address stays available under
  **System → Services**. It is the address the current session was opened
  through, not a guess from the Home Assistant host name.

### Security

- The App's direct LAN port is documented as a trusted-network boundary: it
  carries no separate login and no device pairing, and must not be published to
  the internet.

## [0.5.3] - 2026-08-31

### Added

- **One climate control can set every thermostat.** The status bar and phone
  quick actions show the shared target temperature and raise or lower all
  configured climate entities together.

### Changed

- **Climate controls are clearer and more compact on phones.** Current and
  target temperatures have distinct labels, the thermostat card uses the
  available width more efficiently, and temperature steps consistently use
  plus and minus buttons.
- Phone quick actions and optional room-editor state are loaded only when they
  are needed, reducing the initial phone bundle.

### Fixed

- **Room-image generation with a ChatGPT subscription works again.** Hauser now
  uses the native Codex image-edit endpoint and its JSON image result instead
  of waiting for an image-generation tool result from a Responses stream.
- **Custom room images work from the direct Home Assistant App address.** The
  manual upload endpoint now accepts an exact same-origin request such as
  `http://homeassistant.local:4173` while continuing to reject foreign origins.
- Manual room-image upload failures follow the selected interface language
  instead of exposing the server's German message.

## [0.5.2] - 2026-08-28

### Added

- **Camera feeds can become movable pop-outs.** A long press opens the camera
  menu, moves the feed out of the control surface and onto the room background,
  and lets it be dragged and resized. A pop-out follows its room by default or
  can stay visible across room changes; its title bar can be hidden, and it can
  return to the control surface at any time.
- **Room tiles per row are adjustable.** The home layout now supports one to
  four room tiles in each row instead of enforcing a fixed two-column grid.

### Changed

- **Home layout editing is a live mirrored drawer.** A long press on the room
  background opens an unblurred panel on the right with the same dimensions as
  a control surface. The former Compact, Balanced and Wide choices are one
  continuous size control, with a default action and direct preview.
- **The camera, climate and new layout controls are fully localized** in German,
  English, French, Italian, Polish and Portuguese.
- The redundant **Temperature** heading above the climate card and the Safari
  install hint have been removed.

### Fixed

- Saving reconfigured rooms now refreshes the active household cache before
  returning to the dashboard, so the new room state appears immediately.

## [0.5.1] - 2026-08-28

### Added

- **Scenes are configurable per room.** The scene editor lists the devices a
  scene drives and the state each one takes — on or off, and, where the lamp
  supports it, brightness and colour temperature. Every change runs on the
  lights straight away as a preview and is taken back when the editor closes,
  so the room is never left in an editing state.
- **Rooms can have their own scenes.** Beside the three built-in scenes, a room
  can gain its own through **Add new scene**, and every scene — built-in ones
  included — can be renamed or deleted. All of it belongs to the room where it
  was made: a *Movie night* in the living room does not appear in the kitchen.
- **The active scene is highlighted.** A scene lights up when the room actually
  stands at its target state, whether it was tapped or the lamps were set there
  by hand.
- **Advanced room settings.** A room's tile on the home screen can show
  temperature, humidity, both or neither, and the sensor behind each is picked
  automatically from the Home Assistant area the room maps to. Another sensor
  can be chosen where several fit.
- **The room-image assistant opens from the room overlay**, next to uploading an
  image and picking one from the library.

### Changed

- **Configuration overlays share one set of controls.** Reordering is a six-dot
  handle that drags — with the arrow keys as the keyboard path — deleting asks
  once in place of a dialog, and creating something new is a dashed tile. The
  room editor's device list follows suit: the up/down chevrons are gone.
- **The room editor opens on a quick-setup grid.** Room image, scenes, lamp
  placement and the new advanced view sit as four tiles above the device list.

## [0.5.0] - 2026-08-27

### Added

- **Rooms & devices is a real room list.** Every room now shows its current
  room image, its name and how many devices it holds. **Configure devices**
  opens the room editor, **Rename** edits the name in place, the six-dot handle
  drags the room into position — with the arrow keys as the keyboard path — and
  the overflow menu keeps move, rename and delete. **New room** and **Save
  changes** sit where the list ends.
- **Tapping a room's image opens the image editor.** The thumbnail in the
  settings list leads straight to the room-image view of the room overlay,
  where an image can be uploaded, picked from the library or removed.
- **The room-image assistant and the library have their own cards.** Both sit
  as illustrated tiles under the room list instead of two anonymous rows.

### Changed

- **Version numbers drop the `-beta.N` suffix.** Every release below `1.0.0` is
  a beta; the version number says so on its own. `0.4.0-beta.10` is followed by
  `0.5.0`.
- **Settings open on Rooms & devices.** That is the page where a home is
  actually set up. Coming back within 30 seconds still returns to the section
  that was open, so a quick detour costs nothing; a later visit starts fresh.
- **Resetting is one card with three tiles.** Device names and icons, scenes,
  and re-reading rooms and devices from Home Assistant — the last one used to
  be a separate section at the bottom of the page.

### Fixed

- **The room-image card kept coming back.** Dismissing it only applied to that
  one room and only until the next reload. A checkbox on the card now switches
  it off for good on that device.
- **Saving room changes could be blocked by Jellyfin.** In Settings there are
  no Jellyfin fields, yet an unverified sign-in disabled **Save changes**. The
  first-run wizard still requires the tested sign-in.

## [0.4.0-beta.10] - 2026-08-26

### Added

- **Rooms without a background explain how to get one.** A room that has no
  image set assigned showed nothing but an empty tile. The home screen now
  carries an onboarding card with a before/after band, the three steps the
  assistant takes, and three ways out: generate an image, pick one yourself,
  or dismiss the card. The assistant and the library are loaded only when one
  of them is actually opened.
- **Rooms without devices offer a way to add one.** Instead of a blank area, an
  empty room shows an **Add device** placeholder tile that opens the same room
  editor as a long press on the room tile.
- **The people on the pinboard can be named and added.** Tapping a name renames
  that person, a header button adds another, and each gets a note colour from a
  fixed palette. Existing tasks stay with their person.

### Changed

- **The room-image assistant leads with the photograph.** The OpenAI access
  step now appears only when access is missing and stays reachable as a chip in
  the header afterwards; the consent text is one line with the long form behind
  an info button. Choosing the photograph is the first thing the assistant asks
  for and offers the camera directly on touch devices. Cropping and zoom moved
  to step two, next to the style variants, because the perspective correction
  changes the framing anyway. The focus picker is gone entirely — the generated
  sets already match the panel format exactly, so it changed nothing.
- **The standby button sits in the title bar by default.** The setting in the
  long-press menu now switches to the large floating button instead of away
  from it.

### Fixed

- **The room-image assistant failed with a 403 in the Home Assistant app.**
  Every write of the assistant — starting a ChatGPT sign-in, uploading a
  photograph, creating variants — was answered with `ORIGIN_FORBIDDEN` when
  Hauser ran as a Home Assistant add-on. The add-on can only configure the
  loopback origins, while the browser reaches Hauser under the host's own
  address, so the request never matched the static allowlist. A request whose
  `Origin` matches its own effective origin — protocol, host and port,
  compared exactly — is now accepted in addition to the configured list.
  Foreign origins, differing ports or protocols, `null`, malformed values, a
  missing origin on a write, and duplicate `Origin` headers stay rejected.
- **Room-image errors appeared in German in an English install.** The assistant,
  the library and the access panel showed the server's message verbatim, and
  the server writes German only. They now use the translated message for the
  operation that failed.
- **A published image set could break the next server start.** The expiry pass
  marked already published sets as expired without detaching the asset, which
  the metadata validation forbids — so the service refused to start with
  "incoherent room-image job metadata". Records that carry an asset are left
  alone.

## [0.4.0-beta.9] - 2026-08-26

### Fixed

- **The published container did not say where its source came from.** Hauser
  serves its exact revision and the URL of the corresponding source at
  `/api/build-info`, without authentication and before any configuration
  exists — that is how the project meets section 13 of the AGPL. In every
  image published since the license change the two fields came back empty,
  because the release workflow's publish step never passed
  `HAUSER_REVISION` and `HAUSER_SOURCE_URL` to the build. It also never
  passed `HAUSER_RELEASE=1`, the Dockerfile's own guard that fails a release
  build rather than publishing an image which cannot back its source claim,
  so nothing caught the omission. The image labels
  (`org.opencontainers.image.revision` and `.source`) were always correct;
  only what the running container reports about itself was missing. The
  publish step now passes all three, and the guard makes a repeat a build
  failure. `v0.4.0-beta.7` and `v0.4.0-beta.8` are both affected.

### About v0.4.0-beta.8

`v0.4.0-beta.8` was tagged and its image published, but no release was issued
for it: the defect above was found while verifying that exact image digest.
Everything beta.8 contained is in this release; its entry below stays as the
record of what landed when. Update straight from `v0.4.0-beta.7` if you are
still on it.

## [0.4.0-beta.8] - 2026-08-26

### Added

- **Calendar and Notes are part of the generated navigation.** Onboarding
  produced a navigation with only Home and System (plus Media when a media
  player was discovered), while the Calendar and Notes screens existed with no
  way to reach them — the README's hero image showed tabs an onboarded install
  never had. New installs now get Home, Calendar, Notes, optionally Media, and
  System. An existing install whose navigation is still the untouched
  onboarding result is migrated to the same set on load; a navigation you have
  customized yourself is left alone. Reported in #8.
- **An image-set library for generated room backgrounds.** Finished sets were
  reachable from nowhere once the assistant had produced them. Settings →
  Rooms & Devices now lists every set with a preview, its size, its creation
  date and the room it is assigned to, and lets you assign a set to a room,
  remove that assignment, or delete it after a confirmation. The header shows
  how many sets exist and how much storage they occupy.
- **Room configuration behaves the same from everywhere.** There were two
  routes into a room's configuration with different capabilities. Tapping a
  room under Rooms & Devices now opens the same overlay as a long press from
  the home screen; the embedded list keeps creating, deleting and reordering.
  The overlay also assigns image sets from the library, and a long press on a
  device row moves that device to another room.

### Fixed

- **The room-image assistant could not start a job over plain `http://`.**
  Generating an ID used `crypto.randomUUID`, which browsers expose only in a
  secure context, so on a panel reached over `http://` in the LAN the request
  failed while it was still being assembled — before any network call and
  before the error handling. Pressing **Create variants** did nothing at all:
  no request, no status change, no message. The assistant now falls back to
  `getRandomValues`, reports unexpected failures instead of swallowing them,
  and places error messages directly above the action buttons where they are
  in view. The ChatGPT authorization code can be copied with a click.
- **The assistant returned photographs where it should have returned a
  composition.** The composition step received the already-cropped tile rather
  than the whole photograph, so the prompt discussed a framing the model never
  saw, and protective wording in the first phase suppressed the free
  recomposition entirely. The two candidates now differ as intended: a
  realistic composition with corrected perspective, and an illustration.
- **Both clocks froze.** The dashboard and ambient clocks stopped advancing
  and only a manual reload brought them back. They now resynchronize when the
  page is restored, the tab becomes visible or the window regains focus, in
  addition to their regular tick. Reported in #8.
- **Status & Updates showed invented services and updates.** The screen listed
  six pending updates and five connected services from hard-coded prototype
  data, none of it reflecting the connected instance — misleading about
  security-relevant state. A productive install now shows only the verified
  Home Assistant connection and genuine pending `update.*` entities, and says
  **No updates available** when there are none. The fictional list remains only
  in the demo build, which is marked as such. Reported in #8.
- **The floating power button covered controls beneath it.** While System
  settings are open, the power control now sits in the title bar even when the
  floating button is the general preference — it no longer obscures the Scenes
  **Reset** button. Reported in #8.
- **German text remained in the English interface.** The connection indicator,
  the Safari *Add to Home Screen* hint, and the room-image assistant, its
  library and its access dialog are now translated in all six languages, and
  the ambient hero text keeps the selected language consistently instead of
  switching between English and German across visits. Reported in #8.
- Room-image dialogs opened from the room overlay were unstyled, and the
  device-move sheet appeared behind the overlay, because their styles were
  loaded only by the System screen.

### Changed

- **The AI line on the lock screen is off by default.** It calls a language
  model service, which should be a deliberate choice rather than something that
  happens on first start. Turning it on is remembered; the default is off on
  every install.
- The public demo starts in English until a visitor picks a language, and it
  now shows the room-image assistant and the image-set library in full, with
  prepared example photographs instead of an upload. A marked note in both
  dialogs states that no account and no AI service is involved.

### License

The project's license identifier is now **AGPL-3.0-only** instead of
`AGPL-3.0-or-later`. The license text in [LICENSE](LICENSE) is unchanged: it
remains the unmodified GNU Affero General Public License, version 3. What
changes is that the project no longer offers the option of using it under a
later version of the AGPL should the Free Software Foundation publish one.
Releases up to and including v0.4.0-beta.7 keep the terms they were published
under.

Contributions are made under [CLA.md](CLA.md), now at version 2. Contributors
keep the copyright in their work.

## [0.4.0-beta.7] - 2026-08-24

### License change

Starting with this release, Hauser is licensed under the GNU Affero General
Public License instead of MIT.

Everything released up to and including v0.4.0-beta.6 stays MIT licensed and can
be forked from there. This change applies going forward only; no release has
been withdrawn or retagged.

**If you run Hauser at home, nothing changes for you.** The AGPL only creates
obligations for someone who modifies Hauser and then offers it to other people
over a network — they have to make their modified source available to those
users.

The reason is straightforward: the AGPL keeps improvements to a networked
application flowing back to the people who use it, instead of disappearing into
closed forks.

Contributions now require agreement to a [CLA](CLA.md).

### Fixed

- The setup wizard's reconfigure flow (Settings → Rooms & Devices) never sent
  the `If-Match` / `X-Hauser-Shared-Config-If-Match` preconditions that
  `POST /api/setup/activate` requires when reconfiguring, so every reconfigure
  save was rejected with `428 CONFIG_PRECONDITION_REQUIRED` before anything
  was written. **Save changes** appeared to do nothing — no console error, no
  visible feedback near the button — and any rooms or devices found by
  **Reload rooms and devices** reverted to the previously active configuration
  on leaving the screen. The wizard now captures both ETags on load and sends
  them back on save. Reported in #7, reproduced on v0.4.0-beta.6 in #9.

## [0.4.0-beta.6] - 2026-08-21

### Fixed

- `POST /api/setup/activate` and other API routes rejected direct browser
  requests with `403 SETUP_REQUEST_FORBIDDEN` whenever the App was reached
  through a hostname absent from the static `HMI_ALLOWED_ORIGINS` allowlist —
  for example the Home Assistant App's default `homeassistant.local:4173`.
  A request is now also accepted when its Origin header exactly matches the
  effective request host, independent of hostname, so installs no longer need
  manual origin configuration. Reported in #8.

## [0.4.0-beta.5] - 2026-08-16

### Fixed

- The setup wizard discovered only lights, climate, temperature, presence,
  window and camera entities. Switches were dropped without a trace — the
  domain was never mapped, so room-assigned switches reached neither the
  generated room configuration nor the ignored list. Media players were never
  offered as media targets even though the runtime already supported them.
  Reported in #7.
- A room accepted only one entity per non-light role, so several switches in
  the same room collapsed into a single entry. Switches may now appear as often
  per room as lights do.

### Added

- Vacuums are discovered and exposed as a start / return-to-base control. This
  path follows Home Assistant's documented `vacuum` service set and has not yet
  been verified against physical hardware.

## [0.4.0-beta.4] - 2026-08-16

### Fixed

- The Home Assistant App failed to start with
  `RUNTIME_DIRECTORY_NOT_WRITABLE` on `/data/assets`. The App manifest
  requires that directory for generated room images, but the container
  entrypoint never created it. The entrypoint now derives the directories it
  prepares from `HMI_REQUIRED_WRITABLE_DIRS` — the same list the readiness
  check verifies — so a deployment cannot require a directory that nothing
  creates. Reported in #6.
- Startup and household-configuration diagnostics are reported in English.

### Changed

- The App manifest and the container entrypoint ship from the release
  pipeline instead of being maintained by hand, and the release preflight
  fails when the manifest version and the published image version drift apart.
- Tagged releases publish the plain `<version>` image tag alongside `v<version>`,
  which is the tag the Home Assistant Supervisor resolves from the manifest.

## [0.4.0-beta.1] - Unreleased

This is the planned first public release. It remains a self-hosted hobby-project
beta without a support or compatibility promise beyond the documented paths.

### Added

- Source-built Docker/Compose installation with read-only root filesystem,
  unprivileged runtime, health checks and persistent config, data and asset
  volumes.
- Deterministic first-run and reconfiguration wizard for Home Assistant Areas,
  relevant entities, room mappings and optional Jellyfin setup.
- Versioned external household configuration with fail-closed validation and
  automatic schema v1-to-v2 migration backed by an exact rollback copy.
- Backup, restore, commit-bound image build and manual image rollback helpers.
- Isolated development pilot with its own synthetic Home Assistant, network and
  volumes, including explicit-Area and no-Area onboarding paths.
- Six interface languages: German, English, French, Italian, Portuguese and
  Polish.
- Local custom room-background upload under room editing for JPEG, PNG, WebP and
  AVIF files up to 12 MiB, including replacement and restore to the project default.
- Tag-gated quality and container-image workflow. A matching version tag can
  publish immutable `linux/amd64` and `linux/arm64` images to GHCR only after the
  full quality job passes.

### Changed

- The Home Assistant adapter now recovers entity state correctly after a lost
  and restored connection.
- Release evidence is split honestly: the isolated clean-room pilot proves the
  technical beta contract; an external real-home installation remains mandatory
  during beta stabilisation before the release candidate.

### Known limitations

- The clean-room pilot was operated by the maintainer and does not prove
  external-user usability or compatibility with a second real device topology.
- The documented tested container path is Docker Desktop on Apple Silicon;
  `linux/amd64` is built by release automation but still requires post-publish
  smoke evidence.
- Jellyfin is optional. The isolated clean-room pilot exercised the disabled
  path; the live integration was verified separately against the maintainer's
  installation.
- Non-German and non-English translations have not been reviewed by native
  speakers.