Interviews as scheduled meetings, not only as lines in the timeline #14

Closed
opened 2026-09-05 12:29:10 +00:00 by tiagoagueda · 0 comments
Owner

Why this exists

postulo-dav (#16) wants to write interview meetings to a calendar and read them back. Postulo has no meeting to write.

What exists today

  • ApplicationEvent with kind = interview and occurred_at — "happened on" — a past-tense line in the timeline (applications/models.py, EventKind at line 179).
  • Reminder with due_at: a point in time and a note; no duration, no place, no people (line 251).
  • Status.INTERVIEWING: a stage, not an appointment.
  • Contact on companies (jobs/models.py, line 52): name, role, email, phone, LinkedIn, notes — the people on the other side already exist.

An interview is a future event with a start, an end, a place or a link, the people attending, and a kind — phone screen, video, on site, panel, assessment. None of that fits either model without contortion, and a calendar needs all of it.

Shape

  1. Interview model, owned: application, kind, starts_at, ends_at, location (an address or a meeting URL), contacts (many-to-many to Contact), preparation notes, outcome (scheduled, done, cancelled, no-show), and a stable UID minted at creation so a calendar sync can recognise it across edits.
  2. The event log stays the truth. Scheduling one records an ApplicationEvent ("interview scheduled for …"); marking it done records another and moves the status to interviewing if it is behind, through change_status.
  3. Reminders for free. A scheduled interview creates a linked Reminder (the day before by default), so whatever #4 builds for reminders notifies about interviews with no extra code.
  4. Interface. On the application page beside reminders; a Coming up block on the dashboard; a "next interview" column in the table view; the board card shows a small date when one is scheduled.
  5. .ics download per interview. Every calendar application imports one, it costs an afternoon, and it gives most people what they want from a calendar before #16 exists.
  6. Export/import: a new section.
  7. Insights: "days from application to first interview" becomes computable, and it is one of the few numbers in a job search worth knowing.

Classification

Enhancement. A new table and two new event kinds; not breaking.

Open questions

  1. ends_at or a duration? Proposal: ends_at, defaulting to one hour after the start.
  2. Kinds as choices (with "other") or free text? Choices; the insights page can then group by them.
  3. Should recording an interview in the past (the person forgot to schedule it) also be allowed from the same form? Yes; it then writes the timeline event directly.
## Why this exists postulo-dav (#16) wants to write interview meetings to a calendar and read them back. Postulo has no meeting to write. ## What exists today - `ApplicationEvent` with `kind = interview` and `occurred_at` — "happened on" — a past-tense line in the timeline (`applications/models.py`, `EventKind` at line 179). - `Reminder` with `due_at`: a point in time and a note; no duration, no place, no people (line 251). - `Status.INTERVIEWING`: a stage, not an appointment. - `Contact` on companies (`jobs/models.py`, line 52): name, role, email, phone, LinkedIn, notes — the people on the other side already exist. An interview is a *future* event with a start, an end, a place or a link, the people attending, and a kind — phone screen, video, on site, panel, assessment. None of that fits either model without contortion, and a calendar needs all of it. ## Shape 1. **`Interview` model**, owned: application, kind, `starts_at`, `ends_at`, `location` (an address or a meeting URL), contacts (many-to-many to `Contact`), preparation notes, `outcome` (scheduled, done, cancelled, no-show), and a stable **UID** minted at creation so a calendar sync can recognise it across edits. 2. **The event log stays the truth.** Scheduling one records an `ApplicationEvent` ("interview scheduled for …"); marking it done records another and moves the status to interviewing if it is behind, through `change_status`. 3. **Reminders for free.** A scheduled interview creates a linked `Reminder` (the day before by default), so whatever #4 builds for reminders notifies about interviews with no extra code. 4. **Interface.** On the application page beside reminders; a *Coming up* block on the dashboard; a "next interview" column in the table view; the board card shows a small date when one is scheduled. 5. **`.ics` download** per interview. Every calendar application imports one, it costs an afternoon, and it gives most people what they want from a calendar before #16 exists. 6. **Export/import**: a new section. 7. **Insights**: "days from application to first interview" becomes computable, and it is one of the few numbers in a job search worth knowing. ## Classification Enhancement. A new table and two new event kinds; not breaking. ## Open questions 1. `ends_at` or a duration? Proposal: `ends_at`, defaulting to one hour after the start. 2. Kinds as choices (with "other") or free text? Choices; the insights page can then group by them. 3. Should recording an interview *in the past* (the person forgot to schedule it) also be allowed from the same form? Yes; it then writes the timeline event directly.
tiagoagueda added this to the 0.2.0 milestone 2026-09-05 12:29:10 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
Postulo/postulo#14
No description provided.