<%- include('partials/head') %> <%- include('partials/header', { hideSettings: true }) %> <% const statusColor = { 'Entwurf': 'bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200', 'Gesendet': 'bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-200', 'Eingangsbestätigung': 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200', 'In Bearbeitung': 'bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-200', 'Interessiert': 'bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-200', 'Telefonat': 'bg-sky-100 text-sky-800 dark:bg-sky-900 dark:text-sky-200', 'Warten auf Rückmeldung': 'bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200', 'Warten auf meine Antwort': 'bg-fuchsia-100 text-fuchsia-800 dark:bg-fuchsia-900 dark:text-fuchsia-200', 'Vorstellungsgespräch': 'bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200', 'Vertragsverhandlung': 'bg-lime-100 text-lime-800 dark:bg-lime-900 dark:text-lime-200', 'Einstellung': 'bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200', 'Absage': 'bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200', 'Absage von meiner Seite': 'bg-rose-100 text-rose-800 dark:bg-rose-900 dark:text-rose-200', 'Keine Rückmeldung': 'bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-300' }; const aktuellerStatus = (application.status && application.status.trim()) ? application.status.trim() : 'Ohne Status'; const today = new Date().toISOString().split('T')[0]; %>
Zurück zur Übersicht

<%= application.firma %> <%= application.stelle %>

<%= aktuellerStatus %> <%- include('partials/favorit-button', { j: application, endpoint: '/api/bewerbungen/' + application.id + '/favorit' }) %>

Bewerbungsdaten

<%- include('partials/labelPicker', { labelOptions: labelOptions, selected: application.labelsArr }) %>

Eigene Anhänge

Nur für dich – erscheinen nicht im PDF und werden nicht mitversendet.

<% if (interneAnhaenge && interneAnhaenge.length) { %> <% } else { %>

Noch keine eigenen Anhänge.

<% } %>

PDFs lassen sich per Klick direkt öffnen. Max. 15 MB.

Status-Verlauf

Jede Statusänderung wird mit Datum dokumentiert. Der jüngste Eintrag bestimmt den aktuellen Status.

<% if (verlauf.length > 0) { %>
    <% verlauf.forEach(eintrag => { %>
  1. <% }); %>
<% } else { %>

Noch keine Statusänderungen dokumentiert.

<% } %>

Statusänderung hinzufügen

<% if (caldavConfigured) { %>

Termine

<% if (terminOk) { %>
Termin wurde im Kalender angelegt.
<% } %> <% if (terminError) { %>
<%= terminError %>
<% } %> <% if (terminVorschlag) { %>
Vorstellungsgespräch erfasst – möchtest du den Termin in den Kalender aufnehmen? Zeit prüfen und speichern.
<% } %> <% if (termine && termine.length) { %>
    <% termine.forEach(function(t){ var when = t.ganztags ? new Date(t.start).toLocaleDateString('de-DE', { timeZone: caldavTz, day: '2-digit', month: 'long', year: 'numeric' }) : new Date(t.start).toLocaleString('de-DE', { timeZone: caldavTz, weekday: 'short', day: '2-digit', month: '2-digit', year: 'numeric', hour: '2-digit', minute: '2-digit' }); var bis = (!t.ganztags && t.ende) ? new Date(t.ende).toLocaleTimeString('de-DE', { timeZone: caldavTz, hour: '2-digit', minute: '2-digit' }) : ''; %>
  • <%= t.typ === 'vorstellungsgespraech' ? 'Vorstellungsgespräch' : 'Termin' %> <%= t.titel %>

    <%= when %><% if (bis) { %>–<%= bis %> Uhr<% } %>

    <% if (t.ort) { %>

    📍 <%= t.ort %>

    <% } %> <% if (t.notiz) { %>

    <%= t.notiz %>

    <% } %>
  • <% }); %>
<% } else { %>

Noch keine Termine für diese Bewerbung.

<% } %>
class="border-t border-gray-200 dark:border-gray-700 pt-3"> Termin hinzufügen
<% } %>
<% const genStatus = application.generierung_status; %> <% const zeigeUnterlagen = genStatus || (anhaenge && anhaenge.length) || (application.stellenbeschreibung && application.stellenbeschreibung.trim()); %> <% if (zeigeUnterlagen) { %>

Bewerbungsunterlagen

<% if (!genStatus || genStatus === 'nicht_gestartet') { %>
Noch keine Unterlagen generiert. Ergänze bei Bedarf unten Notizen (z. B. die vollständige Firmenanschrift) und starte die Generierung.
<% } else if (genStatus === 'ausstehend') { %>
Die KI erstellt gerade individuelle Bewerbungsunterlagen … Diese Seite aktualisiert sich automatisch.
<% } else if (genStatus === 'fehler') { %>
Generierung fehlgeschlagen

<%= application.generierung_fehler || 'Unbekannter Fehler.' %>

<% } else if (genStatus === 'fertig') { %>
Unterlagen wurden erstellt. Bitte vor dem Versand prüfen und ggf. anpassen.
<% } %>
<% if (anhaenge && anhaenge.length) { %> <% } else if (genStatus !== 'ausstehend') { %>

Noch keine generierten Unterlagen vorhanden.

<% } %>
<% if ((application.email_anschreiben && application.email_anschreiben.trim()) || genStatus === 'fertig') { %>

Begleit-E-Mail

Kurzer, normgerechter Text zum Versand der Bewerbung per E-Mail (Unterlagen im Anhang). Du kannst Betreff und Text vor dem Versand frei anpassen und speichern.

<% } %>

Zusätzliche Infos für die Generierung – z. B. die vollständige Firmenanschrift (Straße, PLZ, Ort), ein Ansprechpartner oder besondere Hinweise zur Bewerbung. Die KI berücksichtigt diese Angaben.

Vorbelegt ist deine Auswahl aus den Einstellungen (Standard: Anschreiben und Lebenslauf). Wird der Lebenslauf abgewählt, führt ihn das Anschreiben auch nicht mehr unter „Anlagen“ auf.

<% if (basisAnhaenge && basisAnhaenge.length) { %>

Wähle aus, welche Anlagen (z. B. Zeugnisse) mitgeschickt werden. Vorbelegt ist deine Auswahl aus den Einstellungen (Standard: keine); die Auswahl wird auch im Anschreiben unter „Anlagen“ berücksichtigt.

<% basisAnhaenge.forEach(function(ba){ %> <% }); %>
<% } else { %>

Keine zusätzlichen Anlagen hinterlegt. Unter Vorlagen kannst du statische Anlagen (z. B. Zeugnisse) hochladen.

<% } %>
<% if (application.stellenbeschreibung && application.stellenbeschreibung.trim()) { %>
Importierte Stellenbeschreibung anzeigen
<% if (application.quelle_url) { %> <%= application.quelle_url %> <% } %>

<%= application.stellenbeschreibung %>

<% } %>
<% } %>

E-Mail-Korrespondenz

<% if (mailConfigured) { %>
<% } %>
<% if (!mailConfigured) { %>
E-Mail ist nicht konfiguriert. Bitte MAIL_HOST, MAIL_USER und MAIL_PASSWORD in der .env setzen.
<% } else { %> <% if (mailError) { %>
<%= mailError %>
<% } %> <% if (mailOk) { %>
<%= mailOk %>
<% } %> <% if (emails && emails.length) { %>
    <% emails.forEach(function(e){ var out = e.direction === 'out'; %>
  • <%= out ? 'Gesendet' : 'Empfangen' %> <%= out ? ('An: ' + (e.to_addr || '')) : ('Von: ' + (e.from_addr || '')) %>
    <%= e.email_date ? new Date(e.email_date).toLocaleString('de-DE', { timeZone: 'Europe/Berlin' }) : '' %>

    <%= e.subject || '(kein Betreff)' %>

    <% if (e.display_srcdoc) { %> <% } else { %>

    <%= e.body_text || '' %>

    <% } %> <% if (e.anhaenge && e.anhaenge.length) { %>
    <% e.anhaenge.forEach(function(a){ %> <%= a.name || 'Anhang' %> <% }); %>
    <% } %> <% if (!out) { %>
    <% } %>
  • <% }); %>
<% } else { %>

Noch keine E-Mails. Sende die Bewerbung unten oder rufe das Postfach ab.

<% } %>

Bewerbung per E-Mail senden

Versand über <%= mailFrom %>. Empfängeradresse eingeben, Betreff und Text prüfen, Anhänge auswählen und senden.

<% if (anhaenge && anhaenge.length) { %>

Anhänge

<% anhaenge.forEach(function(a){ %> <% }); %>
<% } else { %>

Keine generierten Anhänge vorhanden - erst Unterlagen generieren.

<% } %>
<% } %>
<%- include('partials/footer') %> <%- include('partials/favorit-script') %>