# overview

The job domain tracks opportunities before and after application. Canonical stages cover Saved,
Interested, Preparing, Applied, Waiting, Interview, Offer, Rejected, and Ghosted while preserving
unknown custom status values. Each owned application aggregates company, correspondence, attachments,
follow-ups, checklist, timeline, analysis, and generated application material.

See `docs/architecture/application-workspace.md` and `docs/decisions/ADR-002-job-application-model.md`.
# Job Tracking Overview

## Purpose

Job tracking is the primary purpose of Jobjakt.

The application exists first to help users manage their job search.

Career features, CV generation, AI assistance, and job discovery support this workflow.

They do not replace it.

---

# Core Product Statement

Jobjakt helps users:

Find opportunities

↓

Track applications

↓

Manage communication

↓

Prepare better applications

↓

Secure employment

---

# Core Objects

The main entities are:

## Job

The opportunity itself.

Examples:

- Software Engineer position.
- Developer role.
- Marketing position.

Contains:

- Title.
- Company.
- Description.
- URL.
- Location.
- Salary information.
- Requirements.

---

## Application

The user's attempt to obtain the role.

A job can exist without an application.

Example:

User saves an interesting role.

Later they apply.

---

## Company

The organisation offering the role.

Should be reusable.

Example:

Multiple jobs from Google should link to one company.

---

## Communication

Interactions related to the application.

Examples:

- Emails.
- Calls.
- Messages.
- Notes.

---

## Follow-up

A planned action.

Examples:

- Contact recruiter.
- Check application status.
- Prepare interview.

---

# Product Principles

## Reduce manual work

Import information where possible.

---

## Keep users organised

The user should always know:

- What jobs exist.
- What stage applications are at.
- What action is next.

---

## Avoid unnecessary complexity

Do not require users to complete every field.

Smart defaults are preferred.
