Evolve summarizer into AI service with OCR support

This commit is contained in:
cesnimda
2026-03-23 20:12:34 +01:00
parent 90fdd8e1a5
commit 653f713a78
20 changed files with 475 additions and 129 deletions
+8 -8
View File
@@ -12,7 +12,7 @@ Job Tracker is a simple, self-hosted app for tracking job applications with a Re
- History/event trail per application (created, status changes, follow-up set, delete/restore)
- Export jobs to JSON/CSV + daily scheduled JSON export
- Optional “job import” preview from supported job sites (plugins) + optional translation to English
- Optional local summarizer service for short/full descriptions
- Optional local AI service for short/full descriptions
- Optional Google sign-in (Google ID tokens) to protect the API
## Architecture
@@ -21,11 +21,11 @@ Job Tracker is a simple, self-hosted app for tracking job applications with a Re
- `JobTrackerApi/`: ASP.NET Core API (defaults to `http://localhost:5202`)
- SQLite DB file: defaults to `JobTrackerApi/jobtracker.db` unless `Data:Root` / connection string overrides it
- Attachments: stored on disk under `DataRoot/Attachments/<jobId>/...`
- Optional local summarizer service: `tools/summarizer/` (FastAPI) used by the API via `Summarizer:BaseUrl`
- Optional local AI service: `tools/summarizer/` (FastAPI) used by the API via `Ai:BaseUrl`
## Quickstart (Docker)
This runs: frontend (nginx), backend API, and the summarizer service.
This runs: frontend (nginx), backend API, and the AI service.
1) Create a `.env` file next to `docker-compose.yml` (you can start from `.env.example`).
@@ -43,7 +43,7 @@ docker compose up --build
- .NET SDK `9.x` (API targets `net9.0`)
- Node.js (for the UI)
- (Optional) Python 3.x if running the summarizer without Docker
- (Optional) Python 3.x if running the AI service without Docker
### 1) Run the API
@@ -65,14 +65,14 @@ npm start
The UI defaults to calling `http://localhost:5202/api` when running on localhost (see `job-tracker-ui/src/api.ts`).
### 3) (Optional) Run the summarizer
### 3) (Optional) Run the AI service
The API calls a local FastAPI service to generate summaries. If its not running, the app still works (summary generation may be empty / best-effort).
With Docker (recommended):
```bash
docker compose up --build summarizer
docker compose up --build ai-service
```
Or run directly from `tools/summarizer/` (see `tools/summarizer/README.md`).
@@ -87,7 +87,7 @@ Common keys:
- `Data:Root`: folder for the SQLite DB + exports (defaults to API content root)
- `Data:AttachmentsRoot`: override attachments folder (defaults to `<Data:Root>/Attachments`)
- `Cors:Origins`: list of allowed origins (defaults to `http://localhost:3000`; use `"*"` to allow all)
- `Summarizer:BaseUrl`: summarizer base URL (default `http://127.0.0.1:8001`)
- `Ai:BaseUrl`: AI service base URL (default `http://127.0.0.1:8001`)
- `Exports:DailyEnabled`: enable/disable daily export background job
- `Exports:DailyFolder`: export destination (relative to `Data:Root` if not absolute)
- `Exports:DailyHourLocal`: local hour (023) when the daily export runs
@@ -109,7 +109,7 @@ Common keys:
- `Email:SmtpUser`: SMTP username (often your Gmail address)
- `Email:SmtpPassword`: SMTP password (for Gmail: use an App Password)
- `Email:From`: from address (default: `Email:SmtpUser`)
- `Email:FromName`: from name (default: `Job Tracker`)
- `Email:FromName`: from name (default: `Jobbjakt`)
### UI settings