* Wohnungen header: single slim row with Alert status · Filter summary · Auto-Bewerben toggle · Trockenmodus toggle. Big filter panel removed — filters live only in /einstellungen/filter. * Alert status: 'nicht eingerichtet' until the user has actual filters (+ valid notification creds if telegram/email). 'aktiv' otherwise. * Logs tab: admin-only (gated both in layout and server-side). Shows merged audit + errors across all users, sorted newest-first, capped at 300. * Apply, auto-apply, trockenmodus and circuit reset buttons post via HTMX and swap the Wohnungen body. While any application is still running for the user the poll interval drops from 30s to 3s so status flips to 'beworben' or 'fehlgeschlagen' almost immediately. * Browser tab title is now always 'lazyflat'. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
37 lines
1.9 KiB
HTML
37 lines
1.9 KiB
HTML
{% extends "_layout.html" %}
|
|
{% block content %}
|
|
<section class="card">
|
|
<div class="flex items-center justify-between px-4 py-3 border-b border-soft">
|
|
<h2 class="font-semibold">Meine Bewerbungen</h2>
|
|
<span class="text-xs text-slate-500">{{ applications|length }}</span>
|
|
</div>
|
|
<div class="divide-y divide-soft">
|
|
{% for a in applications %}
|
|
<div class="px-4 py-3 text-sm">
|
|
<div class="flex items-center gap-2 flex-wrap">
|
|
{% if a.success == 1 %}<span class="chip chip-ok">ok</span>
|
|
{% elif a.success == 0 %}<span class="chip chip-bad">fehlgeschlagen</span>
|
|
{% else %}<span class="chip chip-warn">läuft</span>{% endif %}
|
|
<span class="chip chip-info">{{ a.triggered_by }}</span>
|
|
{% if a.provider %}<span class="chip chip-info">{{ a.provider }}</span>{% endif %}
|
|
{% if a.submit_forms_used %}<span class="chip chip-warn">echt gesendet</span>
|
|
{% else %}<span class="chip chip-info">dry-run</span>{% endif %}
|
|
<span class="text-slate-500 text-xs ml-auto"
|
|
title="{{ a.started_at|de_dt }}">{{ a.started_at|de_dt }}</span>
|
|
</div>
|
|
<div class="mt-1 truncate">
|
|
<a href="/bewerbungen/{{ a.id }}">#{{ a.id }} — {{ a.address or a.url }}</a>
|
|
</div>
|
|
{% if a.message %}<div class="text-xs text-slate-500 mt-0.5 truncate">{{ a.message }}</div>{% endif %}
|
|
{% if a.success == 0 %}
|
|
<div class="mt-1">
|
|
<a class="text-xs" href="/bewerbungen/{{ a.id }}/report.zip">↓ Fehler-Report (ZIP)</a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
{% else %}
|
|
<div class="px-4 py-8 text-center text-slate-500">Noch keine Bewerbungen.</div>
|
|
{% endfor %}
|
|
</div>
|
|
</section>
|
|
{% endblock %}
|