Rebranding zu NextJobs (nextjobs.cc)
- Markenname 'Bewerbungs-Tracker' -> 'NextJobs' im gesamten UI, Footer (incl. nextjobs.cc Copyright), Login, Wortmarke in der Top-Navi (Next + Jobs-Gradient), Favicon, Swagger/OpenAPI-Titel, CalDAV-PRODID, Browser-Erweiterung (manifest, content, background), Runner-Log und Doku. - Funktionale Begriffe (Bewerbungsunterlagen, -datum etc.) bleiben. - Docker-Registry (git.hackner.dev) als Infrastruktur unberuehrt. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Bewerbungs-Tracker
|
||||
# NextJobs
|
||||
|
||||
Ein professioneller Job Application Tracker für Jobcenter Grundsicherung Monatsberichte.
|
||||
|
||||
@@ -23,7 +23,7 @@ Ablauf:
|
||||
Standard-Anschreiben und den Lebenslauf als Text einfügen. Diese Basis-Unterlagen
|
||||
sind die Faktengrundlage; die KI erfindet nichts hinzu.
|
||||
2. **Stelle importieren** – Mit der Browser-Erweiterung (`extension/`) auf Indeed den
|
||||
Button **„An Bewerbungs-Tracker senden"** klicken.
|
||||
Button **„An NextJobs senden"** klicken.
|
||||
3. **Automatische Verarbeitung** – Der Tracker legt die Bewerbung mit Status
|
||||
**Entwurf** an und generiert im Hintergrund über die **Ollama Cloud API**
|
||||
zugeschnittene Bewerbungsunterlagen, die als PDF-Anhänge an der Bewerbung hängen.
|
||||
@@ -289,7 +289,7 @@ MIT
|
||||
|
||||
## Autor
|
||||
|
||||
Bewerbungs-Tracker für Jobcenter Grundsicherung
|
||||
NextJobs für Jobcenter Grundsicherung
|
||||
|
||||
---
|
||||
|
||||
|
||||
+4
-4
@@ -1,14 +1,14 @@
|
||||
# Bewerbungs-Tracker – Indeed Import (Browser-Erweiterung)
|
||||
# NextJobs – Indeed Import (Browser-Erweiterung)
|
||||
|
||||
Chromium-Erweiterung (Manifest V3), die auf Indeed einen Button **direkt neben der
|
||||
Stellenbeschreibung** einfügt. Ein Klick sendet alle Stelleninformationen an den
|
||||
Bewerbungs-Tracker. Dort wird die Stelle als **Entwurf** angelegt und die KI
|
||||
NextJobs. Dort wird die Stelle als **Entwurf** angelegt und die KI
|
||||
erstellt automatisch zugeschnittene Bewerbungsunterlagen (auf Basis der hinterlegten
|
||||
Vorlagen).
|
||||
|
||||
## Installation (Entwicklermodus)
|
||||
|
||||
1. Bewerbungs-Tracker starten (Standard: `http://localhost:3000`).
|
||||
1. NextJobs starten (Standard: `http://localhost:3000`).
|
||||
2. In Chrome/Edge/Brave `chrome://extensions` öffnen.
|
||||
3. **Entwicklermodus** oben rechts aktivieren.
|
||||
4. **Entpackte Erweiterung laden** klicken und diesen `extension/`-Ordner auswählen.
|
||||
@@ -23,7 +23,7 @@ Mit **Verbindung testen** prüfen, ob der Tracker erreichbar ist.
|
||||
|
||||
1. Auf `indeed.com` eine Stelle öffnen.
|
||||
2. Neben der Überschrift **„Vollständige Stellenbeschreibung"** erscheint der grüne
|
||||
Button **„An Bewerbungs-Tracker senden"**.
|
||||
Button **„An NextJobs senden"**.
|
||||
3. Klicken → die Stelle wird als Entwurf angelegt, die Unterlagen werden im
|
||||
Hintergrund generiert. Über den Link „Entwurf öffnen" gelangst du direkt zur
|
||||
Bewerbung im Tracker.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Service worker: performs the cross-origin POST to the Bewerbungs-Tracker.
|
||||
// Service worker: performs the cross-origin POST to the NextJobs.
|
||||
// Routing the request through the background worker (instead of the content
|
||||
// script) keeps it independent of the Indeed page's Content-Security-Policy.
|
||||
|
||||
@@ -56,7 +56,7 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
||||
sendResponse({
|
||||
ok: false,
|
||||
error:
|
||||
'Konnte den Bewerbungs-Tracker nicht erreichen. Läuft er, und ist die ' +
|
||||
'Konnte den NextJobs nicht erreichen. Läuft er, und ist die ' +
|
||||
'Adresse in den Erweiterungs-Einstellungen korrekt? (' + String(err.message) + ')',
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Content script: injects an "An Bewerbungs-Tracker senden" button next to the
|
||||
// Content script: injects an "An NextJobs senden" button next to the
|
||||
// Indeed job description, scrapes the job details and forwards them to the
|
||||
// tracker's import API (via the background service worker).
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
const btn = document.createElement('button');
|
||||
btn.type = 'button';
|
||||
btn.className = 'bt-import-btn';
|
||||
btn.innerHTML = ICON_SEND + '<span>An Bewerbungs-Tracker senden</span>';
|
||||
btn.innerHTML = ICON_SEND + '<span>An NextJobs senden</span>';
|
||||
|
||||
const status = document.createElement('div');
|
||||
status.className = 'bt-import-status';
|
||||
@@ -147,7 +147,7 @@
|
||||
setStatus(status, '', '');
|
||||
|
||||
chrome.runtime.sendMessage({ type: 'IMPORT_JOB', payload: payload }, (resp) => {
|
||||
btn.innerHTML = ICON_SEND + '<span>' + (originalLabel || 'An Bewerbungs-Tracker senden') + '</span>';
|
||||
btn.innerHTML = ICON_SEND + '<span>' + (originalLabel || 'An NextJobs senden') + '</span>';
|
||||
|
||||
if (chrome.runtime.lastError) {
|
||||
btn.disabled = false;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Bewerbungs-Tracker – Stellen-Import",
|
||||
"name": "NextJobs – Stellen-Import",
|
||||
"version": "1.1.0",
|
||||
"description": "Erfasst Stellen von jeder Webseite (nicht nur Indeed) über das Erweiterungs-Popup und sendet sie an den Bewerbungs-Tracker, der automatisch zugeschnittene Bewerbungsunterlagen erstellt.",
|
||||
"description": "Erfasst Stellen von jeder Webseite (nicht nur Indeed) über das Erweiterungs-Popup und sendet sie an den NextJobs, der automatisch zugeschnittene Bewerbungsunterlagen erstellt.",
|
||||
"permissions": ["storage", "scripting", "activeTab"],
|
||||
"host_permissions": [
|
||||
"*://*.indeed.com/*",
|
||||
@@ -24,6 +24,6 @@
|
||||
},
|
||||
"action": {
|
||||
"default_popup": "popup.html",
|
||||
"default_title": "Bewerbungs-Tracker"
|
||||
"default_title": "NextJobs"
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
// Third-party REST API (v1) for the Bewerbungs-Tracker.
|
||||
// Third-party REST API (v1) for the NextJobs.
|
||||
//
|
||||
// Mounted under /api/v1 in server.js. All endpoints except /health require an
|
||||
// API key sent in the X-API-Key header. The key is per-user: it is the
|
||||
|
||||
+1
-1
@@ -160,7 +160,7 @@ function buildICS(evt) {
|
||||
const lines = [
|
||||
'BEGIN:VCALENDAR',
|
||||
'VERSION:2.0',
|
||||
'PRODID:-//Bewerbungs-Tracker//Kalender//DE',
|
||||
'PRODID:-//NextJobs//Kalender//DE',
|
||||
'CALSCALE:GREGORIAN',
|
||||
'BEGIN:VEVENT',
|
||||
'UID:' + uid,
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ function buildOpenApiSpec(baseUrl = '') {
|
||||
return {
|
||||
openapi: '3.0.3',
|
||||
info: {
|
||||
title: 'Bewerbungs-Tracker REST-API',
|
||||
title: 'NextJobs REST-API',
|
||||
version: '1.0.0',
|
||||
description:
|
||||
'REST-API für Drittanbietersoftware zum Lesen und Verwalten von ' +
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ============================================
|
||||
Bewerbungs-Tracker - Custom Styles
|
||||
NextJobs - Custom Styles
|
||||
============================================ */
|
||||
|
||||
/* Base styles */
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Bewerbungs-Tracker">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="NextJobs">
|
||||
<defs>
|
||||
<linearGradient id="g" x1="0" y1="0" x2="1" y2="1">
|
||||
<stop offset="0" stop-color="#38bdf8"/>
|
||||
|
||||
|
Before Width: | Height: | Size: 642 B After Width: | Height: | Size: 632 B |
+2
-2
@@ -1,5 +1,5 @@
|
||||
// ============================================
|
||||
// Bewerbungs-Tracker - Client-side JavaScript
|
||||
// NextJobs - Client-side JavaScript
|
||||
// ============================================
|
||||
|
||||
// DOM Elements
|
||||
@@ -693,4 +693,4 @@ document.getElementById('currentYear').textContent = new Date().getFullYear();
|
||||
// Initialize
|
||||
// ============================================
|
||||
|
||||
console.log('Bewerbungs-Tracker initialized');
|
||||
console.log('NextJobs initialized');
|
||||
|
||||
@@ -48,7 +48,7 @@ cd "$PROJECT_DIR" || exit 1
|
||||
|
||||
# API-Erreichbarkeit prüfen — ohne den Tracker kann der Agent nichts importieren.
|
||||
if ! curl -fsS --max-time 10 http://localhost:4327/api/v1/health >/dev/null 2>&1; then
|
||||
echo "$(date -Is) FEHLER: Bewerbungs-Tracker (localhost:4327) nicht erreichbar – Lauf übersprungen." >> "$LOG"
|
||||
echo "$(date -Is) FEHLER: NextJobs (localhost:4327) nicht erreichbar – Lauf übersprungen." >> "$LOG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -3665,7 +3665,7 @@ initializeDatabase().then(async () => {
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>Bewerbungs-Tracker – API-Dokumentation</title>
|
||||
<title>NextJobs – API-Dokumentation</title>
|
||||
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css" />
|
||||
<style>
|
||||
html { box-sizing: border-box; overflow-y: scroll; }
|
||||
@@ -3678,7 +3678,7 @@ initializeDatabase().then(async () => {
|
||||
</head>
|
||||
<body>
|
||||
<div class="topbar">
|
||||
<strong>Bewerbungs-Tracker REST-API</strong>
|
||||
<strong>NextJobs REST-API</strong>
|
||||
<span style="opacity:.7">Drittanbieter-Schnittstelle v1</span>
|
||||
<span style="margin-left:auto">Authentifizierung: Header <code>X-API-Key</code></span>
|
||||
<a href="/">← zur App</a>
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
<svg class="w-12 h-12 text-blue-600 dark:text-blue-400 mb-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
|
||||
</svg>
|
||||
<h1 class="text-xl font-bold text-gray-800 dark:text-white">Bewerbungs-Tracker</h1>
|
||||
<h1 class="text-xl font-bold text-gray-800 dark:text-white">NextJobs</h1>
|
||||
<p class="text-sm text-gray-500 dark:text-gray-400 mt-1">Bitte anmelden</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<footer class="mt-12 border-t border-gray-200/80 dark:border-white/5">
|
||||
<div class="container mx-auto px-4 py-8 text-center">
|
||||
<p class="text-xs text-gray-400 dark:text-slate-500">
|
||||
Bewerbungssystem · © hackner.dev <span id="currentYear"><%= new Date().getFullYear() %></span>
|
||||
NextJobs · © nextjobs.cc <span id="currentYear"><%= new Date().getFullYear() %></span>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="theme-color" content="#2563eb">
|
||||
<title>Bewerbungs-Tracker</title>
|
||||
<title>NextJobs</title>
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
||||
<!-- Apply the dark class before first paint to avoid a light-mode flash (FOUC).
|
||||
Theme follows the browser/OS setting (prefers-color-scheme) — no manual toggle. -->
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
</svg>
|
||||
</span>
|
||||
<span class="whitespace-nowrap text-[15px] font-semibold leading-none tracking-tight">
|
||||
<span class="text-gray-900 dark:text-white">Bewerbungs</span><span class="bg-gradient-to-r from-sky-500 to-blue-600 bg-clip-text text-transparent">Tracker</span>
|
||||
<span class="text-gray-900 dark:text-white">Next</span><span class="bg-gradient-to-r from-sky-500 to-blue-600 bg-clip-text text-transparent">Jobs</span>
|
||||
</span>
|
||||
</a>
|
||||
|
||||
|
||||
+1
-1
@@ -91,7 +91,7 @@
|
||||
<label for="webseite" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">Webseite</label>
|
||||
<input type="text" id="webseite" name="webseite"
|
||||
class="w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md bg-white dark:bg-gray-700 text-gray-800 dark:text-white"
|
||||
placeholder="z. B. hackner.dev" value="<%= settings.webseite || '' %>">
|
||||
placeholder="z. B. nextjobs.cc" value="<%= settings.webseite || '' %>">
|
||||
</div>
|
||||
<div>
|
||||
<label for="geburtsdatum" class="block text-xs font-medium text-gray-500 dark:text-gray-400 mb-1">Geburtsdatum</label>
|
||||
|
||||
Reference in New Issue
Block a user