alert
{% if last_alert_heartbeat %} live {% else %} kein Heartbeat {% endif %}
letzter Heartbeat: {{ last_alert_heartbeat or "—" }}
apply
{% if apply_reachable %} reachable {% else %} down {% endif %}
{% if circuit_open %} circuit open {% elif apply_failures > 0 %} {{ apply_failures }} recent failure(s) {% else %} healthy {% endif %}
Modus
{% if mode == "auto" %} full-auto {% else %} manuell {% endif %}
Kill‑Switch
{% if kill_switch %} apply gestoppt {% else %} aktiv {% endif %}
{% if circuit_open %}
{% endif %}
{% if not apply_allowed %}
apply blockiert {{ apply_block_reason }}
{% endif %}

Wohnungen

{{ flats|length }} zuletzt gesehen
{% for flat in flats %}
{{ flat.address or flat.link }} {% if flat.matched_criteria %} match {% else %} info {% endif %} {% if flat.last_application_success == 1 %} beworben {% elif flat.last_application_success == 0 %} apply fehlgeschlagen {% endif %}
{% if flat.rooms %}{{ "%.1f"|format(flat.rooms) }} Z{% endif %} {% if flat.size %} · {{ "%.0f"|format(flat.size) }} m²{% endif %} {% if flat.total_rent %} · {{ "%.0f"|format(flat.total_rent) }} €{% endif %} {% if flat.sqm_price %} ({{ "%.2f"|format(flat.sqm_price) }} €/m²){% endif %} {% if flat.connectivity_morning_time %} · {{ "%.0f"|format(flat.connectivity_morning_time) }} min morgens{% endif %} · entdeckt {{ flat.discovered_at }}
{% if flat.last_application_message %}
↳ {{ flat.last_application_message }}
{% endif %}
{% if apply_allowed and not flat.last_application_success %}
{% endif %}
{% else %}
Noch keine Wohnungen gesehen.
{% endfor %}

Letzte Bewerbungen

{% for a in applications %}
{% if a.success == 1 %}ok {% elif a.success == 0 %}fail {% else %}läuft{% endif %} {{ a.triggered_by }} {{ a.started_at }}
{{ a.address or a.url }}
{% if a.message %}
{{ a.message }}
{% endif %}
{% else %}
Keine Bewerbungen bisher.
{% endfor %}

Audit-Log

{% for e in audit %}
{{ e.timestamp }} {{ e.actor }} {{ e.action }} {% if e.details %}— {{ e.details }}{% endif %}
{% else %}
leer
{% endfor %}