diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index b874914..efe9418 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -76,7 +76,22 @@ jobs:
run: npm --workspace orchestrator run build:client
working-directory: .
+ docs:
+ name: Documentation
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: "npm"
+ cache-dependency-path: package-lock.json
+
+ - name: Install dependencies
+ run: npm ci --workspaces --include-workspace-root
+ working-directory: .
+
- name: Build documentation site
- if: matrix.project == 'orchestrator'
run: npm run check:docs
working-directory: .
diff --git a/.github/workflows/docs-version.yml b/.github/workflows/docs-version.yml
new file mode 100644
index 0000000..735c9b5
--- /dev/null
+++ b/.github/workflows/docs-version.yml
@@ -0,0 +1,62 @@
+name: docs-version
+
+on:
+ push:
+ tags: ["v*"]
+
+permissions:
+ contents: write
+
+concurrency:
+ group: docs-version-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ version-docs:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout main
+ uses: actions/checkout@v4
+ with:
+ ref: main
+ fetch-depth: 0
+
+ - name: Setup Node
+ uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ cache: "npm"
+ cache-dependency-path: package-lock.json
+
+ - name: Install dependencies
+ run: npm ci --workspaces --include-workspace-root
+ working-directory: .
+
+ - name: Derive docs version from tag
+ id: vars
+ run: |
+ VERSION="${GITHUB_REF_NAME#v}"
+ if [ -z "$VERSION" ]; then
+ echo "Unable to derive version from tag '$GITHUB_REF_NAME'" >&2
+ exit 1
+ fi
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
+
+ - name: Generate docs version
+ run: npm run docs:version -- "${{ steps.vars.outputs.version }}"
+ working-directory: .
+
+ - name: Commit and push generated docs version files
+ run: |
+ git config user.name "github-actions[bot]"
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
+
+ git add docs-site/versions.json docs-site/versioned_docs docs-site/versioned_sidebars
+
+ if git diff --cached --quiet; then
+ echo "No docs version changes detected; skipping commit."
+ exit 0
+ fi
+
+ git commit -m "docs: cut version ${{ steps.vars.outputs.version }}"
+ git push origin HEAD:main
diff --git a/.gitignore b/.gitignore
index 7295652..2e79626 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ node_modules/
**/node_modules/
**/.package-lock.json
**/.docusaurus/
+docs-site/.docusaurus/
docs-site/build/
# Data directory (bind mount in Docker)
diff --git a/biome.json b/biome.json
index 4d584a1..11fc24b 100644
--- a/biome.json
+++ b/biome.json
@@ -5,7 +5,12 @@
"indentWidth": 2
},
"files": {
- "includes": ["**", "!!**/dist"]
+ "includes": [
+ "**",
+ "!!**/dist",
+ "!!docs-site/.docusaurus",
+ "!!docs-site/build"
+ ]
},
"css": {
"parser": {
diff --git a/docs-site/.docusaurus/DONT-EDIT-THIS-FOLDER b/docs-site/.docusaurus/DONT-EDIT-THIS-FOLDER
deleted file mode 100644
index 6c06ae8..0000000
--- a/docs-site/.docusaurus/DONT-EDIT-THIS-FOLDER
+++ /dev/null
@@ -1,5 +0,0 @@
-This folder stores temp files that Docusaurus' client bundler accesses.
-
-DO NOT hand-modify files in this folder because they will be overwritten in the
-next build. You can clear all build artifacts (including this folder) with the
-`docusaurus clear` command.
diff --git a/docs-site/.docusaurus/client-modules.js b/docs-site/.docusaurus/client-modules.js
deleted file mode 100644
index 59af513..0000000
--- a/docs-site/.docusaurus/client-modules.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default [
- require("/Users/ssarfaraz/coding/personal/job-ops/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/layers.css"),
- require("/Users/ssarfaraz/coding/personal/job-ops/node_modules/infima/dist/css/default/default.css"),
- require("/Users/ssarfaraz/coding/personal/job-ops/node_modules/@docusaurus/theme-classic/lib/prism-include-languages"),
- require("/Users/ssarfaraz/coding/personal/job-ops/node_modules/@docusaurus/theme-classic/lib/nprogress"),
- require("/Users/ssarfaraz/coding/personal/job-ops/docs-site/src/css/custom.css"),
-];
diff --git a/docs-site/.docusaurus/codeTranslations.json b/docs-site/.docusaurus/codeTranslations.json
deleted file mode 100644
index 9e26dfe..0000000
--- a/docs-site/.docusaurus/codeTranslations.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/__mdx-loader-dependency.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/__mdx-loader-dependency.json
deleted file mode 100644
index 24c1ded..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/__mdx-loader-dependency.json
+++ /dev/null
@@ -1 +0,0 @@
-{"options":{"routeBasePath":"/","sidebarPath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/sidebars.ts","editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/","showLastUpdateAuthor":false,"showLastUpdateTime":true,"path":"docs","editCurrentVersion":false,"editLocalizedFiles":false,"tagsBasePath":"tags","include":["**/*.{md,mdx}"],"exclude":["**/_*.{js,jsx,ts,tsx,md,mdx}","**/_*/**","**/*.test.{js,jsx,ts,tsx}","**/__tests__/**"],"sidebarCollapsible":true,"sidebarCollapsed":true,"docsRootComponent":"@theme/DocsRoot","docVersionRootComponent":"@theme/DocVersionRoot","docRootComponent":"@theme/DocRoot","docItemComponent":"@theme/DocItem","docTagsListComponent":"@theme/DocTagsListPage","docTagDocListComponent":"@theme/DocTagDocListPage","docCategoryGeneratedIndexComponent":"@theme/DocCategoryGeneratedIndexPage","remarkPlugins":[],"rehypePlugins":[],"recmaPlugins":[],"beforeDefaultRemarkPlugins":[],"beforeDefaultRehypePlugins":[],"admonitions":true,"includeCurrentVersion":true,"disableVersioning":false,"versions":{},"breadcrumbs":true,"onInlineTags":"warn","id":"default"},"versionsMetadata":[{"versionName":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","path":"/docs/next","tagsPath":"/docs/next/tags","editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs","isLast":false,"sidebarFilePath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/sidebars.ts","contentPath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/docs"},{"versionName":"1.0.0","label":"1.0.0","banner":null,"badge":true,"noIndex":false,"className":"docs-version-1.0.0","path":"/docs/","tagsPath":"/docs/tags","editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0","isLast":true,"routePriority":-1,"sidebarFilePath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/versioned_sidebars/version-1.0.0-sidebars.json","contentPath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/versioned_docs/version-1.0.0"}]}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/__plugin.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/__plugin.json
deleted file mode 100644
index 3818ad0..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/__plugin.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "name": "docusaurus-plugin-content-docs",
- "id": "default"
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/p/docs-7fc.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/p/docs-7fc.json
deleted file mode 100644
index add5bd2..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/p/docs-7fc.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":{"pluginId":"default","version":"1.0.0","label":"1.0.0","banner":null,"badge":true,"noIndex":false,"className":"docs-version-1.0.0","isLast":true,"docsSidebars":{"docsSidebar":[{"type":"link","href":"/docs/","label":"JobOps Documentation","docId":"intro","unlisted":false},{"type":"category","label":"Getting Started","items":[{"type":"link","href":"/docs/getting-started/self-hosting","label":"Self-Hosting (Docker Compose)","docId":"getting-started/self-hosting","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Core Features","items":[{"type":"link","href":"/docs/features/orchestrator","label":"Orchestrator","docId":"features/orchestrator","unlisted":false},{"type":"link","href":"/docs/features/ghostwriter","label":"Ghostwriter","docId":"features/ghostwriter","unlisted":false},{"type":"link","href":"/docs/features/post-application-tracking","label":"Post-Application Tracking","docId":"features/post-application-tracking","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Extractors","items":[{"type":"link","href":"/docs/extractors/overview","label":"Extractors Overview","docId":"extractors/overview","unlisted":false},{"type":"link","href":"/docs/extractors/gradcracker","label":"Gradcracker Extractor","docId":"extractors/gradcracker","unlisted":false},{"type":"link","href":"/docs/extractors/jobspy","label":"JobSpy Extractor","docId":"extractors/jobspy","unlisted":false},{"type":"link","href":"/docs/extractors/manual","label":"Manual Import Extractor","docId":"extractors/manual","unlisted":false},{"type":"link","href":"/docs/extractors/ukvisajobs","label":"UKVisaJobs Extractor","docId":"extractors/ukvisajobs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Self-Hosting & Ops","items":[{"type":"link","href":"/docs/getting-started/self-hosting","label":"Self-Hosting (Docker Compose)","docId":"getting-started/self-hosting","unlisted":false},{"type":"link","href":"/docs/troubleshooting/common-problems","label":"Common Problems","docId":"troubleshooting/common-problems","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Troubleshooting","items":[{"type":"link","href":"/docs/troubleshooting/common-problems","label":"Common Problems","docId":"troubleshooting/common-problems","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference / FAQ","items":[{"type":"link","href":"/docs/reference/faq","label":"FAQ","docId":"reference/faq","unlisted":false},{"type":"link","href":"/docs/reference/documentation-style-guide","label":"Documentation Style Guide","docId":"reference/documentation-style-guide","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"extractors/gradcracker":{"id":"extractors/gradcracker","title":"Gradcracker Extractor","description":"How the Gradcracker crawler builds search URLs and extracts jobs.","sidebar":"docsSidebar"},"extractors/jobspy":{"id":"extractors/jobspy","title":"JobSpy Extractor","description":"How the JobSpy Python wrapper is orchestrated and normalized.","sidebar":"docsSidebar"},"extractors/manual":{"id":"extractors/manual","title":"Manual Import Extractor","description":"Import jobs from pasted descriptions and run AI-assisted inference.","sidebar":"docsSidebar"},"extractors/overview":{"id":"extractors/overview","title":"Extractors Overview","description":"Technical index of supported extractors and how they work.","sidebar":"docsSidebar"},"extractors/ukvisajobs":{"id":"extractors/ukvisajobs","title":"UKVisaJobs Extractor","description":"Authenticated session flow, API pagination, and orchestrator ingestion.","sidebar":"docsSidebar"},"features/ghostwriter":{"id":"features/ghostwriter","title":"Ghostwriter","description":"Context-aware per-job AI chat assistant behavior and API surface.","sidebar":"docsSidebar"},"features/orchestrator":{"id":"features/orchestrator","title":"Orchestrator","description":"Job states, ready flow, and PDF generation/regeneration behavior.","sidebar":"docsSidebar"},"features/post-application-tracking":{"id":"features/post-application-tracking","title":"Post-Application Tracking","description":"Gmail-based tracking inbox, smart routing, and review workflow.","sidebar":"docsSidebar"},"getting-started/self-hosting":{"id":"getting-started/self-hosting","title":"Self-Hosting (Docker Compose)","description":"Deploy JobOps with Docker Compose and configure onboarding integrations.","sidebar":"docsSidebar"},"intro":{"id":"intro","title":"JobOps Documentation","description":"Documentation index for setup, features, extractors, and common problems.","sidebar":"docsSidebar"},"reference/documentation-style-guide":{"id":"reference/documentation-style-guide","title":"Documentation Style Guide","description":"Standards for writing user-facing docs in this repository.","sidebar":"docsSidebar"},"reference/faq":{"id":"reference/faq","title":"FAQ","description":"Frequently asked questions about deployment, docs, and operations.","sidebar":"docsSidebar"},"troubleshooting/common-problems":{"id":"troubleshooting/common-problems","title":"Common Problems","description":"Quick fixes for the most frequent setup and runtime issues.","sidebar":"docsSidebar"}}}}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/p/docs-next-d71.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/p/docs-next-d71.json
deleted file mode 100644
index 9392db3..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/p/docs-next-d71.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":{"pluginId":"default","version":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","isLast":false,"docsSidebars":{"docsSidebar":[{"type":"link","href":"/docs/next/","label":"JobOps Documentation","docId":"intro","unlisted":false},{"type":"category","label":"Getting Started","items":[{"type":"link","href":"/docs/next/getting-started/self-hosting","label":"Self-Hosting (Docker Compose)","docId":"getting-started/self-hosting","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Core Features","items":[{"type":"link","href":"/docs/next/features/orchestrator","label":"Orchestrator","docId":"features/orchestrator","unlisted":false},{"type":"link","href":"/docs/next/features/ghostwriter","label":"Ghostwriter","docId":"features/ghostwriter","unlisted":false},{"type":"link","href":"/docs/next/features/post-application-tracking","label":"Post-Application Tracking","docId":"features/post-application-tracking","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Extractors","items":[{"type":"link","href":"/docs/next/extractors/overview","label":"Extractors Overview","docId":"extractors/overview","unlisted":false},{"type":"link","href":"/docs/next/extractors/gradcracker","label":"Gradcracker Extractor","docId":"extractors/gradcracker","unlisted":false},{"type":"link","href":"/docs/next/extractors/jobspy","label":"JobSpy Extractor","docId":"extractors/jobspy","unlisted":false},{"type":"link","href":"/docs/next/extractors/manual","label":"Manual Import Extractor","docId":"extractors/manual","unlisted":false},{"type":"link","href":"/docs/next/extractors/ukvisajobs","label":"UKVisaJobs Extractor","docId":"extractors/ukvisajobs","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Self-Hosting & Ops","items":[{"type":"link","href":"/docs/next/getting-started/self-hosting","label":"Self-Hosting (Docker Compose)","docId":"getting-started/self-hosting","unlisted":false},{"type":"link","href":"/docs/next/troubleshooting/common-problems","label":"Common Problems","docId":"troubleshooting/common-problems","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Troubleshooting","items":[{"type":"link","href":"/docs/next/troubleshooting/common-problems","label":"Common Problems","docId":"troubleshooting/common-problems","unlisted":false}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference / FAQ","items":[{"type":"link","href":"/docs/next/reference/faq","label":"FAQ","docId":"reference/faq","unlisted":false},{"type":"link","href":"/docs/next/reference/documentation-style-guide","label":"Documentation Style Guide","docId":"reference/documentation-style-guide","unlisted":false}],"collapsed":true,"collapsible":true}]},"docs":{"extractors/gradcracker":{"id":"extractors/gradcracker","title":"Gradcracker Extractor","description":"How the Gradcracker crawler builds search URLs and extracts jobs.","sidebar":"docsSidebar"},"extractors/jobspy":{"id":"extractors/jobspy","title":"JobSpy Extractor","description":"How the JobSpy Python wrapper is orchestrated and normalized.","sidebar":"docsSidebar"},"extractors/manual":{"id":"extractors/manual","title":"Manual Import Extractor","description":"Import jobs from pasted descriptions and run AI-assisted inference.","sidebar":"docsSidebar"},"extractors/overview":{"id":"extractors/overview","title":"Extractors Overview","description":"Technical index of supported extractors and how they work.","sidebar":"docsSidebar"},"extractors/ukvisajobs":{"id":"extractors/ukvisajobs","title":"UKVisaJobs Extractor","description":"Authenticated session flow, API pagination, and orchestrator ingestion.","sidebar":"docsSidebar"},"features/ghostwriter":{"id":"features/ghostwriter","title":"Ghostwriter","description":"Context-aware per-job AI chat assistant behavior and API surface.","sidebar":"docsSidebar"},"features/orchestrator":{"id":"features/orchestrator","title":"Orchestrator","description":"Job states, ready flow, and PDF generation/regeneration behavior.","sidebar":"docsSidebar"},"features/post-application-tracking":{"id":"features/post-application-tracking","title":"Post-Application Tracking","description":"Gmail-based tracking inbox, smart routing, and review workflow.","sidebar":"docsSidebar"},"getting-started/self-hosting":{"id":"getting-started/self-hosting","title":"Self-Hosting (Docker Compose)","description":"Deploy JobOps with Docker Compose and configure onboarding integrations.","sidebar":"docsSidebar"},"intro":{"id":"intro","title":"JobOps Documentation","description":"Documentation index for setup, features, extractors, and common problems.","sidebar":"docsSidebar"},"reference/documentation-style-guide":{"id":"reference/documentation-style-guide","title":"Documentation Style Guide","description":"Standards for writing user-facing docs in this repository.","sidebar":"docsSidebar"},"reference/faq":{"id":"reference/faq","title":"FAQ","description":"Frequently asked questions about deployment, docs, and operations.","sidebar":"docsSidebar"},"troubleshooting/common-problems":{"id":"troubleshooting/common-problems","title":"Common Problems","description":"Quick fixes for the most frequent setup and runtime issues.","sidebar":"docsSidebar"}}}}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-gradcracker-md-aa2.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-gradcracker-md-aa2.json
deleted file mode 100644
index aa386a7..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-gradcracker-md-aa2.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/gradcracker",
- "title": "Gradcracker Extractor",
- "description": "How the Gradcracker crawler builds search URLs and extracts jobs.",
- "source": "@site/docs/extractors/gradcracker.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/gradcracker",
- "permalink": "/docs/next/extractors/gradcracker",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/gradcracker.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 2,
- "frontMatter": {
- "id": "gradcracker",
- "title": "Gradcracker Extractor",
- "description": "How the Gradcracker crawler builds search URLs and extracts jobs.",
- "sidebar_position": 2
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Extractors Overview",
- "permalink": "/docs/next/extractors/overview"
- },
- "next": {
- "title": "JobSpy Extractor",
- "permalink": "/docs/next/extractors/jobspy"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-jobspy-md-e48.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-jobspy-md-e48.json
deleted file mode 100644
index a16e7cd..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-jobspy-md-e48.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/jobspy",
- "title": "JobSpy Extractor",
- "description": "How the JobSpy Python wrapper is orchestrated and normalized.",
- "source": "@site/docs/extractors/jobspy.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/jobspy",
- "permalink": "/docs/next/extractors/jobspy",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/jobspy.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 3,
- "frontMatter": {
- "id": "jobspy",
- "title": "JobSpy Extractor",
- "description": "How the JobSpy Python wrapper is orchestrated and normalized.",
- "sidebar_position": 3
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Gradcracker Extractor",
- "permalink": "/docs/next/extractors/gradcracker"
- },
- "next": {
- "title": "Manual Import Extractor",
- "permalink": "/docs/next/extractors/manual"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-manual-md-d05.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-manual-md-d05.json
deleted file mode 100644
index 0fd578f..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-manual-md-d05.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/manual",
- "title": "Manual Import Extractor",
- "description": "Import jobs from pasted descriptions and run AI-assisted inference.",
- "source": "@site/docs/extractors/manual.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/manual",
- "permalink": "/docs/next/extractors/manual",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/manual.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 4,
- "frontMatter": {
- "id": "manual",
- "title": "Manual Import Extractor",
- "description": "Import jobs from pasted descriptions and run AI-assisted inference.",
- "sidebar_position": 4
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "JobSpy Extractor",
- "permalink": "/docs/next/extractors/jobspy"
- },
- "next": {
- "title": "UKVisaJobs Extractor",
- "permalink": "/docs/next/extractors/ukvisajobs"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-overview-md-749.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-overview-md-749.json
deleted file mode 100644
index 00b028f..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-overview-md-749.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/overview",
- "title": "Extractors Overview",
- "description": "Technical index of supported extractors and how they work.",
- "source": "@site/docs/extractors/overview.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/overview",
- "permalink": "/docs/next/extractors/overview",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/overview.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "overview",
- "title": "Extractors Overview",
- "description": "Technical index of supported extractors and how they work.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Post-Application Tracking",
- "permalink": "/docs/next/features/post-application-tracking"
- },
- "next": {
- "title": "Gradcracker Extractor",
- "permalink": "/docs/next/extractors/gradcracker"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-ukvisajobs-md-389.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-ukvisajobs-md-389.json
deleted file mode 100644
index 67cfe40..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-extractors-ukvisajobs-md-389.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/ukvisajobs",
- "title": "UKVisaJobs Extractor",
- "description": "Authenticated session flow, API pagination, and orchestrator ingestion.",
- "source": "@site/docs/extractors/ukvisajobs.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/ukvisajobs",
- "permalink": "/docs/next/extractors/ukvisajobs",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/ukvisajobs.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 5,
- "frontMatter": {
- "id": "ukvisajobs",
- "title": "UKVisaJobs Extractor",
- "description": "Authenticated session flow, API pagination, and orchestrator ingestion.",
- "sidebar_position": 5
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Manual Import Extractor",
- "permalink": "/docs/next/extractors/manual"
- },
- "next": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/next/getting-started/self-hosting"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-ghostwriter-md-b88.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-ghostwriter-md-b88.json
deleted file mode 100644
index 3d9a545..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-ghostwriter-md-b88.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "features/ghostwriter",
- "title": "Ghostwriter",
- "description": "Context-aware per-job AI chat assistant behavior and API surface.",
- "source": "@site/docs/features/ghostwriter.md",
- "sourceDirName": "features",
- "slug": "/features/ghostwriter",
- "permalink": "/docs/next/features/ghostwriter",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/features/ghostwriter.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 2,
- "frontMatter": {
- "id": "ghostwriter",
- "title": "Ghostwriter",
- "description": "Context-aware per-job AI chat assistant behavior and API surface.",
- "sidebar_position": 2
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Orchestrator",
- "permalink": "/docs/next/features/orchestrator"
- },
- "next": {
- "title": "Post-Application Tracking",
- "permalink": "/docs/next/features/post-application-tracking"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-orchestrator-md-fd3.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-orchestrator-md-fd3.json
deleted file mode 100644
index 395ca18..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-orchestrator-md-fd3.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "features/orchestrator",
- "title": "Orchestrator",
- "description": "Job states, ready flow, and PDF generation/regeneration behavior.",
- "source": "@site/docs/features/orchestrator.md",
- "sourceDirName": "features",
- "slug": "/features/orchestrator",
- "permalink": "/docs/next/features/orchestrator",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/features/orchestrator.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "orchestrator",
- "title": "Orchestrator",
- "description": "Job states, ready flow, and PDF generation/regeneration behavior.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/next/getting-started/self-hosting"
- },
- "next": {
- "title": "Ghostwriter",
- "permalink": "/docs/next/features/ghostwriter"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-post-application-tracking-md-5cf.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-post-application-tracking-md-5cf.json
deleted file mode 100644
index 5245a46..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-features-post-application-tracking-md-5cf.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "features/post-application-tracking",
- "title": "Post-Application Tracking",
- "description": "Gmail-based tracking inbox, smart routing, and review workflow.",
- "source": "@site/docs/features/post-application-tracking.md",
- "sourceDirName": "features",
- "slug": "/features/post-application-tracking",
- "permalink": "/docs/next/features/post-application-tracking",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/features/post-application-tracking.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 3,
- "frontMatter": {
- "id": "post-application-tracking",
- "title": "Post-Application Tracking",
- "description": "Gmail-based tracking inbox, smart routing, and review workflow.",
- "sidebar_position": 3
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Ghostwriter",
- "permalink": "/docs/next/features/ghostwriter"
- },
- "next": {
- "title": "Extractors Overview",
- "permalink": "/docs/next/extractors/overview"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-getting-started-self-hosting-md-47e.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-getting-started-self-hosting-md-47e.json
deleted file mode 100644
index 37b41d2..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-getting-started-self-hosting-md-47e.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "getting-started/self-hosting",
- "title": "Self-Hosting (Docker Compose)",
- "description": "Deploy JobOps with Docker Compose and configure onboarding integrations.",
- "source": "@site/docs/getting-started/self-hosting.md",
- "sourceDirName": "getting-started",
- "slug": "/getting-started/self-hosting",
- "permalink": "/docs/next/getting-started/self-hosting",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/getting-started/self-hosting.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "self-hosting",
- "title": "Self-Hosting (Docker Compose)",
- "description": "Deploy JobOps with Docker Compose and configure onboarding integrations.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "JobOps Documentation",
- "permalink": "/docs/next/"
- },
- "next": {
- "title": "Orchestrator",
- "permalink": "/docs/next/features/orchestrator"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-intro-md-0e3.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-intro-md-0e3.json
deleted file mode 100644
index f5b403c..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-intro-md-0e3.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "id": "intro",
- "title": "JobOps Documentation",
- "description": "Documentation index for setup, features, extractors, and common problems.",
- "source": "@site/docs/intro.md",
- "sourceDirName": ".",
- "slug": "/",
- "permalink": "/docs/next/",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/intro.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "intro",
- "title": "JobOps Documentation",
- "description": "Documentation index for setup, features, extractors, and common problems.",
- "sidebar_position": 1,
- "slug": "/"
- },
- "sidebar": "docsSidebar",
- "next": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/next/getting-started/self-hosting"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-reference-documentation-style-guide-md-b28.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-reference-documentation-style-guide-md-b28.json
deleted file mode 100644
index 210cdf5..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-reference-documentation-style-guide-md-b28.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "id": "reference/documentation-style-guide",
- "title": "Documentation Style Guide",
- "description": "Standards for writing user-facing docs in this repository.",
- "source": "@site/docs/reference/documentation-style-guide.md",
- "sourceDirName": "reference",
- "slug": "/reference/documentation-style-guide",
- "permalink": "/docs/next/reference/documentation-style-guide",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/reference/documentation-style-guide.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 2,
- "frontMatter": {
- "id": "documentation-style-guide",
- "title": "Documentation Style Guide",
- "description": "Standards for writing user-facing docs in this repository.",
- "sidebar_position": 2
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "FAQ",
- "permalink": "/docs/next/reference/faq"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-reference-faq-md-656.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-reference-faq-md-656.json
deleted file mode 100644
index 1fd0113..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-reference-faq-md-656.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "reference/faq",
- "title": "FAQ",
- "description": "Frequently asked questions about deployment, docs, and operations.",
- "source": "@site/docs/reference/faq.md",
- "sourceDirName": "reference",
- "slug": "/reference/faq",
- "permalink": "/docs/next/reference/faq",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/reference/faq.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "faq",
- "title": "FAQ",
- "description": "Frequently asked questions about deployment, docs, and operations.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Common Problems",
- "permalink": "/docs/next/troubleshooting/common-problems"
- },
- "next": {
- "title": "Documentation Style Guide",
- "permalink": "/docs/next/reference/documentation-style-guide"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-troubleshooting-common-problems-md-ced.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-troubleshooting-common-problems-md-ced.json
deleted file mode 100644
index 1496c04..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-docs-troubleshooting-common-problems-md-ced.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "troubleshooting/common-problems",
- "title": "Common Problems",
- "description": "Quick fixes for the most frequent setup and runtime issues.",
- "source": "@site/docs/troubleshooting/common-problems.md",
- "sourceDirName": "troubleshooting",
- "slug": "/troubleshooting/common-problems",
- "permalink": "/docs/next/troubleshooting/common-problems",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/troubleshooting/common-problems.md",
- "tags": [],
- "version": "current",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "common-problems",
- "title": "Common Problems",
- "description": "Quick fixes for the most frequent setup and runtime issues.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/next/getting-started/self-hosting"
- },
- "next": {
- "title": "Common Problems",
- "permalink": "/docs/next/troubleshooting/common-problems"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-gradcracker-md-529.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-gradcracker-md-529.json
deleted file mode 100644
index 47762c7..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-gradcracker-md-529.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/gradcracker",
- "title": "Gradcracker Extractor",
- "description": "How the Gradcracker crawler builds search URLs and extracts jobs.",
- "source": "@site/versioned_docs/version-1.0.0/extractors/gradcracker.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/gradcracker",
- "permalink": "/docs/extractors/gradcracker",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/gradcracker.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 2,
- "frontMatter": {
- "id": "gradcracker",
- "title": "Gradcracker Extractor",
- "description": "How the Gradcracker crawler builds search URLs and extracts jobs.",
- "sidebar_position": 2
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Extractors Overview",
- "permalink": "/docs/extractors/overview"
- },
- "next": {
- "title": "JobSpy Extractor",
- "permalink": "/docs/extractors/jobspy"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-jobspy-md-80d.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-jobspy-md-80d.json
deleted file mode 100644
index 062c56f..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-jobspy-md-80d.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/jobspy",
- "title": "JobSpy Extractor",
- "description": "How the JobSpy Python wrapper is orchestrated and normalized.",
- "source": "@site/versioned_docs/version-1.0.0/extractors/jobspy.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/jobspy",
- "permalink": "/docs/extractors/jobspy",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/jobspy.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 3,
- "frontMatter": {
- "id": "jobspy",
- "title": "JobSpy Extractor",
- "description": "How the JobSpy Python wrapper is orchestrated and normalized.",
- "sidebar_position": 3
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Gradcracker Extractor",
- "permalink": "/docs/extractors/gradcracker"
- },
- "next": {
- "title": "Manual Import Extractor",
- "permalink": "/docs/extractors/manual"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-manual-md-479.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-manual-md-479.json
deleted file mode 100644
index cc37d93..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-manual-md-479.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/manual",
- "title": "Manual Import Extractor",
- "description": "Import jobs from pasted descriptions and run AI-assisted inference.",
- "source": "@site/versioned_docs/version-1.0.0/extractors/manual.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/manual",
- "permalink": "/docs/extractors/manual",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/manual.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 4,
- "frontMatter": {
- "id": "manual",
- "title": "Manual Import Extractor",
- "description": "Import jobs from pasted descriptions and run AI-assisted inference.",
- "sidebar_position": 4
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "JobSpy Extractor",
- "permalink": "/docs/extractors/jobspy"
- },
- "next": {
- "title": "UKVisaJobs Extractor",
- "permalink": "/docs/extractors/ukvisajobs"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-overview-md-6d9.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-overview-md-6d9.json
deleted file mode 100644
index 68ea4b0..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-overview-md-6d9.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/overview",
- "title": "Extractors Overview",
- "description": "Technical index of supported extractors and how they work.",
- "source": "@site/versioned_docs/version-1.0.0/extractors/overview.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/overview",
- "permalink": "/docs/extractors/overview",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/overview.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "overview",
- "title": "Extractors Overview",
- "description": "Technical index of supported extractors and how they work.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Post-Application Tracking",
- "permalink": "/docs/features/post-application-tracking"
- },
- "next": {
- "title": "Gradcracker Extractor",
- "permalink": "/docs/extractors/gradcracker"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-ukvisajobs-md-31a.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-ukvisajobs-md-31a.json
deleted file mode 100644
index d3ca51e..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-extractors-ukvisajobs-md-31a.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "extractors/ukvisajobs",
- "title": "UKVisaJobs Extractor",
- "description": "Authenticated session flow, API pagination, and orchestrator ingestion.",
- "source": "@site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md",
- "sourceDirName": "extractors",
- "slug": "/extractors/ukvisajobs",
- "permalink": "/docs/extractors/ukvisajobs",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 5,
- "frontMatter": {
- "id": "ukvisajobs",
- "title": "UKVisaJobs Extractor",
- "description": "Authenticated session flow, API pagination, and orchestrator ingestion.",
- "sidebar_position": 5
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Manual Import Extractor",
- "permalink": "/docs/extractors/manual"
- },
- "next": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/getting-started/self-hosting"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-ghostwriter-md-185.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-ghostwriter-md-185.json
deleted file mode 100644
index 8fe603f..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-ghostwriter-md-185.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "features/ghostwriter",
- "title": "Ghostwriter",
- "description": "Context-aware per-job AI chat assistant behavior and API surface.",
- "source": "@site/versioned_docs/version-1.0.0/features/ghostwriter.md",
- "sourceDirName": "features",
- "slug": "/features/ghostwriter",
- "permalink": "/docs/features/ghostwriter",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/features/ghostwriter.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 2,
- "frontMatter": {
- "id": "ghostwriter",
- "title": "Ghostwriter",
- "description": "Context-aware per-job AI chat assistant behavior and API surface.",
- "sidebar_position": 2
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Orchestrator",
- "permalink": "/docs/features/orchestrator"
- },
- "next": {
- "title": "Post-Application Tracking",
- "permalink": "/docs/features/post-application-tracking"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-orchestrator-md-24b.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-orchestrator-md-24b.json
deleted file mode 100644
index f31ab5a..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-orchestrator-md-24b.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "features/orchestrator",
- "title": "Orchestrator",
- "description": "Job states, ready flow, and PDF generation/regeneration behavior.",
- "source": "@site/versioned_docs/version-1.0.0/features/orchestrator.md",
- "sourceDirName": "features",
- "slug": "/features/orchestrator",
- "permalink": "/docs/features/orchestrator",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/features/orchestrator.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "orchestrator",
- "title": "Orchestrator",
- "description": "Job states, ready flow, and PDF generation/regeneration behavior.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/getting-started/self-hosting"
- },
- "next": {
- "title": "Ghostwriter",
- "permalink": "/docs/features/ghostwriter"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-post-application-tracking-md-3a9.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-post-application-tracking-md-3a9.json
deleted file mode 100644
index af73f35..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-features-post-application-tracking-md-3a9.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "features/post-application-tracking",
- "title": "Post-Application Tracking",
- "description": "Gmail-based tracking inbox, smart routing, and review workflow.",
- "source": "@site/versioned_docs/version-1.0.0/features/post-application-tracking.md",
- "sourceDirName": "features",
- "slug": "/features/post-application-tracking",
- "permalink": "/docs/features/post-application-tracking",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/features/post-application-tracking.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 3,
- "frontMatter": {
- "id": "post-application-tracking",
- "title": "Post-Application Tracking",
- "description": "Gmail-based tracking inbox, smart routing, and review workflow.",
- "sidebar_position": 3
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Ghostwriter",
- "permalink": "/docs/features/ghostwriter"
- },
- "next": {
- "title": "Extractors Overview",
- "permalink": "/docs/extractors/overview"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-getting-started-self-hosting-md-d3f.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-getting-started-self-hosting-md-d3f.json
deleted file mode 100644
index 58f685d..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-getting-started-self-hosting-md-d3f.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "getting-started/self-hosting",
- "title": "Self-Hosting (Docker Compose)",
- "description": "Deploy JobOps with Docker Compose and configure onboarding integrations.",
- "source": "@site/versioned_docs/version-1.0.0/getting-started/self-hosting.md",
- "sourceDirName": "getting-started",
- "slug": "/getting-started/self-hosting",
- "permalink": "/docs/getting-started/self-hosting",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/getting-started/self-hosting.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "self-hosting",
- "title": "Self-Hosting (Docker Compose)",
- "description": "Deploy JobOps with Docker Compose and configure onboarding integrations.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "JobOps Documentation",
- "permalink": "/docs/"
- },
- "next": {
- "title": "Orchestrator",
- "permalink": "/docs/features/orchestrator"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-intro-md-5d9.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-intro-md-5d9.json
deleted file mode 100644
index 40636e6..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-intro-md-5d9.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "id": "intro",
- "title": "JobOps Documentation",
- "description": "Documentation index for setup, features, extractors, and common problems.",
- "source": "@site/versioned_docs/version-1.0.0/intro.md",
- "sourceDirName": ".",
- "slug": "/",
- "permalink": "/docs/",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/intro.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "intro",
- "title": "JobOps Documentation",
- "description": "Documentation index for setup, features, extractors, and common problems.",
- "sidebar_position": 1,
- "slug": "/"
- },
- "sidebar": "docsSidebar",
- "next": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/getting-started/self-hosting"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-reference-documentation-style-guide-md-efe.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-reference-documentation-style-guide-md-efe.json
deleted file mode 100644
index 637e9fc..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-reference-documentation-style-guide-md-efe.json
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "id": "reference/documentation-style-guide",
- "title": "Documentation Style Guide",
- "description": "Standards for writing user-facing docs in this repository.",
- "source": "@site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md",
- "sourceDirName": "reference",
- "slug": "/reference/documentation-style-guide",
- "permalink": "/docs/reference/documentation-style-guide",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 2,
- "frontMatter": {
- "id": "documentation-style-guide",
- "title": "Documentation Style Guide",
- "description": "Standards for writing user-facing docs in this repository.",
- "sidebar_position": 2
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "FAQ",
- "permalink": "/docs/reference/faq"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-reference-faq-md-f1a.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-reference-faq-md-f1a.json
deleted file mode 100644
index f2dbfee..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-reference-faq-md-f1a.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "reference/faq",
- "title": "FAQ",
- "description": "Frequently asked questions about deployment, docs, and operations.",
- "source": "@site/versioned_docs/version-1.0.0/reference/faq.md",
- "sourceDirName": "reference",
- "slug": "/reference/faq",
- "permalink": "/docs/reference/faq",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/reference/faq.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "faq",
- "title": "FAQ",
- "description": "Frequently asked questions about deployment, docs, and operations.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Common Problems",
- "permalink": "/docs/troubleshooting/common-problems"
- },
- "next": {
- "title": "Documentation Style Guide",
- "permalink": "/docs/reference/documentation-style-guide"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-troubleshooting-common-problems-md-d94.json b/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-troubleshooting-common-problems-md-d94.json
deleted file mode 100644
index 92d085e..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-content-docs/default/site-versioned-docs-version-1-0-0-troubleshooting-common-problems-md-d94.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "id": "troubleshooting/common-problems",
- "title": "Common Problems",
- "description": "Quick fixes for the most frequent setup and runtime issues.",
- "source": "@site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md",
- "sourceDirName": "troubleshooting",
- "slug": "/troubleshooting/common-problems",
- "permalink": "/docs/troubleshooting/common-problems",
- "draft": false,
- "unlisted": false,
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md",
- "tags": [],
- "version": "1.0.0",
- "lastUpdatedAt": 1539502055000,
- "sidebarPosition": 1,
- "frontMatter": {
- "id": "common-problems",
- "title": "Common Problems",
- "description": "Quick fixes for the most frequent setup and runtime issues.",
- "sidebar_position": 1
- },
- "sidebar": "docsSidebar",
- "previous": {
- "title": "Self-Hosting (Docker Compose)",
- "permalink": "/docs/getting-started/self-hosting"
- },
- "next": {
- "title": "Common Problems",
- "permalink": "/docs/troubleshooting/common-problems"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/__plugin.json b/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/__plugin.json
deleted file mode 100644
index a5ea98d..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/__plugin.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "name": "docusaurus-plugin-css-cascade-layers",
- "id": "default"
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/layers.css b/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/layers.css
deleted file mode 100644
index 1e6d99d..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-css-cascade-layers/default/layers.css
+++ /dev/null
@@ -1 +0,0 @@
-@layer docusaurus.infima, docusaurus.theme-common, docusaurus.theme-classic, docusaurus.core, docusaurus.plugin-debug, docusaurus.theme-mermaid, docusaurus.theme-live-codeblock, docusaurus.theme-search-algolia.docsearch, docusaurus.theme-search-algolia;
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-debug/default/__plugin.json b/docs-site/.docusaurus/docusaurus-plugin-debug/default/__plugin.json
deleted file mode 100644
index 21c2cfd..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-debug/default/__plugin.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "name": "docusaurus-plugin-debug",
- "id": "default"
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus-plugin-debug/default/p/docs-docusaurus-debug-content-a52.json b/docs-site/.docusaurus/docusaurus-plugin-debug/default/p/docs-docusaurus-debug-content-a52.json
deleted file mode 100644
index 32eacab..0000000
--- a/docs-site/.docusaurus/docusaurus-plugin-debug/default/p/docs-docusaurus-debug-content-a52.json
+++ /dev/null
@@ -1 +0,0 @@
-{"allContent":{"docusaurus-plugin-css-cascade-layers":{},"docusaurus-plugin-content-docs":{"default":{"loadedVersions":[{"versionName":"current","label":"Next","banner":"unreleased","badge":true,"noIndex":false,"className":"docs-version-current","path":"/docs/next","tagsPath":"/docs/next/tags","editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs","isLast":false,"sidebarFilePath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/sidebars.ts","contentPath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/docs","docs":[{"id":"extractors/gradcracker","title":"Gradcracker Extractor","description":"How the Gradcracker crawler builds search URLs and extracts jobs.","source":"@site/docs/extractors/gradcracker.md","sourceDirName":"extractors","slug":"/extractors/gradcracker","permalink":"/docs/next/extractors/gradcracker","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/gradcracker.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":2,"frontMatter":{"id":"gradcracker","title":"Gradcracker Extractor","description":"How the Gradcracker crawler builds search URLs and extracts jobs.","sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"Extractors Overview","permalink":"/docs/next/extractors/overview"},"next":{"title":"JobSpy Extractor","permalink":"/docs/next/extractors/jobspy"}},{"id":"extractors/jobspy","title":"JobSpy Extractor","description":"How the JobSpy Python wrapper is orchestrated and normalized.","source":"@site/docs/extractors/jobspy.md","sourceDirName":"extractors","slug":"/extractors/jobspy","permalink":"/docs/next/extractors/jobspy","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/jobspy.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":3,"frontMatter":{"id":"jobspy","title":"JobSpy Extractor","description":"How the JobSpy Python wrapper is orchestrated and normalized.","sidebar_position":3},"sidebar":"docsSidebar","previous":{"title":"Gradcracker Extractor","permalink":"/docs/next/extractors/gradcracker"},"next":{"title":"Manual Import Extractor","permalink":"/docs/next/extractors/manual"}},{"id":"extractors/manual","title":"Manual Import Extractor","description":"Import jobs from pasted descriptions and run AI-assisted inference.","source":"@site/docs/extractors/manual.md","sourceDirName":"extractors","slug":"/extractors/manual","permalink":"/docs/next/extractors/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/manual.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":4,"frontMatter":{"id":"manual","title":"Manual Import Extractor","description":"Import jobs from pasted descriptions and run AI-assisted inference.","sidebar_position":4},"sidebar":"docsSidebar","previous":{"title":"JobSpy Extractor","permalink":"/docs/next/extractors/jobspy"},"next":{"title":"UKVisaJobs Extractor","permalink":"/docs/next/extractors/ukvisajobs"}},{"id":"extractors/overview","title":"Extractors Overview","description":"Technical index of supported extractors and how they work.","source":"@site/docs/extractors/overview.md","sourceDirName":"extractors","slug":"/extractors/overview","permalink":"/docs/next/extractors/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/overview.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"overview","title":"Extractors Overview","description":"Technical index of supported extractors and how they work.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Post-Application Tracking","permalink":"/docs/next/features/post-application-tracking"},"next":{"title":"Gradcracker Extractor","permalink":"/docs/next/extractors/gradcracker"}},{"id":"extractors/ukvisajobs","title":"UKVisaJobs Extractor","description":"Authenticated session flow, API pagination, and orchestrator ingestion.","source":"@site/docs/extractors/ukvisajobs.md","sourceDirName":"extractors","slug":"/extractors/ukvisajobs","permalink":"/docs/next/extractors/ukvisajobs","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/extractors/ukvisajobs.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":5,"frontMatter":{"id":"ukvisajobs","title":"UKVisaJobs Extractor","description":"Authenticated session flow, API pagination, and orchestrator ingestion.","sidebar_position":5},"sidebar":"docsSidebar","previous":{"title":"Manual Import Extractor","permalink":"/docs/next/extractors/manual"},"next":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/next/getting-started/self-hosting"}},{"id":"features/ghostwriter","title":"Ghostwriter","description":"Context-aware per-job AI chat assistant behavior and API surface.","source":"@site/docs/features/ghostwriter.md","sourceDirName":"features","slug":"/features/ghostwriter","permalink":"/docs/next/features/ghostwriter","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/features/ghostwriter.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":2,"frontMatter":{"id":"ghostwriter","title":"Ghostwriter","description":"Context-aware per-job AI chat assistant behavior and API surface.","sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"Orchestrator","permalink":"/docs/next/features/orchestrator"},"next":{"title":"Post-Application Tracking","permalink":"/docs/next/features/post-application-tracking"}},{"id":"features/orchestrator","title":"Orchestrator","description":"Job states, ready flow, and PDF generation/regeneration behavior.","source":"@site/docs/features/orchestrator.md","sourceDirName":"features","slug":"/features/orchestrator","permalink":"/docs/next/features/orchestrator","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/features/orchestrator.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"orchestrator","title":"Orchestrator","description":"Job states, ready flow, and PDF generation/regeneration behavior.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/next/getting-started/self-hosting"},"next":{"title":"Ghostwriter","permalink":"/docs/next/features/ghostwriter"}},{"id":"features/post-application-tracking","title":"Post-Application Tracking","description":"Gmail-based tracking inbox, smart routing, and review workflow.","source":"@site/docs/features/post-application-tracking.md","sourceDirName":"features","slug":"/features/post-application-tracking","permalink":"/docs/next/features/post-application-tracking","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/features/post-application-tracking.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":3,"frontMatter":{"id":"post-application-tracking","title":"Post-Application Tracking","description":"Gmail-based tracking inbox, smart routing, and review workflow.","sidebar_position":3},"sidebar":"docsSidebar","previous":{"title":"Ghostwriter","permalink":"/docs/next/features/ghostwriter"},"next":{"title":"Extractors Overview","permalink":"/docs/next/extractors/overview"}},{"id":"getting-started/self-hosting","title":"Self-Hosting (Docker Compose)","description":"Deploy JobOps with Docker Compose and configure onboarding integrations.","source":"@site/docs/getting-started/self-hosting.md","sourceDirName":"getting-started","slug":"/getting-started/self-hosting","permalink":"/docs/next/getting-started/self-hosting","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/getting-started/self-hosting.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"self-hosting","title":"Self-Hosting (Docker Compose)","description":"Deploy JobOps with Docker Compose and configure onboarding integrations.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"JobOps Documentation","permalink":"/docs/next/"},"next":{"title":"Orchestrator","permalink":"/docs/next/features/orchestrator"}},{"id":"intro","title":"JobOps Documentation","description":"Documentation index for setup, features, extractors, and common problems.","source":"@site/docs/intro.md","sourceDirName":".","slug":"/","permalink":"/docs/next/","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/intro.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"intro","title":"JobOps Documentation","description":"Documentation index for setup, features, extractors, and common problems.","sidebar_position":1,"slug":"/"},"sidebar":"docsSidebar","next":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/next/getting-started/self-hosting"}},{"id":"reference/documentation-style-guide","title":"Documentation Style Guide","description":"Standards for writing user-facing docs in this repository.","source":"@site/docs/reference/documentation-style-guide.md","sourceDirName":"reference","slug":"/reference/documentation-style-guide","permalink":"/docs/next/reference/documentation-style-guide","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/reference/documentation-style-guide.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":2,"frontMatter":{"id":"documentation-style-guide","title":"Documentation Style Guide","description":"Standards for writing user-facing docs in this repository.","sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"FAQ","permalink":"/docs/next/reference/faq"}},{"id":"reference/faq","title":"FAQ","description":"Frequently asked questions about deployment, docs, and operations.","source":"@site/docs/reference/faq.md","sourceDirName":"reference","slug":"/reference/faq","permalink":"/docs/next/reference/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/reference/faq.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"faq","title":"FAQ","description":"Frequently asked questions about deployment, docs, and operations.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Common Problems","permalink":"/docs/next/troubleshooting/common-problems"},"next":{"title":"Documentation Style Guide","permalink":"/docs/next/reference/documentation-style-guide"}},{"id":"troubleshooting/common-problems","title":"Common Problems","description":"Quick fixes for the most frequent setup and runtime issues.","source":"@site/docs/troubleshooting/common-problems.md","sourceDirName":"troubleshooting","slug":"/troubleshooting/common-problems","permalink":"/docs/next/troubleshooting/common-problems","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/docs/troubleshooting/common-problems.md","tags":[],"version":"current","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"common-problems","title":"Common Problems","description":"Quick fixes for the most frequent setup and runtime issues.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/next/getting-started/self-hosting"},"next":{"title":"Common Problems","permalink":"/docs/next/troubleshooting/common-problems"}}],"drafts":[],"sidebars":{"docsSidebar":[{"type":"doc","id":"intro"},{"type":"category","label":"Getting Started","items":[{"type":"doc","id":"getting-started/self-hosting"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Core Features","items":[{"type":"doc","id":"features/orchestrator"},{"type":"doc","id":"features/ghostwriter"},{"type":"doc","id":"features/post-application-tracking"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Extractors","items":[{"type":"doc","id":"extractors/overview"},{"type":"doc","id":"extractors/gradcracker"},{"type":"doc","id":"extractors/jobspy"},{"type":"doc","id":"extractors/manual"},{"type":"doc","id":"extractors/ukvisajobs"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Self-Hosting & Ops","items":[{"type":"doc","id":"getting-started/self-hosting"},{"type":"doc","id":"troubleshooting/common-problems"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Troubleshooting","items":[{"type":"doc","id":"troubleshooting/common-problems"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference / FAQ","items":[{"type":"doc","id":"reference/faq"},{"type":"doc","id":"reference/documentation-style-guide"}],"collapsed":true,"collapsible":true}]}},{"versionName":"1.0.0","label":"1.0.0","banner":null,"badge":true,"noIndex":false,"className":"docs-version-1.0.0","path":"/docs/","tagsPath":"/docs/tags","editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0","isLast":true,"routePriority":-1,"sidebarFilePath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/versioned_sidebars/version-1.0.0-sidebars.json","contentPath":"/Users/ssarfaraz/coding/personal/job-ops/docs-site/versioned_docs/version-1.0.0","docs":[{"id":"extractors/gradcracker","title":"Gradcracker Extractor","description":"How the Gradcracker crawler builds search URLs and extracts jobs.","source":"@site/versioned_docs/version-1.0.0/extractors/gradcracker.md","sourceDirName":"extractors","slug":"/extractors/gradcracker","permalink":"/docs/extractors/gradcracker","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/gradcracker.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":2,"frontMatter":{"id":"gradcracker","title":"Gradcracker Extractor","description":"How the Gradcracker crawler builds search URLs and extracts jobs.","sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"Extractors Overview","permalink":"/docs/extractors/overview"},"next":{"title":"JobSpy Extractor","permalink":"/docs/extractors/jobspy"}},{"id":"extractors/jobspy","title":"JobSpy Extractor","description":"How the JobSpy Python wrapper is orchestrated and normalized.","source":"@site/versioned_docs/version-1.0.0/extractors/jobspy.md","sourceDirName":"extractors","slug":"/extractors/jobspy","permalink":"/docs/extractors/jobspy","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/jobspy.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":3,"frontMatter":{"id":"jobspy","title":"JobSpy Extractor","description":"How the JobSpy Python wrapper is orchestrated and normalized.","sidebar_position":3},"sidebar":"docsSidebar","previous":{"title":"Gradcracker Extractor","permalink":"/docs/extractors/gradcracker"},"next":{"title":"Manual Import Extractor","permalink":"/docs/extractors/manual"}},{"id":"extractors/manual","title":"Manual Import Extractor","description":"Import jobs from pasted descriptions and run AI-assisted inference.","source":"@site/versioned_docs/version-1.0.0/extractors/manual.md","sourceDirName":"extractors","slug":"/extractors/manual","permalink":"/docs/extractors/manual","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/manual.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":4,"frontMatter":{"id":"manual","title":"Manual Import Extractor","description":"Import jobs from pasted descriptions and run AI-assisted inference.","sidebar_position":4},"sidebar":"docsSidebar","previous":{"title":"JobSpy Extractor","permalink":"/docs/extractors/jobspy"},"next":{"title":"UKVisaJobs Extractor","permalink":"/docs/extractors/ukvisajobs"}},{"id":"extractors/overview","title":"Extractors Overview","description":"Technical index of supported extractors and how they work.","source":"@site/versioned_docs/version-1.0.0/extractors/overview.md","sourceDirName":"extractors","slug":"/extractors/overview","permalink":"/docs/extractors/overview","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/overview.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"overview","title":"Extractors Overview","description":"Technical index of supported extractors and how they work.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Post-Application Tracking","permalink":"/docs/features/post-application-tracking"},"next":{"title":"Gradcracker Extractor","permalink":"/docs/extractors/gradcracker"}},{"id":"extractors/ukvisajobs","title":"UKVisaJobs Extractor","description":"Authenticated session flow, API pagination, and orchestrator ingestion.","source":"@site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md","sourceDirName":"extractors","slug":"/extractors/ukvisajobs","permalink":"/docs/extractors/ukvisajobs","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":5,"frontMatter":{"id":"ukvisajobs","title":"UKVisaJobs Extractor","description":"Authenticated session flow, API pagination, and orchestrator ingestion.","sidebar_position":5},"sidebar":"docsSidebar","previous":{"title":"Manual Import Extractor","permalink":"/docs/extractors/manual"},"next":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/getting-started/self-hosting"}},{"id":"features/ghostwriter","title":"Ghostwriter","description":"Context-aware per-job AI chat assistant behavior and API surface.","source":"@site/versioned_docs/version-1.0.0/features/ghostwriter.md","sourceDirName":"features","slug":"/features/ghostwriter","permalink":"/docs/features/ghostwriter","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/features/ghostwriter.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":2,"frontMatter":{"id":"ghostwriter","title":"Ghostwriter","description":"Context-aware per-job AI chat assistant behavior and API surface.","sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"Orchestrator","permalink":"/docs/features/orchestrator"},"next":{"title":"Post-Application Tracking","permalink":"/docs/features/post-application-tracking"}},{"id":"features/orchestrator","title":"Orchestrator","description":"Job states, ready flow, and PDF generation/regeneration behavior.","source":"@site/versioned_docs/version-1.0.0/features/orchestrator.md","sourceDirName":"features","slug":"/features/orchestrator","permalink":"/docs/features/orchestrator","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/features/orchestrator.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"orchestrator","title":"Orchestrator","description":"Job states, ready flow, and PDF generation/regeneration behavior.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/getting-started/self-hosting"},"next":{"title":"Ghostwriter","permalink":"/docs/features/ghostwriter"}},{"id":"features/post-application-tracking","title":"Post-Application Tracking","description":"Gmail-based tracking inbox, smart routing, and review workflow.","source":"@site/versioned_docs/version-1.0.0/features/post-application-tracking.md","sourceDirName":"features","slug":"/features/post-application-tracking","permalink":"/docs/features/post-application-tracking","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/features/post-application-tracking.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":3,"frontMatter":{"id":"post-application-tracking","title":"Post-Application Tracking","description":"Gmail-based tracking inbox, smart routing, and review workflow.","sidebar_position":3},"sidebar":"docsSidebar","previous":{"title":"Ghostwriter","permalink":"/docs/features/ghostwriter"},"next":{"title":"Extractors Overview","permalink":"/docs/extractors/overview"}},{"id":"getting-started/self-hosting","title":"Self-Hosting (Docker Compose)","description":"Deploy JobOps with Docker Compose and configure onboarding integrations.","source":"@site/versioned_docs/version-1.0.0/getting-started/self-hosting.md","sourceDirName":"getting-started","slug":"/getting-started/self-hosting","permalink":"/docs/getting-started/self-hosting","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/getting-started/self-hosting.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"self-hosting","title":"Self-Hosting (Docker Compose)","description":"Deploy JobOps with Docker Compose and configure onboarding integrations.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"JobOps Documentation","permalink":"/docs/"},"next":{"title":"Orchestrator","permalink":"/docs/features/orchestrator"}},{"id":"intro","title":"JobOps Documentation","description":"Documentation index for setup, features, extractors, and common problems.","source":"@site/versioned_docs/version-1.0.0/intro.md","sourceDirName":".","slug":"/","permalink":"/docs/","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/intro.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"intro","title":"JobOps Documentation","description":"Documentation index for setup, features, extractors, and common problems.","sidebar_position":1,"slug":"/"},"sidebar":"docsSidebar","next":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/getting-started/self-hosting"}},{"id":"reference/documentation-style-guide","title":"Documentation Style Guide","description":"Standards for writing user-facing docs in this repository.","source":"@site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md","sourceDirName":"reference","slug":"/reference/documentation-style-guide","permalink":"/docs/reference/documentation-style-guide","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":2,"frontMatter":{"id":"documentation-style-guide","title":"Documentation Style Guide","description":"Standards for writing user-facing docs in this repository.","sidebar_position":2},"sidebar":"docsSidebar","previous":{"title":"FAQ","permalink":"/docs/reference/faq"}},{"id":"reference/faq","title":"FAQ","description":"Frequently asked questions about deployment, docs, and operations.","source":"@site/versioned_docs/version-1.0.0/reference/faq.md","sourceDirName":"reference","slug":"/reference/faq","permalink":"/docs/reference/faq","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/reference/faq.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"faq","title":"FAQ","description":"Frequently asked questions about deployment, docs, and operations.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Common Problems","permalink":"/docs/troubleshooting/common-problems"},"next":{"title":"Documentation Style Guide","permalink":"/docs/reference/documentation-style-guide"}},{"id":"troubleshooting/common-problems","title":"Common Problems","description":"Quick fixes for the most frequent setup and runtime issues.","source":"@site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md","sourceDirName":"troubleshooting","slug":"/troubleshooting/common-problems","permalink":"/docs/troubleshooting/common-problems","draft":false,"unlisted":false,"editUrl":"https://github.com/DaKheera47/job-ops/tree/main/docs-site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md","tags":[],"version":"1.0.0","lastUpdatedAt":1539502055000,"sidebarPosition":1,"frontMatter":{"id":"common-problems","title":"Common Problems","description":"Quick fixes for the most frequent setup and runtime issues.","sidebar_position":1},"sidebar":"docsSidebar","previous":{"title":"Self-Hosting (Docker Compose)","permalink":"/docs/getting-started/self-hosting"},"next":{"title":"Common Problems","permalink":"/docs/troubleshooting/common-problems"}}],"drafts":[],"sidebars":{"docsSidebar":[{"type":"doc","id":"intro"},{"type":"category","label":"Getting Started","items":[{"type":"doc","id":"getting-started/self-hosting"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Core Features","items":[{"type":"doc","id":"features/orchestrator"},{"type":"doc","id":"features/ghostwriter"},{"type":"doc","id":"features/post-application-tracking"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Extractors","items":[{"type":"doc","id":"extractors/overview"},{"type":"doc","id":"extractors/gradcracker"},{"type":"doc","id":"extractors/jobspy"},{"type":"doc","id":"extractors/manual"},{"type":"doc","id":"extractors/ukvisajobs"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Self-Hosting & Ops","items":[{"type":"doc","id":"getting-started/self-hosting"},{"type":"doc","id":"troubleshooting/common-problems"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Troubleshooting","items":[{"type":"doc","id":"troubleshooting/common-problems"}],"collapsed":true,"collapsible":true},{"type":"category","label":"Reference / FAQ","items":[{"type":"doc","id":"reference/faq"},{"type":"doc","id":"reference/documentation-style-guide"}],"collapsed":true,"collapsible":true}]}}]}},"docusaurus-plugin-debug":{},"docusaurus-plugin-svgr":{},"docusaurus-theme-classic":{},"docusaurus-bootstrap-plugin":{},"docusaurus-mdx-fallback-plugin":{}}}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/docusaurus.config.mjs b/docs-site/.docusaurus/docusaurus.config.mjs
deleted file mode 100644
index 44bf3f8..0000000
--- a/docs-site/.docusaurus/docusaurus.config.mjs
+++ /dev/null
@@ -1,386 +0,0 @@
-/*
- * AUTOGENERATED - DON'T EDIT
- * Your edits in this file will be overwritten in the next build!
- * Modify the docusaurus.config.js file at your site's root instead.
- */
-export default {
- "title": "JobOps Documentation",
- "tagline": "Self-hosted job search automation docs",
- "favicon": "img/favicon.ico",
- "future": {
- "v4": {
- "removeLegacyPostBuildHeadAttribute": true,
- "useCssCascadeLayers": true
- },
- "experimental_faster": {
- "swcJsLoader": false,
- "swcJsMinimizer": false,
- "swcHtmlMinimizer": false,
- "lightningCssMinimizer": false,
- "mdxCrossCompilerCache": false,
- "rspackBundler": false,
- "rspackPersistentCache": false,
- "ssgWorkerThreads": false
- },
- "experimental_storage": {
- "type": "localStorage",
- "namespace": false
- },
- "experimental_router": "browser"
- },
- "url": "http://localhost:3005",
- "baseUrl": "/docs/",
- "onBrokenLinks": "throw",
- "markdown": {
- "hooks": {
- "onBrokenMarkdownLinks": "throw",
- "onBrokenMarkdownImages": "throw"
- },
- "format": "mdx",
- "mermaid": false,
- "emoji": true,
- "mdx1Compat": {
- "comments": true,
- "admonitions": true,
- "headingIds": true
- },
- "anchors": {
- "maintainCase": false
- }
- },
- "i18n": {
- "defaultLocale": "en",
- "locales": [
- "en"
- ],
- "path": "i18n",
- "localeConfigs": {}
- },
- "presets": [
- [
- "classic",
- {
- "docs": {
- "routeBasePath": "/",
- "sidebarPath": "./sidebars.ts",
- "editUrl": "https://github.com/DaKheera47/job-ops/tree/main/docs-site/",
- "showLastUpdateAuthor": false,
- "showLastUpdateTime": true
- },
- "blog": false,
- "pages": false,
- "theme": {
- "customCss": "./src/css/custom.css"
- }
- }
- ]
- ],
- "themeConfig": {
- "navbar": {
- "title": "JobOps Docs",
- "logo": {
- "alt": "JobOps",
- "src": "img/logo.svg"
- },
- "items": [
- {
- "type": "docSidebar",
- "sidebarId": "docsSidebar",
- "position": "left",
- "label": "Documentation"
- },
- {
- "to": "/",
- "label": "Latest",
- "position": "left"
- },
- {
- "type": "docsVersionDropdown",
- "position": "right",
- "dropdownActiveClassDisabled": true,
- "dropdownItemsBefore": [],
- "dropdownItemsAfter": []
- },
- {
- "href": "https://github.com/DaKheera47/job-ops",
- "label": "GitHub",
- "position": "right"
- }
- ],
- "hideOnScroll": false
- },
- "footer": {
- "style": "dark",
- "links": [
- {
- "title": "Docs",
- "items": [
- {
- "label": "Introduction",
- "to": "/"
- },
- {
- "label": "Self-Hosting",
- "to": "/getting-started/self-hosting"
- }
- ]
- },
- {
- "title": "Project",
- "items": [
- {
- "label": "Repository",
- "href": "https://github.com/DaKheera47/job-ops"
- },
- {
- "label": "Issues",
- "href": "https://github.com/DaKheera47/job-ops/issues"
- }
- ]
- }
- ],
- "copyright": "Copyright © 2026 JobOps"
- },
- "prism": {
- "theme": {
- "plain": {
- "color": "#393A34",
- "backgroundColor": "#f6f8fa"
- },
- "styles": [
- {
- "types": [
- "comment",
- "prolog",
- "doctype",
- "cdata"
- ],
- "style": {
- "color": "#999988",
- "fontStyle": "italic"
- }
- },
- {
- "types": [
- "namespace"
- ],
- "style": {
- "opacity": 0.7
- }
- },
- {
- "types": [
- "string",
- "attr-value"
- ],
- "style": {
- "color": "#e3116c"
- }
- },
- {
- "types": [
- "punctuation",
- "operator"
- ],
- "style": {
- "color": "#393A34"
- }
- },
- {
- "types": [
- "entity",
- "url",
- "symbol",
- "number",
- "boolean",
- "variable",
- "constant",
- "property",
- "regex",
- "inserted"
- ],
- "style": {
- "color": "#36acaa"
- }
- },
- {
- "types": [
- "atrule",
- "keyword",
- "attr-name",
- "selector"
- ],
- "style": {
- "color": "#00a4db"
- }
- },
- {
- "types": [
- "function",
- "deleted",
- "tag"
- ],
- "style": {
- "color": "#d73a49"
- }
- },
- {
- "types": [
- "function-variable"
- ],
- "style": {
- "color": "#6f42c1"
- }
- },
- {
- "types": [
- "tag",
- "selector",
- "keyword"
- ],
- "style": {
- "color": "#00009f"
- }
- }
- ]
- },
- "darkTheme": {
- "plain": {
- "color": "#F8F8F2",
- "backgroundColor": "#282A36"
- },
- "styles": [
- {
- "types": [
- "prolog",
- "constant",
- "builtin"
- ],
- "style": {
- "color": "rgb(189, 147, 249)"
- }
- },
- {
- "types": [
- "inserted",
- "function"
- ],
- "style": {
- "color": "rgb(80, 250, 123)"
- }
- },
- {
- "types": [
- "deleted"
- ],
- "style": {
- "color": "rgb(255, 85, 85)"
- }
- },
- {
- "types": [
- "changed"
- ],
- "style": {
- "color": "rgb(255, 184, 108)"
- }
- },
- {
- "types": [
- "punctuation",
- "symbol"
- ],
- "style": {
- "color": "rgb(248, 248, 242)"
- }
- },
- {
- "types": [
- "string",
- "char",
- "tag",
- "selector"
- ],
- "style": {
- "color": "rgb(255, 121, 198)"
- }
- },
- {
- "types": [
- "keyword",
- "variable"
- ],
- "style": {
- "color": "rgb(189, 147, 249)",
- "fontStyle": "italic"
- }
- },
- {
- "types": [
- "comment"
- ],
- "style": {
- "color": "rgb(98, 114, 164)"
- }
- },
- {
- "types": [
- "attr-name"
- ],
- "style": {
- "color": "rgb(241, 250, 140)"
- }
- }
- ]
- },
- "additionalLanguages": [],
- "magicComments": [
- {
- "className": "theme-code-block-highlighted-line",
- "line": "highlight-next-line",
- "block": {
- "start": "highlight-start",
- "end": "highlight-end"
- }
- }
- ]
- },
- "colorMode": {
- "defaultMode": "light",
- "disableSwitch": false,
- "respectPrefersColorScheme": false
- },
- "docs": {
- "versionPersistence": "localStorage",
- "sidebar": {
- "hideable": false,
- "autoCollapseCategories": false
- }
- },
- "blog": {
- "sidebar": {
- "groupByYear": true
- }
- },
- "metadata": [],
- "tableOfContents": {
- "minHeadingLevel": 2,
- "maxHeadingLevel": 3
- }
- },
- "baseUrlIssueBanner": true,
- "onBrokenAnchors": "warn",
- "onDuplicateRoutes": "warn",
- "staticDirectories": [
- "static"
- ],
- "customFields": {},
- "plugins": [],
- "themes": [],
- "scripts": [],
- "headTags": [],
- "stylesheets": [],
- "clientModules": [],
- "titleDelimiter": "|",
- "noIndex": false
-};
diff --git a/docs-site/.docusaurus/globalData.json b/docs-site/.docusaurus/globalData.json
deleted file mode 100644
index 4407b5f..0000000
--- a/docs-site/.docusaurus/globalData.json
+++ /dev/null
@@ -1,176 +0,0 @@
-{
- "docusaurus-plugin-content-docs": {
- "default": {
- "path": "/docs/",
- "versions": [
- {
- "name": "current",
- "label": "Next",
- "isLast": false,
- "path": "/docs/next",
- "mainDocId": "intro",
- "docs": [
- {
- "id": "extractors/gradcracker",
- "path": "/docs/next/extractors/gradcracker",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/jobspy",
- "path": "/docs/next/extractors/jobspy",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/manual",
- "path": "/docs/next/extractors/manual",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/overview",
- "path": "/docs/next/extractors/overview",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/ukvisajobs",
- "path": "/docs/next/extractors/ukvisajobs",
- "sidebar": "docsSidebar"
- },
- {
- "id": "features/ghostwriter",
- "path": "/docs/next/features/ghostwriter",
- "sidebar": "docsSidebar"
- },
- {
- "id": "features/orchestrator",
- "path": "/docs/next/features/orchestrator",
- "sidebar": "docsSidebar"
- },
- {
- "id": "features/post-application-tracking",
- "path": "/docs/next/features/post-application-tracking",
- "sidebar": "docsSidebar"
- },
- {
- "id": "getting-started/self-hosting",
- "path": "/docs/next/getting-started/self-hosting",
- "sidebar": "docsSidebar"
- },
- {
- "id": "intro",
- "path": "/docs/next/",
- "sidebar": "docsSidebar"
- },
- {
- "id": "reference/documentation-style-guide",
- "path": "/docs/next/reference/documentation-style-guide",
- "sidebar": "docsSidebar"
- },
- {
- "id": "reference/faq",
- "path": "/docs/next/reference/faq",
- "sidebar": "docsSidebar"
- },
- {
- "id": "troubleshooting/common-problems",
- "path": "/docs/next/troubleshooting/common-problems",
- "sidebar": "docsSidebar"
- }
- ],
- "draftIds": [],
- "sidebars": {
- "docsSidebar": {
- "link": {
- "path": "/docs/next/",
- "label": "intro"
- }
- }
- }
- },
- {
- "name": "1.0.0",
- "label": "1.0.0",
- "isLast": true,
- "path": "/docs/",
- "mainDocId": "intro",
- "docs": [
- {
- "id": "extractors/gradcracker",
- "path": "/docs/extractors/gradcracker",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/jobspy",
- "path": "/docs/extractors/jobspy",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/manual",
- "path": "/docs/extractors/manual",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/overview",
- "path": "/docs/extractors/overview",
- "sidebar": "docsSidebar"
- },
- {
- "id": "extractors/ukvisajobs",
- "path": "/docs/extractors/ukvisajobs",
- "sidebar": "docsSidebar"
- },
- {
- "id": "features/ghostwriter",
- "path": "/docs/features/ghostwriter",
- "sidebar": "docsSidebar"
- },
- {
- "id": "features/orchestrator",
- "path": "/docs/features/orchestrator",
- "sidebar": "docsSidebar"
- },
- {
- "id": "features/post-application-tracking",
- "path": "/docs/features/post-application-tracking",
- "sidebar": "docsSidebar"
- },
- {
- "id": "getting-started/self-hosting",
- "path": "/docs/getting-started/self-hosting",
- "sidebar": "docsSidebar"
- },
- {
- "id": "intro",
- "path": "/docs/",
- "sidebar": "docsSidebar"
- },
- {
- "id": "reference/documentation-style-guide",
- "path": "/docs/reference/documentation-style-guide",
- "sidebar": "docsSidebar"
- },
- {
- "id": "reference/faq",
- "path": "/docs/reference/faq",
- "sidebar": "docsSidebar"
- },
- {
- "id": "troubleshooting/common-problems",
- "path": "/docs/troubleshooting/common-problems",
- "sidebar": "docsSidebar"
- }
- ],
- "draftIds": [],
- "sidebars": {
- "docsSidebar": {
- "link": {
- "path": "/docs/",
- "label": "intro"
- }
- }
- }
- }
- ],
- "breadcrumbs": true
- }
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/i18n.json b/docs-site/.docusaurus/i18n.json
deleted file mode 100644
index 56adc59..0000000
--- a/docs-site/.docusaurus/i18n.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "defaultLocale": "en",
- "locales": [
- "en"
- ],
- "path": "i18n",
- "currentLocale": "en",
- "localeConfigs": {
- "en": {
- "label": "English",
- "direction": "ltr",
- "htmlLang": "en",
- "calendar": "gregory",
- "path": "en",
- "translate": false,
- "url": "http://localhost:3005",
- "baseUrl": "/docs/"
- }
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/registry.js b/docs-site/.docusaurus/registry.js
deleted file mode 100644
index f4e07a4..0000000
--- a/docs-site/.docusaurus/registry.js
+++ /dev/null
@@ -1,42 +0,0 @@
-export default {
- "__comp---theme-debug-config-23-a-2ff": [() => import(/* webpackChunkName: "__comp---theme-debug-config-23-a-2ff" */ "@theme/DebugConfig"), "@theme/DebugConfig", require.resolveWeak("@theme/DebugConfig")],
- "__comp---theme-debug-contentba-8-ce7": [() => import(/* webpackChunkName: "__comp---theme-debug-contentba-8-ce7" */ "@theme/DebugContent"), "@theme/DebugContent", require.resolveWeak("@theme/DebugContent")],
- "__comp---theme-debug-global-dataede-0fa": [() => import(/* webpackChunkName: "__comp---theme-debug-global-dataede-0fa" */ "@theme/DebugGlobalData"), "@theme/DebugGlobalData", require.resolveWeak("@theme/DebugGlobalData")],
- "__comp---theme-debug-registry-679-501": [() => import(/* webpackChunkName: "__comp---theme-debug-registry-679-501" */ "@theme/DebugRegistry"), "@theme/DebugRegistry", require.resolveWeak("@theme/DebugRegistry")],
- "__comp---theme-debug-routes-946-699": [() => import(/* webpackChunkName: "__comp---theme-debug-routes-946-699" */ "@theme/DebugRoutes"), "@theme/DebugRoutes", require.resolveWeak("@theme/DebugRoutes")],
- "__comp---theme-debug-site-metadata-68-e-3d4": [() => import(/* webpackChunkName: "__comp---theme-debug-site-metadata-68-e-3d4" */ "@theme/DebugSiteMetadata"), "@theme/DebugSiteMetadata", require.resolveWeak("@theme/DebugSiteMetadata")],
- "__comp---theme-doc-item-178-a40": [() => import(/* webpackChunkName: "__comp---theme-doc-item-178-a40" */ "@theme/DocItem"), "@theme/DocItem", require.resolveWeak("@theme/DocItem")],
- "__comp---theme-doc-roota-94-67a": [() => import(/* webpackChunkName: "__comp---theme-doc-roota-94-67a" */ "@theme/DocRoot"), "@theme/DocRoot", require.resolveWeak("@theme/DocRoot")],
- "__comp---theme-doc-version-roota-7-b-5de": [() => import(/* webpackChunkName: "__comp---theme-doc-version-roota-7-b-5de" */ "@theme/DocVersionRoot"), "@theme/DocVersionRoot", require.resolveWeak("@theme/DocVersionRoot")],
- "__comp---theme-docs-root-5-e-9-0b6": [() => import(/* webpackChunkName: "__comp---theme-docs-root-5-e-9-0b6" */ "@theme/DocsRoot"), "@theme/DocsRoot", require.resolveWeak("@theme/DocsRoot")],
- "__props---docs-11-b-f70": [() => import(/* webpackChunkName: "__props---docs-11-b-f70" */ "@generated/docusaurus-plugin-content-docs/default/p/docs-7fc.json"), "@generated/docusaurus-plugin-content-docs/default/p/docs-7fc.json", require.resolveWeak("@generated/docusaurus-plugin-content-docs/default/p/docs-7fc.json")],
- "__props---docs-docusaurus-debug-content-344-8d5": [() => import(/* webpackChunkName: "__props---docs-docusaurus-debug-content-344-8d5" */ "@generated/docusaurus-plugin-debug/default/p/docs-docusaurus-debug-content-a52.json"), "@generated/docusaurus-plugin-debug/default/p/docs-docusaurus-debug-content-a52.json", require.resolveWeak("@generated/docusaurus-plugin-debug/default/p/docs-docusaurus-debug-content-a52.json")],
- "__props---docs-nextbf-1-ba7": [() => import(/* webpackChunkName: "__props---docs-nextbf-1-ba7" */ "@generated/docusaurus-plugin-content-docs/default/p/docs-next-d71.json"), "@generated/docusaurus-plugin-content-docs/default/p/docs-next-d71.json", require.resolveWeak("@generated/docusaurus-plugin-content-docs/default/p/docs-next-d71.json")],
- "content---docs-5-d-9-a16": [() => import(/* webpackChunkName: "content---docs-5-d-9-a16" */ "@site/versioned_docs/version-1.0.0/intro.md"), "@site/versioned_docs/version-1.0.0/intro.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/intro.md")],
- "content---docs-extractors-gradcracker-529-af3": [() => import(/* webpackChunkName: "content---docs-extractors-gradcracker-529-af3" */ "@site/versioned_docs/version-1.0.0/extractors/gradcracker.md"), "@site/versioned_docs/version-1.0.0/extractors/gradcracker.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/extractors/gradcracker.md")],
- "content---docs-extractors-jobspy-80-d-e15": [() => import(/* webpackChunkName: "content---docs-extractors-jobspy-80-d-e15" */ "@site/versioned_docs/version-1.0.0/extractors/jobspy.md"), "@site/versioned_docs/version-1.0.0/extractors/jobspy.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/extractors/jobspy.md")],
- "content---docs-extractors-manual-479-cf9": [() => import(/* webpackChunkName: "content---docs-extractors-manual-479-cf9" */ "@site/versioned_docs/version-1.0.0/extractors/manual.md"), "@site/versioned_docs/version-1.0.0/extractors/manual.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/extractors/manual.md")],
- "content---docs-extractors-overview-6-d-9-5d6": [() => import(/* webpackChunkName: "content---docs-extractors-overview-6-d-9-5d6" */ "@site/versioned_docs/version-1.0.0/extractors/overview.md"), "@site/versioned_docs/version-1.0.0/extractors/overview.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/extractors/overview.md")],
- "content---docs-extractors-ukvisajobs-31-a-da8": [() => import(/* webpackChunkName: "content---docs-extractors-ukvisajobs-31-a-da8" */ "@site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md"), "@site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md")],
- "content---docs-features-ghostwriter-185-10f": [() => import(/* webpackChunkName: "content---docs-features-ghostwriter-185-10f" */ "@site/versioned_docs/version-1.0.0/features/ghostwriter.md"), "@site/versioned_docs/version-1.0.0/features/ghostwriter.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/features/ghostwriter.md")],
- "content---docs-features-orchestrator-24-b-7c5": [() => import(/* webpackChunkName: "content---docs-features-orchestrator-24-b-7c5" */ "@site/versioned_docs/version-1.0.0/features/orchestrator.md"), "@site/versioned_docs/version-1.0.0/features/orchestrator.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/features/orchestrator.md")],
- "content---docs-features-post-application-tracking-3-a-9-fd1": [() => import(/* webpackChunkName: "content---docs-features-post-application-tracking-3-a-9-fd1" */ "@site/versioned_docs/version-1.0.0/features/post-application-tracking.md"), "@site/versioned_docs/version-1.0.0/features/post-application-tracking.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/features/post-application-tracking.md")],
- "content---docs-getting-started-self-hostingd-3-f-b47": [() => import(/* webpackChunkName: "content---docs-getting-started-self-hostingd-3-f-b47" */ "@site/versioned_docs/version-1.0.0/getting-started/self-hosting.md"), "@site/versioned_docs/version-1.0.0/getting-started/self-hosting.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/getting-started/self-hosting.md")],
- "content---docs-next-0-e-3-072": [() => import(/* webpackChunkName: "content---docs-next-0-e-3-072" */ "@site/docs/intro.md"), "@site/docs/intro.md", require.resolveWeak("@site/docs/intro.md")],
- "content---docs-next-extractors-gradcrackeraa-2-35e": [() => import(/* webpackChunkName: "content---docs-next-extractors-gradcrackeraa-2-35e" */ "@site/docs/extractors/gradcracker.md"), "@site/docs/extractors/gradcracker.md", require.resolveWeak("@site/docs/extractors/gradcracker.md")],
- "content---docs-next-extractors-jobspye-48-bba": [() => import(/* webpackChunkName: "content---docs-next-extractors-jobspye-48-bba" */ "@site/docs/extractors/jobspy.md"), "@site/docs/extractors/jobspy.md", require.resolveWeak("@site/docs/extractors/jobspy.md")],
- "content---docs-next-extractors-manuald-05-f39": [() => import(/* webpackChunkName: "content---docs-next-extractors-manuald-05-f39" */ "@site/docs/extractors/manual.md"), "@site/docs/extractors/manual.md", require.resolveWeak("@site/docs/extractors/manual.md")],
- "content---docs-next-extractors-overview-749-c9f": [() => import(/* webpackChunkName: "content---docs-next-extractors-overview-749-c9f" */ "@site/docs/extractors/overview.md"), "@site/docs/extractors/overview.md", require.resolveWeak("@site/docs/extractors/overview.md")],
- "content---docs-next-extractors-ukvisajobs-389-6c0": [() => import(/* webpackChunkName: "content---docs-next-extractors-ukvisajobs-389-6c0" */ "@site/docs/extractors/ukvisajobs.md"), "@site/docs/extractors/ukvisajobs.md", require.resolveWeak("@site/docs/extractors/ukvisajobs.md")],
- "content---docs-next-features-ghostwriterb-88-c5c": [() => import(/* webpackChunkName: "content---docs-next-features-ghostwriterb-88-c5c" */ "@site/docs/features/ghostwriter.md"), "@site/docs/features/ghostwriter.md", require.resolveWeak("@site/docs/features/ghostwriter.md")],
- "content---docs-next-features-orchestratorfd-3-3fa": [() => import(/* webpackChunkName: "content---docs-next-features-orchestratorfd-3-3fa" */ "@site/docs/features/orchestrator.md"), "@site/docs/features/orchestrator.md", require.resolveWeak("@site/docs/features/orchestrator.md")],
- "content---docs-next-features-post-application-tracking-5-cf-e2f": [() => import(/* webpackChunkName: "content---docs-next-features-post-application-tracking-5-cf-e2f" */ "@site/docs/features/post-application-tracking.md"), "@site/docs/features/post-application-tracking.md", require.resolveWeak("@site/docs/features/post-application-tracking.md")],
- "content---docs-next-getting-started-self-hosting-47-e-517": [() => import(/* webpackChunkName: "content---docs-next-getting-started-self-hosting-47-e-517" */ "@site/docs/getting-started/self-hosting.md"), "@site/docs/getting-started/self-hosting.md", require.resolveWeak("@site/docs/getting-started/self-hosting.md")],
- "content---docs-next-reference-documentation-style-guideb-28-9f0": [() => import(/* webpackChunkName: "content---docs-next-reference-documentation-style-guideb-28-9f0" */ "@site/docs/reference/documentation-style-guide.md"), "@site/docs/reference/documentation-style-guide.md", require.resolveWeak("@site/docs/reference/documentation-style-guide.md")],
- "content---docs-next-reference-faq-656-100": [() => import(/* webpackChunkName: "content---docs-next-reference-faq-656-100" */ "@site/docs/reference/faq.md"), "@site/docs/reference/faq.md", require.resolveWeak("@site/docs/reference/faq.md")],
- "content---docs-next-troubleshooting-common-problemsced-1cd": [() => import(/* webpackChunkName: "content---docs-next-troubleshooting-common-problemsced-1cd" */ "@site/docs/troubleshooting/common-problems.md"), "@site/docs/troubleshooting/common-problems.md", require.resolveWeak("@site/docs/troubleshooting/common-problems.md")],
- "content---docs-reference-documentation-style-guideefe-1c9": [() => import(/* webpackChunkName: "content---docs-reference-documentation-style-guideefe-1c9" */ "@site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md"), "@site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md")],
- "content---docs-reference-faqf-1-a-03a": [() => import(/* webpackChunkName: "content---docs-reference-faqf-1-a-03a" */ "@site/versioned_docs/version-1.0.0/reference/faq.md"), "@site/versioned_docs/version-1.0.0/reference/faq.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/reference/faq.md")],
- "content---docs-troubleshooting-common-problemsd-94-383": [() => import(/* webpackChunkName: "content---docs-troubleshooting-common-problemsd-94-383" */ "@site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md"), "@site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md", require.resolveWeak("@site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md")],
- "plugin---docs-aba-4f5": [() => import(/* webpackChunkName: "plugin---docs-aba-4f5" */ "@generated/docusaurus-plugin-content-docs/default/__plugin.json"), "@generated/docusaurus-plugin-content-docs/default/__plugin.json", require.resolveWeak("@generated/docusaurus-plugin-content-docs/default/__plugin.json")],
- "plugin---docs-docusaurus-debugb-38-c84": [() => import(/* webpackChunkName: "plugin---docs-docusaurus-debugb-38-c84" */ "@generated/docusaurus-plugin-debug/default/__plugin.json"), "@generated/docusaurus-plugin-debug/default/__plugin.json", require.resolveWeak("@generated/docusaurus-plugin-debug/default/__plugin.json")],};
diff --git a/docs-site/.docusaurus/routes.js b/docs-site/.docusaurus/routes.js
deleted file mode 100644
index f42ea21..0000000
--- a/docs-site/.docusaurus/routes.js
+++ /dev/null
@@ -1,230 +0,0 @@
-import React from 'react';
-import ComponentCreator from '@docusaurus/ComponentCreator';
-
-export default [
- {
- path: '/docs/__docusaurus/debug',
- component: ComponentCreator('/docs/__docusaurus/debug', 'e58'),
- exact: true
- },
- {
- path: '/docs/__docusaurus/debug/config',
- component: ComponentCreator('/docs/__docusaurus/debug/config', '2ce'),
- exact: true
- },
- {
- path: '/docs/__docusaurus/debug/content',
- component: ComponentCreator('/docs/__docusaurus/debug/content', '11b'),
- exact: true
- },
- {
- path: '/docs/__docusaurus/debug/globalData',
- component: ComponentCreator('/docs/__docusaurus/debug/globalData', 'f13'),
- exact: true
- },
- {
- path: '/docs/__docusaurus/debug/metadata',
- component: ComponentCreator('/docs/__docusaurus/debug/metadata', 'bff'),
- exact: true
- },
- {
- path: '/docs/__docusaurus/debug/registry',
- component: ComponentCreator('/docs/__docusaurus/debug/registry', '830'),
- exact: true
- },
- {
- path: '/docs/__docusaurus/debug/routes',
- component: ComponentCreator('/docs/__docusaurus/debug/routes', '13e'),
- exact: true
- },
- {
- path: '/docs/',
- component: ComponentCreator('/docs/', 'd18'),
- routes: [
- {
- path: '/docs/next',
- component: ComponentCreator('/docs/next', '86e'),
- routes: [
- {
- path: '/docs/next',
- component: ComponentCreator('/docs/next', '732'),
- routes: [
- {
- path: '/docs/next/',
- component: ComponentCreator('/docs/next/', 'cd6'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/extractors/gradcracker',
- component: ComponentCreator('/docs/next/extractors/gradcracker', '65d'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/extractors/jobspy',
- component: ComponentCreator('/docs/next/extractors/jobspy', 'db9'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/extractors/manual',
- component: ComponentCreator('/docs/next/extractors/manual', '5fd'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/extractors/overview',
- component: ComponentCreator('/docs/next/extractors/overview', '0d7'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/extractors/ukvisajobs',
- component: ComponentCreator('/docs/next/extractors/ukvisajobs', '8b3'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/features/ghostwriter',
- component: ComponentCreator('/docs/next/features/ghostwriter', '0cf'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/features/orchestrator',
- component: ComponentCreator('/docs/next/features/orchestrator', '299'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/features/post-application-tracking',
- component: ComponentCreator('/docs/next/features/post-application-tracking', 'f32'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/getting-started/self-hosting',
- component: ComponentCreator('/docs/next/getting-started/self-hosting', '6cb'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/reference/documentation-style-guide',
- component: ComponentCreator('/docs/next/reference/documentation-style-guide', '32c'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/reference/faq',
- component: ComponentCreator('/docs/next/reference/faq', '3d6'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/next/troubleshooting/common-problems',
- component: ComponentCreator('/docs/next/troubleshooting/common-problems', 'e34'),
- exact: true,
- sidebar: "docsSidebar"
- }
- ]
- }
- ]
- },
- {
- path: '/docs/',
- component: ComponentCreator('/docs/', '2b9'),
- routes: [
- {
- path: '/docs/',
- component: ComponentCreator('/docs/', '25b'),
- routes: [
- {
- path: '/docs/extractors/gradcracker',
- component: ComponentCreator('/docs/extractors/gradcracker', 'de4'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/extractors/jobspy',
- component: ComponentCreator('/docs/extractors/jobspy', '3b4'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/extractors/manual',
- component: ComponentCreator('/docs/extractors/manual', '77c'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/extractors/overview',
- component: ComponentCreator('/docs/extractors/overview', 'b46'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/extractors/ukvisajobs',
- component: ComponentCreator('/docs/extractors/ukvisajobs', '3ff'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/features/ghostwriter',
- component: ComponentCreator('/docs/features/ghostwriter', '6a0'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/features/orchestrator',
- component: ComponentCreator('/docs/features/orchestrator', '19c'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/features/post-application-tracking',
- component: ComponentCreator('/docs/features/post-application-tracking', '385'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/getting-started/self-hosting',
- component: ComponentCreator('/docs/getting-started/self-hosting', 'e3c'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/reference/documentation-style-guide',
- component: ComponentCreator('/docs/reference/documentation-style-guide', '68e'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/reference/faq',
- component: ComponentCreator('/docs/reference/faq', 'd50'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/troubleshooting/common-problems',
- component: ComponentCreator('/docs/troubleshooting/common-problems', 'b1f'),
- exact: true,
- sidebar: "docsSidebar"
- },
- {
- path: '/docs/',
- component: ComponentCreator('/docs/', 'cb8'),
- exact: true,
- sidebar: "docsSidebar"
- }
- ]
- }
- ]
- }
- ]
- },
- {
- path: '*',
- component: ComponentCreator('*'),
- },
-];
diff --git a/docs-site/.docusaurus/routesChunkNames.json b/docs-site/.docusaurus/routesChunkNames.json
deleted file mode 100644
index 7ffcf6f..0000000
--- a/docs-site/.docusaurus/routesChunkNames.json
+++ /dev/null
@@ -1,169 +0,0 @@
-{
- "/docs/__docusaurus/debug-e58": {
- "__comp": "__comp---theme-debug-config-23-a-2ff",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- }
- },
- "/docs/__docusaurus/debug/config-2ce": {
- "__comp": "__comp---theme-debug-config-23-a-2ff",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- }
- },
- "/docs/__docusaurus/debug/content-11b": {
- "__comp": "__comp---theme-debug-contentba-8-ce7",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- },
- "__props": "__props---docs-docusaurus-debug-content-344-8d5"
- },
- "/docs/__docusaurus/debug/globalData-f13": {
- "__comp": "__comp---theme-debug-global-dataede-0fa",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- }
- },
- "/docs/__docusaurus/debug/metadata-bff": {
- "__comp": "__comp---theme-debug-site-metadata-68-e-3d4",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- }
- },
- "/docs/__docusaurus/debug/registry-830": {
- "__comp": "__comp---theme-debug-registry-679-501",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- }
- },
- "/docs/__docusaurus/debug/routes-13e": {
- "__comp": "__comp---theme-debug-routes-946-699",
- "__context": {
- "plugin": "plugin---docs-docusaurus-debugb-38-c84"
- }
- },
- "/docs/-d18": {
- "__comp": "__comp---theme-docs-root-5-e-9-0b6",
- "__context": {
- "plugin": "plugin---docs-aba-4f5"
- }
- },
- "/docs/next-86e": {
- "__comp": "__comp---theme-doc-version-roota-7-b-5de",
- "__props": "__props---docs-nextbf-1-ba7"
- },
- "/docs/next-732": {
- "__comp": "__comp---theme-doc-roota-94-67a"
- },
- "/docs/next/-cd6": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-0-e-3-072"
- },
- "/docs/next/extractors/gradcracker-65d": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-extractors-gradcrackeraa-2-35e"
- },
- "/docs/next/extractors/jobspy-db9": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-extractors-jobspye-48-bba"
- },
- "/docs/next/extractors/manual-5fd": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-extractors-manuald-05-f39"
- },
- "/docs/next/extractors/overview-0d7": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-extractors-overview-749-c9f"
- },
- "/docs/next/extractors/ukvisajobs-8b3": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-extractors-ukvisajobs-389-6c0"
- },
- "/docs/next/features/ghostwriter-0cf": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-features-ghostwriterb-88-c5c"
- },
- "/docs/next/features/orchestrator-299": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-features-orchestratorfd-3-3fa"
- },
- "/docs/next/features/post-application-tracking-f32": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-features-post-application-tracking-5-cf-e2f"
- },
- "/docs/next/getting-started/self-hosting-6cb": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-getting-started-self-hosting-47-e-517"
- },
- "/docs/next/reference/documentation-style-guide-32c": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-reference-documentation-style-guideb-28-9f0"
- },
- "/docs/next/reference/faq-3d6": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-reference-faq-656-100"
- },
- "/docs/next/troubleshooting/common-problems-e34": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-next-troubleshooting-common-problemsced-1cd"
- },
- "/docs/-2b9": {
- "__comp": "__comp---theme-doc-version-roota-7-b-5de",
- "__props": "__props---docs-11-b-f70"
- },
- "/docs/-25b": {
- "__comp": "__comp---theme-doc-roota-94-67a"
- },
- "/docs/extractors/gradcracker-de4": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-extractors-gradcracker-529-af3"
- },
- "/docs/extractors/jobspy-3b4": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-extractors-jobspy-80-d-e15"
- },
- "/docs/extractors/manual-77c": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-extractors-manual-479-cf9"
- },
- "/docs/extractors/overview-b46": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-extractors-overview-6-d-9-5d6"
- },
- "/docs/extractors/ukvisajobs-3ff": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-extractors-ukvisajobs-31-a-da8"
- },
- "/docs/features/ghostwriter-6a0": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-features-ghostwriter-185-10f"
- },
- "/docs/features/orchestrator-19c": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-features-orchestrator-24-b-7c5"
- },
- "/docs/features/post-application-tracking-385": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-features-post-application-tracking-3-a-9-fd1"
- },
- "/docs/getting-started/self-hosting-e3c": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-getting-started-self-hostingd-3-f-b47"
- },
- "/docs/reference/documentation-style-guide-68e": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-reference-documentation-style-guideefe-1c9"
- },
- "/docs/reference/faq-d50": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-reference-faqf-1-a-03a"
- },
- "/docs/troubleshooting/common-problems-b1f": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-troubleshooting-common-problemsd-94-383"
- },
- "/docs/-cb8": {
- "__comp": "__comp---theme-doc-item-178-a40",
- "content": "content---docs-5-d-9-a16"
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/site-metadata.json b/docs-site/.docusaurus/site-metadata.json
deleted file mode 100644
index 0c495d8..0000000
--- a/docs-site/.docusaurus/site-metadata.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "docusaurusVersion": "3.9.2",
- "siteVersion": "0.0.0",
- "pluginVersions": {
- "docusaurus-plugin-css-cascade-layers": {
- "type": "package",
- "name": "@docusaurus/plugin-css-cascade-layers",
- "version": "3.9.2"
- },
- "docusaurus-plugin-content-docs": {
- "type": "package",
- "name": "@docusaurus/plugin-content-docs",
- "version": "3.9.2"
- },
- "docusaurus-plugin-debug": {
- "type": "package",
- "name": "@docusaurus/plugin-debug",
- "version": "3.9.2"
- },
- "docusaurus-plugin-svgr": {
- "type": "package",
- "name": "@docusaurus/plugin-svgr",
- "version": "3.9.2"
- },
- "docusaurus-theme-classic": {
- "type": "package",
- "name": "@docusaurus/theme-classic",
- "version": "3.9.2"
- }
- }
-}
\ No newline at end of file
diff --git a/docs-site/.docusaurus/site-storage.json b/docs-site/.docusaurus/site-storage.json
deleted file mode 100644
index c769c71..0000000
--- a/docs-site/.docusaurus/site-storage.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "type": "localStorage",
- "namespace": ""
-}
\ No newline at end of file
diff --git a/docs-site/docusaurus.config.ts b/docs-site/docusaurus.config.ts
index fe00e16..f1bd02b 100644
--- a/docs-site/docusaurus.config.ts
+++ b/docs-site/docusaurus.config.ts
@@ -64,6 +64,12 @@ const config: Config = {
position: "right",
dropdownActiveClassDisabled: true,
},
+ {
+ type: "html",
+ value:
+ 'Back to App',
+ position: "right",
+ },
{
href: "https://github.com/DaKheera47/job-ops",
label: "GitHub",
diff --git a/docs-site/versioned_docs/version-1.0.0/extractors/gradcracker.md b/docs-site/versioned_docs/version-0.1.20/extractors/gradcracker.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/extractors/gradcracker.md
rename to docs-site/versioned_docs/version-0.1.20/extractors/gradcracker.md
diff --git a/docs-site/versioned_docs/version-1.0.0/extractors/jobspy.md b/docs-site/versioned_docs/version-0.1.20/extractors/jobspy.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/extractors/jobspy.md
rename to docs-site/versioned_docs/version-0.1.20/extractors/jobspy.md
diff --git a/docs-site/versioned_docs/version-1.0.0/extractors/manual.md b/docs-site/versioned_docs/version-0.1.20/extractors/manual.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/extractors/manual.md
rename to docs-site/versioned_docs/version-0.1.20/extractors/manual.md
diff --git a/docs-site/versioned_docs/version-1.0.0/extractors/overview.md b/docs-site/versioned_docs/version-0.1.20/extractors/overview.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/extractors/overview.md
rename to docs-site/versioned_docs/version-0.1.20/extractors/overview.md
diff --git a/docs-site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md b/docs-site/versioned_docs/version-0.1.20/extractors/ukvisajobs.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/extractors/ukvisajobs.md
rename to docs-site/versioned_docs/version-0.1.20/extractors/ukvisajobs.md
diff --git a/docs-site/versioned_docs/version-1.0.0/features/ghostwriter.md b/docs-site/versioned_docs/version-0.1.20/features/ghostwriter.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/features/ghostwriter.md
rename to docs-site/versioned_docs/version-0.1.20/features/ghostwriter.md
diff --git a/docs-site/versioned_docs/version-1.0.0/features/orchestrator.md b/docs-site/versioned_docs/version-0.1.20/features/orchestrator.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/features/orchestrator.md
rename to docs-site/versioned_docs/version-0.1.20/features/orchestrator.md
diff --git a/docs-site/versioned_docs/version-1.0.0/features/post-application-tracking.md b/docs-site/versioned_docs/version-0.1.20/features/post-application-tracking.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/features/post-application-tracking.md
rename to docs-site/versioned_docs/version-0.1.20/features/post-application-tracking.md
diff --git a/docs-site/versioned_docs/version-1.0.0/getting-started/self-hosting.md b/docs-site/versioned_docs/version-0.1.20/getting-started/self-hosting.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/getting-started/self-hosting.md
rename to docs-site/versioned_docs/version-0.1.20/getting-started/self-hosting.md
diff --git a/docs-site/versioned_docs/version-1.0.0/intro.md b/docs-site/versioned_docs/version-0.1.20/intro.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/intro.md
rename to docs-site/versioned_docs/version-0.1.20/intro.md
diff --git a/docs-site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md b/docs-site/versioned_docs/version-0.1.20/reference/documentation-style-guide.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/reference/documentation-style-guide.md
rename to docs-site/versioned_docs/version-0.1.20/reference/documentation-style-guide.md
diff --git a/docs-site/versioned_docs/version-1.0.0/reference/faq.md b/docs-site/versioned_docs/version-0.1.20/reference/faq.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/reference/faq.md
rename to docs-site/versioned_docs/version-0.1.20/reference/faq.md
diff --git a/docs-site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md b/docs-site/versioned_docs/version-0.1.20/troubleshooting/common-problems.md
similarity index 100%
rename from docs-site/versioned_docs/version-1.0.0/troubleshooting/common-problems.md
rename to docs-site/versioned_docs/version-0.1.20/troubleshooting/common-problems.md
diff --git a/docs-site/versioned_sidebars/version-1.0.0-sidebars.json b/docs-site/versioned_sidebars/version-0.1.20-sidebars.json
similarity index 100%
rename from docs-site/versioned_sidebars/version-1.0.0-sidebars.json
rename to docs-site/versioned_sidebars/version-0.1.20-sidebars.json
diff --git a/docs-site/versions.json b/docs-site/versions.json
index 64de05e..7f30564 100644
--- a/docs-site/versions.json
+++ b/docs-site/versions.json
@@ -1 +1 @@
-["1.0.0"]
+["0.1.20"]
diff --git a/documentation/README.md b/documentation/README.md
deleted file mode 100644
index 56638fd..0000000
--- a/documentation/README.md
+++ /dev/null
@@ -1,96 +0,0 @@
-# JobOps Documentation
-
-> [!IMPORTANT]
-> The source of truth is now `docs-site/docs/` (served at `/docs`).
-> This `documentation/` directory is retained temporarily for migration compatibility.
-
-Welcome to the JobOps documentation. This folder contains comprehensive guides for setting up, configuring, and using JobOps.
-
-## Getting Started
-
-- **[Self-Hosting Guide](./self-hosting.md)** - Deploy JobOps with Docker Compose
- - Docker setup instructions
- - Gmail OAuth configuration for email tracking
- - Environment variables reference
- - Demo mode deployment
-
-## Feature Documentation
-
-- **[Orchestrator](./orchestrator.md)** - Core job workflow and PDF generation
- - Job states explained (discovered, ready, applied, etc.)
- - The "Ready" flow (manual vs auto)
- - PDF generation and regeneration
- - Post-application tracking overview
-
-- **[Ghostwriter](./ghostwriter.md)** - Context-aware per-job chat assistant
- - One persistent conversation per job
- - Streaming responses, stop, and regenerate
- - Markdown rendering and drawer UX behavior
- - Writing style settings impact
-
-- **[Post-Application Tracking](./post-application-tracking.md)** - Email-to-job matching
- - How the Smart Router AI works
- - Gmail integration setup
- - Using the Tracking Inbox
- - Privacy and security details
- - API reference
-
-## Extractors
-
-JobOps uses specialized extractors to gather jobs from different sources:
-
-- **[Extractors Overview](./extractors/README.md)** - Architecture and how extractors work
-- **[Gradcracker](./extractors/gradcracker.md)** - UK graduate jobs and internships
-- **[UKVisaJobs](./extractors/ukvisajobs.md)** - UK visa sponsorship jobs
-- **[JobSpy](./extractors/jobspy.md)** - Multi-platform job aggregator (Indeed, LinkedIn, etc.)
-- **[Manual Import](./extractors/manual.md)** - Import jobs from URLs or text
-
-## Quick Reference
-
-### Main Components
-
-- **Orchestrator** - Main application (UI, API, database)
-- **Extractors** - Specialized job crawlers
-- **Shared** - Common types and utilities
-
-### Key Features
-
-1. **Job Discovery** - Automatically find jobs from multiple sources
-2. **AI Scoring** - Rank jobs by suitability for your profile
-3. **Resume Tailoring** - Generate custom resumes for each job
-4. **PDF Export** - Create tailored PDFs via RxResume integration
-5. **Application Tracking** - Monitor your applied jobs
-6. **Email Tracking** - Auto-track post-application responses (interviews, offers, rejections)
-
-### Documentation Structure
-
-```
-documentation/
-├── self-hosting.md # Deployment guide
-├── orchestrator.md # Core workflow documentation
-├── ghostwriter.md # Ghostwriter feature documentation
-├── post-application-tracking.md # Email tracking feature
-└── extractors/ # Job source extractors
- ├── README.md
- ├── gradcracker.md
- ├── jobspy.md
- ├── manual.md
- ├── ukvisajobs.md
- └── gradcracker.md
-```
-
-## Contributing to Documentation
-
-When adding new features:
-
-1. Update the relevant feature documentation
-2. Add API endpoint documentation to orchestrator README
-3. Update this index if adding new docs
-4. Include mermaid diagrams for complex workflows
-5. Provide practical examples
-
-## Support
-
-- Open an [issue](https://github.com/DaKheera47/job-ops/issues) for documentation errors
-- Check existing docs before asking questions
-- See main README for general project info
diff --git a/documentation/extractors/README.md b/documentation/extractors/README.md
deleted file mode 100644
index f27ca9e..0000000
--- a/documentation/extractors/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Extractors
-
-Technical breakdowns of how each extractor works.
-
-- Gradcracker: `gradcracker.md`
-- JobSpy: `jobspy.md`
-- UKVisaJobs: `ukvisajobs.md`
-- Manual Import: `manual.md`
diff --git a/documentation/extractors/gradcracker.md b/documentation/extractors/gradcracker.md
deleted file mode 100644
index ab98046..0000000
--- a/documentation/extractors/gradcracker.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# Gradcracker Scraper (How It Works)
-
-This is a plain-English walkthrough of the Gradcracker extractor in `extractors/gradcracker`.
-
-## Big picture
-
-The scraper builds a list of Gradcracker search URLs, visits each list page, extracts job cards, then opens each job?s detail page to grab the full description and the external application link.
-
-## 1) Build search URLs
-
-- It starts with a fixed set of UK regions (e.g. London & South East, West Midlands, South West).
-- It uses default role terms like `web-development` and `software-systems`.
-- If you set `GRADCRACKER_SEARCH_TERMS`, those replace the defaults (JSON array of strings).
-- Every role is combined with every location to form a Gradcracker search URL, sorted by newest first.
-
-## 2) Crawl list pages
-
-On each list page it:
-
-- Waits for the job cards to load (`article[wire:key]`).
-- Scrapes basic fields from each card: title, employer, employer URL, discipline, deadline, salary, location, degree required, and start date.
-- Queues each job?s detail page for deeper scraping.
-
-Optional controls:
-
-- `GRADCRACKER_MAX_JOBS_PER_TERM` caps how many jobs are queued per role term.
-- `JOBOPS_SKIP_APPLY_FOR_EXISTING=1` and `JOBOPS_EXISTING_JOB_URLS` (or `JOBOPS_EXISTING_JOB_URLS_FILE`) let it skip jobs you already know about.
-
-## 3) Crawl job detail pages
-
-On each job page it:
-
-- Waits for the main content block (`.body-content`).
-- Saves the full description text.
-- Looks for the Apply button and clicks it to capture the final application URL.
- - Handles both popup windows and same-tab redirects.
- - Waits for the URL to stabilize before recording it.
-- Skips the Apply click if the job is already known (same env rules as above).
-
-## 4) Progress reporting (optional)
-
-If `JOBOPS_EMIT_PROGRESS=1` is set, the extractor prints structured progress lines that the orchestrator can stream into the UI.
-
-## Notes
-
-- The crawler runs with Playwright + Crawlee, launched through Camoufox to look more like a real browser.
-- Concurrency is kept low (1 or 2) and timeouts are generous to reduce flakiness.
diff --git a/documentation/extractors/jobspy.md b/documentation/extractors/jobspy.md
deleted file mode 100644
index b54a07c..0000000
--- a/documentation/extractors/jobspy.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# JobSpy Extractor (How It Works)
-
-This is a simple walkthrough of the JobSpy extractor used for Indeed, LinkedIn, and Glassdoor.
-
-## Big picture
-
-JobSpy is a Python library. We wrap it in a tiny Python script, run it once per search term, then ingest the JSON it writes into our database format.
-
-## 1) Inputs and defaults
-
-The Python wrapper (`extractors/jobspy/scrape_jobs.py`) reads environment variables and falls back to sensible defaults:
-
-- `JOBSPY_SITES` (default: `indeed,linkedin`)
-- `JOBSPY_SEARCH_TERM` (default: `web developer`)
-- `JOBSPY_LOCATION` (default: `UK`)
-- `JOBSPY_RESULTS_WANTED` (default: `200`)
-- `JOBSPY_HOURS_OLD` (default: `72`)
-- `JOBSPY_COUNTRY_INDEED` (default: `UK`)
-- `JOBSPY_LINKEDIN_FETCH_DESCRIPTION` (default: `true`)
-
-It writes output to both CSV and JSON files. The JSON is what we ingest.
-
-## 2) Orchestrator flow
-
-The Node service (`orchestrator/src/server/services/jobspy.ts`) controls the run:
-
-- Builds a list of search terms (from the UI, or `JOBSPY_SEARCH_TERMS` env).
-- Runs the Python script once per search term with a unique output filename.
-- Reads the JSON file, maps each row to our internal `CreateJobInput` shape.
-- De-dupes by `jobUrl` so the same listing only appears once.
-- Deletes the CSV/JSON files after ingesting (best effort).
-
-## 3) Mapping and cleanup
-
-The mapper normalizes fields like salary ranges, converts empty values to null, and keeps extra metadata (skills, company rating, remote flag, etc.) when available.
-
-If a row is missing a valid site (`indeed`, `linkedin`, or `glassdoor`) or a job URL, it gets skipped.
-
-## Notes
-
-- If `JOBSPY_SEARCH_TERMS` is a JSON array, it will be parsed as-is. Otherwise it can be a `|`, comma, or newline-separated list.
-- LinkedIn descriptions are optional and can slow the crawl; set `JOBSPY_LINKEDIN_FETCH_DESCRIPTION=0` to disable.
-- Output files are stored under `data/imports/` before being cleaned up.
diff --git a/documentation/extractors/manual.md b/documentation/extractors/manual.md
deleted file mode 100644
index 3fd5ec2..0000000
--- a/documentation/extractors/manual.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Manual Import Extractor (How It Works)
-
-This is a walkthrough of the manual job import flow, which allows users to add jobs that aren't captured by automated scrapers.
-
-## Big Picture
-
-Instead of scraping a website, the manual extractor takes a raw job description (pasted text), parses the details (using AI), and allows the user to review and edit the data before importing it into the pipeline.
-
-## 1) Input
-
-The user provides input via the **Manual Import** sheet in the UI. They paste a full job description, copied from any source (job board, company site, email, etc.).
-
-## 2) AI Inference
-
-When the user clicks "Analyze JD", the orchestrator calls an internal endpoint (`/api/manual-jobs/infer`).
-
-The server-side service (`orchestrator/src/server/services/manualJob.ts`) then:
-- Sends the raw text to an LLM (via the configured provider; OpenRouter by default).
-- Uses a specific prompt to extract structured data (title, employer, location, salary, etc.).
-- Returns a JSON object containing the inferred fields.
-
-If the LLM API key is not configured (e.g. `LLM_API_KEY` for OpenRouter/OpenAI/Gemini), the inference step skips and warns the user to fill details manually.
-
-(`OPENROUTER_API_KEY` is deprecated and is automatically copied to `LLM_API_KEY` for compatibility.)
-
-## 3) Review and Edit
-
-The inferred data is populated into a form in the UI. The user can:
-- Correct any mistakes made by the AI.
-- Add missing information.
-
-## 4) Storage and Scoring
-
-Once the user clicks "Import Job", the data is sent to `/api/manual-jobs/import`.
-
-The orchestrator:
-- Generates a unique ID for the job if no URL is provided.
-- Saves the job to the database with the source set to `manual`.
-- **Asynchronously triggers scoring**: The job is immediately run through the suitability scorer (`orchestrator/src/server/services/scorer.ts`) against the user's current resume profile.
-- Updates the job record with the suitability score and reason once complete.
diff --git a/documentation/extractors/ukvisajobs.md b/documentation/extractors/ukvisajobs.md
deleted file mode 100644
index eff5986..0000000
--- a/documentation/extractors/ukvisajobs.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# UKVisaJobs Extractor (How It Works)
-
-This is a plain-English walkthrough of the UK Visa Jobs extractor. It's the most complex one because the site requires an authenticated session before the API will return jobs.
-
-## Big picture
-
-There are two layers:
-
-1) `extractors/ukvisajobs/src/main.ts` handles logging in, talking to the UKVisaJobs API, and writing a Crawlee-style dataset.
-2) `orchestrator/src/server/services/ukvisajobs.ts` runs that extractor, reads the dataset, de-dupes results, and optionally enriches descriptions.
-
-## 1) Authentication and session cache
-
-The API requires a token + cookies. The extractor keeps these in a cache file:
-
-- `extractors/ukvisajobs/storage/ukvisajobs-auth.json`
-
-Flow:
-
-- If there's a cached session, it uses it.
-- If not, it launches a real browser (Playwright + Camoufox), logs in with `UKVISAJOBS_EMAIL` and `UKVISAJOBS_PASSWORD`, then captures the auth cookies + token.
-- It stores those values in the cache file for reuse.
-
-You can force a refresh with:
-
-- `UKVISAJOBS_REFRESH_ONLY=1`
-
-If the API responds with an "expired" token error, it will automatically re-login and retry.
-
-## 2) API requests
-
-Once authenticated, it posts to:
-
-- `https://my.ukvisajobs.com/ukvisa-api/api/fetch-jobs-data`
-
-Each request:
-
-- Includes the auth token in a form field.
-- Includes cookies in the header (`csrf_token`, `ci_session`, `authToken`).
-- Filters by search keyword if provided.
-- Uses pagination (15 jobs per page).
-
-## 3) Job mapping
-
-The extractor normalizes the raw API data into the project's job shape:
-
-- Salary is built from min/max values and interval.
-- Visa-related flags are turned into a short fallback description if the job has no real description.
-- The `job_link` becomes both `jobUrl` and `applicationLink`.
-
-## 4) Output dataset
-
-The extractor writes the results to:
-
-- `extractors/ukvisajobs/storage/datasets/default/`
-
-It mirrors Crawlee's dataset format:
-
-- One JSON file per job.
-- A combined `jobs.json` containing all jobs.
-
-## 5) Orchestrator flow (how the app uses it)
-
-When the pipeline runs:
-
-- The server spawns the extractor as a child process (`npx tsx src/main.ts`).
-- It can run multiple search terms sequentially (with a short delay between them).
-- It reads the dataset and de-dupes by `sourceJobId` (or `jobUrl` fallback).
-- If a job's description is missing or too short, it makes a direct HTTP request to the job URL and extracts plain text.
- - This is effectively a curl-style fetch of the job page to fill in the JD for scoring and summarization.
-
-## Controls and limits
-
-Key environment variables:
-
-- `UKVISAJOBS_EMAIL`, `UKVISAJOBS_PASSWORD` (required for auth refresh)
-- `UKVISAJOBS_HEADLESS` (set `false` to show the browser)
-- `UKVISAJOBS_MAX_JOBS` (default 50, max 200)
-- `UKVISAJOBS_SEARCH_KEYWORD` (single keyword filter)
-
-The UI also lets you set max jobs and search terms via the pipeline settings.
-
-## Practical notes
-
-- If you remove the auth cache file, the next run will re-login.
-- The extractor is intentionally polite: it runs low concurrency and adds short delays.
-- If the API or session changes on the UKVisaJobs side, the refresh logic is the first thing to check.
diff --git a/documentation/ghostwriter.md b/documentation/ghostwriter.md
deleted file mode 100644
index 1ba8b9c..0000000
--- a/documentation/ghostwriter.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# Ghostwriter
-
-Ghostwriter is the per-job AI chat assistant in JobOps. It is optional to use and is designed for drafting application content with job-specific context already loaded.
-
-## What Ghostwriter is for
-
-Ghostwriter is not a generic chat box. For each job, it uses:
-
-- The current job description and job metadata
-- A reduced snapshot of your resume/profile
-- Your global Ghostwriter writing style settings
-
-This makes it useful for:
-
-- Drafting role-specific answers
-- Cover letter and outreach drafts
-- Interview prep talking points tied to the current JD
-- Rephrasing content to match your preferred style
-
-## Where it appears
-
-- Available from job details in `discovered` and `ready` flows
-- Opens as a right-side drawer
-- One persistent conversation per job
-
-## Writing style settings impact
-
-Ghostwriter settings are global and affect new generations:
-
-- `Tone`: adds a tone instruction in the Ghostwriter system prompt
-- `Formality`: adds a formality instruction
-- `Constraints`: appended as explicit writing constraints
-- `Do-not-use terms`: appended as language to avoid
-
-Defaults:
-
-- Tone: `professional`
-- Formality: `medium`
-- Constraints: empty
-- Do-not-use terms: empty
-
-## Context + safety model
-
-Ghostwriter context is assembled server-side with size limits and sanitization:
-
-- Job snapshot is truncated to fit prompt budget
-- Profile snapshot includes only relevant slices (summary, skills, projects, experience)
-- System prompt enforces read-only assistant behavior
-- Logging stores metadata only (not raw full prompt/response dumps)
-
-## API surface (current)
-
-Primary per-job endpoints:
-
-- `GET /api/jobs/:id/chat/messages`
-- `POST /api/jobs/:id/chat/messages` (supports streaming)
-- `POST /api/jobs/:id/chat/runs/:runId/cancel`
-- `POST /api/jobs/:id/chat/messages/:assistantMessageId/regenerate` (supports streaming)
-
-Compatibility endpoints for thread resources remain present, but UI behavior is one conversation per job.
diff --git a/documentation/orchestrator.md b/documentation/orchestrator.md
deleted file mode 100644
index 0619a99..0000000
--- a/documentation/orchestrator.md
+++ /dev/null
@@ -1,144 +0,0 @@
-# Orchestrator: Job States and PDF Flow
-
-This doc explains how the orchestrator thinks about job states, how the "Ready" flow is supposed to work, and how to generate or regenerate PDFs after edits.
-
-## Job states (what each one means)
-
-- `discovered`: The job was found by a crawler/import. It has not been processed into a tailored resume yet.
-- `processing`: The system is currently generating tailoring data and/or the PDF.
-- `ready`: A tailored PDF has been generated and the job is ready for you to apply.
-- `applied`: You marked it as applied.
-- `skipped`: You explicitly skipped it (so it stays out of your active queue).
-- `expired`: Deadline has passed. This is a terminal state used for cleanup/triage.
-
-## The intended "Ready" flow
-
-There are two main ways a job becomes Ready:
-
-1. **Manual flow (most common)**
- - A job starts in `discovered`.
- - You open it in the Discovered panel, decide to Tailor.
- - In Tailor mode you can edit job description (optional), tailored summary, tailored headline, tailored skills, and project picks.
- - You click **Finalize & Move to Ready**.
- - This runs summarization (if needed), generates the PDF, and sets status to `ready`.
-
-2. **Auto flow (pipeline top picks)**
- - The pipeline scores all discovered jobs.
- - It auto-processes the top N above the score threshold.
- - Those jobs go directly to `ready` with PDFs generated.
-
-Once a job is `ready`, the Ready panel is the "shipping lane":
-
-- View/download the PDF.
-- Open Ghostwriter for context-aware drafting tied to the current job.
-- Open the job listing.
-- Mark Applied (moves to `applied`).
-- Optional: edit tailoring, edit the JD, or regenerate the PDF.
-
-## Ghostwriter (per-job context chat)
-
-Ghostwriter is always on and is available in both `discovered` and `ready` job views.
-
-- It uses the current job context, profile context, and your global writing style settings.
-- Conversation state is persistent per job.
-- Responses stream in real time and can be cancelled.
-- Regenerate is available for the last assistant response.
-- Messages render as Markdown.
-
-For full details and API surface, see [Ghostwriter](./ghostwriter.md).
-
-## Generating PDFs (first time)
-
-The PDF is generated from:
-
-- The base resume selected from your v4.rxresu.me account (via Onboarding or Settings).
-- The job description (used for AI tailoring and project selection).
-- Your tailored summary, tailored headline, tailored skills, and selected projects.
-
-Paths:
-
-- **Discovered ? Tailor ? Finalize**
- - Calls `/api/jobs/:id/process`.
- - Runs AI summary + project selection, then generates the PDF.
- - Sets status to `ready` and saves `pdfPath`.
-
-- **Ready panel ? Regenerate PDF**
- - Calls `/api/jobs/:id/generate-pdf` using the current saved tailoring fields.
-
-## Regenerating PDFs after edits
-
-If the job description or tailoring changes, regenerate the PDF so it stays in sync.
-
-### Typical UI flow
-
-1. Edit job description or tailoring in the Discovered/Tailor view, or use ?Edit job description? in Ready.
-2. If you want AI to re-tailor based on the updated JD, click **Generate draft** (Discovered) or **AI Summarize** (editor).
-3. Click **Finalize & Move to Ready** (if still in Discovered) or **Regenerate PDF** (if already Ready).
-
-### API flow (for automation)
-
-1. Update the data:
-
-```bash
-PATCH /api/jobs/:id
-{
- "jobDescription": "",
- "tailoredSummary": "",
- "tailoredHeadline": "",
- "tailoredSkills": "[{\"name\":\"Backend\",\"keywords\":[\"TypeScript\",\"Node.js\"]}]",
- "selectedProjectIds": "p1,p2"
-}
-```
-
-2. (Optional) re-run AI tailoring based on the new JD:
-
-```bash
-POST /api/jobs/:id/summarize?force=true
-```
-
-3. Generate the PDF using current stored fields:
-
-```bash
-POST /api/jobs/:id/generate-pdf
-```
-
-## Post-Application Tracking (Tracking Inbox)
-
-After you've applied to jobs, the Tracking Inbox feature automatically monitors your Gmail for responses:
-
-### How it works
-
-1. **Gmail Sync**: Periodically checks your Gmail for recruitment-related emails
-2. **Smart Router AI**: Analyzes each email for:
- - Relevance (is it about job applications?)
- - Job matching (which applied job is this about?)
- - Message type (interview, offer, rejection, update)
- - Confidence score (0-100%)
-
-3. **Automatic Processing**:
- - **95-100% confidence**: Auto-linked to the matched job, timeline updated
- - **50-94% confidence**: Goes to Inbox for review with suggested match
- - **<50% confidence**: Goes to Inbox as "orphan" if relevant; ignored if not
-
-4. **User Review**: Items in the Inbox wait for your approve/ignore decision
-
-### Gmail Setup
-
-1. Configure Gmail OAuth credentials (see `self-hosting.md`)
-2. In the UI: Tracking Inbox → Connect Gmail
-3. Authorize read-only Gmail access
-
-## Notes and gotchas
-
-- `processing` is transient. If PDF generation fails, the job is reverted back to `discovered`.
-- The PDF is served at `/pdfs/resume_.pdf` and cache-busted with the job?s `updatedAt` timestamp.
-- If a job is `skipped` or `applied` and you want to re-open it, you can PATCH its `status` back to `discovered`.
-- Job text search is handled through the command bar (`Cmd/Ctrl+K`) and is not persisted as a URL filter.
-
-## External payload and sanitization defaults
-
-- **LLM providers** receive only prompt inputs required for scoring/tailoring/project selection/manual extraction tasks.
-- By default, prompt construction uses minimized profile/job fields and avoids sending unnecessary sensitive data.
-- **Webhook payloads** are sanitized and whitelisted by default; large/sensitive blobs are not sent.
-- Server logs and error details are redacted/truncated by default (secrets, tokens, cookies, passwords, API keys, and oversized payload fields).
-- Correlation data is included in logs (`requestId`, and when available `pipelineRunId` / `jobId`) to improve traceability without exposing raw payloads.
diff --git a/documentation/post-application-tracking.md b/documentation/post-application-tracking.md
deleted file mode 100644
index 4dba4ce..0000000
--- a/documentation/post-application-tracking.md
+++ /dev/null
@@ -1,241 +0,0 @@
-# Post-Application Email Tracking
-
-The Post-Application Tracking feature (also called "Tracking Inbox") automatically monitors your Gmail for job application responses and updates your job timeline accordingly.
-
-## Overview
-
-After you've applied to jobs, keeping track of responses can be tedious. This feature automates that process by:
-
-1. **Scanning your Gmail** for recruitment-related emails
-2. **Matching emails** to your tracked job applications using AI
-3. **Updating your timeline** with interview invites, offers, rejections, and updates
-4. **Asking for your review** when the AI is uncertain
-
-## How It Works
-
-### The Smart Router Flow
-
-```mermaid
-flowchart TD
- A[Recruitment email arrives in Gmail] --> B[Smart Router AI analyzes content]
- B --> C{How confident is the match?}
-
- C -->|95-100%| D[Auto-linked to job]
- D --> E[Timeline updated automatically]
-
- C -->|50-94%| F[Goes to Inbox for review
with suggested job match]
-
- C -->|<50%| G{Is it relevant?}
- G -->|Yes| H[Goes to Inbox as orphan
relevant but job unclear]
- G -->|No| I[Ignored - not job-related]
-
- F --> J{You review in Inbox}
- H --> J
- J -->|Approve| K[Linked to selected job
Timeline updated]
- J -->|Ignore| L[Marked as not relevant]
-```
-
-### What the AI Analyzes
-
-For each email, the Smart Router evaluates:
-
-- **Content Relevance**: Is this email about a job application lifecycle?
-- **Job Matching**: Which of your "Applied" or "Processing" jobs does this relate to?
-- **Message Type**:
- - Interview invitation (phone screen, technical, onsite)
- - Offer received
- - Rejection/withdrawal
- - General update/status change
-- **Confidence Score**: 0-100% certainty of the match
-
-### Processing Outcomes
-
-| Confidence | Processing | Your Action Required |
-| ----------------------- | ------------------------------ | ---------------------------------------- |
-| **95-100%** | Auto-linked to job | None - appears in timeline automatically |
-| **50-94%** | Pending review with suggestion | Quick approve/ignore in Inbox |
-| **<50% (relevant)** | Pending review as orphan | Approve with manual job selection |
-| **<50% (not relevant)** | Ignored | None - filtered out |
-
-## Setup
-
-### Prerequisites
-
-1. **Gmail account** with job application emails
-2. **Google OAuth credentials** (see below)
-
-### Step 1: Create Google OAuth Credentials
-
-1. Go to [Google Cloud Console](https://console.cloud.google.com/)
-2. Create a new project or select existing
-3. Enable the **Gmail API**
-4. Configure **OAuth consent screen**:
- - User Type: External
- - Fill in app name, user support email, developer contact
- - Add scope: `https://www.googleapis.com/auth/gmail.readonly`
- - Add test users (your email)
-5. Create **OAuth 2.0 Client ID**:
- - Application type: Web application
- - Authorized redirect URIs:
- - `http://localhost:3005/oauth/gmail/callback` (local)
- - `https://your-domain.com/oauth/gmail/callback` (production)
-6. Copy the **Client ID** and **Client Secret**
-
-### Step 2: Configure Environment Variables
-
-Set these in your JobOps environment:
-
-```bash
-GMAIL_OAUTH_CLIENT_ID=your-client-id.apps.googleusercontent.com
-GMAIL_OAUTH_CLIENT_SECRET=your-client-secret
-# Optional - defaults to /oauth/gmail/callback on current host
-GMAIL_OAUTH_REDIRECT_URI=https://your-domain.com/oauth/gmail/callback
-```
-
-### Step 3: Connect Gmail in the UI
-
-1. Restart JobOps with the new environment variables
-2. Navigate to **Tracking Inbox** in the dashboard
-3. Click **Connect Gmail**
-4. Authorize JobOps to access your Gmail (read-only scope)
-5. You're connected! The system will now sync emails automatically
-
-## Using the Tracking Inbox
-
-### Reviewing Pending Items
-
-When emails need your review, they appear in the **Inbox**:
-
-1. Go to **Tracking Inbox** → **Inbox** tab
-2. Each item shows:
- - Sender and subject
- - AI confidence score
- - Suggested job match (if available)
- - Message type (interview, offer, etc.)
-3. Choose an action:
- - **Approve**: Links to the suggested job (or select a different one)
- - **Ignore**: Marks as not relevant
-
-### Understanding Confidence Scores
-
-- **Green (95-100%)**: High confidence, auto-processed
-- **Yellow (50-94%)**: Moderate confidence, needs review
-- **Red (<50%)**: Low confidence or unclear match
-
-### Timeline Updates
-
-When you approve an email (or it's auto-approved), the system:
-
-1. Creates a timeline event for the job
-2. Updates the job stage (e.g., "Interview Scheduled", "Offer Received")
-3. Records the event date from the email
-
-## Privacy & Security
-
-### What Data is Sent to AI
-
-Only minimal job metadata is sent for matching:
-
-- Company name
-- Job title
-- Snippets of email content
-
-### Gmail Permissions
-
-- **Scope**: `gmail.readonly` only
-- **Access**: Read-only, cannot send/delete emails
-- **Data Storage**: Email metadata stored locally in your SQLite database
-
-### Data Retention
-
-- Sync history retained for debugging
-- You can disconnect Gmail at any time
-- All email data is local to your instance
-
-## Troubleshooting
-
-### Common Issues
-
-**"No refresh token" error**
-
-- Disconnect and reconnect Gmail
-- This forces a fresh consent flow
-
-**Emails not appearing**
-
-- Check sync run history in Tracking Inbox → Runs
-- Verify Gmail OAuth credentials are correct
-- Ensure email subjects match recruitment keywords
-
-**Wrong job matches**
-
-- This is expected for low-confidence matches
-- Use the Inbox to correct matches
-
-### Viewing Sync History
-
-Go to **Tracking Inbox** → **Runs** to see:
-
-- When syncs ran
-- How many messages were discovered
-- How many were auto-linked vs. pending review
-- Any errors that occurred
-
-## Configuration
-
-### Environment Variables
-
-| Variable | Required | Description |
-| --------------------------- | -------- | ------------------------------ |
-| `GMAIL_OAUTH_CLIENT_ID` | Yes | Google OAuth client ID |
-| `GMAIL_OAUTH_CLIENT_SECRET` | Yes | Google OAuth client secret |
-| `GMAIL_OAUTH_REDIRECT_URI` | No | Custom redirect URI (optional) |
-
-### Advanced Settings
-
-Currently, the feature uses sensible defaults:
-
-- Searches last 30 days of emails
-- Looks for recruitment-related keywords in subjects
-- Processes up to 100 messages per sync
-- Runs automatically when you open the Tracking Inbox
-
-## API Reference
-
-### REST Endpoints
-
-| Method | Endpoint | Description |
-| ------ | ----------------------------------------- | --------------------- |
-| GET | `/api/post-application/inbox` | List pending messages |
-| POST | `/api/post-application/inbox/:id/approve` | Approve message |
-| POST | `/api/post-application/inbox/:id/deny` | Ignore message |
-| GET | `/api/post-application/runs` | List sync runs |
-| POST | `/api/post-application/gmail/connect` | Start OAuth flow |
-| GET | `/api/post-application/gmail/callback` | OAuth callback |
-
-### Example: Approve an Inbox Item
-
-```bash
-curl -X POST http://localhost:3005/api/post-application/inbox/msg_123/approve \
- -H "Content-Type: application/json" \
- -d '{
- "jobId": "job_456",
- "note": "Phone screen scheduled"
- }'
-```
-
-## Best Practices
-
-1. **Review regularly**: Check your Inbox weekly to stay on top of pending matches
-2. **Be decisive**: Approve or ignore items quickly to keep your Inbox clean
-3. **Correct mismatches**: If the AI suggests the wrong job, select the correct one when approving
-4. **Monitor sync runs**: Check the Runs tab occasionally to ensure syncing is working
-5. **Privacy first**: Remember only minimal job data is sent to AI - your email content stays private
-
-## Future Enhancements
-
-Potential improvements planned:
-
-- Multiple email provider support (Outlook, etc.)
-- IMAP support for non-Gmail accounts
-- Calendar integration for interview scheduling
diff --git a/documentation/self-hosting.md b/documentation/self-hosting.md
deleted file mode 100644
index fa42ed4..0000000
--- a/documentation/self-hosting.md
+++ /dev/null
@@ -1,136 +0,0 @@
-# Self-Hosting (Docker Compose)
-
-The easiest way to run JobOps is via Docker Compose. The app is self-configuring and will guide you through the setup on your first visit.
-
-## Prereqs
-
-- Docker Desktop or Docker Engine + Compose v2
-
-## 1) Start the stack
-
-No environment variables are strictly required to start. Simply run:
-
-```bash
-docker compose up -d
-```
-
-This pulls the pre-built image from **GitHub Container Registry (GHCR)** and starts the API, UI, and scrapers in a single container. The image is multi-arch (supports `amd64` and `arm64`), making it compatible with Apple Silicon and Raspberry Pi.
-
-If you want to build it yourself, you can run `docker compose up -d --build`.
-
-## 2) Access the app and Onboard
-
-Open your browser to:
-
-- **Dashboard**: http://localhost:3005
-
-On first launch, you will be greeted by an **Onboarding Wizard**. The app will help you validate and save your configuration:
-
-1. **LLM Provider**: OpenRouter is the default. Add an API key if required (OpenRouter/OpenAI/Gemini), or configure a local base URL (LM Studio/Ollama).
-2. **PDF Export**: Add your RxResume credentials (used to export PDFs from v4.rxresu.me).
-3. **Template Resume**: Select a base resume from your v4.rxresu.me account.
-
-The app saves these to its persistent database, so you don't need to manage `.env` files for basic setup. All other settings (like search terms, job sources, and more) can also be configured directly in the UI.
-
-Upgrade note: `OPENROUTER_API_KEY` is deprecated. Existing OpenRouter keys are automatically migrated/copied to `LLM_API_KEY` so you don't lose them.
-
-## Gmail OAuth (Post-Application Inbox)
-
-If you want to connect Gmail in the Tracking Inbox page, configure Google OAuth credentials for the API server.
-
-### 1) Create Google OAuth credentials
-
-In Google Cloud:
-
-1. Open your project (or create one), then configure the OAuth consent screen.
-2. Enable the Gmail API.
-3. Create an OAuth client ID (`Web application` type).
-4. Add an authorized redirect URI:
- - `http://localhost:3005/oauth/gmail/callback` (default local setup)
- - or your deployed app URL, for example `https://your-domain.com/oauth/gmail/callback`
-
-### 2) Configure environment variables
-
-Set these on the JobOps container:
-
-- `GMAIL_OAUTH_CLIENT_ID` (required)
-- `GMAIL_OAUTH_CLIENT_SECRET` (required)
-- `GMAIL_OAUTH_REDIRECT_URI` (optional, recommended for production)
- - If omitted, JobOps derives it from the incoming request host as `/oauth/gmail/callback`.
-
-### 3) Restart and connect
-
-After setting env vars, restart the container and use `Tracking Inbox -> Connect Gmail`.
-
-Notes:
-
-- JobOps requests `gmail.readonly` scope.
-- If Google returns no refresh token, disconnect and re-connect to force a fresh consent flow.
-
-## Email-to-Job Matching Overview
-
-When Gmail sync runs, your emails are automatically analyzed and routed. Here's what happens:
-
-```mermaid
-flowchart TD
- A[Recruitment email arrives in Gmail] --> B[Smart Router AI analyzes content]
- B --> C{How confident is the match?}
-
- C -->|95-100%| D[Auto-linked to job]
- D --> E[Timeline updated automatically]
-
- C -->|50-94%| F[Goes to Inbox for review
with suggested job match]
-
- C -->|<50%| G{Is it relevant?}
- G -->|Yes| H[Goes to Inbox as orphan
relevant but job unclear]
- G -->|No| I[Ignored - not job-related]
-
- F --> J{You review in Inbox}
- H --> J
- J -->|Approve| K[Linked to selected job
Timeline updated]
- J -->|Ignore| L[Marked as not relevant]
-```
-
-**What the AI looks for:**
-- Content relevance - Is this about job applications?
-- Job matching - Which of your tracked jobs is this about?
-- Message type - Interview, offer, rejection, or update?
-
-**Your control:**
-- High-confidence matches (95%+) happen automatically
-- Everything else appears in your Inbox for a quick yes/no decision
-- You can always correct the job match when approving
-
-**Privacy note:** Only job ID, company name, and title are sent to the AI for matching. Full email content stays local.
-
-## Persistent data
-
-`./data` is bind-mounted into the container. It stores:
-
-- SQLite DB: `data/jobs.db` (contains your API keys and configuration)
-- Generated PDFs: `data/pdfs/`
-- Template resume selection: Stored internally after selection.
-
-## Public demo deployment (`DEMO_MODE=true`)
-
-For a public sandbox website, set `DEMO_MODE=true` on the container.
-
-Behavior in demo mode:
-
-- **Works (local demo DB):** browsing, filtering, job status updates, timeline edits.
-- **Simulated (no external side effects):** pipeline run, job summarize/process/rescore/pdf/apply, onboarding validations.
-- **Blocked:** settings writes, database clear, backup create/delete, status bulk deletes.
-- **Auto-reset:** seeded demo data is reset every 6 hours.
-
-## Updating
-
-```bash
-git pull
-docker compose pull
-docker compose up -d
-```
-
-## Self-hosted Reactive Resume
-
-If you are also self-hosting Reactive Resume, you should configure the url
-by setting `RXRESUME_URL` to your instance (e.g. `http://rxresume.local.net`).
diff --git a/orchestrator/src/client/components/navigation.ts b/orchestrator/src/client/components/navigation.ts
index 137707f..5e4f840 100644
--- a/orchestrator/src/client/components/navigation.ts
+++ b/orchestrator/src/client/components/navigation.ts
@@ -8,6 +8,8 @@ import {
Shield,
} from "lucide-react";
+declare const __APP_VERSION__: string;
+
export type NavLink = {
to: string;
label: string;
@@ -16,6 +18,16 @@ export type NavLink = {
external?: boolean;
};
+const releaseVersion = (() => {
+ if (typeof __APP_VERSION__ !== "string") return null;
+ const match = __APP_VERSION__.match(/^v\d+\.\d+\.\d+/);
+ return match ? match[0] : null;
+})();
+
+const docsLabel = releaseVersion
+ ? `Documentation (${releaseVersion})`
+ : "Documentation";
+
export const NAV_LINKS: NavLink[] = [
{ to: "/overview", label: "Overview", icon: Home },
{
@@ -36,7 +48,7 @@ export const NAV_LINKS: NavLink[] = [
activePaths: ["/applications/in-progress"],
},
{ to: "/tracking-inbox", label: "Tracking Inbox", icon: Inbox },
- { to: "/docs", label: "Documentation", icon: BookOpen, external: true },
+ { to: "/docs", label: docsLabel, icon: BookOpen, external: true },
{ to: "/visa-sponsors", label: "Visa Sponsors", icon: Shield },
{ to: "/settings", label: "Settings", icon: Settings },
];