Duplicate safeguard: before creating an application (manual add and browser import) the server checks for an existing one for the same job — matched on a normalised source URL (job-id params like Indeed's jk pin the posting across paths/tracking) or an identical company + role (case/umlaut/whitespace-insensitive). On a match it returns 409 with the matches; the web form and the extension show the existing entry and re-submit with force=true only if the user confirms. Not a hard block, so legitimate re-applications stay possible. Universal capture: the extension popup becomes an editable capture form that works on any site. It extracts the active page on demand (schema.org JobPosting JSON-LD -> OpenGraph/meta -> h1/title/selection -> canonical URL), lets the user review/correct, and sends. The import route is now source-agnostic and derives the application source (art) from the URL instead of hardcoding Indeed; the Indeed on-page button remains as a fast path. Adds scripting/activeTab permissions. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
30 lines
835 B
JSON
30 lines
835 B
JSON
{
|
||
"manifest_version": 3,
|
||
"name": "Bewerbungs-Tracker – 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.",
|
||
"permissions": ["storage", "scripting", "activeTab"],
|
||
"host_permissions": [
|
||
"*://*.indeed.com/*",
|
||
"http://localhost/*",
|
||
"http://127.0.0.1/*",
|
||
"http://*/*",
|
||
"https://*/*"
|
||
],
|
||
"content_scripts": [
|
||
{
|
||
"matches": ["*://*.indeed.com/*"],
|
||
"js": ["content.js"],
|
||
"css": ["content.css"],
|
||
"run_at": "document_idle"
|
||
}
|
||
],
|
||
"background": {
|
||
"service_worker": "background.js"
|
||
},
|
||
"action": {
|
||
"default_popup": "popup.html",
|
||
"default_title": "Bewerbungs-Tracker"
|
||
}
|
||
}
|