- consolidate API ownership and remove dead vendor code - add Stripe billing, learning paths, and public CV hardening - add migration, recovery, security, audit, and browser gates
2.0 KiB
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.