Documentation
¶
Overview ¶
Package job defines the job-posting data model that the rest of the system reads, writes, and operates on.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CalendarEventRef ¶
type CalendarEventRef struct {
ID string `json:"id"` // Google's event ID
Kind string `json:"kind"` // "interview" | "deadline"
When time.Time `json:"when"` // event start (UTC)
Summary string `json:"summary,omitempty"` // event title at create time
CreatedAt time.Time `json:"created_at"`
}
CalendarEventRef is a lightweight pointer to a Google Calendar event this CLI created. Stored on the Job so `jobforge calendar list` doesn't need a side-table.
type Job ¶
type Job struct {
ID string `json:"id"`
Title string `json:"title,omitempty"`
Company string `json:"company,omitempty"`
Location string `json:"location,omitempty"`
URL string `json:"url,omitempty"`
Source string `json:"source,omitempty"`
Description string `json:"description,omitempty"`
Notes string `json:"notes,omitempty"`
Tags []string `json:"tags,omitempty"`
Status Status `json:"status"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
LastDraft string `json:"last_draft,omitempty"`
// Match fields are populated by the ranker (jobforge feed). Score is
// 0-100; zero means unranked. Rationale is one short sentence from
// the LLM explaining the score. Stale when the user's profile or
// resume changes - re-run `jobforge feed --rerank` to refresh.
MatchScore int `json:"match_score,omitempty"`
MatchRationale string `json:"match_rationale,omitempty"`
MatchedAt time.Time `json:"matched_at,omitempty"`
// CalendarEvents tracks Google Calendar entries this job has created.
// Populated by `jobforge calendar add-interview` / `add-deadline`.
// We keep a slice (not a single ID) because one job often has
// multiple scheduled events: phone screen, technical, onsite.
CalendarEvents []CalendarEventRef `json:"calendar_events,omitempty"`
}
Job is one position the user is considering or applying to. We keep it flat and JSON-friendly so it can be hand-edited if needed.
Click to show internal directories.
Click to hide internal directories.