<%= favAnsicht ? 'Gemerkte Jobangebote' : 'Jobangebote' %>
<% if (favAnsicht) { %>
Angebote, die du dir mit dem Stern gemerkt hast — unabhängig davon, ob sie
noch offen oder bereits übernommen sind. Ein erneuter Klick auf den Stern
entfernt das Angebot wieder aus dieser Liste. Die Merkliste gilt nur für
Jobangebote und ist von den gemerkten Bewerbungen getrennt.
<% } else { %>
Hier landen Stellen, die von Drittanbietersoftware über die
POST /api/v1/joboffers
REST-Schnittstelle eingespielt werden. Ein Angebot lässt sich per Klick
als Bewerbung-Entwurf übernehmen. Hier siehst du nur offene
Angebote, die du dir nicht gemerkt hast — bereits übernommene
findest du im Tab „Übernommen“, gemerkte im Tab „Gemerkt“.
<% } %>
-
<% jobangebote.forEach(function(j){ %>
-
<%= j.status === 'offen' ? 'Offen' : (j.status === 'uebernommen' ? 'Übernommen' : (j.status === 'abgelehnt' ? 'Abgelehnt' : j.status)) %> <% if (j.quelle && j.quelle !== 'drittanbieter') { %> Quelle: <%= j.quelle %> <% } %> <% if (j.art) { %> <%= j.art %> <% } %>
<%= j.firma %>
<%= j.stelle %>
<% if (j.labelsArr && j.labelsArr.length) { %><%- include('partials/labelChips', { labels: j.labelsArr }) %><% } %> <% if (j.ort || j.gehalt) { %><% if (j.ort) { %><%= j.ort %><% } %> <% if (j.ort && j.gehalt) { %> · <% } %> <% if (j.gehalt) { %><%= j.gehalt %><% } %>
<% } %> <% if (j.adresse) { %>Anschrift: <%= j.adresse %>
<% } %> <% if (j.ansprechpartner) { %>Ansprechpartner: <%= j.ansprechpartner %>
<% } %> <% if (j.anzeige_datum) { %>Anzeige: <%= new Date(j.anzeige_datum).toLocaleDateString('de-DE') %>
<% } %> <% if (j.kontakt_email) { %>Kontakt: <%= j.kontakt_email %>
<% } %> <% if (j.beschreibung) { %><%= j.beschreibung %>
<% if (j.beschreibung.length > 400) { %> <% } %> <% } %> <% if (j.quelle_url) { %> <%= j.quelle_url %> <% } %><% if (j.verknuepfte_bewerbung_id && j.bewerbung_datum) { %> Bewerbung vom: <%= new Date(j.bewerbung_datum).toLocaleDateString('de-DE') %> <% } %> Einspielung: <%= j.created_at ? new Date(j.created_at + 'Z').toLocaleString('de-DE') : '' %> <% if (j.verknuepfte_bewerbung_id) { %> · Bewerbung #<%= j.verknuepfte_bewerbung_id %> <% } %>
<%- include('partials/favorit-button', { j: j }) %> <% if (j.verknuepfte_bewerbung_id) { %> Zur Bewerbung <% } else { %> <% } %>Beschreibung / Details bearbeiten
<% }); %>
Noch keine Jobangebote gemerkt.
Klicke bei einem Angebot auf Merken — es erscheint dann hier und wird aus der offenen Liste ausgeblendet.
Noch keine Jobangebote vorhanden.
Drittanbietersoftware kann Angebote über
POST /api/v1/joboffers
einspielen.
Wie werden Jobangebote eingespielt?
Jedes Angebot hat zwei Datumswerte:
- Anzeige (
anzeige_datum) — wann die Stellenanzeige ursprünglich erschienen ist; wird vom Einsender im Request mitgegeben. - Einspielung (
created_at) — wann das Angebot hier im Tracker über die REST-API angekommen ist; wird automatisch vom Server gesetzt, nicht im Request gesendet.
Angebot über die REST-API anlegen (API-Key im Header X-API-Key):
curl -X POST https://<host>/api/v1/joboffers \
-H "X-API-Key: $API_TOKEN" -H "Content-Type: application/json" \
-d '{
"external_id": "job-12345",
"quelle": "mein-crm",
"firma": "Acme GmbH",
"stelle": "Softwareentwickler (m/w/d)",
"ort": "Berlin",
"gehalt": "55.000 €",
"beschreibung": "…",
"quelle_url": "https://acme.example/job/12345",
"art": "Online-Portal",
"anzeige_datum": "2026-07-01",
"kontakt_email": "bewerbung@acme.example"
// "created_at" (Einspielung) NICHT mitsenden — wird vom Server automatisch gesetzt.
}'
Wiederholtes Senden mit derselben quelle + external_id aktualisiert das Angebot (Upsert). Die Doku/Swagger-UI liegt unter /swagger.